サイトアイコン ITC Media

DjangoアプリをNginxとuWSGIで動かす方法|実例付き

(最終更新月:2023年9月)

✔当記事は以下のような疑問を抱く方へ向けて作成されました。

「uWSGIって何?」

「DjangoアプリをuWSGIとNginxで動かす方法を知りたい」

「DjangoとuWSGIとNginxを利用した実際の例を見たい」

✔当記事を通じて、あなたに伝えたい事

当記事では、「uWSGI」「Nginx」の基本知識から、その設定方法や適用法、具体的な使用例まで、詳細に説明しています。

最後までぜひお読みください。

Webアプリケーションの基本

こちらでは、Webアプリケーションの基本から、Django・uWSGI・Nginxの役割についてお伝えしていきます。

これらの理解を深めることで、効率的なWebアプリケーションの構築が可能になります。

Webアプリケーションとは

Webアプリケーションは、インターネットブラウザを通じて利用するソフトウェアのこと。

特定のソフトウェアをユーザーの端末にインストールすることなく、さまざまなサービスや機能を提供できます。

たとえば以下のようなものが、Webアプリケーションの例です。

カテゴリアプリケーション名説明
オフィススイートGoogle Docs
Sheets
Slides
Googleのオンラインオフィスツール
Microsoft Office OnlineWord、Excel、PowerPointのオンラインバージョン
ソーシャルメディアFacebook世界最大のソーシャルネットワーキングサービス
Twitter140文字以内のメッセージを共有するプラットフォーム
Instagram写真や短い動画を共有するソーシャルメディア
ストリーミングサービスNetflix映画やテレビ番組のストリーミングサービス
Spotify音楽ストリーミングサービス
YouTube動画共有・視聴プラットフォーム
オンラインショッピングAmazon世界最大のオンラインマーケットプレイス
eBayオンラインオークションおよびショッピングウェブサイト
Etsy手作り品やヴィンテージ商品を販売するマーケットプレイス
クラウドストレージDropboxファイルのアップロードや共有を容易にするクラウドストレージサービス
Google DriveGoogleのクラウドストレージサービス
コラボレーションツールSlackチームのコミュニケーションを助けるメッセージングアプリ
Trelloタスクやプロジェクトの管理に使われるカンバンボードスタイルのツール
Zoomビデオ会議やウェビナーを行うためのプラットフォーム

これらのWebアプリケーションは、ブラウザを介してアクセスされるため、端末やOSに依存しない利点があります。

さらに、定期的なアップデートにより、新しい機能が追加されたり、セキュリティの問題が解消されることが一般的です。

Django, uWSGI, Nginxの役割

DjangoはPythonで書かれたWebフレームワークで、データベースの操作やURLのルーティングなど、Webアプリケーションの基本的な機能を提供します。

https://itc.tokyo/django/tutorial/

uWSGIは、DjangoアプリケーションとWebサーバーとの間のインターフェースとして機能します。

Nginxは、高性能なWebサーバーとして、外部からのリクエストを受け取り、適切なアプリケーションにルーティングする役割を持ちます。

必須パッケージの導入

こちらでは、Nginxの準備と、Pythonやその他の必要なパッケージのセットアップ方法について詳しく見ていきましょう。

これらのパッケージを適切にセットアップすることで、安定したWebアプリケーションの運用が可能です。

Nginxの準備

Nginxは、公式のリポジトリやパッケージマネージャを使用して簡単にインストールできます。

以下は、Ubuntuの場合のインストールコマンドです。

sudo apt update
sudo apt install nginx

インストールが完了したら、Nginxのサービスを起動します。

sudo systemctl start nginx

Pythonとその他必要なパッケージのセットアップ

Pythonは多くのシステムにプリインストールされていますが、最新バージョンを使用することをおすすめします。

また、pipを使用して、DjangoやuWSGIなどの必要なパッケージをインストールします。

sudo apt install python3 python3-pip
pip3 install django uwsgi

Djangoの設定

こちらでは、Djangoの設定方法について詳しく説明します。

正確な設定をにより、安全かつ効率的なWebアプリケーションの運用が可能となるのです。

