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>
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 Nginx2013-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