遵循本教程的要求
您需要安装nginx和Node.js,并且已经有关于DigitalOcean上这些主题的精心编写的教程:
此外,您应该已经拥有一个域,以便将正在运行的Node.js服务映射到域名,而不是导航到http:// [your-vps-ip]:[port]。
使用Forever运行Node.js应用程序
Forever是一个简单的命令行工具,用于确保Node.js应用程序连续运行(即永远)。 这意味着如果您的应用遇到错误和崩溃,永远会处理这个问题,并为您重新启动它。
简单地永久安装全局和永远可以在几秒钟内使用:
npm install forever -g
要永久启动脚本,您需要按照以下步骤操作:
导航到您的Node.js应用程序:
cd /path/to/your/node/app/
并使用forever运行服务器/主JavaScript文件:
forever start --spinSleepTime 10000 main.js
凡--spinSleepTime 10000
指的是最低的正常运行时间(毫秒)一个崩溃的脚本启动之间。 此命令将适用于几乎所有情况。
现在将浏览器指向http:// [your-vps-ip]:[port],看看你的应用程序是否运行。
将域映射到Node.js应用程序
现在,您需要在DigitalOcean控制面板中添加DNS记录,将您的域名映射到您的Droplet(VPS)。
步骤如下:
- 登录DigitalOcean.com
- 点击左侧栏中的“DNS”部分
- 通过单击“添加域”按钮添加域,选择您选择的VPS并输入您在“名称”字段中注册的域名
- 复制DigitalOcean提供的Nameservers(例如NS1.DIGITALOCEAN.COM。),并将每个添加到域名注册商控制面板中的DNS记录。
注意:更改不会立即生效,因为DNS最多可能需要24小时才能传播。
将域映射到在具有nginx的VPS上运行的服务
在本节中,您将学习如何建立一个反向代理 nginx的几个简单的步骤。
首先,使用您喜欢的编辑器(我将使用nano)在/etc/nginx/conf.d/中为您所需的域创建一个文件。 为了一致性原因,文件应该在域名后命名。
nano /etc/nginx/conf.d/example.com.conf
注意:你可以调用任何你想要的文件,重要的部分是.conf
扩展名。
在此文件中,您需要复制以下代码段,并将其粘贴到之前创建的文件中:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:{YOUR_PORT};
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
现在,只需更换your-domain.com
与您已注册的域名并YOUR_PORT
与您的Node.js应用程序是听您的VPS的端口。
注意:要能够引用多个域的一个Node.js的应用程序(如www.example.com和example.com),你需要将下面的代码添加到该文件/etc/nginx/nginx.conf
在http
部分:
server_names_hash_bucket_size 64;
如果DNS更改被传播,您可以将您的Web浏览器指向您的域,您应该可以看到您的应用程序正在运行,可从互联网访问。
在重新启动时重新启动Node.js应用程序
永远是好的,当它涉及到保持你的应用程序运行时,当它崩溃等,但是当VPS重新启动时会发生什么?
这是一个简单的cronjob可以阻止您的应用程序和您的用户从意外停机。
创建一个名为starter.sh
在应用程序的主文件夹,并复制下面的代码:
#!/bin/sh
if [ $(ps -e -o uid,cmd | grep $UID | grep node | grep -v grep | wc -l | tr -s "\n") -eq 0 ]
then
export PATH=/usr/local/bin:$PATH
forever start --sourceDir /path/to/your/node/app main.js >> /path/to/log.txt 2>&1
fi
其中, main.js
应该与您的应用程序的主脚本进行更换。
这个有用的片段已被取自这里
要在每次重新启动时启动此脚本,您需要使用以下命令编辑crontab:
crontab -e
并将以下代码附加到此文件
@reboot /path/to/starter.sh
现在设置您的starter.sh文件的绝对路径。
提示:浏览您的starter.sh文件的位置,并显示当前目录pwd
。
对每个域/服务重复上述步骤。