レンタルサーバーにDjangoのアプリを公開した際に実施したことのメモになります
〇前提
・公開用のDjangoアプリ作成済み。
・レンタルサーバーでは、pythonが利用できること。
手順
①Djangoプロジェクトをサーバーにアップロード
公開サーバーにプロジェクトフォルダを移動させます。
やり方はなんでもいいですが、私はzip化して移動させています。
#開発環境で実行
cd projectfolda
zip -r project.zip .
#公開サーバーにzipファイルを移行後、公開サーバーで実行
unzip project.zip
②仮想環境の作成
公開したいディレクトリで下記のように仮想環境を作成します。
python3 -m venv venv
尚、私の環境ではデフォルトのpythonのバージョンが開発環境と異なるバージョンだったため、
明示的にpythonのフォルダを指定して実行しました。
※デフォルトの場合pythonのバージョン不足で、
③パッケージインストールにて一部パッケージがインストールが出来ませんでした。(一敗)
/opt/alt/python38/bin/python3.8 -m venv venv
仮想環境を作衛したら、アクティブ化します。
source venv/bin/activate
③パッケージのインストール
必要なライブラリをインストールします。
開発環境のライブラリを一括でインストールするには、
次のコマンドを用いて利用しているライブラリをテキスト化すると便利です。
#開発環境で実行
pip freeze > requirements.txt
#公開環境で実行
pip install -r requirements.txt
④Gunicornを起動
project_nameは、適宜書き換えます。
pip install gunicorn
gunicorn project_name.wsgi:application
⑤Apache のリバースプロキシ設定
.htaccessファイルを作成 or 追記します。
私の場合は、ドメイン名/app/へのアクセスを、
/app/配下のDjangoにリダイレクトしたかったので、
下記のような内容をドメイン名配下に記載しました。
# Django アプリ用のリライトルール
RewriteEngine On
# /app/ のルートリクエストを Django に送信
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} ^/app/?$
RewriteRule ^app/?$ http://localhost:8000/ [P,L]
</IfModule>
⑥静的ファイルの収集
python manage.py collectstatic
躓いた箇所
・手順内で記載したpythonのバージョン
・settings.pyにlocalhostを記載していなかったため、
Gunicornに届いた後にはじかれてしまった。
ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com', 'localhost']
・CSRFの記述がなかったため、画面内で遷移しようとするとエラーになった。
settings.pyに追記した内容。
CSRF_TRUSTED_ORIGINS = [
'https://toaruse.com',
'https://www.toaruse.com',
]
・Gunicorn起動後、時間経過で落ちてしまう。
バックグラウンド起動にすることで、プロセスが終了しないようにした。
nohup ./venv/bin/gunicorn --workers 3 --bind 0.0.0.0:8000 project_name.wsgi:application &
ログは下記で確認可能。
cat nohup.out