今まで Google App Engine Node.js Standard Environment (GAE/Node.js SE) で動かしていた comame.xyz を、Compute Engine に移しました。

理由

Nginx をいじってたら楽しくなってきちゃったから。

感想

  • 予想を遥かに上回るレベルで楽だった
  • 環境依存するコードをほぼ書かなくて済むので、GAE/Node.js SE はいいぞ
  • Nginx 楽しい
  • Certbot (Let's Encrypt) すごい楽

環境

  • Google Compute Engine / f1-micro
  • Ubuntu 18.04
  • Nginx, Node.js

手順

  1. GAE で動いていたコードを、Compute Engine に移す。
  2. Nginx の設定ファイルにバーチャルホストの設定を追加する。
  3. Node.js を systemd のサービスとして設定する。
  4. Nginx の設定ファイルに Node.js へリクエスト回す処理を追記する。
  5. Certbot で電子証明書を取得する。

コードを移す

GAE/Node.js SE は GAE に依存する部分が少ないため、ほぼそのままコードを移すだけで完了。静的なファイルを配信する部分だけ、Nginx 側に処理を回すためにコードを削除。

Nginx の設定をする

こんな感じ。80 版ポートの方は省略。

# /etc/nginx/sites-enabled/comame.xyz

server {
    server_name comame.xyz;
    listen 443 http2 ssl;
    
    # ....
}

systemd に Node.js をサービスとして登録する

多分落ちたときに自動再起動してくれると思う。まだ落ちてないからわからん。

# /etc/systemd/system/nodejs.service

[Unit]
Description=Node.js server

[Service]
WorkingDirectory=/home/hoge
Type=simple
ExecStart=/usr/bin/node /path/to/script.js
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=node
User=hoge
Group=hoge

[Install]
WantedBy=multi-user.target
$ systemctl start nodejs.service でサービスを起動。
$ systemctl enable nodejs.service で OS の起動時にサービスを起動するよう設定。

Nginx から Node.js にリクエストを回す

# /etc/nginx/sites-enabled/comame.xyz

upstream node {
    # Node.js は 3000 番ポートで動かすことにした
    server 127.0.0.1:3000;
}

server {
    # ...
    location / {
        proxy_pass http://node;
    }
}

Certbot で電子証明書を取得

コマンド叩くだけで電子証明書が取得できるの、本当にすごいよね。あとは Nginx 側で証明書のパスを指定するだけ。

$ certbot certonly --nginx
共有 Twitter で共有 Facebook で共有 URL をコピー

JavaScript を有効にしてください