👋

【超簡単】Next.jsアプリ(やその他Node.jsアプリ)をAmazon Lightsailでホスティング

2022/08/27に公開

Bitnamiが導入されているため、ほぼ何も導入しなくてもサイトの公開が可能です。

この記事で出来ること

Next.jsで作られたHTTPSサイトのホスティング

Lightsailで構築するメリット

  • 他のnodeアプリでも応用可能(ポート3000で起動しているアプリならなんでも可)
  • 10分くらいでできる
  • DNSもDBもウェブサービスに必要なサービスがこれ一本で完了する
  • Firewallなども含め必要な設定が最初から全部完了している

作業内容

事前作業

Aamazon Lightsailでnode.jsインスタンスを起動(リージョンの設定を忘れがちなので注意)
Networkingへ移動しSTATIC IP ADDRESSを取得、アタッチ(LBを使う場合は不要)
LBを使う場合はファイアウォールルールからHTTPとHTTPSを削除しておくこと
DNSを設定する(LBを使う場合はLBのアドレスをCNAMEに設定)

サーバー設定作業

インスタンスにsshでログイン

コピペなどの作業の邪魔になるのでvimでビジュアルモードを無効にしておく。(個人の好み)

~/.vimrc
set mouse-=a

sudoなどで作業するときのためにrootユーザー用にも設定を入れておく

/root/vimrc
source $VIMRUNTIME/defaults.vim
set mouse-=a

deploy用の鍵を作成し、clone元のリポジトリに登録

ssh-keygen -t ed25519

アプリをgitからclone

apacheが既に入っており、設定もあるので、用意された設定をコピー

sudo cp /opt/bitnami/apache/conf/vhosts/sample-vhost.conf.disabled /opt/bitnami/apache/conf/vhosts/service.conf

HTTPSの設定(LBを使うなら不要)

sudo cp /opt/bitnami/apache/conf/vhosts/sample-https-vhost.conf.disabled /opt/bitnami/apache/conf/vhosts/https-service.conf

LBを使う場合は
httpd.confでremoteip_moduleの有効化とRemoteIPHeaderおよびRemoteIPTrustedProxyの設定を行う

LoadModule remoteip_module modules/mod_remoteip.so
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy LBのPrivate IP

apache再起動

sudo /opt/bitnami/ctlscript.sh restart apache

foreverが元々入っているがnodeのバージョンが新しく警告が出てうざいのでpm2をインストール

sudo npm i pm2 -g

nextアプリのあるディレクトリにいき、pm2でデーモナイズ

pm2 start npm --name "next" -- start

保存

sudo env PATH=$PATH:/opt/bitnami/node/bin /opt/bitnami/node/lib/node_modules/pm2/bin/pm2 startup systemd -u bitnami --hp /home/bitnami
pm2 save

証明書自動更新作業

下記のコマンドを実行し、質問に答えてSSL証明書の発行と自動更新設定を完了する(LBを使うなら不要)

sudo /opt/bitnami/bncert-tool

Apacheログの置き場

  • /opt/bitnami/apache/logs

参考

https://docs.bitnami.com/aws/infrastructure/nodejs/get-started/get-started/

Discussion