続くこのチュートリアル、Django、Gunicorn、nginxをセットアップすることができました仮想環境内AWS EC2 インスタンス (Ubuntu 16.04 を実行) 上で、全体を「デーモン化」するための Upstart ファイルを作成します。
virtualenv をアクティブ化した後、次のことを確認しました。
- Djangoは動作する- 以下を実行することで、ポート 8000 経由で Django プロジェクトにアクセスできました。
./manage.py runserver 0.0.0.0:8000
訪問すると、mydomain.com:8000
デフォルトの Django ページが迎えてくれました。
- Gunicornは動作し、Djangoアプリを提供することができます- プロジェクトのフォルダーからこれを実行すると、Django アプリにアクセスできました (
projectname
実際のプロジェクト名に置き換えてください)。
gunicorn --bind 0.0.0.0:8000 projectname.wsgi:application
今回訪問するとmydomain.com:8000
またウェルカムページが表示され、/admin
URLの末尾に追加するとログイン画面が表示されるようになった。マイナスCSS (Gunicorn は静的 CSS ファイルを認識しないため、チュートリアルによれば今のところは問題ありません)。
ここから、次の systemd ファイルの作成に進みました ( は、masterfolder
すべてのアクションが実行されるフォルダーを示すために使用され、これは Ubuntu インスタンスであるため、myuser
システム ユーザー ( ) です)。ubuntu
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=myuser
Group=www-data
WorkingDirectory=/home/myuser/masterfolder
ExecStart=/home/myuser/masterfolder/myvirtualenv/bin/gunicorn --workers 3 --bind unix:/home/myuser/masterfolder/projectname.sock$
[Install]
WantedBy=multi-user.target`
私は2つの問題に遭遇しました:
- ソケットは作成されていません- nginxのログファイルを確認するとき外側も内側もvirtualenv (なぜ同じなのかはよくわかりませんが) でも同じエラーが発生しました:
2017/01/17 15:12:43 [crit] 12403#12403: *3 connect() to unix:/home/myuser/masterfolder/projectname.sock failed (2: No such file or directory) while connecting to upstream
ここで、を実行したときに作成されるmasterfolder
フォルダー階層と一致していることに注意してください。django-admin
startproject
masterfolder/ ├── manage.py └── projectname ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
中を見るとmasterfolder
確かに.sockファイルが全くない、という名前のものは気にしないでくださいprojectname.sock
。
- そのため、nginxは動作しているにもかかわらず、502エラーが発生します。-
私のファイルは次のようetc/nginx/sites-availabe/projectname
になります:
server {
listen 80;
server_name www.mydomain.com mydomain.com MYIPADDRESS;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/masterfolder/projectname;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/myuser/mastefolder/projectname.sock;
}
}
もちろん、正しくシンボリックリンクされており、修正を試みるたびに、次のコマンドを実行します。
sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl restart nginx
このインフラストラクチャ全体がどのように連携して動作するかを理解するのに、何か基本的なことが欠けているように感じます。もちろん、プロセスに関する私の理解に誤りがあれば、遠慮なくご指摘ください。
答え1
ディレクトリの権限を確認しましたかmasterfolder
?
権限は である必要がありますmyuser:www-data
。
また、nginx 設定ファイルにスペルミスがあります。タイプミスであることを願います:)