Ubuntuサーバー(Nginx + uWSGI)にDjangoプロジェクトをデプロイする

CentOSのサポートが終わってしまったのでサーバーはUbuntuに変更した。

UbuntuにDjangoプロジェクトをデプロイする手順と環境整備手順。

GitHub上のDjangoプロジェクトをサーバー上にclone

Localで作ったDjangoプロジェクトをGithub上にpushし、サーバー上にcloneする。(デプロイにGithubを使わなかったり、テストするだけならサーバー上でDjangoプロジェクトを作成したらいい。[repository_name]は適宜変える。)

git clone git@github.com:[repository_name].git

GitHubに上げる前に、python manage.py collectstaticする(サーバー側でしたほうがいいんだろうか?)。

GitHubにはSECRET_KEY等の情報はあげないほうがいい(https://docs.djangoproject.com/ja/2.2/howto/deployment/checklist/#secret-key)のとDEBUGの値もローカルと変えないといけないので、django-environをつかう。

pip install django-environ
import environ


env = environ.Env()
env.read_env('.env')

SECRET_KEY = env('SECRET_KEY')

DEBUG = env('DEBUG')

STATIC_ROOT = env('STATIC_ROOT')
SECRET_KEY=********************
DEBUG=True
STATIC_ROOT=path_to_static

ローカルにはlocal_settings.pyを用意しておいて.gitignoreに登録しておく方法もある。ただこの場合、SECRET_KEY等は別途環境変数に登録必要。結局django-environを使うほうが楽。

venvでDjango, uWSGIインストール

python -m venv venv
source venv/bin/activate
pip install django uwsgi

uwsgi.iniを作成

[uwsgi]
base = /var/www/[django_dir_name]
chdir = %(base)
virtualenv = %(base)/venv
module = [django_project_name].wsgi:application
master = true
socket = %(base)/%n.sock
chmod-socket = 666
wsgi-file = %(base)/[django_project_name]/wsgi.py
pidfile = %(base)/%n.pid
logto = %(base)/%n.log
processes = 2
vacuum = true
[django_dir_name], [django_project_name], 他、パラメータは適宜変更(https://uwsgi-docs.readthedocs.io/en/latest/Options.html)。

サービスファイルを作成して自動起動設定をする

sudo vim /usr/lib/systemd/system/uwsgi.service
[Unit]
Description=Django app service.
After=network.target
 
[Service]
User=[User name]
 
WorkingDirectory=/var/www/[django_dir_name]
 
KillSignal=SIGQUIT
 
# 実行
ExecStart=/var/www/[django_dir_name]/venv/bin/uwsgi --ini /var/www/[django_dir_name]/uwsgi.ini
 
Restart=always
 
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start uwsgi
sudo systemctl enable uwsgi

Nginxの設定

/etc/nginx/conf.d/django.confに下記を追加

location / {
    include uwsgi_params;
    uwsgi_pass unix:///var/www/[django_dir_name]/uwsgi.sock;
}

location /static/ {
    root /var/www/[django_dir_name];
}
sudo nginx -s reload

サイトで確認

これでうまくDjangoプロジェクトが表示されるはず。

You may need to add ‘***’ to ALLOWED_HOSTS. というエラーが出た場合は、settings.pyのALLOWED_HOSTSに表示されたアドレスを追加してあげましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください