株式会社エスロジカル
株式会社エスロジカル
SSL証明書(DV、OV、EV)、セキュリティ、Web開発、Linux開発、Go言語

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(Node Version Manager)を使うと複数バージョンの Node.js を管理できます。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
nvm --version

nvm install --lts
nvm use --lts
node -v
npm -v

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/

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);
});

システム起動時に自動で 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 が受け取り、内部の 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 アプリは通常 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 サービス・タイマー設定入門 — サービスの詳細設定


← 技術ドキュメント一覧へ戻る