本番環境向けDjangoプロジェクトの準備
まず、Djangoプロジェクトが本番環境で正常に動作することを確認する。
# デプロイ前のチェック
python manage.py check --deploy
出力された警告やエラーに対応する。主な設定変更は以下の通り:
settings.pyのDEBUG = Falseを設定ALLOWED_HOSTSを適切に指定(例:['your-domain.com', '172.16.101.72'])- 開発用ツール(
debug_toolbar)をすべて無効化
セキュリティとCORS設定
クロスオリジンリソース共有(CORS)を許可し、セキュリティヘッダーを強化する。
# 必要ならインストール
# pip install django-cors-headers
# settings.py
INSTALLED_APPS += ['corsheaders']
MIDDLEWARE.insert(0, 'corsheaders.middleware.CorsMiddleware')
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_HEADERS = (
'accept', 'accept-encoding', 'authorization', 'content-type',
'dnt', 'origin', 'user-agent', 'x-csrftoken', 'x-requested-with', 'token'
)
CORS_ALLOW_METHODS = ('DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT')
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_BROWSER_XSS_FILTER = True
X_FRAME_OPTIONS = 'DENY'
Linuxサーバーへのデプロイ手順
プロジェクトディレクトリ構造を作成し、コードをクローン:
mkdir -p project/{conf,code,static,logs}
cd project/code
git clone --depth=1 https://gitee.com/アカウント/izufang.git
仮想環境の構築と依存関係のインストール
pip3 install virtualenv
virtualenv --python=$(which python3) ../venv
source ../venv/bin/activate
pip install -r izufang/requirements.txt
pip install uwsgi
uWSGI設定
project/conf/uwsgi.ini を作成:
[uwsgi]
base = /root/project
name = izufang
master = true
processes = 4
pythonhome = %(base)/venv
chdir = %(base)/code/%(name)
module = %(name).wsgi
socket = 0.0.0.0:8000
起動コマンド:
uwsgi --ini conf/uwsgi.ini &
Nginx連携設定
/etc/nginx/nginx.conf の server ブロックを修正:
server {
listen 80;
server_name _;
location / {
include uwsgi_params;
uwsgi_pass 172.16.101.72:8000;
}
location /static/ {
alias /root/project/static/;
expires 30d;
}
}
静的ファイル収集:
# settings.py
STATIC_ROOT = '/root/project/static'
# コマンド実行
python manage.py collectstatic --noinput
chown -R nginx:nginx /root/project/static
Gunicorn代替設定(オプション)
uWSGIの代わりにGunicornを使用する場合:
# gun_conf.py
import multiprocessing
bind = "127.0.0.1:8001"
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = "gevent"
timeout = 30
reload = True
起動方法:
gunicorn -c gun_conf.py izufang.wsgi:application
PM2によるプロセス管理
Node.js環境を構築し、PM2をグローバルインストール:
wget https://nodejs.org/dist/v14.15.1/node-v14.15.1-linux-x64.tar.xz
tar xvf node-v14.15.1-linux-x64.tar.xz
ln -s /root/node-v14.15.1-linux-x64/bin/node /usr/local/bin/node
ln -s /root/node-v14.15.1-linux-x64/bin/npm /usr/local/bin/npm
npm install -g pm2
ln -s /root/node-v14.15.1-linux-x64/bin/pm2 /usr/local/bin/pm2
PM2基本操作
pm2 start app.sh --name django-apppm2 list:プロセス一覧pm2 logs django-app:ログ表示pm2 save+pm2 startup:自動起動設定
ログローテート設定
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 14
pm2 set pm2-logrotate:compress true
オフライン環境へのPM2導入
インターネット接続がない環境でもNode.jsとPM2を導入可能:
# オンライン環境でパッケージ作成
tar -zcvf node-v14.15.1-linux-x64.tar.gz node-v14.15.1-linux-x64/
# オフラインサーバーへ転送・展開
scp node-v14.15.1-linux-x64.tar.gz user@offline:/opt/
tar -zxvpf node-v14.15.1-linux-x64.tar.gz
# 環境変数設定
echo 'export PATH="/opt/node-v14.15.1-linux-x64/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# 動作確認
node -v && npm -v && pm2 -v