Django上線部署

浮東源發表於2018-12-19

django上線部署

安裝

  1. 線上上伺服器安裝虛擬開發環境(pyenv)

  2. 安裝nginx “#安裝nginx
    sudo apt-get install nginx-full -y”

  3. 安裝mysql

  4. 建立虛擬環境

  5. 在虛擬開發環境中安裝django、pymysql、pillow

  6. 虛擬環境安裝uwsgi
    pip install uwsgi

  7. 上傳專案

  8. 在專案中根目錄下建立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
    
  9. 更改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步
    
  10. 更改nginx的nginx.conf檔案(403沒許可權)

  11. 重啟nginx

  12. 回到虛擬環境目錄啟動 uwsgi
    uwsgi uconfig.ini

  13. 關閉uwsgi
    uwsgi --stop uconfig.ini

  14. 如果關閉不掉殺死程式
    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

相關文章