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パッケージをインストールできます。

pipvenvモジュールをインストールします。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.comexample.comwww.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://:8000を開くと、次の画面が表示されます。

Djangoホームページ

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

Djangoログインページ

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

Django管理パネル

デモプロジェクトが終了したら、ターミナルで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://:8000を開くと、同じ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証明書をインストールしました。質問がある場合は、下のコメントに投稿してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。