2026年6月29日月曜日

Nginx インストール&設定

# systemctl stop httpd
# systemctl disable httpd
# dnf install -y nginx
# systemctl start nginx
# systemctl enable nginx
# firewall-cmd --permanent --add-service=http
# firewall-cmd --permanent --add-service=https
# firewall-cmd --reload
# vi /etc/nginx/conf.d/00_secureauth.conf  <<  __EOF__
server {
    listen 80;
    server_name your_domain_or_ip; # サーバーのIPアドレスまたはドメイン名

    # 1. Django (Gunicorn) へのルーティング
    location /api/ {
        proxy_pass http://192.168.1.198:8000;
        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;
    }
    # 2. Djangoの静的ファイル (管理画面用など)
    location /static/ {
        alias /home/takahab/Make/DjangoNextAuth/backend/static/;
    }
    # 3. Next.js へのルーティング
    location / {
        proxy_pass http://192.168.1.198:3000;
        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;
    }
}
__EOF__

# nginx -t
# systemctl restart nginx
# setsebool -P httpd_can_network_connect 1

# systemctl restart nginx

【本番起動】

# PM2をグローバルにインストール
# npm install -g pm2

# Next.jsのプロジェクトディレクトリに移動
$ cd /home/takahab/Make/DjangoNextAuth/frontend

# PM2でNext.jsを起動(名前を "nextjs-app" とする)
$ pm2 start npm --name "nextjs-app" -- run start -- -p 3000

# サーバー起動時にPM2自体を自動起動するコマンドを生成
$ pm2 startup systemd

表示されたコマンドをコピペしてrootで実行。
# sudo env PATH=$PATH:/usr/local/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u takahab --hp /home/takahab
# su - takahab
pm2 save

$ pm2 start

