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に表示されたアドレスを追加してあげましょう。