Djangoは、Pythonで記述された無料のオープンソースWeb開発フレームワークです。複雑でデータベース駆動型のPythonアプリケーションの開発に使用されます。 Pythonプロジェクトを作成するためのPythonスクリプトのセットが付属しています。これは、Windows、macOS、Linux / Unix、Solarisなど、Pythonを実行できるすべてのオペレーティングシステムで実行できます。開発者がより少ないコードを記述し、短時間で新しいWebサイトを作成するのに役立ちます。
このチュートリアルでは、Debian 11のPostgreSQLデータベースを使用してPython仮想環境でDjangoをセットアップする方法を説明します。次に、NginxをDjangoのリバースプロキシとしてインストールして構成します。
- Debian11を実行しているサーバー。
- サーバーIPで指定された有効なドメイン名。
- ルートパスワードはサーバーで構成されています。
開始する前に、システムパッケージを最新バージョンに更新することをお勧めします。次のコマンドを使用して実行できます:
apt-get update -y
すべてのパッケージが更新されたら、次のコマンドを使用して他のPythonツールとNginxパッケージをインストールします。
apt-get install python3-pip python3-dev libpq-dev curl nginx -y
必要なパッケージがすべてインストールされたら、次のステップに進むことができます。
PostgreSQLデータベースサーバーをインストールする
ここでは、PostgreSQLをデータベースバックエンドとして使用します。それでは、次のコマンドを使用してインストールしましょう:
apt-get install postgresql postgresql-contrib -y
PostgreSQLがインストールされたら、次のコマンドを使用してPostgreSQLシェルに接続します。
su - postgres
psql
次に、次のコマンドを使用してDjangoのデータベースとユーザーを作成します。
CREATE DATABASE django;
CREATE USER django WITH PASSWORD 'password';
次に、次のコマンドを使用して、いくつかの必要な役割を付与します。
ALTER ROLE django SET client_encoding TO 'utf8';
ALTER ROLE django SET default_transaction_isolation TO 'read committed';
ALTER ROLE django SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE django TO django;
次に、次のコマンドを使用してPostgreSQLシェルを終了します。
\q
exit
この時点で、PostgreSQLデータベースはDjangoの準備ができています。これで、次のステップに進むことができます。
Python仮想環境を作成する
次に、Python仮想環境を作成してDjangoプロジェクトを作成する必要があります。
まず、次のコマンドを使用して、PIPパッケージを最新バージョンにアップグレードします。
pip3 install --upgrade pip
次に、次のコマンドを使用してPIPのバージョンを確認します。
pip --version
サンプル出力:
pip 21.2.4 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)
次に、次のコマンドを使用して仮想環境パッケージをインストールします。
pip3 install virtualenv
次に、Djangoプロジェクトのディレクトリを作成し、Django仮想環境を作成します。
mkdir ~/djangoapp
cd ~/djangoapp
virtualenv djangoenv
次に、以下のコマンドを使用してDjango仮想環境をアクティブ化します。
source djangoenv/bin/activate
次に、次のコマンドを使用して、Django、Gunicorn、およびその他のパッケージをインストールします。
pip install django gunicorn psycopg2-binary
この時点で、DjangoはPython仮想環境にインストールされています。これで、次のステップに進むことができます。
Djangoのインストールと構成
Djangoはdjango-admin.pyを提供します プロジェクトを作成するためのスクリプト。次のコマンドを実行して、Djangoプロジェクトを作成できます。
django-admin.py startproject djangoapp ~/djangoapp
次に、settings.pyを編集し、データベース設定を定義する必要があります。
nano ~/djangoapp/djangoapp/settings.py
次の行をドメイン名に変更します:
ALLOWED_HOSTS = ['django.example.com', 'localhost']
デフォルトのデータベースバックエンドのコメントを解除し、PostgreSQLデータベース設定を追加します。
#DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', # } #} DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'django', 'USER': 'django', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } }
ファイルの最後に次の行を追加します。
STATIC_URL = '/static/' import os STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
ファイルを保存して閉じてから、初期データベーススキーマをPostgreSQLデータベースに移行します。
./manage.py makemigrations
./manage.py migrate
サンプル出力L:
Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying sessions.0001_initial... OK
次に、次のコマンドを使用してDjangoのスーパーユーザーアカウントを作成します。
./manage.py createsuperuser
以下に示すように、管理者のユーザー名とパスワードを設定します。
Username (leave blank to use 'root'): dadmin Email address: [email protected] Password: Password (again): Superuser created successfully.
次に、すべての静的コンテンツをディレクトリに収集します。
./manage.py collectstatic
Django開発サーバーを実行する
この時点で、Djangoがインストールおよび構成されています。これで、次のコマンドを使用してDjango開発サーバーを起動できます。
./manage.py runserver 0.0.0.0:8000
すべてが正常であれば、次の出力が得られるはずです:
Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). August 27, 2021 - 10:02:05 Django version 3.2.6, using settings 'djangoapp.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C.
次に、Webブラウザーを開き、URL http://django.example.com:8000/admin/を使用してDjangoプロジェクトにアクセスします。 。 Djangoログインページにリダイレクトされます:
管理者のユーザー名とパスワードを入力し、ログインをクリックします 。次のページにDjangoダッシュボードが表示されます:
次に、ターミナルに戻り、 CTRL + Cを押します。 Django開発サーバーを停止します。
GunicornでDjangoを確認する
次に、GunicornがDjangoにサービスを提供できるかどうかもテストする必要があります。次のコマンドでGunicornサーバーを使用してDjangoを起動できます:
gunicorn --bind 0.0.0.0:8000 djangoapp.wsgi
すべてが正常であれば、次の出力が得られるはずです:
[2021-08-27 10:04:22 +0000] [47383] [INFO] Starting gunicorn 20.1.0 [2021-08-27 10:04:22 +0000] [47383] [INFO] Listening at: http://0.0.0.0:8000 (47383) [2021-08-27 10:04:22 +0000] [47383] [INFO] Using worker: sync [2021-08-27 10:04:22 +0000] [47384] [INFO] Booting worker with pid: 47384
CTRL+Cを押してGunicornサーバーを停止します。
次に、次のコマンドを使用してPython仮想環境から非アクティブ化します。
deactivate
GunicornのSystemdサービスファイルを作成する
次に、GunicornがDjangoアプリケーションサーバーを起動および停止するためのsystemdサービスファイルを作成する必要があります。
次のコマンドでGunicornを作成できます:
nano /etc/systemd/system/gunicorn.socket
次の行を追加します:
[Unit] Description=gunicorn socket [Socket] ListenStream=/run/gunicorn.sock [Install] WantedBy=sockets.target
ファイルを保存して閉じてから、Gunicornのサービスファイルを作成します。
nano /etc/systemd/system/gunicorn.service
Djangoプロジェクトパスに一致する次の行を追加します:
[Unit] Description=gunicorn daemon Requires=gunicorn.socket After=network.target [Service] User=root Group=www-data WorkingDirectory=/root/djangoapp ExecStart=/root/djangoapp/djangoenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock djangoapp.wsgi:application [Install] WantedBy=multi-user.target
ファイルを保存して閉じてから、Djangoプロジェクトディレクトリに適切な権限を設定します:
chown -R www-data:root ~/djangoapp
次に、次のコマンドを使用してsystemdデーモンをリロードします。
systemctl daemon-reload
次に、Gunicornサービスを開始し、システムの再起動時に開始できるようにします。
systemctl start gunicorn.socket
systemctl enable gunicorn.socket
次に、以下のコマンドを使用してGunicornのステータスを確認します。
systemctl status gunicorn.socket
次の出力が得られるはずです:
? gunicorn.socket - gunicorn socket Loaded: loaded (/etc/systemd/system/gunicorn.socket; disabled; vendor preset: enabled) Active: active (listening) since Fri 2021-08-27 10:05:46 UTC; 6s ago Triggers: ? gunicorn.service Listen: /run/gunicorn.sock (Stream) CGroup: /system.slice/gunicorn.socket Aug 27 10:05:46 debian11 systemd[1]: Listening on gunicorn socket.
NginxをDjangoのリバースプロキシとして構成する
次に、Djangoにサービスを提供するためにNginxをリバースプロキシとして構成する必要があります。
これを行うには、Nginx構成ファイルを作成します。
nano /etc/nginx/conf.d/django.conf
次の行を追加します:
server { listen 80; server_name django.example.com; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /root/djangoapp; } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } }
ファイルを保存して閉じ、Nginxに構成エラーがないか確認します:
nginx -t
Output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
最後に、Nginxサービスを再起動して、変更を適用します。
systemctl restart nginx
Nginxのステータスを確認するには、次のコマンドを実行します:
systemctl status nginx
サンプル出力:
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2021-08-27 10:06:59 UTC; 6s ago Docs: man:nginx(8) Process: 47494 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 47495 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 47496 (nginx) Tasks: 2 (limit: 2341) Memory: 2.5M CPU: 49ms CGroup: /system.slice/nginx.service ??47496 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??47497 nginx: worker process Aug 27 10:06:59 debian11 systemd[1]: Starting A high performance web server and a reverse proxy server... Aug 27 10:06:59 debian11 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument Aug 27 10:06:59 debian11 systemd[1]: Started A high performance web server and a reverse proxy server.
これで、URL http://django.example.com/adminを使用してDjangoアプリケーションにアクセスできます。 。 URL http://django.example.com/を使用してDjangoアプリケーションにアクセスすることもできます 。
おめでとう!リバースプロキシとしてGunicornとNginxを使用してDjangoアプリケーションを正常にインストールしました。これで、Djangoフレームワークを使用してPythonアプリケーションのデプロイを開始できます。