Djangoインストール · 5 min read · Oct 14, 2025
Ubuntu 22.04にDjango Pythonフレームワークをインストールする方法

Djangoは、動的なウェブサイトやアプリケーションを開発するために使用されるPythonフレームワークです。MVC(モデル-ビュー-コントローラー)アーキテクチャに従っています。Djangoを使用することで、基盤となるタスクのほとんどが処理されるため、開発プロセスが加速されます。
このチュートリアルでは、Ubuntu 22.04サーバーにDjangoフレームワークをインストールする方法を学びます。また、デモプロジェクトを作成してテストします。
前提条件
- Ubuntu 22.04を実行しているサーバー。
- 非ルートのsudoユーザー。
- すべてが更新されていることを確認してください。
$ sudo apt update $ sudo apt upgrade
Djangoのインストール
Djangoをインストールする方法はいくつかあります。どの方法が最適かは、開発環境の設定方法やニーズによります。各方法にはそれぞれの利点と欠点があります。これらの方法をすべて見ていきましょう。
Ubuntuリポジトリからインストール
Djangoをインストールする最も簡単な方法は、Ubuntuのリポジトリを使用することです。Ubuntu 22.04にはPython 3.10が付属しています。次のコマンドを使用して確認できます。
$ python3 -V
Python 3.10.4
次のコマンドを使用してDjangoをインストールします。
$ sudo apt install python3-django
成功したインストールを確認するために次のコマンドを実行します。
$ django-admin --version
3.2.12
Ubuntuに付属するDjangoのバージョンは、2024年までサポートされる現在のLTSバージョンです。ただし、現在のバージョンではありません。最近のリリースをインストールしたい場合は、この方法は適していません。
pipを使用してインストール
これはDjangoをインストールする最も一般的な方法です。推奨される方法は、仮想Python環境を作成することです。これにより、システムに影響を与えずにPythonパッケージをインストールできます。
pipとvenvモジュールをインストールします。venvはPythonの仮想環境を作成するために使用され、pipはPythonパッケージをインストールします。
$ sudo apt install python3-pip python3-venv
デモプロジェクトディレクトリを作成します。
$ mkdir ~/sampleproject
$ cd ~/sampleproject
次のコマンドを使用して仮想環境を作成します。sample_envを仮想環境の名前に置き換えます。
$ python3 -m venv sample_env
これにより、プロジェクトディレクトリ内にポータブル版のPythonとpipがインストールされます。プロジェクトにパッケージをインストールするには、次のコマンドを使用して環境をアクティブにする必要があります。
$ source sample_env/bin/activate
シェルプロンプトが仮想環境を反映するように変更されます。
(sample_env) navjot@django:~/sampleproject$
仮想環境がアクティブになったので、pipを使用してDjangoをインストールします。次のコマンドを実行してDjangoをインストールします。
(sample_env) $ pip install django
インストールを確認します。
(sample_env) $ django-admin --version
4.0.5
プロジェクトの要件に応じて、次の方法で異なるバージョンのDjangoをインストールできます。
(sample_env) $ pip install django==3.2.1
インストールを確認します。
(sample_env) $ django-admin --version
3.2.1
ご覧のとおり、この方法ではUbuntuリポジトリから取得したバージョンよりも新しいDjangoのバージョンがインストールされます。
仮想環境を終了するには、次のコマンドを実行します。
(sample_env) $ deactivate
開発版をインストール
pipを使用してDjangoの開発版をインストールすることもできます。これには、DjangoのGithubリポジトリから開発版を取得します。
次のコマンドを使用して~/django-devディレクトリにリポジトリをクローンします。
$ git clone https://github.com/django/django ~/django-dev
新しく作成されたディレクトリに移動します。
$ cd ~/django-dev
仮想環境を作成します。
$ python3 -m venv dev_django_env
環境をアクティブにします。
$ source dev_django_env/bin/activate
pipを使用してDjangoをインストールします。-eフラグは、バージョン管理からインストールする場合に必要な編集可能モードでインストールします。
(dev_django_dev) $ pip install -e ~/django-dev
インストールを確認します。
(dev_django_dev) $ django-admin --version
4.2.dev20220628195651
ご覧のとおり、ここでのバージョンは最新の開発版です。Djangoの開発版は本番環境には役立ちません。
サンプルプロジェクトを作成
サンプルDjangoプロジェクトを構築しましょう。サンプルプロジェクト用のディレクトリを作成します。
$ mkdir ~/dj-sample
$ cd ~/dj-sample
Pythonの仮想環境を作成します。
$ python3 -m venv sample_proj
環境をアクティブにします。
$ source sample_proj/bin/activate
Djangoをインストールします。
(sample_proj) $ pip install django
プロジェクトを構築するには、startprojectコマンドを使用する必要があります。このコマンドは、次のものを含む別のディレクトリを作成します。
- Django特有のタスクを管理するために使用される管理スクリプト
manage.py。 - プロジェクトコードを含むプロジェクトと同じ名前のディレクトリ。
現在の作業ディレクトリにプロジェクトディレクトリを作成します。そのためには、次のコマンドの最後にドット(.)を使用します。
(sample_proj) $ django-admin startproject demoproject .
次に、migrateコマンドを使用してデータベースを移行する必要があります。Djangoのマイグレーションは、モデルに加えた変更をデータベーススキーマに伝播させます。PythonはデフォルトでSQLiteデータベースを使用します。
(sample_proj) $ python manage.py migrate
次の出力が得られます。
Operations to perform:
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の管理インターフェースにアクセスするための管理ユーザーを作成します。
(sample_proj) $ python manage.py createsuperuser
ユーザー名、メールアドレス、パスワードを入力するように求められます。
Username (leave blank to use 'navjot'):
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.
開発サーバーをテスト
アプリケーションをテストする時が来ました。そのためには、Django設定のALLOWED_HOSTSディレクティブを変更する必要があります。このディレクティブは、Djangoアプリケーションにアクセスを許可されたIPアドレスとドメイン名のリストを定義します。
次のコマンドを使用して設定ファイルを開きます。
(sample_proj) $ nano demoproject/settings.py
次のエントリを見つけます。
ALLOWED_HOSTS = []
角括弧内にサーバーのIPアドレスを入力します。各エントリは引用符で囲む必要があり、複数のエントリはカンマで区切る必要があります。www.example.comを入力すると正確に一致します。ただし、.example.comはexample.com、www.example.com、およびexample.comの他のサブドメインと一致します。したがって、ドメイン名にピリオドを付けて一致させることをお勧めします。
ALLOWED_HOSTS = ['']
私たちはサーバーに一致させるためにIPアドレスを使用しました。Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。
開発サーバーをテストする前に、Djangoが動作するようにファイアウォールを構成する必要があります。Djangoはデフォルトでポート8000を使用します。Uncomplicated Firewall(UFW)を使用してポートを開きます。
(sample_proj) $ sudo ufw allow 8000
開発サーバーを起動します。
(sample_proj) $ python manage.py runserver 0.0.0.0:8000
ブラウザでURL http://を開くと、次の画面が表示されます。

