こんにちは!今回はpart4ということで、サーバーにNode.jsアプリケーションをデプロイします。
はじめに
▼開発環境
- Windows PC
- Windows Powershell
- VS code
- node v21.7.3
Nodeアプリケーションをローカル環境に作成
expressを使用してnodeアプリケーションを作成していきます。
※nodeをインストールできていない人は、こちらを参考にしてください。
①プロジェクトディレクトリに必要なパッケージをインストール
npm init -y
npm install express
②コードを用意する
今回はexpressを使用してnodeアプリケーションを作成しています。ポート番号は3000番を指定しています。
const express = require('express');
const app = express();
//通常はenvファイルに記載する
const port = 3000
// サーバーの起動
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
app.get('/', (req, res) => {
res.send('Hello World!');
});
③サーバーを起動する
起動後、Server is running on port 3000
と表示されれば正常に起動できています。
node server.js
④http://localhost:3000
にブラウザからアクセスする
Hello world!
と画面に表示されていればOKです!
EC2へのデプロイ
ローカル環境に作成したnodeアプリケーションをEC2へデプロイします。
ステップ1: フォルダをEC2に転送する
デプロイするプロジェクトの構成は以下の通りです:
node_server/
├── node_modules/ # このフォルダは転送不要
├── package-lock.json
├── package.json
└── server.js
※ node_modules
フォルダは転送せず、EC2上で npm install
を実行して依存パッケージをインストールします。
①プロジェクトのディレクトリ直下にexclude.txt
を作成する
(exclude.txtの中身)
node_modules
②一時フォルダを作成してコピーする
(例: プロジェクトディレクトリの位置:C:\Users\user\Programming\node_server)
プロジェクトのディレクトリまで移動し下記コマンドを実行する。
PS C:\Users\user\Programming\node_server> xcopy "C:\Users\user\Programming\node_server" "C:\Users\user\Programming\temp_deploy" /E /I /H /exclude:exclude.txt
③一時フォルダからSCP
を実行
scp -i "秘密鍵のパス" -r "C:\Users\user\Programming\temp_deploy" ec2-user@パブリックIP:/home/ec2-user/
④EC2へログインし、デプロイしたフォルダを確認
以前作成したEC2へログインをします。ログイン方法はこちらをご覧ください!
ls
コマンドを入力し、下記のようにtemp_deploy
が表示されます。
cd
コマンドでtemp_deploy
フォルダに移動し、再度ls
コマンドを入力してください。
下記画像と同じファイルが表示されます。
デプロイできてることが確認出来たら、パッケージのインストールを行います。
temp_deploy
フォルダに移動し、コマンドを実行する。実行後、ls
コマンドで確認すると、node_modules
フォルダが確認できます。
npm install
⑤Nginx設定ファイルの編集
nano
コマンドでNginx設定ファイルを編集する。
[ec2-user@ip-172-31-44-164 temp_deploy]$ sudo nano /etc/nginx/conf.d/default.conf
設定ファイルが開けたら下記の設定を追加する。
この設定は、80番ポート(HTTP)でリクエストを受け付け、すべてのリクエストを3001番ポート(nodeアプリケーションが起動してるサーバー)へプロキシ転送をしています。
server {
listen 80;
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;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
設置ファイル編集後にNginxの再起動を行います。
sudo systemctl restart nginx
⑥Nodeサーバーを立ち上げる
最後に、Nodeサーバーを起動させます。
コマンド実行後、Server is running on port 3000
と表示されます。
node server.js
サイトにもアクセスしてみましょう。作成したインスタンスのIPアドレスをブラウザの検索バーに入力します。
Hello Wolrd!
と画面に表示されれば正常にNodeサーバーが起動できています。
トラブルシューティング
▼ "require is not defined in ES module scope"エラーの場合
package.jsonから "type": "module" を削除するか、importを使用します。
import express from 'express';
▼ ポートが使用中の場合
使用中のプロセスを確認し、必要に応じて終了します。
sudo lsof -i :3000
▼ パーミッションエラーの場合
sudo chown -R ec2-user:ec2-user /path/to/directory
おわりに
以上でAWSのEC2を使って、Nodeサーバーを構築してみよう
は終わりになります。
最後までご覧いただきありがとうございました!
次回は、SSL/TLS証明書の導入を行っていきたいと思います。