開発運用

Django PostgreSQL Nginx Gunicorn 設定

DjangoアプリケーションをPostgreSQL、Nginx、およびGunicornを使用してセットアップする手順を完全かつ包括的に解説します。この手順では、Djangoのインストールから、データベースの設定、Webサーバーの構成、そして最終的なデプロイまでのすべてのステップを順を追って説明します。

1. 必要なソフトウェアのインストール

まず、Djangoアプリケーションを動作させるために必要なソフトウェアをインストールします。

1.1 PostgreSQLのインストール

PostgreSQLは、Djangoのデフォルトのデータベースとして使用されます。UbuntuでPostgreSQLをインストールするには、以下のコマンドを実行します。

bash
sudo apt update sudo apt install postgresql postgresql-contrib

インストール後、PostgreSQLサービスが自動的に開始されます。次に、PostgreSQLのデータベースを作成するために以下のコマンドを実行します。

bash
sudo -u postgres psql

PostgreSQLシェルにアクセスしたら、新しいデータベースとユーザーを作成します。

sql
CREATE 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をインストールします。

bash
sudo apt install python3 python3-pip python3-dev libpq-dev

次に、仮想環境を作成し、Djangoと必要なパッケージをインストールします。

bash
python3 -m venv myenv source myenv/bin/activate pip install django psycopg2 gunicorn

1.3 Nginxのインストール

NginxはWebサーバーとして使用します。次のコマンドでインストールします。

bash
sudo apt install nginx

インストール後、Nginxを起動して、サービスが自動的に開始されるように設定します。

bash
sudo systemctl start nginx sudo systemctl enable nginx

2. Djangoプロジェクトの作成

次に、Djangoのプロジェクトを作成します。

bash
django-admin startproject myproject cd myproject

2.1 設定ファイルの変更

settings.pyを開き、データベース設定をPostgreSQLに変更します。

python
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'myprojectdb', 'USER': 'myprojectuser', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '5432', } }

これで、DjangoアプリケーションはPostgreSQLデータベースに接続する準備が整いました。

2.2 マイグレーションの実行

Djangoのデータベースにテーブルを作成するために、マイグレーションを実行します。

bash
python manage.py migrate

これで、データベースの準備が整いました。

3. Gunicornの設定

GunicornはDjangoアプリケーションを実行するためのWSGIサーバーです。以下のコマンドでGunicornを起動します。

bash
gunicorn --workers 3 myproject.wsgi:application

このコマンドは、3つのワーカープロセスでDjangoアプリケーションを実行します。

4. Nginxの設定

Djangoアプリケーションをインターネットに公開するために、Nginxをリバースプロキシとして設定します。まず、Nginxの設定ファイルを作成します。

bash
sudo nano /etc/nginx/sites-available/myproject

以下の内容を設定ファイルに追加します。

nginx
server { 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/; } }

設定ファイルを保存したら、シンボリックリンクを作成して、サイトを有効にします。

bash
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled

Nginxの設定をテストして、問題がないか確認します。

bash
sudo nginx -t

テストが成功したら、Nginxを再起動して設定を反映させます。

bash
sudo systemctl restart nginx

5. 静的ファイルとメディアファイルの設定

Djangoで静的ファイルとメディアファイルをNginxに配信させるために、settings.pyで設定を行います。

python
STATIC_URL = '/static/' STATIC_ROOT = '/path/to/your/project/static/' MEDIA_URL = '/media/' MEDIA_ROOT = '/path/to/your/project/media/'

次に、静的ファイルを収集します。

bash
python manage.py collectstatic

これで、Nginxが静的ファイルとメディアファイルを正しく配信できるようになります。

6. サービスの設定

Gunicornをバックグラウンドで実行するために、systemdサービスを作成します。/etc/systemd/system/myproject.serviceというファイルを作成します。

bash
sudo 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サービスを有効にします。

bash
sudo 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アプリケーションを運用することができます。

Back to top button