Django+uwsgi+nginx部署
第一次發知乎有什麼不對的請指出謝謝
環境: 1.阿里雲 ubuntu 64位 python3(我的是VENV)
2.已經可以運行的django項目
3.安裝nginx uwsgi 和虛擬環境VENV
目錄:我把我的django放到了/var/www/html/project
首先:搭建VENV 安裝框架
1.安裝virtualenv #pip3 install virtualenv
2.#cd /var/www/html/ 然後#virtualenv VENV
3.source VENV/bin/activate
4.安裝django,#pip install django
檢查能否運行django項目
cd /var/www/html/project
python manage.py 0.0.0.0:8080
注意:settings.py里的allow_host要[*]
第二:下載uwsgi
1.#apt-get install uwsgi
2.測試 client<=>uwsgi<=>django
3.uwsgi --http :8080 --chdir /var/www/html/project --wsgi project.wsgi
4.登陸8080埠的網站 看看能不能打開 只要能打開就行
第三:下載nginx
1.#apt-get install uwsgi
2.vi /etc/nginx/sites-enabled/default
我的是這樣的:
upstream django{
server 127.0.0.1:8080;
}
server{
listen 80;
charset utf-8;
client_max_body_size 75M;
server_name _; #有域名這裡填域名
location /static {
alias /var/www/staticfiles;#這是我的靜態文件 我在manage.py collect什麼之類的打包到一個地方
}
location / {
root /var/www/yuhuicompany; #項目名
uwsgi_pass 127.0.0.1:8080;
include /var/www/html/yuhuicompany/uwsgiparams;#自己創建uwsgi_params
}
}
保存:
創建uwsgi_params
裡面是這樣的:
-----------------------------------------------------------------------
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
-------------------------------------------------------------------
複製就行了
然後restart nginx /etc/init.d/nginx restart
打開你的網站 看到502就對了 因為你的uwsgi沒啟動
因為每次啟動uwsgi 都要一個串命令 所有放到文件中 放的地方你隨意 我放到/var/www/html/project
創建個project.ini
-------
[uwsgi]
socket = 127.0.0.1:8080
chdir = /var/www/html/project
module = project.wsgi
home = /var/www/VENV
master = true
processes = 1
threads = 2
max-requests = 6000
daemonize = /var/www/html/project/run.log
home是虛擬機的路徑
沒有的文件都自己創建 run.log的好處是你可以看有什麼錯誤然後去改
保存後就 uwsgi --init project.ini
然後他會後台自動啟動 最好看看埠號有沒有佔用 就就行了lsof -i:8080
然後就沒了。最後有很多人會提問debug變成false後static路徑怎麼搞啊 這個我也難了我4-5天 可能有些高手就會嘲笑我 哈哈 我就是比較菜 新手來的
我分享下我的經驗:
首先我們知道project裡面的settings.py除了自己STATICFILESDIRS 之外還會要創建多一個STATICFILES_ROOT =你自己通過manage.py collectstatic指定的靜態文件
然後你就要在nginx導入這些靜態文件 上面都有 這樣就可以解決靜態文件404的問題
推薦閱讀: