HOME > 技術ドキュメント > Node.js + Express Web アプリ入門(Ubuntu 24.04 LTS)
Node.js + Express Web アプリ入門(Ubuntu 24.04 LTS)
Node.js は JavaScript でサーバーサイド処理を実行する実行環境、Express はその上で動く軽量 Web フレームワークです。 本記事では nvm による Node.js のインストールから Express アプリの作成、systemd によるデーモン化、 Nginx リバースプロキシ経由での HTTPS 公開までを解説します。
nvm のインストール
nvm(Node Version Manager)を使うと複数バージョンの Node.js を管理できます。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash source ~/.bashrc nvm --version
Node.js LTS のインストール
nvm install --lts nvm use --lts node -v npm -v
Express アプリの作成
mkdir ~/myapp && cd ~/myapp npm init -y npm install express
app.js を作成します。
const express = require('express');
const app = express();
const PORT = 3000;
app.use(express.json());
app.get('/', (req, res) => {
res.json({ message: 'Hello from Express' });
});
app.get('/health', (req, res) => {
res.json({ status: 'ok' });
});
app.listen(PORT, '127.0.0.1', () => {
console.log(`Server running on port ${PORT}`);
});
node app.js & curl http://localhost:3000/
JSON REST API の実装例
const items = [];
app.get('/api/items', (req, res) => {
res.json(items);
});
app.post('/api/items', (req, res) => {
const { name } = req.body;
if (!name) return res.status(400).json({ error: 'name is required' });
const item = { id: Date.now(), name };
items.push(item);
res.status(201).json(item);
});
systemd サービス化
システム起動時に自動で Node.js アプリが立ち上がるよう設定します。
sudo nano /etc/systemd/system/myapp.service
[Unit] Description=My Express App After=network.target [Service] Type=simple User=ubuntu WorkingDirectory=/home/ubuntu/myapp ExecStart=/home/ubuntu/.nvm/versions/node/v22.0.0/bin/node app.js Restart=on-failure RestartSec=5 Environment=NODE_ENV=production [Install] WantedBy=multi-user.target
Node.js のパスは which node で確認してください。
sudo systemctl daemon-reload sudo systemctl enable --now myapp sudo systemctl status myapp
Nginx リバースプロキシ設定
外部からのアクセスは Nginx が受け取り、内部の Node.js(ポート 3000)に転送します。
sudo nano /etc/nginx/sites-available/myapp
server {
listen 80;
server_name www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
http2 on;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
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;
proxy_cache_bypass $http_upgrade;
}
}
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Node.js アプリを HTTPS で公開するには
Node.js アプリは通常 127.0.0.1 でローカルにのみ Listen させ、Nginx がリバースプロキシとして HTTPS を終端します。
Nginx に SSL証明書を設定することで、Node.js アプリ全体が HTTPS 化されます。
エスロジカルではデジサート・サイバートラストの正規取扱代理店として、
RapidSSL 3,960円/1年(税込)〜で SSL証明書を販売しています。審査サポート・インストール代行も対応しています。
SSL証明書の購入はこちら / SSL証明書とは? / インストール代行サービス
関連ドキュメント
Nginx SSL/TLS 設定(Ubuntu 24.04 LTS) — HTTPS 設定とリバースプロキシ
Go 言語 Web アプリ入門 — Go での同様の構成
systemd サービス・タイマー設定入門 — サービスの詳細設定
