Django /ˈdʒæŋɡoʊ/ は、Python で実装された Web アプリケーションフレームワークで、model-view-controller デザインパターンに緩やかに従っています。また、ファイルやデータのモデルにいたるまで、Python が一貫して用いられています。
Apache (httpd) Web サーバーに Django アプリをデプロイする際の設定について備忘録としてまとめました。
OS | |||
CentOS Linux release 8.0.1905 (Core) | x86_64 |
使用するサンプル
Python は venv の仮想環境 myenv で使用しています。python, django のバージョンは下記の通りです。
[bitwalk@centos-pc ~]$ source $HOME/myenv/bin/activate (myenv) [bitwalk@centos-pc ~]$ python -V Python 3.6.8 (myenv) [bitwalk@centos-pc ~]$ python -m django --version 3.0 (myenv) [bitwalk@centos-pc ~]$
Django プロジェクト django_app を作成し、アプリケーション hello を作成しました。
(myenv) [bitwalk@centos-pc ~]$ django-admin startproject django_app (myenv) [bitwalk@centos-pc ~]$ cd django_app (myenv) [bitwalk@centos-pc django_app]$ ls django_app manage.py (myenv) [bitwalk@centos-pc django_app]$ python manage.py startapp hello (myenv) [bitwalk@centos-pc django_app]$ ls django_app hello manage.py (myenv) [bitwalk@centos-pc django_app]$
単純なサンプルなので、コーディングの内容について詳しくは説明しませんが、その代わり下記からダウンロードできるようにしておきました。
django_app.zip |
※ サンプルに含まれている fabicon.ico は、ICONFINDER から Emoticon, good, thumbup icon をダウンロードして ico 形式に変換したものです。配布ライセンスは元の画像に合わせて Creative Commons (Attribution-Noncommercial 3.0 Unported) に従っています(商用利用不可)。
開発用サーバーによる確認
サンプルが準備できたところで、開発サーバー上で動作確認します。
(myenv) [bitwalk@centos-pc django_app]$ python manage.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. December 13, 2019 - 13:08:06 Django version 3.0, using settings 'sample.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
このサンプルは文字列を表示するだけで、データベースにアクセスする機能はありません。
動作確認したところで、アプリ毎に定義されている static フォルダーを下記のように collectstatic コマンドで一箇所にまとめます。これは本番環境の Web サーバーにデプロイする際に必要な処理になります。
(myenv) [bitwalk@centos-pc django_app]$ python manage.py collectstatic You have requested to collect static files at the destination location as specified in your settings: /home/bitwalk/django_app/static This will overwrite existing files! Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel: yes 2 static files copied to '/home/bitwalk/django_app/static', 130 unmodified. (myenv) [bitwalk@centos-pc django_app]$ ls static admin hello (myenv) [bitwalk@centos-pc django_app]$
tree コマンドで、django_app ディレクトリの構造を確認すると下記のようになります。
[bitwalk@centos-pc ~]$ tree django_app django_app ├── db.sqlite3 ├── django_app │ ├── __init__.py │ ├── __pycache__ ... (省略) ... │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── hello │ ├── __init__.py │ ├── __pycache__ ... (省略) ... │ ├── admin.py │ ├── apps.py │ ├── migrations ... (省略) ... │ ├── models.py │ ├── static │ │ └── hello │ │ ├── css │ │ │ └── style.css │ │ └── favicon.ico │ ├── templates │ │ └── hello │ │ └── index.html │ ├── tests.py │ ├── urls.py │ └── views.py ├── manage.py └── static ├── admin ... (省略) ... └── hello ├── css │ └── style.css └── favicon.ico 28 directories, 160 files [bitwalk@centos-pc ~]$
Apache (httpd) にデプロイ
Apache (httpd) は参考サイト [1] に従って、既に CentOS 8 のサーバーにインストールされて稼働しているものとします。
mod_wsgi のインストール
Apache で Django のアプリケーションを実行するには WSGI モジュールをインストールする必要があります。CentOS 8 では Python 3 用のモジュール python3-mod_wsgi が利用できますので、これをインストールします。
[bitwalk@centos-pc ~]$ sudo dnf install python3-mod_wsgi ... (省略) ... 依存関係が解決しました。 ================================================================================ パッケージ アーキテクチャー バージョン リポジトリ サイズ ================================================================================ Installing: python3-mod_wsgi x86_64 4.6.4-3.el8 AppStream 2.5 M トランザクションの概要 ================================================================================ インストール 1 パッケージ ダウンロードサイズの合計: 2.5 M インストール済みのサイズ: 9.5 M これでよろしいですか? [y/N]: y パッケージのダウンロード中です: ... (省略) ... インストール済み: python3-mod_wsgi-4.6.4-3.el8.x86_64 完了しました! [bitwalk@centos-pc ~]$
/etc/httpd/conf.modules.d/ に Apache の設定ファイルが保存されています。
[bitwalk@centos-pc ~]$ cat /etc/httpd/conf.modules.d/10-wsgi-python3.conf
# NOTE: mod_wsgi_python3 can not coexist in the same apache process as
# mod_wsgi (python2). Only load if mod_wsgi is not already loaded.
<IfModule !wsgi_module>
LoadModule wsgi_module modules/mod_wsgi_python3.so
</IfModule>
[bitwalk@centos-pc ~]$
django.conf の作成
下記の内容のファイルを作成して、ルート権限で /etc/httpd/conf.d 以下に(例えば)django.conf というファイル名で保存します。
WSGIPythonHome /home/bitwalk/myenv WSGIPythonPath /home/bitwalk/django_app <VirtualHost *:8080> #ServerName django.example.com DocumentRoot /home/bitwalk/django_app/ WSGIScriptAlias / /home/bitwalk/django_app/django_app/wsgi.py <Directory /home/bitwalk/django_app/django_app> <Files wsgi.py> Require all granted </Files> </Directory> Alias /static /home/bitwalk/django_app/static <Directory /home/bitwalk/django_app/static> Require all granted </Directory> </VirtualHost>
httpd.conf の編集
作成した django.conf では、VirtualHost を利用してポート 8080 で Django のアプリケーションを稼働させようとしています。そのため /etc/httpd/conf/httpd.conf をルート権限で編集し、ポート 8080 も Listen するようにします。
... (省略) ... # # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the# directive. # # Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses. # #Listen 12.34.56.78:80 Listen 80 Listen 8080 ... (省略) ...
ファイアウォールの設定
LAN 内の他の PC からアクセスできるように、ポート 8080 をファイアウォールの「public」ゾーンに追加します。
[bitwalk@centos-pc ~]$ sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp success [bitwalk@centos-pc ~]$ sudo firewall-cmd --reload success [bitwalk@centos-pc ~]$ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: enp2s0 sources: services: cockpit dhcpv6-client http https postgresql samba ssh ports: 3389/tcp 8787/tcp 3838/tcp 5432/tcp 8080/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [bitwalk@centos-pc ~]$
SELinux の設定
[bitwalk@centos-pc ~]$ sudo setsebool -P httpd_read_user_content 1
[sudo] bitwalk のパスワード:
[bitwalk@centos-pc ~]$
SELinux の設定は、実用的な Django アプリの場合、これだけでは十分でないかもしれません。SELinux のアラームを監視して対処します。なお 8080 以外のポート番号を使う場合には「sudo semanage port -a -t http_port_t -p tcp ポート番号」を実行する必要があると思います。
httpd サービスの再起動
httpd のサービスを再起動します。
[bitwalk@centos-pc ~]$ sudo systemctl restart httpd
[sudo] bitwalk のパスワード:
[bitwalk@centos-pc ~]$
Windows PC からアクセス
LAN 内の Winodws 上、Microsoft Edge で http://192.168.0.25:8080/hello/ へアクセスしたところ、下図の通り、無事アクセスすることができました。
参考サイト
- bitWalk's: [CentOS 8] httpd の設定
- バーチャルホストの例 - Apache HTTP サーバ バージョン 2.4
- TCPやUDPにおけるポート番号の一覧 - Wikipedia
にほんブログ村
0 件のコメント:
コメントを投稿