Thứ ba, 26/11/2013 | 00:00 GMT+7

Cách triển khai ứng dụng Node.js bằng Systemd và Nginx

Khi triển khai ứng dụng web cho Server, bạn có thể chỉ cần sử dụng cùng một loại cài đặt như được sử dụng trong phát triển, tức là khởi động server bằng cách chạy “ruby app.rb” hoặc “node server.js” trong một terminal . Điều này rất đơn giản và dễ dàng, đồng thời cung cấp log hiển thị. Người ta thậm chí có thể sử dụng “screen” hoặc “tmux” hoặc “nohup” để nó tiếp tục chạy ngay cả khi phiên SSH bị ngắt. Điều này thật nguy hiểm: điều gì sẽ xảy ra nếu server bị treo và không có ai xung quanh để khởi động lại nó?

Người ta có thể sử dụng mãi mãi và crontab để giải quyết việc này. Hướng dẫn này trình bày một giải pháp mạnh mẽ hơn, mặc dù phức tạp hơn. Sử dụng systemd (có sẵn trên Arch và Fedora và CentOS trong tương lai), các ứng dụng web có thể được quản lý triệt để: log , thời gian hoạt động, tài nguyên và bảo mật thông qua các group và khởi động daemon nâng cao đều có thể được truy cập, kiểm soát và tinh chỉnh trong một thể thống nhất cách thức.

Hướng dẫn này sử dụng một ứng dụng Node.js đơn giản, nhưng có thể áp dụng cho hầu hết, nếu không phải tất cả, những ứng dụng khác (có thể là Ruby, Python, v.v.). Đối với các ứng dụng web PHP, bạn nên sử dụng LAMP hoặc LEMP stack chuyên dụng hơn để thay thế.

Các lệnh sẽ được cung cấp cho cả Fedora và Arch, hãy chú ý theo dõi lệnh nào để tránh cấu hình sai và / hoặc nhầm lẫn. Khi không được chỉ định, lệnh này giống nhau cho cả hai hệ thống. Bạn cũng nên đọc qua toàn bộ hướng dẫn trước khi thử từng bước một, để có ý tưởng về những gì nó đòi hỏi và liệu nó có phù hợp với tình huống của bạn hay không.

Sơ bộ hệ thống

  • Một server với systemd . Do đó, các server Arch Linux và Fedora được cấu hình theo mặc định.

  • Nginx , được sử dụng như một web server socket và http và Reverse Proxy .

  • Git , để cài đặt nvm và kéo ứng dụng của bạn nếu sử dụng git.

  • Quyền truy cập root . Nó cũng có thể đăng nhập như một user bình thường và tất cả các lệnh sudo, hay su - hoặc sudo su - để một root nhắc.

Cài đặt các gói

Vòm:

# pacman -Sy # pacman -S nginx git 

Fedora:

# yum install nginx git 

Sơ bộ ứng dụng

Đây là những cài đặt bạn có thể tùy chỉnh theo ý thích của bạn , nhưng chúng phải được quyết định và cài đặt trước khi bắt đầu.

User

Ứng dụng sẽ chạy trong account user riêng của nó. Chọn một cái tên, nó phải liên quan đến ứng dụng để dễ nhớ và dễ bảo quản. Ở đây, srv-node-sample được sử dụng.

# useradd -mrU srv-node-sample 

Hải cổng

Để tránh xung đột, hãy chọn một cổng cao. Ở đây, "15301" được sử dụng.

Cài đặt ứng dụng

Bắt đầu bằng cách cài đặt những gì cần thiết để ứng dụng chạy. Đối với Node.js (và Ruby, Python…), có hai lựa chọn: hoặc sử dụng thời gian chạy của hệ thống hoặc cài đặt dành riêng cho user (ví dụ: sử dụng nvm , rbenv , RVM , virtualenv , v.v.).

Sử dụng nút hệ thống

Vòm:

# pacman -S nodejs 

Fedora:

# yum install nodejs 

Sử dụng cài đặt dành riêng cho user

Điều này phải được cài đặt trong folder chính của ứng dụng, tức là /home/srv-node-sample , dễ dàng thực hiện nhất bằng cách đăng nhập với quyền user đó:

# su srv-node-sample 
$ cd $ curl https://raw.github.com/creationix/nvm/master/install.sh | sh $ source ~/.nvm/nvm.sh $ nvm install 0.10 $ nvm alias default 0.10 

Sau đó, hãy ghi lại nơi cài đặt binary nút:

$ which node /home/srv-node-sample/.nvm/v0.10.22/bin/node 

Triển khai ứng dụng của bạn

Trong khi đăng nhập vào srv-node-sample , hãy triển khai mã của bạn. Đây chỉ là một ví dụ, quy trình của bạn sẽ khác nhau.

$ git clone git@server.company.tld:user/repo.git . $ npm install $ grunt deploy 

Đối với hướng dẫn này, ứng dụng mẫu sau được sử dụng:

js var http = require('http'); http.createServer(function(req, res) {     res.end('<h1>Hello, world.</h1>'); }).listen(15301); 

Sau đó quay lại folder root :

$ exit 

Cài đặt Nginx

