使用VPS为多个NodeJS应用添加HTTPS并进行托管
以下是在VPS上运行多个服务的API服务器的步骤。
概述
-
- Digital Ocean の Ubuntu イメージ(5USD/month)
-
- サブドメインに各アプリを紐づける
- Let’s Encrypt で SSL 化
服务器的配置
在中国,设置Digital Ocean Droplets
在以下设置中创建Droplets。
※ 如果您使用其他公司的VPS服务,请确保可以通过SSH连接将域名的@ www app1 app2指向服务器,并跳过此步骤。
-
- Image: Ubuntu
-
- Plan: Standard / 5USD
-
- Region: シンガポール
- Authentication: SSH keys
从域名管理界面将www @ app1 app2这个域名指向上述创建的服务器。
# SSH 接続 できることを確認
$ ssh root@yourdomain.com
创建内存交换空间
使用廉价的VPS,例如每月5美元,可能会出现内存不足的情况。请提前设置足够的虚拟内存。
# スワップ領域が未指定であることを確認
$ free
# スワップディレクトリの作成
$ sudo mkdir /var/swap/
# スワップファイルを作成
$ sudo dd if=/dev/zero of=/var/swap/swap0 bs=1M count=1024
$ sudo chmod 600 /var/swap/swap0
# 上記のファイルをスワップ領域として割り当てる
$ sudo mkswap /var/swap/swap0
$ sudo swapon /var/swap/swap0
# 再起動で再設定できるようにする
# fstab に `/var/swap/swap0 swap swap defaults 0 0` を追記します。
$ sudo vi /etc/fstab
# 動作確認
$ free
创建登录用户
由于以root用户持续登录不安全,因此我们将添加一个新用户。
# ユーザーの追加
$ adduser taro
# 作ったユーザーにsudo権限を与える
$ usermod -aG sudo taro
# ssh 接続できるようにする
$ rsync --archive --chown=taro:taro ~/.ssh /home/taro
防火墙的设置 de
启用防火墙,只允许SSH连接。
# OpenSSHを許可
$ ufw allow OpenSSH
# 有効化
$ ufw enable
# 動作確認
$ ufw status
VSCode的配置
使VSCODE能够编辑远程服务器上的文件。
-
- extentions remote sshをインストールします。
-
- Remote-SSH: connect to host…
-
- Add new Host
- ssh root@yourdomain.com
使用 NGINX 进行 HTTPS 通信。
安装Nginx
用新建立的用户安装Nginx。
# インストール
$ sudo apt update
$ sudo apt install nginx
# firewallにnginxを許可します
$ sudo ufw allow 'Nginx Full'
# 動作確認
$ systemctl status nginx
请用浏览器访问您的域名 (yourdomain.com) ,并确认是否显示出 Nginx 的默认页面。
nginx的配置文件
在/etc/nginx目录下存在Nginx的配置文件。从中选择/etc/nginx/conf.d/home.conf并进行编辑。
server {
server_name [yourdomain].com www.[yourdomain].com;
location / {
root /var/www;
index index.html;
}
}
server {
server_name app1.[yourdomain].com;
location / {
root /var/app1;
index index.html;
}
}
读取设置并重新启动nginx。
# テスト
$ service nginx configtest
# 再起動
$ systemctl reload nginx
当你在浏览器中访问URL并创建/var/www/index.html和/var/app1/index.html时,应该会显示每个index.html文件。
让我们使用Let’s Encrypt来配置HTTPS。
# certbot のインストール
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt install python-certbot-nginx
# 証明書をリクエスト
$ sudo certbot --nginx -d www.[yourdomain].com -d [yourdomain].com -d app1.[yourdomain].com
# 証明書の再発行設定
$ sudo certbot renew --dry-run
可以通过HTTPS访问。
使用Nginx反向代理将NodeJS应用程序进行代理。
在中文中原生地复述以下内容,只需要提供一个选项:
安装nodeJS。
# インストール
$ curl -sL https://deb.nodesource.com/setup_13.x | sudo -E bash -
$ sudo apt-get install -y nodejs
$ sudo apt-get install build-essential
# 動作確認
$ node -v
$ npm -v
我试着运行演示应用程序。
$ mkdir ~/app1
$ cd ~/app1
$ npm init
$ npm install --save express
在VS code中访问上述目录,并创建一个演示应用程序。[创建文件夹] > [/home/taro/app1/]
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => res.send('Hello World From NodeJS!'));
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
我会启动应用程序并检查其操作。
# サーバーに接続して実行
$ node index.js
# 別のターミナルを起動して動作を確認
$ curl http://localhost:3000
注意:在这个阶段,无法访问 yourdomain.com:3000 进行操作验证。
安装PM2并将应用程序持久化。
$ sudo npm install pm2@latest -g
$ pm2 start index.js
# 動作確認
$ curl http://localhost:3000
Nginx 反向代理服务器的配置
配置 Nginx 反向代理服务器以将 http://localhost:3000 暴露出去,编辑 /etc/nginx/conf.d/home.conf 文件。
...
server {
server_name app1.[yourdomain].com;
location / {
proxy_pass http://localhost:3000;
}
listen 443 ssl; # managed by Certbot
...
通过命令“$ sudo systemctl restart nginx”来重新启动nginx。在浏览器中访问app1.[yourdomain].com,应该会显示“Hello World From NodeJS!”。
添加另一个域名并进行HTTPS化
我們將在home.conf中添加新域名的配置。
server {
server_name app2.[yourdomain].com;
location / {
root /var/app2;
index index.html;
}
}
让我们使用Let’s Encrypt发行HTTPS证书。
# nginxの再起動
$ systemctl reload nginx
# 証明書のリクエスト
$ sudo certbot --nginx -d app2.[yourdomain].com
# 証明書の再発行設定
$ sudo certbot renew --dry-run
您可以通过https://app2.yourdomain.com访问。
其他
- Digital Ocean で Droplets の破壊作成を繰り返すとき、DestroyではなくRebuildを選択するとIPが引き継がれるので便利です。
请参考
-
- How To Install Nginx on Ubuntu 18.04 | DigitalOcean
Initial Server Setup with Ubuntu 18.04
How To Set Up a Node.js Application for Production on Ubuntu 18.04
物理メモリが足りない時はスワップメモリを使おう。(Ubuntu) | tyablog.net
2019-09-07 メモ nginx – Qiita
秩序と情報とブロッコリー: nginxのインストールからマルチドメインの設定まで(@CentOS)
【nginx】サブドメインの設定方法 – IT技術総合Wiki | CWiki