$ cd /home/takahab/Make/DjangoNextAuth/backend
$ . ./env
$ pip install gunicorn
$ sudo vi /etc/systemd/system/gunicorn.service << __EOF__
[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=nginx
Group=nginx
WorkingDirectory=/var/www/DjangoNextAuth/backend
Environment="PYTHONPATH=/var/www/DjangoNextAuth/.venv/lib/python3.14/site-packages"
ExecStart=/usr/bin/python3.14 /var/www/DjangoNextAuth/.venv/bin/gunicorn \
          --workers 3 \
          --bind 127.0.0.1:8000 \
          Config.wsgi:application

[Install]
WantedBy=multi-user.target
__EOF__

# systemctl daemon-reload
# systemctl restart gunicorn
# systemctl status gunicorn


※Djangoでエラーの場合、
$ . ./env
手動で実行してエラーを確認。
$ ../.venv/bin/gunicorn --bind 127.0.0.1:8000 Config.wsgi:application

# semanage fcontext -a -t bin_t "/home/takahab/Make/DjangoNextAuth/\.venv/bin(/.*)?"
# semanage fcontext -a -t httpd_sys_content_t "/home/takahab/Make/DjangoNextAuth/backend(/.*)?"
restorecon -R -v /home/takahab/Make/DjangoNextAuth/

semanage fcontext -a -t bin_t "/home/takahab/Make/DjangoNextAuth/.venv/bin(/.*)?"



※Next.jsでエラーの場合。
$ pm2 delete all
$ pm2 start npm --name "nextjs-app" -- run start -- -p 3000
$ pm2 save

$ pm2 delete all
[PM2][WARN] No process found
(.venv) [takahab@rocky92 frontend]$ pm2 status
┌────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name      │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
└────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
host metrics | cpu: 2.5% | ram usage: 22.7% | enp5s0: ⇓ 0.005mb/s ⇑ 0.007mb/s drop 40/min | disk: ⇓ 0.014mb/s ⇑ 0.308mb/s /m2_2 75.67% /m2_1 65.91% /boot 61.14% |
(.venv) [takahab@rocky92 frontend]$ pm2 start npm --name "nextjs-app" -- run start -- -p 3000
[PM2] Starting /usr/local/bin/npm in fork_mode (1 instance)
[PM2] Done.
┌────┬───────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name          │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├────┼───────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0  │ nextjs-app    │ default     │ N/A     │ fork    │ 71292    │ 0s     │ 0    │ online    │ 0%       │ 14.0mb   │ takahab  │ disabled │
└────┴───────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
host metrics | cpu: 0.5% | ram usage: 22.6% | enp5s0: ⇓ 0.004mb/s ⇑ 0.006mb/s drop 44/min | disk: ⇓ 0mb/s ⇑ 0.602mb/s /m2_2 75.67% /m2_1 65.91% /boot 61.14% |
(.venv) [takahab@rocky92 frontend]$ pm2 save
[PM2] Saving current process list...
[PM2] Successfully saved in /home/takahab/.pm2/dump.pm2

 


sudo -u nginx pm2 logs nextjs-app --lines 50
vi /var/lib/nginx/.pm2/logs/nextjs-app-out.log
vi /var/lib/nginx/.pm2/logs/nextjs-app-error.log

$ pm2 kill
$ sudo -u nginx /usr/local/bin/pm2 kill


【ログローテート】
vi /etc/systemd/journald.conf<< __EOF__
SystemMaxUse=50M
__EOF__
systemctl restart systemd-journald

sudo -u nginx /usr/local/bin/pm2 install pm2-logrotate                            # 1. nginx ユーザーとして pm2-logrotate をインストール  
sudo -u nginx /usr/local/bin/pm2 set pm2-logrotate:max_size 10M    # 2. ログファイルの最大サイズを「10MB」に制限
sudo -u nginx /usr/local/bin/pm2 set pm2-logrotate:retain 10                                # 3. 過去何世代(何ファイル分)残すかを設定
sudo -u nginx /usr/local/bin/pm2 set pm2-logrotate:rotateInterval '0 0 * * *'   
# 4. ログを毎日深夜に強制ローテートする


【ローカルSSL】
mkdir -p /etc/nginx/ssl

cp /var/www/DjangoNextAuth/backend/Cert/localhost+2.pem /etc/nginx/ssl/server.crt
cp /var/www/DjangoNextAuth/backend/Cert/localhost+2-key.pem /etc/nginx/ssl/server.key

chmod 600 /etc/nginx/ssl/server.key
chown -R nginx:nginx /etc/nginx/ssl/

# vi /etc/nginx/conf.d/00_secureauth.conf<<__EOF__
# ==========================================
# 1. HTTP (80番ポート) の設定: HTTPS へ自動転送
# ==========================================
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 301 https://$host$request_uri; # すべて HTTPS へ強制リダイレクト
}

# ==========================================
# 2. HTTPS (443番ポート) の本番ルーティング設定
# ==========================================
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name _;

    # 💡 ローカルの SSL 証明書と秘密鍵を指定
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    # SSLのセキュリティ最適化設定(モダンな暗号化)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # ① Django API
    location /api/ {
        proxy_pass http://127.0.0.1:8000;
        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;
    }

    # ② Django ポータル
    location /portal/ {
        proxy_pass http://127.0.0.1:8000;
        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;
    }

    # ③ Django 管理画面
    location /admin/ {
        proxy_pass http://127.0.0.1:8000;
        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;
    }

    # ④ Djangoの静的ファイル
    location /static/ {
        alias /var/www/DjangoNextAuth/backend/static/;
    }

    # ⑤ それ以外すべてを Next.js へ
    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
}
__EOF__

firewall-cmd --permanent --add-service=https
firewall-cmd --reload

systemctl restart nginx



0 件のコメント:

コメントを投稿

海外アクセスを遮断

vi /root/script/update_geoip.sh <<__EOF__ #!/bin/bash # 日本のIPアドレス(IPv4 / IPv6両対応)をインポートするスクリプト # 一時ファイルの準備 IP_FILE_V4="/tmp/jp_ip...