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

※本サイトにはプロモーション・広告が含まれています。

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

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

「uWSGIって何?」

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

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

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

  • DjangoをNginxで公開するための基本
  • Django・uWSGI・Nginxの設定方法とその適用法
  • DjangoとuWSGIとNginxの実用例

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

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

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

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

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

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

  • Webアプリケーションとは
  • Django・uWSGI・Nginxの役割

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アプリケーションの基本的な機能を提供します。

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

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

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

必須パッケージの導入

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

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

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

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アプリケーションの運用が可能となるのです。

  • 仮想環境の構築
  • Djangoのインストールと初期設定
  • uWSGIの設置

仮想環境の構築

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の起動方法
  • 必要なファイルのインストール
  • 設定ファイルの作り方
  • Djangoアプリとの連携

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ファイルの作り方

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アプリケーションを構築することができます。

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