DjangoアプリケーションをPostgreSQL、Nginx、およびGunicornを使用してセットアップする手順を完全かつ包括的に解説します。この手順では、Djangoのインストールから、データベースの設定、Webサーバーの構成、そして最終的なデプロイまでのすべてのステップを順を追って説明します。
1. 必要なソフトウェアのインストール
まず、Djangoアプリケーションを動作させるために必要なソフトウェアをインストールします。
1.1 PostgreSQLのインストール
PostgreSQLは、Djangoのデフォルトのデータベースとして使用されます。UbuntuでPostgreSQLをインストールするには、以下のコマンドを実行します。
bashsudo apt update sudo apt install postgresql postgresql-contrib
インストール後、PostgreSQLサービスが自動的に開始されます。次に、PostgreSQLのデータベースを作成するために以下のコマンドを実行します。
bashsudo -u postgres psql
PostgreSQLシェルにアクセスしたら、新しいデータベースとユーザーを作成します。
sqlCREATE DATABASE myprojectdb;
CREATE USER myprojectuser WITH PASSWORD 'password';
ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myprojectuser SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE myprojectdb TO myprojectuser;
データベースとユーザーが作成されました。これでDjangoアプリケーションがデータベースにアクセスできるようになります。
1.2 PythonとDjangoのインストール
次に、Python環境をセットアップします。Ubuntuの場合、Python3とpipをインストールします。
bashsudo apt install python3 python3-pip python3-dev libpq-dev
次に、仮想環境を作成し、Djangoと必要なパッケージをインストールします。
bashpython3 -m venv myenv
source myenv/bin/activate
pip install django psycopg2 gunicorn
1.3 Nginxのインストール
NginxはWebサーバーとして使用します。次のコマンドでインストールします。
bashsudo apt install nginx
インストール後、Nginxを起動して、サービスが自動的に開始されるように設定します。
bashsudo systemctl start nginx
sudo systemctl enable nginx
2. Djangoプロジェクトの作成
次に、Djangoのプロジェクトを作成します。
bashdjango-admin startproject myproject
cd myproject
2.1 設定ファイルの変更
settings.py
を開き、データベース設定をPostgreSQLに変更します。
pythonDATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myprojectdb',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '5432',
}
}
これで、DjangoアプリケーションはPostgreSQLデータベースに接続する準備が整いました。
2.2 マイグレーションの実行
Djangoのデータベースにテーブルを作成するために、マイグレーションを実行します。
bashpython manage.py migrate
これで、データベースの準備が整いました。
3. Gunicornの設定
GunicornはDjangoアプリケーションを実行するためのWSGIサーバーです。以下のコマンドでGunicornを起動します。
bashgunicorn --workers 3 myproject.wsgi:application
このコマンドは、3つのワーカープロセスでDjangoアプリケーションを実行します。
4. Nginxの設定
Djangoアプリケーションをインターネットに公開するために、Nginxをリバースプロキシとして設定します。まず、Nginxの設定ファイルを作成します。
bashsudo nano /etc/nginx/sites-available/myproject
以下の内容を設定ファイルに追加します。
nginxserver {
listen 80;
server_name your_domain_or_IP;
location / {
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;
}
location /static/ {
alias /path/to/your/project/static/;
}
location /media/ {
alias /path/to/your/project/media/;
}
}
設定ファイルを保存したら、シンボリックリンクを作成して、サイトを有効にします。
bashsudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
Nginxの設定をテストして、問題がないか確認します。
bashsudo nginx -t
テストが成功したら、Nginxを再起動して設定を反映させます。
bashsudo systemctl restart nginx
5. 静的ファイルとメディアファイルの設定
Djangoで静的ファイルとメディアファイルをNginxに配信させるために、settings.py
で設定を行います。
pythonSTATIC_URL = '/static/'
STATIC_ROOT = '/path/to/your/project/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = '/path/to/your/project/media/'
次に、静的ファイルを収集します。
bashpython manage.py collectstatic
これで、Nginxが静的ファイルとメディアファイルを正しく配信できるようになります。
6. サービスの設定
Gunicornをバックグラウンドで実行するために、systemd
サービスを作成します。/etc/systemd/system/myproject.service
というファイルを作成します。
bashsudo nano /etc/systemd/system/myproject.service
以下の内容を追加します。
ini[Unit]
Description=Gunicorn instance for Django project
After=network.target
[Service]
User=your_user
Group=your_group
WorkingDirectory=/path/to/your/project
ExecStart=/path/to/your/project/myenv/bin/gunicorn --workers 3 --bind unix:/path/to/your/project/myproject.sock myproject.wsgi:application
[Install]
WantedBy=multi-user.target
サービスを再読み込みして、Gunicornサービスを有効にします。
bashsudo systemctl daemon-reload
sudo systemctl start myproject
sudo systemctl enable myproject
7. 最後の確認
すべてが設定された後、ブラウザでyour_domain_or_IP
にアクセスし、Djangoアプリケーションが正常に動作していることを確認します。NginxはリバースプロキシとしてGunicornと連携し、Djangoアプリケーションをインターネットに公開します。
結論
これで、PostgreSQL、Nginx、Gunicornを使用したDjangoアプリケーションのセットアップが完了しました。これらの設定を行うことで、安定した本番環境でDjangoアプリケーションを運用することができます。