使用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

广告
将在 10 秒后关闭
bannerAds