DjangoのプロジェクトをMySQLとNginxで構築する方法|Gunicornを使ったサーバー設定

Django

このガイドでは、DjangoのプロジェクトをMySQLとNginxで構築し、Gunicornを使ったサーバー設定を行う方法を紹介します。セキュリティにも配慮した内容で進めますので、安心してサーバーを運用できます。

仮想環境の作成

まず、Djangoをインストールするために仮想環境を作成します。

cd /home/<your_username>/venv
python3 -m venv <your_project_venv>
source /home/<your_username>/venv/<your_project_venv>/bin/activate
deactivate

ここで、<your_username><your_project_venv>は適宜ご自身の環境に合わせて変更してください。

Djangoのインストール

仮想環境をアクティブにした状態でDjangoをインストールします。

pip install "django==4.2"

プロジェクトの作成

Djangoプロジェクトを作成します。ここではプロジェクト名をmy_projectとして進めます。

django-admin startproject my_project

サーバーを起動

ローカルサーバーを起動して、プロジェクトが正しく動作しているか確認します。

python manage.py runserver 0.0.0.0:8000

MySQLデータベースの設定

MySQLのインストール

MySQLをインストールし、データベースを作成します。

sudo apt update
sudo apt-get install mysql-server libmysqlclient-dev

MySQLの設定を行います。ここではデータベース名をmy_project_db、ユーザー名をmy_project_userに設定します。

sudo mysql -u root -p
CREATE DATABASE my_project_db;
CREATE USER 'my_project_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON my_project_db.* TO 'my_project_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Djangoの設定

settings.pyにMySQLの設定を追加します。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'my_project_db',
        'USER': 'my_project_user',
        'PASSWORD': 'strong_password',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

Gunicornのインストールと設定

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

pip install gunicorn

Gunicornを使ってアプリケーションを実行します。

gunicorn --workers 3 my_project.wsgi:application

Nginxのインストールと設定

Nginxの設定

次に、Nginxをインストールし、DjangoとGunicornの間でリバースプロキシを設定します。

sudo apt-get install nginx

/etc/nginx/sites-available/my_projectファイルを作成し、以下の内容を追加します。

server {
    listen 80;
    server_name my_project.com www.my_project.com;
    
    location / {
        proxy_pass http://unix:/home/<your_username>/Django/my_project/gunicorn.sock;
        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 /home/<your_username>/Django/my_project/static;
    }

    location /media/ {
        alias /home/<your_username>/Django/my_project/media;
    }
}

設定ファイルをsites-enabledにリンクします。

sudo ln -s /etc/nginx/sites-available/my_project /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
sudo systemctl status nginx

SSL設定

Let’s EncryptでSSL証明書を取得して、HTTPS通信を有効にします。

sudo certbot --nginx -d my_project.com -d www.my_project.com -m <your_email>

Gunicornの自動起動設定

Gunicornをシステムサービスとして設定することで、サーバー起動時にGunicornが自動的に起動するようにします。

まず、Gunicornのサービスファイルを作成します。

sudo vim /etc/systemd/system/gunicorn.service

以下の内容を追加します。

[Unit]
Description=Gunicorn daemon for my_project
After=network.target

[Service]
User=<your_username>
Group=www-data
WorkingDirectory=/home/<your_username>/Django/my_project
ExecStart=/home/<your_username>/venv/<your_project_venv>/bin/gunicorn --workers 3 --bind unix:/home/<your_username>/Django/my_project/gunicorn.sock my_project.wsgi:application

[Install]
WantedBy=multi-user.target

サービスをリロードし、Gunicornを起動します。

sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl status gunicorn

ファイルの権限設定

最後に、Gunicornのソケットファイルの権限を設定します。

sudo chown -R <your_username>:www-data /home/<your_username>/Django/my_project
sudo chmod -R 775 /home/<your_username>/Django/my_project

システムの確認

全てが正しく設定されているか確認します。

sudo systemctl status nginx
sudo systemctl status gunicorn

これで、DjangoプロジェクトがMySQLとNginxで構築され、Gunicornを使用してサーバーが正常に稼働しているはずです。SSLも設定され、HTTPS通信も有効になっています。

このサイトを稼働しているVPSはこちら

コメント

タイトルとURLをコピーしました