56
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Python] Linux(Apache2) で Djangoアプリを公開する

Last updated at Posted at 2018-06-06

この記事について

DjangoアプリのLinux(Apache2)へのデプロイ手順をまとめました。

開発環境で作ったものをとりあえずapacheで動かすための最小限の設定作業です。本番環境設定やセキュリティ対策、パフォーマンス対応は別途必要です。

確認した環境

  • Ubuntu 17.10 (Azure) 16.04 (AWS)
  • Amazon-Linux2 2017.12 (AWS)
  • Django 2.0.5

[ 注意 ]
RHEL(CentOS)はPythonへの対応が遅く、通常の方法でPython3が入りません。トラブルを避けるため、可能ならRHEL(CentOS)は避けましょう。インストールが必要な場合は以下のサイトが参考になります。

naritoブログ CentOS7でDjangoを動かすシリーズ
https://torina.top/detail/448/

ここでのプロジェクトの前提条件

  • OSユーザー名は「ubuntu」「ec2-user
  • プロジェクト名は「project
  • requirements.txt を作成済み
  • settings.pyに以下の設定がある。
ALLOWED_HOSTS = ['*'] 
STATIC_ROOT =  os.path.join(BASE_DIR, 'static')

Ubuntu の場合

ディレクトリ構成

/etc
    └ /apache2
        └ /sites-available
            └ /django.conf  # apache 設定ファイル(新規作成)
/home
    └ /ubuntu
        └ /project          # プロジェクト git cloneで作成(コピーでも可)
            ├─ /env         # 仮想環境 venvで作成
            └─ /static      # 静的ファイル collectstaticで作成

作業手順

####1.パッケージのインストール

sudo apt-get update
sudo apt install -y python3 python3-pip python3-setuptools python3-wheel python3-venv python3-dev apache2 apache2-dev git

####2.プロジェクトの配置

git clone https://github.com/<project>.git

※ SCP等でコピーでもOK

####3.仮想環境の作成

cd project
python3 -m venv env
source env/bin/activate

※ これより仮想環境で実行

pip install wheel
pip install -r requirements.txt
pip install mod_wsgi

####4.Django 管理コマンドの実行

python manage.py migrate         #DB定義更新
python manage.py collectstatic   #静的ファイル収集
python manage.py createsuperuser #管理ユーザー作成

※必要な操作だけでOK

####5.ディレクトリ権限の変更

chmod 755 /home/ubuntu

※データベースにsqlite3を使う場合は、ディレクトリとファイルに書き込み権限を与える

chmod 777 /home/ubuntu/project
chmod 777 /home/ubuntu/project/db.sqlite3

####6.apacheの設定

#####6-1.mod_wsgiのパスを確認

mod_wsgi-express module-config
... 以下、実行結果
LoadModule wsgi_module "/home/ubuntu/project/env/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
WSGIPythonHome "/home/ubuntu/project/env"

実行結果の「LoadModule wsgi_module "パス"」をコピーしておき、次のdjango.confの最初の行で使う

#####6-2 設定ファイル作成

sudo vim /etc/apache2/sites-available/django.conf

以下の内容を入力して保存

django.conf
LoadModule wsgi_module /home/ubuntu/project/env/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

WSGIPythonHome /home/ubuntu/project/env
WSGIScriptAlias / /home/ubuntu/project/project/wsgi.py
WSGIPythonPath /home/ubuntu/project:/home/ubuntu/project/env/lib/python3.6/site-packages

<Directory /home/ubuntu/project/project>
  <Files wsgi.py>
    Require all granted
  </Files>
</Directory>

Alias /static/ /home/ubuntu/project/static/
<Directory /home/ubuntu/project/static>
  Require all granted
</Directory>

[注意] Pythonのバージョン、ユーザー名、プロジェクト名、mod_wsgiのパスは環境で異なる

#####6-3.デフォルトの設定ファイル場所を変更する

sudo a2dissite 000-default
sudo a2ensite django
sudo systemctl restart apache2
sudo systemctl enable apache2

これで作業は完了。ブラウザより結果を確認する。

7.うまくいかないとき

以下の確認方法がある

sudo cat /var/log/apache2/error.log #エラーログ表示
systemctl status apache2            #apache2ステータスチェック
apachectl configtest                #confの文法チェック

Amazon-Linux 2 の場合

ディレクトリ構成

/etc
    └ httpd
        └ conf.d
            └ django.conf  # apache 設定ファイル(新規作成)

/home
    └ ec2-user
        └ project         # プロジェクト(git clne か scpで作成) 
            ├─ env       # 仮想環境 (venvで作成)
            └─ static    # 静的ファイル (collectstaticで作成)

作業手順

####1.パッケージのインストール

sudo yum update -y 
sudo yum install -y python3 python3-pip python3-setuptools python3-wheel python3-devel httpd-devel gcc git

####2.プロジェクトの配置

git clone https://github.com/<project>.git

※ SCP等でコピーでもOK

####3.仮想環境の作成

cd project
python3 -m venv env
source env/bin/activate

※ これより仮想環境で実行

pip install -r requirements.txt
pip install mod_wsgi

####4.Django 管理コマンドの実行

python manage.py migrate         #DB定義更新
python manage.py collectstatic   #静的ファイル収集
python manage.py createsuperuser #管理ユーザー作成

※必要な操作だけでOK

####5.ディレクトリ権限の変更

chmod 755 /home/ec2-user

※データベースにsqlite3を使う場合は、ディレクトリとファイルに書き込み権限を与える

chmod 777 /home/ec2-user/project
chmod 777 /home/ec2-user/project/db.sqlite3

####6.apacheの設定

#####6-1.mod_wsgiのパスを確認

mod_wsgi-express module-config
... 以下、実行結果
LoadModule wsgi_module "/home/ec2-user/project/env/lib64/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so"
WSGIPythonHome "/home/ec2-user/project/env"

実行結果の「LoadModule wsgi_module "パス"」をコピーしておき、次のdjango.confの最初の行で使う

#####6-2 設定ファイル作成

sudo vim /etc/httpd/conf.d/django.conf

以下の内容を入力して保存

django.conf
LoadModule wsgi_module "/home/ec2-user/project/env/lib64/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so"

WSGIPythonHome "/home/ec2-user/project/env"
WSGIScriptAlias / /home/ec2-user/project/project/wsgi.py
WSGIPythonPath /home/ec2-user/project:/home/ec2-user/project/env/lib/python3.7/site-packages

<Directory /home/ec2-user/project/project>
  <Files wsgi.py>
    Require all granted
  </Files>
</Directory>

Alias /static/ /home/ec2-user/project/static/
<Directory /home/ec2-user/project/static>
  Require all granted
</Directory>

[注意] Pythonのバージョン、ユーザー名、プロジェクト名、mod_wsgiのパスは環境で異なる

#####6-3.サービス再起動

sudo systemctl restart httpd
sudo systemctl enable httpd

これで作業は完了。ブラウザより結果を確認する。

7.うまくいかないとき

以下の確認方法がある

sudo cat /var/log/httpd/error_log  #エラーログ表示
systemctl status httpd             #apache2ステータスチェック
apachectl configtest               #confの文法チェック
56
55
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?