介绍
Node.js 是用于构建服务器端和网络应用程序的开源 JavaScript 运行环境。 Node.js 可在 Linux,macOS,FreeBSD 和 Windows 上运行。 尽管您可以在命令行上运行 Node.js 应用程序,但本教程将着重于如何使 Node.js 开发的应用程序作为服务来运行。 这意味着它们将在服务器重新启动或发生故障时重新启动,并且可以在生产环境中安全地使用。
在本教程中,您将在一个 Ubuntu 18.04 服务器上设置 Node.js 运行环境。 该服务器将通过 Nginx 反向代理为用户提供对该应用程序的安全访问。 Nginx 服务器将使用由阿里云提供的免费证书提供 HTTPS 支持。
先决条件
本教程假定您具有以下条件:
- Ubuntu 18.04 服务器设置
- 您应该具有具有 sudo 特权的非root用户和活动的防火墙。
- 指向服务器公共IP的域名,本教程将始终使用域名 example.com。
- 已安装Nginx,如如何在 Ubuntu 18.04 上安装Nginx所述。
- 使用“加密”证书为SSL配置的Nginx。如何在Ubuntu 18.04上使用阿里云证书保护 Nginx 的安全,将引导您完成整个过程。
- 完成前提条件后,您将在https://example.com/上拥有一台服务器来服务您域的默认页面。
第1步 - 安装Node.js
首先,使用 NodeSource 软件包归档文件安装最新的LTS版本的Node.js。安装 NodeSource PPA 以便访问其内容。确保您位于主目录中,并使用curl检索Node.js 8.x归档文件的安装脚本:
$ cd ~
$ curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh
如果您感兴趣,可通过 nano 文本编辑工具查看 nodesource_setup.sh 命令行,以便了解该 sh 文件究竟做了什么。
$ nano nodesource_setup.sh
再您了解了nodesource_setup.sh 文件,之后,您便可以放心地通过下面这条命令执行该文件:
$ sudo bash nodesource_setup.sh
命令执行完毕后,您的 Ubuntu 服务器即添加了最新的 PPA 源地址,用于检索安装最新的 Node.js 版本,下面我们开始安装 Node.js:
$ sudo apt install nodejs
为了检查 Node.js 是否安装成功,及了解当前安装的 Node.js 版本,可通过下面这个命令查看:
$ nodejs -v
成功后,输出:
$ v8.11.3
即表示 Node.js 安装成功。
第3步 - 将 Node.js 应用程序加入系统后台服务
如何使 Node.js 应用程序像其他网站一样,在服务器重启后自动启动,一般可通过安装第三方组件来实现,如 PM2, Forever 等,但我们这里采用的是不安装任何第三方组件的方式,即通过加入系统服务的方法。
首先我们回到当前用户所在目录:
$ cd ~
通过 nano 文本编辑器创建 myapp.service,注意这里的 myapp 即后台服务名称:
[Unit]
Description=TONYLABS Application
[Service]
ExecStart=/var/www/myapp/app.js
Restart=always
User=nobody
注意 Debian/Ubuntu 使用 'nogroup', RHEL/Fedora 使用 'nobody'
Group=nobody
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp
[Install]
WantedBy=multi-user.target
复制以上内容,将 /var/www/myapp/app.js 修改为您的目标应用程序路径,当然包括 WorkingDirectory 的路径一并修改。
将 app.js 修改为可执行文件:
$ sudo chmod +rx /var/www/myapp/app.js
启用服务
$ systemctl enable /full/path/to/myapp.service
执行成功后,系统会自动在 /etc/systemd/system 目录下创建软链。
重新加载系统守护进程:
$ systemctl daemon-reload
启动 myapp 服务:
$ systemctl start myapp
查看 myapp 服务系统日志:
$ journalctl -u myapp
第4步 - 配置 Nginx 反向代理服务
您的应用程序正在 localhost 上运行和侦听,但是您需要设置一种供其他用户访问它的方法。 为此,我们将 Nginx Web 服务器设置为反向代理。您可以在 /etc/nginx/sites-available/example.com 文件中设置 Nginx 配置。 打开此文件进行编辑:
$ sudo nano /etc/nginx/sites-available/example.com
您可以根据已经存在的服务器配置,选择性地将下面的配置加入:
server {
...
location / {
proxy_pass http://localhost:3000;
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;
}
...
}
测试 Nginx 服务器配置:
$ sudo nginx -t
重新启动 Nginx 服务:
$ sudo systemctl restart nginx