Next.jsアプリをUbuntuサーバにデプロイ
Tatsuya Abe
2025/2/12
前提
- Ubuntu バージョン: 24.04
- お名前.comでドメイン取得済み
npm,node.js,nginxのインストール
sudo apt install -y npm nodejs nginx
Next.jsアプリのGitリポジトリのクローン,ビルド
git clone [リポジトリURL]
cd [クローンしたリポジトリのディレクトリ]
npm install
npm run build
npm start
.env等の.gitignoreしたファイルを作成するのを忘れないように.
エラーが発生した場合,内容をサーバ側から閲覧できないため,ローカルで確認.
nginxの設定
nginx: webサーバソフトウェア
参考: 初心者でも10分で分かるnginxの役割と使い方
- 設定ファイルの作成
sudo vim /etc/nginx/sites-available/[任意の名前]
- 以下の設定を記述
server {
listen 80;
server_name [ドメイン名];
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
- 設定を有効にする
sudo ln -s /etc/nginx/sites-available/[任意の名前] /etc/nginx/sites-enabled/
- 設定をテストし,"test is successful" を確認
sudo nginx -t
- Nginxを再起動
sudo systemctl restart nginx
nginxの起動,再起動に失敗した場合
sudo nginx -t
test failed場合,設定ファイル (.conf)に誤りがある.
sudo systemctl status nginx.service
エラーログに,still could not bind() とある場合,他のプロセスがポートを占有している.
PM2のインストール,アプリの起動
PM2: Node.js用のプロセスマネージャ
参考: OpenStandia PM2
- pm2をインストール
sudo npm install -g pm2
- Next.jsのアプリのディレクトリに移動し,pm2で起動
cd /var/www/myapp # Next.jsアプリのディレクトリに移動
npm install
npm run build
pm2 start npm --name "[任意の名前]" -- start
pm2 save
pm2 startup
- アプリが起動していることを確認
pm2 list
UbuntuサーバのグローバルIPアドレスを確認
curl ifconfig.me
ドメインのネームサーバ,DNSの設定
以下,お名前.comの場合,
ネームサーバの設定
- お名前.com NAVIにログイン
- ネームサーバー -> ネームサーバー設定
- 対象ドメインがお名前.comのネームサーバーを使う設定になっているか確認
DNS設定
- お名前.com NAVIにログイン
- ネームサーバー -> ドメインDNS設定
- ドメイン名を選択 -> 次へ -> DNSレコード設定を利用する
- Aレコードを設定
- ホスト名: 任意
- タイプ: A
- TTL: 任意 (初期値: 3600)
- VALUE: UbuntuサーバのグローバルIPアドレス
- 追加 -> 確認画面へ進む -> 設定する
http://[ドメイン名]で接続を確認.
アクセスできない場合,ファイアウォールやルータのセキュリティ,ポート変換の設定を確認.
Let's EncryptでSSL設定 (HTTPS化)
Let's Encrypt: 証明書認証局
参考: 無料SSL証明書のLet’s Encryptとは?
- Certbotのインストール
sudo apt install -y certbot python3-certbot-nginx
- SSL証明書を取得
sudo certbot --nginx -d [ドメイン名]
Failedの場合は,ファイアウォールやルータのセキュリティ設定を確認.
- SSL証明書の自動更新の設定
sudo systemctl enable certbot.timer
最後に,https://[ドメイン名]にアクセスして接続を確認.