遵循本教程的要求
您需要安装 nginx 和 Node.js,并且在 DigitalOcean 上已经有关于这些主题的教程:
如何安装 nginx 和 如何安装 Node.js。
此外,您应该已经拥有一个域名,以便将正在运行的 Node.js 服务映射到域名,而不是导航到 http://[your-vps-ip]:[port]。
使用 Forever 运行您的 Node.js 应用程序
Forever 是一个简单的命令行工具,用于确保 Node.js 应用程序持续运行(即永远)。这意味着如果您的应用程序遇到错误并崩溃,forever 将为您处理此问题并重新启动它。
只需全局安装 forever,然后可以在几秒钟内使用 forever:
npm install forever -g
要使用 forever 启动脚本,您需要按照以下步骤进行操作:
导航到您的 Node.js 应用程序:
cd /path/to/your/node/app/
并使用 forever 运行 server/main 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 提供的域名服务器(例如 NS1.DIGITALOCEAN.COM.),并将每个域名服务器添加到您的域名注册商的控制面板中的 DNS 记录中。
- 注意:更改不会立即生效,因为 DNS 可以需要最多 24 小时才能传播。
将域名映射到在您的 VPS 上运行的服务的 nginx
- 在本节中,您将学习如何通过几个简单的步骤在 nginx 中设置反向代理。
首先,在 /etc/nginx/conf.d/ 中为您想要的域名创建一个文件,使用您喜欢的编辑器(我将使用 nano)。该文件应该以域名命名,以保持一致性。
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;
- 当 VPS 重新启动时,Forever 在处理应用程序崩溃等方面表现良好,但是当 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
打印当前目录。
对于每个域/服务,重复上述步骤。