下列的本教程,我能夠設定 Django、Gunicorn 和 nginx在 virtualenv 中在 AWS EC2 執行個體(執行 Ubuntu 16.04)上,然後繼續建立一個 Upstart 檔案來「守護」整個事物。
啟動 virtualenv 後,我檢查了:
- 薑戈作品- 我可以透過執行以下命令透過連接埠 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 檔案(whenmasterfolder
用於顯示所有操作發生的資料夾,myuser
是我的系統使用者(ubuntu
,因為這是 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`
我遇到了兩個問題:
- 沒有創建套接字- 檢查 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 設定檔中也存在拼字錯誤。希望這是一個錯字:)