naritoブログ

このブログはDjangoとBootstrap4で作成されました
ソースコード

さくらVPS(CentOS7) nginx+GnicornでDjangoを動かす

プログラミング関連 Django nginx マイサーバ初期設定3 Gunicorn Linux CentOS 約238日前
2017年4月16日19:54
Djangoアプリケーションを公開する場合、いくつかの方法があります。
今回はnginx+Gunicornで動かしたいと思います。

venvで仮想環境を作り、django-admin startproject でdjangoプロジェクトを作ります。
そして、djangoの管理画面にアクセスするところまでです。

Pythonのインストールは以下のページ等
さくらVPS(CentOS7) yumでPythonをインストール
https://torina.top/detail/359/

/homeに、まず仮想環境を作成し、有効かします。
cd /home
python3.6 -m venv testvenv
cd testvenv
source  bin/activate


djangoをpipします。
pip install django


djangoプロジェクトの作成
django-admin startproject testdjango
cd testdjango


はじめのmigrateと、管理ユーザの作成
python manage.py migrate
python manage.py createsuperuser



一旦、ここまで確認してみましょう。使わなそうなポートを空けて...
firewall-cmd --add-port=9999/tcp --permanent
firewall-cmd --reload


このままアクセスするとエラーになるので、ちょっと修正します。
vim testdjango/settings.py


以下のように書き換えておきましょう。
ついでに、タイムゾーンと言語も日本に。
ALLOWED_HOSTS = ['*']
...
...
# かなり下のほう
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'


0.0.0.0とすると、外部からアクセスできるようになります。
これで一旦アクセスし、管理画面などに入ってみましょう。
python manage.py runserver 0.0.0.0:9999



http://1.1.1.1:9999
のようにしてアクセスしましょう。IPアドレスは、サーバのIPアドレスです。


/adminにもアクセスしましょう。


適当にユーザーを追加したりしてもエラーが出なければ、概ね大丈夫でしょう。


単純にrunserver で動かせればいいよ、という方ならここまででも大丈夫です。
これをnginx+Gunicornで動かせるようにしましょう。

まず、staticなファイルの準備です。
本番環境では、staticやmediaは別の方法で配信します。今回はnginxで、aliasの設定をします。
vim testdjango/settings.py


以下のように追加します。
STATIC_ROOT = '/var/www/static'


ついでに、DEBUGもFalseにしときましょう。
DEBUG = False


以下のコマンドで、/var/www/staticに静的ファイルが集まります。
python manage.py collectstatic


Ctrl+C等で戻り、空けたポートを閉じておきましょう。
firewall-cmd --remove-port=9999/tcp --permanent
firewall-cmd --reload


Gunicornをインストールします。
pip install gunicorn


confファイルを作成します。
vim /etc/nginx/conf.d/testdjango.conf



Let’s EncryptでSSL化している例です。
さくらVPS(CentOS7) nginxの導入と、Let’s EncryptでSSL
https://torina.top/detail/358/
server {
    listen 80;
    listen [::]:80;
    server_name torina.club;
    return 301 https://$host$request_uri;
}

server {
    listen  443 ssl;
    server_name     torina.club;

    ssl_certificate         /etc/letsencrypt/live/torina.club/cert.pem;
    ssl_certificate_key     /etc/letsencrypt/live/torina.club/privkey.pem;

    location /static {
        alias /var/www/static;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}



nginxの再起動です。
systemctl reload nginx



Djangoアプリの起動と終了の方法を楽にしましょう。
systemctl start gunicorn で起動するように設定します。
vim /etc/systemd/system/gunicorn.service



何となく内容はわかると思います。
[Unit]
Description=gunicorn
After=network.target

[Service]
WorkingDirectory=/home/testvenv/testdjango
ExecStart=/home/testvenv/bin/gunicorn --bind 127.0.0.1:8000 testdjango.wsgi:application

[Install]
WantedBy=multi-user.target



起動と、自動起動の設定をします。
systemctl start gunicorn
systemctl enable gunicorn



この後は、実際にブラウザでアクセスしてみましょう。


参考サイト
http://gunicorn.org/#deployment
https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04
http://docs.gunicorn.org/en/latest/index.html