👋
【超簡単】Next.jsアプリ(やその他Node.jsアプリ)をAmazon Lightsailでホスティング
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
参考
Discussion