Cách di chuyển một ứng dụng phân tích cú pháp sang server phân tích cú pháp trên Ubuntu 14.04
Parse là một nền tảng Mobile Backend dưới dạng dịch vụ, thuộc sở hữu của Facebook từ năm 2013. Vào tháng 1 năm 2016, Parse thông báo rằng các dịch vụ được lưu trữ của họ sẽ đóng cửa hoàn toàn vào ngày 28 tháng 1 năm 2017.May mắn là Parse cũng đã phát hành một server API open-souce , tương thích với API của dịch vụ được lưu trữ, được gọi là Server Parse . Parse Server đang được phát triển tích cực và có vẻ như sẽ thu hút một cộng đồng nhà phát triển lớn. Nó có thể được triển khai cho một loạt các môi trường chạy Node.js và MongoDB.
Hướng dẫn này tập trung vào việc di chuyển ứng dụng Phân tích cú pháp có sẵn sang một version độc lập của Server phân tích cú pháp chạy trên Ubuntu 14.04. Nó sử dụng mã hóa TLS / SSL cho tất cả các kết nối, sử dụng certificate được cung cấp bởi Let's Encrypt, Tổ chức phát hành certificate mới cung cấp các certificate miễn phí. Nó bao gồm một số chi tiết cụ thể cho DigitalOcean và Ubuntu 14.04, nhưng sẽ được áp dụng rộng rãi cho các hệ thống chạy các bản phân phối GNU / Linux có nguồn root Debian gần đây.
Cảnh báo: Ta thực sự khuyên bạn nên thử nghiệm quy trình này trước với version phát triển hoặc thử nghiệm của ứng dụng trước khi thử với ứng dụng production hướng tới user . Bạn cũng nên đọc hướng dẫn này cùng với tài liệu di chuyển chính thức .
Yêu cầu
Hướng dẫn này được xây dựng dựa trên Cách chạy Server phân tích cú pháp trên Ubuntu 14.04 . Nó yêu cầu những điều sau:
- Server Ubuntu 14.04, được cấu hình với user
sudo
không phải root - Node.js 5.6.x
- MongoDB 3.0.x
- Tên domain trỏ đến server
- Một ứng dụng phân tích cú pháp sẽ được di chuyển
- Nginx đã cài đặt và cấu hình SSL bằng certificate Let's Encrypt. Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 14.04 sẽ hướng dẫn bạn qua quá trình này.
Server đích phải có đủ bộ nhớ để xử lý tất cả dữ liệu của ứng dụng của bạn. Vì phân tích cú pháp nén dữ liệu từ phía họ, họ chính thức khuyên bạn nên cung cấp ít nhất 10 lần dung lượng lưu trữ được sử dụng bởi ứng dụng được lưu trữ của bạn.
Bước 1 - Cấu hình MongoDB để di chuyển
Phân tích cú pháp cung cấp một công cụ di chuyển cho các ứng dụng hiện có. Để sử dụng nó, ta cần mở MongoDB cho các kết nối bên ngoài và bảo mật nó bằng bản sao certificate TLS / SSL từ Let's Encrypt. Bắt đầu bằng cách kết hợp fullchain1.pem
và privkey1.pem
thành một file mới trong /etc/ssl
:
- sudo cat /etc/letsencrypt/archive/domain_name/{fullchain1.pem,privkey1.pem} | sudo tee /etc/ssl/mongo.pem
Bạn sẽ phải lặp lại lệnh trên sau khi gia hạn certificate Let's Encrypt. Nếu bạn cấu hình tự động gia hạn certificate Let's Encrypt, hãy nhớ bao gồm thao tác này.
Đảm bảo mongo.pem
thuộc sở hữu của user mongodb và chỉ chủ sở hữu của nó mới có thể đọc được:
- sudo chown mongodb:mongodb /etc/ssl/mongo.pem
- sudo chmod 600 /etc/ssl/mongo.pem
Bây giờ, hãy mở /etc/mongod.conf
bằng nano
(hoặc editor của bạn mà bạn chọn):
- sudo nano /etc/mongod.conf
Tại đây, ta sẽ thực hiện một số thay đổi quan trọng.
Đầu tiên, hãy tìm dòng bindIp
trong phần net:
và yêu cầu MongoDB lắng nghe tất cả các địa chỉ bằng cách thay đổi 127.0.0.1
thành 0.0.0.0
. Dưới đây, thêm cấu hình SSL vào cùng một phần:
# network interfaces net: port: 27017 bindIp: 0.0.0.0 ssl: mode: requireSSL PEMKeyFile: /etc/ssl/mongo.pem
Tiếp theo, trong # security
, hãy bật ủy quyền ứng dụng client :
# security security: authorization: enabled
Cuối cùng, công cụ di chuyển yêu cầu ta đặt tham số failIndexKeyTooLong
thành false
:
setParameter: failIndexKeyTooLong: false
Lưu ý: Khoảng trắng rất quan trọng trong các file cấu hình MongoDB, dựa trên YAML . Khi sao chép các giá trị cấu hình, hãy đảm bảo bạn duy trì thụt lề.
Thoát và lưu file .
Trước khi khởi động lại dịch vụ mongod
, ta cần thêm một user với role admin
. Kết nối với version MongoDB đang chạy:
- mongo --port 27017
Tạo admin-user và thoát. Đảm bảo thay thế sammy bằng tên user và mật khẩu mong muốn của bạn bằng một password mạnh.
use admin db.createUser({ user: "sammy", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }) exit
Khởi động lại dịch vụ mongod
:
- sudo service mongod restart
Bước 2 - Di chuyển dữ liệu ứng dụng từ phân tích cú pháp
Đến đây bạn đã có version MongoDB có thể truy cập từ xa, bạn có thể sử dụng công cụ di chuyển Phân tích cú pháp để chuyển dữ liệu của ứng dụng đến server của bạn.
Cấu hình thông tin đăng nhập MongoDB cho Công cụ di chuyển
Ta sẽ bắt đầu bằng cách kết nối local với admin-user mới của ta :
- mongo --port 27017 --ssl --sslAllowInvalidCertificates --authenticationDatabase admin --username sammy --password
Bạn sẽ được yêu cầu nhập password bạn đã đặt trước đó.
Sau khi được kết nối, hãy chọn tên cho database để lưu trữ dữ liệu ứng dụng của bạn. Ví dụ: nếu bạn đang di chuyển một ứng dụng có tên là Todo, bạn có thể sử dụng todo
. Bạn cũng cần chọn một password mạnh khác cho user được gọi là phân tích cú pháp .
Từ shell mongo
, cấp cho user này quyền truy cập vào database_name
:
- use database_name
- db.createUser({ user: "parse", pwd: "password", roles: [ "readWrite", "dbAdmin" ] })
Bắt đầu quá trình di chuyển dữ liệu
Trong cửa sổ trình duyệt, đăng nhập vào Phân tích cú pháp và mở cài đặt cho ứng dụng của bạn. Trong phần Chung , tìm nút Di chuyển và nhấp vào nút đó:
Bạn sẽ được yêu cầu nhập một chuỗi kết nối MongoDB. Sử dụng định dạng sau:
mongodb://parse:password@your_domain_name:27017/database_name?ssl=true
Ví dụ: nếu bạn đang sử dụng domain example.com
, với parse
user , password foo
và database được gọi là todo
, chuỗi kết nối của bạn sẽ trông giống như sau:
mongodb://parse:foo@example.com:27017/todo?ssl=true
Đừng quên ?ssl=true
ở cuối, nếu không kết nối sẽ bị lỗi. Nhập chuỗi kết nối vào hộp thoại như sau:
Nhấp vào Bắt đầu di chuyển . Bạn sẽ thấy các hộp thoại tiến trình sao chép ảnh chụp nhanh của database được lưu trữ Phân tích cú pháp sang server của bạn và sau đó để đồng bộ hóa dữ liệu mới kể từ khi ảnh chụp nhanh được thực hiện. Thời gian của quá trình này sẽ phụ thuộc vào lượng dữ liệu được truyền và có thể là đáng kể.
Xác minh di chuyển dữ liệu
Sau khi hoàn tất, quá trình di chuyển sẽ bước vào bước xác minh. Chưa kết thúc quá trình di chuyển. Trước tiên, bạn cần đảm bảo dữ liệu đã thực sự được chuyển và kiểm tra version local của Server phân tích cú pháp.
Quay lại shell mongo
của bạn và kiểm tra database local của bạn. Bắt đầu bằng cách truy cập database_name và kiểm tra các bộ sưu tập mà nó chứa:
- use database_name
- show collections
Sample Output for Todo AppTodo _Index _SCHEMA _Session _User _dummy system.indexes
Bạn có thể kiểm tra nội dung của một tập hợp cụ thể bằng phương thức .find()
:
- db.ApplicationName.find()
Sample Output for Todo App> db.Todo.find() { "_id" : "hhbrhmBrs0", "order" : NumberLong(1), "_p_user" : "_User$dceklyR50A", "done" : false, "_acl" : { "dceklyR50A" : { "r" : true, "w" : true } }, "_rperm" : [ "dceklyR50A" ], "content" : "Migrate this app to my own server.", "_updated_at" : ISODate("2016-02-08T20:44:26.157Z"), "_wperm" : [ "dceklyR50A" ], "_created_at" : ISODate("2016-02-08T20:44:26.157Z") }
Đầu ra cụ thể của bạn sẽ khác nhau, nhưng bạn sẽ thấy dữ liệu cho ứng dụng của bạn . Sau khi hài lòng, hãy thoát khỏi mongo
và quay lại shell:
- exit
Bước 3 - Cài đặt và cấu hình server phân tích cú pháp và PM2
Với dữ liệu ứng dụng của bạn trong MongoDB, ta có thể chuyển sang cài đặt chính Server phân tích cú pháp và tích hợp với phần còn lại của hệ thống. Ta sẽ cung cấp cho Parse Server một user chuyên dụng và sử dụng trình có tên là PM2 để cấu hình nó và đảm bảo nó luôn chạy.
Cài đặt Server phân tích cú pháp và PM2 Global
Sử dụng npm
để cài đặt tiện ích parse-server
, trình quản lý tiến trình pm2
và các phụ thuộc của chúng trên phạm vi global :
- sudo npm install -g parse-server pm2
Tạo User Phân tích cú pháp Chuyên dụng và Thư mục Trang chủ
Thay vì chạy parse-server
như là user root hoặc bạn sudo
user , ta sẽ tạo một user hệ thống được gọi là phân tích cú pháp:
- sudo useradd --create-home --system parse
Bây giờ đặt password để phân tích cú pháp :
- sudo passwd parse
Bạn sẽ được yêu cầu nhập password hai lần.
Bây giờ, sử dụng lệnh su
để trở thành user phân tích cú pháp :
- sudo su parse
Thay đổi thành folder chính của phân tích cú pháp :
- cd ~
Viết hoặc di chuyển file mã cloud
Tạo một folder mã cloud :
- mkdir -p ~/cloud
Chỉnh sửa /home/parse/cloud/main.js
:
- nano ~/cloud/main.js
Đối với mục đích thử nghiệm, bạn có thể dán như sau:
Parse.Cloud.define('hello', function(req, res) { res.success('Hi'); });
Ngoài ra, bạn có thể di chuyển bất kỳ mã cloud nào được xác định cho ứng dụng của bạn bằng cách sao chép mã đó từ phần Mã cloud trong cài đặt của ứng dụng trên Control panel phân tích cú pháp.
Thoát và lưu.
Lấy các phím và ghi /home/parse/ecosystem.json
PM2 là một trình quản lý tiến trình giàu tính năng, phổ biến với các nhà phát triển Node.js. Ta sẽ sử dụng trình pm2
để cấu hình parse-server
và giữ cho nó hoạt động lâu dài.
Bạn cần truy xuất một số khóa cho ứng dụng của bạn . Trong console Phân tích cú pháp, nhấp vào Cài đặt ứng dụng, sau đó nhấp vào Bảo mật & Khóa :
Trong số này, chỉ cần có ID ứng dụng và Khóa chính . Các khóa khác (khóa API client , JavaScript, .NET và REST) có thể cần thiết để hỗ trợ các bản dựng client cũ hơn, nhưng, nếu được đặt, sẽ được yêu cầu trong tất cả các yêu cầu. Trừ khi bạn có lý do để tin rằng khác, bạn nên bắt đầu bằng cách chỉ sử dụng ID ứng dụng và Master Key.
Với các phím này đã sẵn sàng, hãy chỉnh sửa một file mới có tên /home/parse/ecosystem.json
:
- nano ecosystem.json
Dán các giá trị cấu hình thay đổi sau để phản ánh chuỗi kết nối MongoDB, ID ứng dụng và Khóa chính của bạn:
{ "apps" : [{ "name" : "parse-wrapper", "script" : "/usr/bin/parse-server", "watch" : true, "merge_logs" : true, "cwd" : "/home/parse", "env": { "PARSE_SERVER_CLOUD_CODE_MAIN": "/home/parse/cloud/main.js", "PARSE_SERVER_DATABASE_URI": "mongodb://parse:password@your_domain_name:27017/database_name?ssl=true", "PARSE_SERVER_APPLICATION_ID": "your_application_id", "PARSE_SERVER_MASTER_KEY": "your_master_key", } }] }
Đối tượng env
được sử dụng để cài đặt các biến môi trường. Nếu bạn cần cấu hình các khóa bổ sung, parse-server
cũng nhận ra các biến sau:
-
PARSE_SERVER_COLLECTION_PREFIX
-
PARSE_SERVER_CLIENT_KEY
-
PARSE_SERVER_REST_API_KEY
-
PARSE_SERVER_DOTNET_KEY
-
PARSE_SERVER_JAVASCRIPT_KEY
-
PARSE_SERVER_DOTNET_KEY
-
PARSE_SERVER_FILE_KEY
-
PARSE_SERVER_FACEBOOK_APP_IDS
Thoát và lưu ecosystem.json
.
Bây giờ, chạy tập lệnh với pm2
:
- pm2 start ecosystem.json
Sample Output... [PM2] Spawning PM2 daemon [PM2] PM2 Successfully daemonized [PM2] Process launched ┌───────────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────────────┬──────────┐ │ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │ ├───────────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────────────┼──────────┤ │ parse-wrapper │ 0 │ fork │ 3499 │ online │ 0 │ 0s │ 13.680 MB │ enabled │ └───────────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────────────┴──────────┘ Use `pm2 show <id|name>` to get more details about an app
Bây giờ pm2
lưu danh sách tiến trình này:
- pm2 save
Sample Output[PM2] Dumping processes
Danh sách các quy trình pm2
đang chạy cho user phân tích cú pháp bây giờ sẽ được lưu trữ trong /home/parse/.pm2
.
Bây giờ ta cần đảm bảo quá trình parse-wrapper
mà ta đã xác định trước đó trong ecosystem.json
được khôi phục mỗi khi server được khởi động lại. May mắn là pm2
có thể tự tạo và cài đặt tập lệnh.
Thoát khỏi user sudo
thông thường của bạn:
- exit
Yêu cầu pm2
cài đặt các tập lệnh khởi tạo cho Ubuntu, được chạy với quyền user phân tích cú pháp , sử dụng /home/parse
làm folder chính của nó:
- sudo pm2 startup ubuntu -u parse --hp /home/parse/
[PM2] Spawning PM2 daemon [PM2] PM2 Successfully daemonized [PM2] Generating system init script in /etc/init.d/pm2-init.sh [PM2] Making script booting at startup... [PM2] -ubuntu- Using the command: su -c "chmod +x /etc/init.d/pm2-init.sh && update-rc.d pm2-init.sh defaults" System start/stop links for /etc/init.d/pm2-init.sh already exist. [PM2] Done.
Bước 4 - Cài đặt và cấu hình Nginx
Ta sẽ sử dụng web server Nginx để cung cấp reverse-proxy cho parse-server
, để ta có thể phân phát API parse-server
một cách an toàn qua TLS / SSL.
Trong yêu cầu , bạn cài đặt server default
để phản hồi domain của bạn, với SSL được cung cấp bởi certificate Let's Encrypt. Ta sẽ cập nhật file cấu hình này với thông tin proxy của ta .
Mở /etc/nginx/sites-enabled/default
trong nano
(hoặc trình soạn thảo bạn chọn):
- sudo nano /etc/nginx/sites-enabled/default
Trong khối server
chính (nó phải chứa một location /
khối), hãy thêm một khối location
khác để xử lý ủy quyền của /parse/
URL:
. . . # Pass requests for /parse/ to Parse Server instance at localhost:1337 location /parse/ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://localhost:1337/; proxy_ssl_session_reuse off; proxy_set_header Host $http_host; proxy_redirect off; }
Thoát khỏi editor và lưu file . Khởi động lại Nginx để các thay đổi có hiệu lực:
- sudo service nginx restart
Output * Restarting nginx nginx ...done.
Bước 5 - Kiểm tra server phân tích cú pháp
Ở giai đoạn này, bạn nên có những điều sau:
- Chứng chỉ TLS / SSL do Let's Encrypt cung cấp
- MongoDB, được bảo mật bằng certificate Let's Encrypt
-
parse-server
chạy dưới phân tích cú pháp user trên cổng 1337, được cấu hình bằng các khóa mà ứng dụng của bạn mong đợi -
pm2
quản lý quá trìnhparse-server
dưới user phân tích cú pháp và tập lệnh khởi động để khởi động lạipm2
khi khởi động -
nginx
, được bảo mật bằng certificate Let's Encrypt và được cấu hình để kết nối proxy tớihttps:// your_domain_name /parse
tới versionparse-server
Bây giờ có thể kiểm tra việc đọc, ghi và thực thi mã cloud bằng cách sử dụng curl
.
Lưu ý: Các lệnh curl
trong phần này sẽ vô hại khi được sử dụng với ứng dụng thử nghiệm hoặc phát triển. Hãy thận trọng khi ghi dữ liệu vào ứng dụng production .
Viết dữ liệu bằng BÀI ĐĂNG
Bạn cần đưa ra một số tùy chọn quan trọng về curl
:
Lựa chọn | Sự miêu tả |
---|---|
-X POST | Đặt loại yêu cầu, nếu không sẽ mặc định là GET |
-H "X-Parse-Application-Id: your_application_id " | Gửi tiêu đề xác định ứng dụng của bạn tới parse-server |
-H "Content-Type: application/json" | Gửi tiêu đề cho phép parse-server biết mong đợi dữ liệu có định dạng JSON |
-d '{ json_data } | Tự gửi dữ liệu |
Kết hợp tất cả những thứ này lại với nhau, ta nhận được:
curl -X POST \ -H "X-Parse-Application-Id: your_application_id" \ -H "Content-Type: application/json" \ -d '{"score":1337,"playerName":"Sammy","cheatMode":false}' \ https://your_domain_name/parse/classes/GameScore
{"objectId":"YpxFdzox3u","createdAt":"2016-02-18T18:03:43.188Z"}
Đọc dữ liệu với GET
Vì curl
gửi yêu cầu GET theo mặc định và ta không cung cấp bất kỳ dữ liệu nào, bạn chỉ cần gửi ID ứng dụng để đọc lại một số dữ liệu mẫu:
- curl -H "X-Parse-Application-Id: your_application_id" https://your_domain_name/parse/classes/GameScore
{"results":[{"objectId":"BNGLzgF6KB","score":1337,"playerName":"Sammy","cheatMode":false,"updatedAt":"2016-02-17T20:53:59.947Z","createdAt":"2016-02-17T20:53:59.947Z"},{"objectId":"0l1yE3ivB6","score":1337,"playerName":"Sean Plott","cheatMode":false,"updatedAt":"2016-02-18T03:57:00.932Z","createdAt":"2016-02-18T03:57:00.932Z"},{"objectId":"aKgvFqDkXh","score":1337,"playerName":"Sean Plott","cheatMode":false,"updatedAt":"2016-02-18T04:44:01.275Z","createdAt":"2016-02-18T04:44:01.275Z"},{"objectId":"zCKTgKzCRH","score":1337,"playerName":"Sean Plott","cheatMode":false,"updatedAt":"2016-02-18T16:56:51.245Z","createdAt":"2016-02-18T16:56:51.245Z"},{"objectId":"YpxFdzox3u","score":1337,"playerName":"Sean Plott","cheatMode":false,"updatedAt":"2016-02-18T18:03:43.188Z","createdAt":"2016-02-18T18:03:43.188Z"}]}
Thực thi mã cloud mẫu
Một POST đơn giản không có dữ liệu thực tới https:// your_domain_name /parse/functions/hello
sẽ chạy hàm hello()
được định nghĩa trong /home/parse/cloud/main.js
:
curl -X POST \ -H "X-Parse-Application-Id: your_application_id" \ -H "Content-Type: application/json" \ -d '{}' \ https://your_domain_name/parse/functions/hello
{"result":"Hi"}
Nếu thay vào đó, bạn đã di chuyển mã cloud tùy chỉnh của riêng mình, bạn có thể kiểm tra bằng một hàm đã biết từ main.js
Bước 6 - Cấu hình ứng dụng của bạn cho server phân tích cú pháp và hoàn thiện quá trình di chuyển
Bước tiếp theo của bạn sẽ là thay đổi chính ứng dụng client của bạn để sử dụng điểm cuối Parse Server API. Tham khảo tài liệu chính thức về cách sử dụng phân tích cú pháp SDK với Server phân tích cú pháp. Bạn cần version SDK mới nhất cho nền tảng của bạn . Như với các bài kiểm tra dựa trên curl
ở trên, hãy sử dụng chuỗi này cho URL server :
https://your_domain_name/parse
Quay lại trang tổng quan Phân tích cú pháp trong trình duyệt của bạn và tab Di chuyển :
Nhấp vào nút Hoàn thiện :
Ứng dụng của bạn bây giờ sẽ được di chuyển.
Kết luận và các bước tiếp theo
Hướng dẫn này cung cấp một điểm khởi đầu chức năng để di chuyển ứng dụng được lưu trữ trên server phân tích cú pháp sang bản cài đặt Server phân tích cú pháp trên một hệ thống Ubuntu, chẳng hạn như server DigitalOcean. Cấu hình ta đã mô tả phải đủ cho một ứng dụng có lưu lượng truy cập thấp với cơ sở user khiêm tốn. Lưu trữ cho một ứng dụng lớn hơn có thể yêu cầu nhiều hệ thống cung cấp bộ nhớ dữ liệu dự phòng và cân bằng tải giữa các điểm cuối API. Ngay cả các dự án nhỏ cũng có thể liên quan đến các cân nhắc về cơ sở hạ tầng mà ta chưa trực tiếp giải quyết.
Ngoài việc đọc tài liệu Server phân tích cú pháp chính thức và theo dõi các sự cố GitHub cho dự án khi khắc phục sự cố, bạn có thể cần khám phá các chủ đề sau:
- Danh sách kiểm tra server Ubuntu 14.04 mới DigitalOcean
- Bảo mật Nginx với Let's Encrypt trên Ubuntu 14.04
- Cài đặt Node.js trên Ubuntu 14.04
- Bản backup server DigitalOcean
Các tin liên quan
Cách sử dụng Ansible và Tinc VPN để bảo mật cơ sở hạ tầng server của bạn2016-02-18
Cách chạy server phân tích cú pháp trên Ubuntu 14.04
2016-02-03
Cách thiết lập server VNC trên Debian 8
2015-09-29
Cách cấu hình dịch vụ Linux để khởi động tự động sau khi gặp sự cố hoặc khởi động lại - Phần 2: Tham khảo
2015-09-04
Cách thiết lập server IRC trên Ubuntu 14.04 với InspIRCd 2.0 và Shaltúre
2015-08-26
Cách chuyển tiếp cổng thông qua cổng Linux với Iptables
2015-08-20
Cách cấu hình dịch vụ Linux để khởi động tự động sau khi gặp sự cố hoặc khởi động lại - Phần 1: Ví dụ thực tế
2015-08-19
Cách sử dụng Hệ thống kiểm toán Linux trên CentOS 7
2015-07-16
Cách sử dụng Hệ thống kiểm toán Linux trên CentOS 7
2015-07-16
Thiết lập ban đầu của server Fedora 22
2015-07-08