Django上線部署
django上線部署
安裝
-
在線上伺服器安裝虛擬開發環境(pyenv)
-
安裝nginx
-
安裝mysql
-
建立虛擬環境
-
在虛擬開發環境中安裝django、pymysql、pillow
-
虛擬環境安裝uwsgi
pip install uwsgi -
上傳專案
-
在專案中根目錄下建立uconfig.ini的檔案 程式碼在下方
[uwsgi]# 外部訪問地址,可以指定多種協議,現在用http便於除錯,之後用socket # socket = 0.0.0.0:8000 # uwsgi的監聽埠 # 指向專案根目錄 chdir = /var/www/xxx # wsgi.py所在位置 wsgi-file = 【專案名(有wsgi.py的檔案)】/wsgi.py module = 【專案名】.wsgi # 虛擬開發環境位置 virtualenv = /root/.pyenv/versions/env3.6.6/ #plugins = python master = true # 處理器數 processes = 1 # 執行緒數 threads = 2 執行: uwsgi uconfig.ini
-
更改nginx的default檔案程式碼在下方
cd /etc/nginx/sites-available
sudo cp default www.***.com
sudo vim www.***.com
server {
listen 80;
server_name www.fdy1995.top;
location / {
# 轉發埠必須和uconfig.ini中socket埠一致
uwsgi_pass 127.0.0.1:8000;
include uwsgi_params;
uwsgi_param UWSGI_SCRIPT xxx.wsgi;
# 專案的根目錄
uwsgi_param UWSGI_CHDIR /var/www/xxx;
}
# 靜態資源所在位置
location /static {
alias /var/www/xxx/static/;
}
}cd ../ cd sites-enabled/ sudo ln -s ../sites-available/www.xxx.com www.xxx.com 重啟nginx服務 sudo service nginx restart cd /var/www mkdir xxx(專案根目錄資料夾) 把專案拉進去(manage.py所在資料夾的所有檔案) 在xxx目錄進入虛擬環境:pip install uwsgi 在專案中根目錄下建立uconfig.ini的檔案,配置見第8步
-
更改nginx的nginx.conf檔案(403沒許可權)
-
重啟nginx
-
回到虛擬環境目錄啟動 uwsgi
uwsgi uconfig.ini -
關閉uwsgi
uwsgi --stop uconfig.ini -
如果關閉不掉殺死程序
ps -ef | grep uwsgi
Sudo kill -9 程序號(-9強制)
或者:sudo pkill -f uwsgi -9
問題描述:
django admin沒有樣式
admin管理頁面找不到base.css,dashboard.css檔案
解決辦法:
方法一
在settings檔案中設定STATIC_ROOT目錄,該目錄不能在STATICFILES_DIRS中.
然後,執行命令
python manage.py collectstatic
執行後,django會將STATICFILES_DIRS下的所有檔案以及admin所需要用到的js,css,image檔案全都放到STATIC_ROOT目錄下.
例如, 像下面這樣寫:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'collectstatic')
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]
簡單描述一下這幾個變數的意思
STATIC_URL: 當訪問什麼樣的網址時, 按照訪問靜態檔案的方式去查詢檔案.
STATICFILES_DIRS: 當訪問靜態檔案是, 會在每個app中的static目錄中查詢, 然後再從STATICFILES_DIRS設定的路徑列表中逐一查詢.
STATIC_ROOT: 當執行python manage.py collectstatic時, 收集的靜態檔案放在該目錄下.
更多可參考: http://python.usyiyi.cn/translate/django_182/ref/settings.html
此刻axf下就會多出一個collectstatic的靜態資原始檔目錄
default程式碼更改為
server{
listen 80; # 伺服器監聽埠
server_name 192.168.1.132; # 這裡寫你的域名或者公網IP
location / {
uwsgi_pass 127.0.0.1:8000; # 轉發埠,需要和uwsgi配置當中的監聽埠一致
include uwsgi_params; # 匯入uwsgi配置
uwsgi_param UWSGI_PYTHON /home/xlg/axf/venv; #Python直譯器所在的路徑(這裡為虛擬環境)
uwsgi_param UWSGI_CHDIR /home/xlg/axf/;# 自己建立的目錄 專案根目錄
}
location /static{
alias /home/xlg/axf/collectstatic/;
}
}
訪問可能會出現403沒有許可權的問題
解決辦法
找到nginx.conf檔案的位置
將第一行的程式碼進行修改
#user www-data;
user root;
或者將 www-data更改許可權
此刻就可以訪問了
10.0.11.11/static/img/home.img