Hướng dẫn này chỉ trình bày ngắn gọn về cấu hình cần thiết, để có hướng dẫn kỹ hơn về cách cấu hình Nginx, hãy xem “Cách cấu hình Web server Nginx” hoặc hướng dẫn sử dụng nginx .

Đặt cái này vào khối server của bạn:

location / {     proxy_pass http://localhost:15301/;     proxy_set_header Host $host;     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 

Sau đó cài đặt daemon của nó:

# systemctl enable nginx # systemctl restart nginx 

Cài đặt Systemd

Tạo file dịch vụ cho ứng dụng, trong /etc/systemd/system/node-sample.service .

Có một số biến cần được điền vào:

  • [nhị phân nút] Đây là kết quả của “nút nào” với quyền là user srv-nút-mẫu. Hoặc /usr/bin/node hoặc đường dẫn ~/.nvm/... đã lưu ý ở trên.

  • [tệp chính] Đây là file chính của ứng dụng của bạn. Đây, 'index.js`.

  • Đừng quên thay thế srv-node-sample !

[Service] ExecStart=[node binary] /home/srv-node-sample/[main file] Restart=always StandardOutput=syslog StandardError=syslog SyslogIdentifier=node-sample User=srv-node-sample Group=srv-node-sample Environment=NODE_ENV=production  [Install] WantedBy=multi-user.target 

Bây giờ bắt đầu dịch vụ:

# systemctl enable node-sample # systemctl start node-sample 

Sử dụng

Trạng thái

# systemctl status node-sample node-sample.service    Loaded: loaded (/etc/systemd/system/node-sample.service; enabled)    Active: active (running) since Fri 2013-11-22 01:12:15 UTC; 35s ago  Main PID: 7213 (node)    CGroup: name=systemd:/system/node-sample.service            └─7213 /home/srv-node-sample/.nvm/v0.10.22/bin/node /home/srv-nod...  Nov 22 01:12:15 d02 systemd[1]: Started node-sample.service. 

Nhật ký

# journalctl -u node-sample -- Logs begin at Thu 2013-11-21 19:05:17 UTC, end at Fri 2013-11-22 01:12:15 UTC. -- Nov 22 01:12:15 d02 systemd[1]: Starting node-sample.service... Nov 22 01:12:15 d02 systemd[1]: Started node-sample.service. Nov 22 01:12:30 d02 node-sample[7213]: Sample message from application 

Khởi động lại, dừng, v.v.

Buộc khởi động lại:

# systemctl restart node-sample 

Dừng ứng dụng:

# systemctl stop node-sample 

Ứng dụng sẽ tự động được khởi động lại nếu nó chết hoặc bị dừng :

# systemctl status node-sample node-sample.service    Loaded: loaded (/etc/systemd/system/node-sample.service; enabled)    Active: active (running) since Fri 2013-11-22 01:12:15 UTC; 35s ago  Main PID: 7213 (node)    CGroup: name=systemd:/system/node-sample.service            └─7213 /home/srv-node-sample/.nvm/v0.10.22/bin/node /home/srv-nod...  Nov 22 01:12:15 d02 systemd[1]: Started node-sample.service.  # kill 7213  # systemctl status node-sample node-sample.service    Loaded: loaded (/etc/systemd/system/node-sample.service; enabled)    Active: active (running) since Fri 2013-11-22 01:54:37 UTC; 6s ago  Main PID: 7236 (node)    CGroup: name=systemd:/system/node-sample.service            └─7236 /home/srv-node-sample/.nvm/v0.10.22/bin/node /home/srv-nod...  Nov 22 01:54:37 d02 systemd[1]: node-sample.service holdoff time over, sch...t. Nov 22 01:54:37 d02 systemd[1]: Stopping node-sample.service... Nov 22 01:54:37 d02 systemd[1]: Starting node-sample.service... Nov 22 01:54:37 d02 systemd[1]: Started node-sample.service. 

PID đã thay đổi, cho thấy ứng dụng thực sự đã bị dừng và khởi động lại.

Websockets

Nếu ứng dụng sử dụng websockets, các dòng sau phải được thêm vào cấu hình Nginx:

proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1; 

và Nginx phải được reload :

# systemctl reload nginx 

<div class = “author”> Người gửi: <a href=p>https://passcod.name[> Félix Saparelli </div>


Tags:

Các tin liên quan

Cách cấu hình cài đặt trang web WordPress đơn và nhiều trang với Nginx
2013-11-26
Cách thiết lập server block Nginx trên Debian 7
2013-10-30
Cách thiết lập FastCGI Caching với Nginx trên VPS của bạn
2013-10-29
Cách phân phát nhiều blog ma trên một VPS bằng cách sử dụng server block Nginx
2013-10-21
Cách cài đặt Drupal với Nginx trên VPS Ubuntu 13.04
2013-10-16
Cách cài đặt TTRSS với Nginx cho Debian 7 trên VPS
2013-10-07
Cách biên dịch Nginx từ Nguồn trên VPS CentOS 6.4 x64
2013-09-23
Cách biên dịch Nginx từ Nguồn trên VPS CentOS 6.4 x64
2013-09-23
Cách lưu trữ nhiều ứng dụng Node.js trên một VPS duy nhất với nginx, forever và crontab
2013-09-04
Cách tối ưu hóa Nginx với PHP Pools trên VPS Ubuntu 13.04
2013-08-21