URL http://に従って管理インターフェースにアクセスでき、次のログイン画面が表示されます。

以前に作成した資格情報を入力して、以下の管理パネルにログインします。

デモプロジェクトが終了したら、ターミナルでCtrl + Cを押してサーバーを閉じることができます。
Gunicornのインストールとテスト
nohupを使用して永続的なDjangoサーバーを実行
これまでのところ、Djangoのサービスは永続的ではありません。サービスを永続的にするためには、2つの方法があります。最初の方法は、nohupユーティリティを使用することです。nohupはPOSIXコマンドで、no hang upを意味します。ユーザーがログアウトしても停止しない方法でコマンドを実行するために使用されます。
ターミナルからサーバーを終了したことを確認するために、Ctrl + Cを押してください。
次のコマンドを実行してDjangoの開発サーバーを実行します。
(sample_proj) $ nohup python manage.py runserver 0.0.0.0:8000 &
これで、Djangoサーバーは手動で終了するまで実行され続けます。このコマンドはプロセスIDを提供し、別のコマンドを出力します。
[1] 42595
(sample_proj) $ nohup: ignoring input and appending output to 'nohup.out'
^C
終了するにはCtrl + Cを押します。元のDjangoサーバーは実行され続けます。ブラウザでURLを開くことで確認できます。
終了したら、プロセスを終了する必要があります。nohupコマンドは1つのプロセスIDを提供します。しかし、実際には2つのプロセスが実行されています。両方のプロセスのIDを見つけるには、次のコマンドを実行します。
(sample_proj) $ ps aux | grep manage.py
navjot 42650 3.6 1.8 47792 38168 pts/0 S 02:28 0:00 python manage.py runserver 0.0.0.0.:8000
navjot 42651 7.9 2.0 344904 41708 pts/0 Sl 02:28 0:00 /home/navjot/dj-sample/sample_proj/bin/python manage.py runserver 0.0.0.0:8000
navjot 42657 0.0 0.1 6612 2172 pts/0 S+ 02:28 0:00 grep --color=auto manage.py
ご覧のとおり、ID 42650のプロセスとID 42651のプロセスの2つが実行されています。
上記で取得したプロセスIDを使用してサーバーを終了するには、次のコマンドを実行します。
(sample_proj) $ sudo kill -9 42650 42651
Gunicornをインストール
永続的なDjangoサーバーを実行するための2番目の方法は、GunicornとNginxウェブサーバーをインストールする必要があります。GunicornはPython WSGI HTTPサーバーです。Djangoアプリケーションとインターフェースを持ち、NginxはGunicornへのリバースプロキシとして機能します。この方法には、Nginxを使用することによるセキュリティとパフォーマンスの利点があります。
Gunicornをインストールします。
(sample_proj) $ pip install gunicorn
続行する前に、Gunicornがプロジェクトを提供できるかどうかをテストする必要があります。次のコマンドを実行してGunicornを実行します。
(sample_proj) $ gunicorn --bind 0.0.0.0:8000 demoproject.wsgi
これにより、GunicornがDjangoが実行されていたのと同じインターフェースで起動します。確認するには、ブラウザでURL http://を開くと、同じDjangoホームページが表示されます。これは、Gunicornが正常に実行されていることを意味します。
テストが終了したら、ターミナルでCtrl + Cを押してGunicornを終了します。
仮想環境を非アクティブにして、通常のシェルに戻ります。
(sample_proj) $ deactivate
Gunicorn用のソケットとサービスファイルを作成
最初のステップは、Gunicornソケットファイルを作成することです。Gunicornソケットは起動時に作成され、接続をリッスンします。接続が発生すると、systemsは自動的にGunicornプロセスを開始して処理します。
Gunicornソケットファイルを作成して編集します。
$ sudo nano /etc/systemd/system/gunicorn.socket
次のコードを貼り付けます。
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。
次に、Gunicornサービスファイルを作成して編集します。
$ sudo nano /etc/systemd/system/gunicorn.service
次のコードを貼り付けます。
[Unit]
Description=django gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=navjot
Group=nginx
WorkingDirectory=/home/navjot/dj-sample
ExecStart=/home/navjot/dj-sample/sample_proj/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
demoproject.wsgi:application
[Install]
WantedBy=multi-user.target
Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。navjotをシステムユーザー名に置き換えます。nginxグループは、NginxサーバーがDjangoと通信できるようにします。
システムデーモンをリロードして、systemdファイルを更新します。
$ sudo systemctl daemon-reload
Gunicornソケットファイルを有効にして開始します。
$ sudo systemctl start gunicorn.socket
$ sudo systemctl enable gunicorn.socket
Gunicornソケットのステータスを確認します。
$ sudo systemctl status gunicorn.socket
次のような出力が得られます。
? gunicorn.socket - gunicorn socket
Loaded: loaded (/etc/systemd/system/gunicorn.socket; disabled; vendor preset: enabled)
Active: active (listening) since Thu 2022-06-30 01:43:24 UTC; 20s ago
Triggers: ? gunicorn.service
Listen: /run/gunicorn.sock (Stream)
CGroup: /system.slice/gunicorn.socket
Jun 30 01:43:24 django systemd[1]: Listening on gunicorn socket.
Gunicornサービスはまだ実行されていないことを確認できます。
$ sudo systemctl status gunicorn.service
? gunicorn.service - django gunicorn daemon
Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled)
Active: inactive (dead)
TriggeredBy: ? gunicorn.socket
ソケットアクティベーションメカニズムをテストするには、次のコマンドを実行します。
$ curl --unix-socket /run/gunicorn.sock localhost
ターミナルにDjangoホームページのHTML出力が表示されます。これにより、Gunicornがアプリケーションを提供するために開始されます。サービスのステータスを再度確認すると、現在実行中であることがわかります。
$ sudo systemctl status gunicorn.service
? gunicorn.service - django gunicorn daemon
Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2022-06-30 01:45:09 UTC; 12s ago
TriggeredBy: ? gunicorn.socket
Main PID: 42365 (gunicorn)
Tasks: 4 (limit: 2241)
Memory: 91.7M
CPU: 1.128s
CGroup: /system.slice/gunicorn.service
??42365 /home/navjot/dj-sample/sample_proj/bin/python3 /home/navjot/dj-sample/sample_proj/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock demoproject.wsgi:application
??42366 /home/navjot/dj-sample/sample_proj/bin/python3 /home/navjot/dj-sample/sample_proj/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock demoproject.wsgi:application
??42367 /home/navjot/dj-sample/sample_proj/bin/python3 /home/navjot/dj-sample/sample_proj/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock demoproject.wsgi:application
??42368 /home/navjot/dj-sample/sample_proj/bin/python3 /home/navjot/dj-sample/sample_proj/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock demoproject.wsgi:application
Jun 30 01:45:09 django systemd[1]: Started django gunicorn daemon.
Jun 30 01:45:09 django gunicorn[42365]: [2022-06-30 01:45:09 +0000] [42365] [INFO] Starting gunicorn 20.1.0
Jun 30 01:45:09 django gunicorn[42365]: [2022-06-30 01:45:09 +0000] [42365] [INFO] Listening at: unix:/run/gunicorn.sock (42365)
Jun 30 01:45:09 django gunicorn[42365]: [2022-06-30 01:45:09 +0000] [42365] [INFO] Using worker: sync
Jun 30 01:45:09 django gunicorn[42366]: [2022-06-30 01:45:09 +0000] [42366] [INFO] Booting worker with pid: 42366
.......
Nginxのインストール
最後のステップは、Nginxをインストールして構成することです。Ubuntu 22.04には古いバージョンのNginxが付属しています。最新バージョンをインストールするには、公式のNginxリポジトリをダウンロードする必要があります。
Nginxの署名キーをインポートします。
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Nginxの安定版のリポジトリを追加します。
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
システムリポジトリを更新します。
$ sudo apt update
Nginxをインストールします。
$ sudo apt install nginx
インストールを確認します。
$ nginx -v
nginx version: nginx/1.22.0
Nginxの構成
ファイル/etc/nginx/conf.d/django-gunicorn.confを作成して編集します。
$ sudo nano /etc/nginx/conf.d/django-gunicorn.conf
次のコードを貼り付けます。
server {
listen 80;
server_name server_domain_or_IP;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/navjot/dj-sample;
}
location / {
proxy_set_header Host $http_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;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
上記のファイル内のルート位置をサーバー上のディレクトリに置き換えます。
Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。
ファイル/etc/nginx/nginx.confを編集します。
$ sudo nano /etc/nginx/nginx.conf
次の行をinclude /etc/nginx/conf.d/*.conf;の前に追加します。
server_names_hash_bucket_size 64;
Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。
Nginxの構成を確認します。
$ sudo nginx -t
エラーが表示されなければ、問題ありません。
ALLOWED_HOSTSディレクティブにドメイン名を追加する必要があります。settings.pyファイルを開きます。
$ nano ~/dj-sample/demoproject/settings.py
ALLOWED_HOSTS変数の値を変更します。
ALLOWED_HOSTS = ['','django.example.com']
Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。
Gunicornソケットとサービスを再起動します。
$ sudo systemctl restart gunicorn.socket
$ sudo systemctl restart gunicorn.service
Nginxサーバーを起動します。
$ sudo systemctl start nginx
HTTPポートを開きます。使用しない場合は8000ポートを削除することもできます。
$ sudo ufw delete allow 8000
$ sudo ufw allow http
URL http://django.example.comを開いて確認します。Djangoのホームページが表示されます。
SSLのインストール
これまでのところ、Djangoアプリケーションは平文のHTTP接続で提供されています。SSL証明書で保護することを強くお勧めします。そのためには、Snapdツールを使用してCertbotツールを使用します。これは、Ubuntu 22.04システムに既にインストールされています。
コアSnapdリポジトリをインストールします。
$ sudo snap install core
Certbotをインストールします。
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
証明書を生成します。次のコマンドは、Nginxを自動的に構成します。
$ sudo certbot --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d django.example.com
最初にHTTPSポートを開きます。
$ sudo ufw allow https
ブラウザでURL https://django.example.comを訪れて確認します。
結論
これで、Ubuntu 22.04サーバーにDjango、Gunicorn、Nginxをインストールする方法を学びました。また、Djangoプロジェクトのセキュリティを強化するためにSSL証明書をインストールしました。質問がある場合は、下のコメントに投稿してください。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。