仮想環境の構築

Pythonの仮想環境は、プロジェクトごとに独立した環境を提供するためのツールです。

venvを使用して仮想環境を作成し、その中で必要なパッケージをインストールします。

python3 -m virualenv venv
venv/Scripts/activate

詳しくはこちらをどうぞ。

Djangoのインストールと初期設定

仮想環境内でDjangoをインストールし、新しいプロジェクトを作成します。

pip install django
django-admin startproject myproject

uWSGIの設置

uWSGIは、Djangoアプリケーションを実行するためのアプリケーションサーバーです。

以下のコマンドでuWSGIをインストールしましょう。

pip install uwsgi

Nginxの調整

こちらでは、Nginxの設定方法について詳しくご覧いただきます。

Nginxの適切な設定をおこなうことで、高速かつ安定したWebサービスの提供が可能です。

Nginxの起動方法

Nginxのサービスは、以下のコマンドで起動、停止、再起動が可能です。

sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx

インストールがまだの方はこちらをどうぞ。

必要なファイルのインストール

Nginxの設定やモジュールの追加に必要なファイルをインストールします。

以下のコマンドで必要なファイルを取得しましょう。

sudo apt install nginx-extras

設定ファイルの作り方

Nginxの設定は、以下のどちらかで、設定を変更できます。

/etc/nginx/nginx.conf
/etc/nginx/conf.d/*.conf

詳しい方法は以下をご覧ください。

Djangoアプリとの連携

NginxとDjangoアプリケーションを連携させるためには、uWSGIを使用しましょう。

Nginxの設定ファイルに、uWSGIへのリクエストを転送する設定を追加します。

server {
    listen 80;
    server_name your_domain_or_ip;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/path/to/your/uwsgi.sock;
    }

    location /static/ {
        alias /path/to/your/django/static/files;
    }

    location /media/ {
        alias /path/to/your/django/media/files;
    }
}

プロジェクトのセキュリティ設定:Unixソケットへのアクセス方法

Unixソケットは、uWSGIとNginx間の通信に使用されます。

セキュリティを強化するために、ソケットファイルのパーミッションを適切に設定することが重要です。

chmod 660 /path/to/your/uwsgi.sock
chown www-data:www-data /path/to/your/uwsgi.sock

設定ファイルの生成

こちらでは、uWSGIの設定ファイルの生成方法について詳しく説明します。

適切な設定ファイルを作成することで、uWSGIの動作を最適化し、アプリケーションのパフォーマンスを向上させることができます。

uwsgi用iniファイルの作り方

uWSGIの設定は、ini形式のファイルでおこないます。

以下は、基本的な設定を含むサンプルのiniファイルです。

[uwsgi]
project = myproject
base = /path/to/your/project

chdir = %(base)/%(project)
home = %(base)/venv
module = %(project).wsgi:application

master = true
processes = 5

socket = %(base)/%(project)/%(project).sock
chmod-socket = 664
vacuum = true

このファイルをプロジェクトのディレクトリに保存し、uWSGIを起動する際にこの設定ファイルを指定します。

静的データの管理

Djangoでは、collectstaticコマンドを使用して、静的ファイルを一箇所に集められます。

これにより、NginxなどのWebサーバーが静的ファイルを効率的に配信できるのです。

python manage.py collectstatic

このコマンドを実行すると、STATIC_ROOTに指定されたディレクトリに静的ファイルが集められます。

Nginxの設定で、このディレクトリを静的ファイルのルートとして指定することで、静的ファイルの配信を最適化できます。

まとめ

当記事では、”Django”, “uWSGI”, “Nginx”の使い方について学習してきました。

Djangoは強力なWebフレームワークで、uWSGIを介してNginxと連携することで、高速かつ安定したWebサービスを提供できます。

Nginxは静的ファイルの配信に優れており、uWSGIはアプリケーションの動的な処理を効率的におこないます。

この3つの技術を組み合わせることで、スケーラブルでパフォーマンスの高いWebアプリケーションを構築することができます。

モバイルバージョンを終了