1. 程式人生 > >Django專案上線:雲伺服器+Django+nginx+uwsgi

Django專案上線:雲伺服器+Django+nginx+uwsgi

問題:在本地專案已經完成,現在我們部署到雲伺服器上,筆者因為是學生黨,所以使用了免費的華為雲,當然網上還有很多其他的可以選擇

一、雲伺服器的使用

     1,連線雲伺服器,雲伺服器自帶遠端連線(不好用)

          使用者名稱root,密碼是自己申請時候建立的

     3,安裝xftp,方便往雲伺服器上傳輸必要檔案

二,往雲伺服器上安裝必要的環境

     (1) 華為雲參考

               需要安裝以下服務:

                 1,JDK                  2,mysql(安裝你需要的資料庫,這裡使用5.7)                  3,

虛擬環境                  4,python相應版本(我使用3.5)                  5,nginx

    (2)我們先將mysql資料庫整個遷移到雲伺服器

                 注意:在雲伺服器的mysql使用者名稱,密碼與你在本地伺服器的一致

mysqldump -u username -p --all-databases > all.sql  #備份

#然後找到這個備份檔案將它通過xftp複製到雲伺服器上

#然後在xshell上登入後,恢復資料庫

mysql -u username -p  < all.sql  #恢復

                登入之後就可以看到資料了

     (3)切換到虛擬環境之下,安裝專案需要的module

              以下是我的專案需要的模組,供參考

Package        Version 
-------------- --------
asn1crypto     0.24.0  
cffi           1.11.5  
cryptography   2.3.1   
Django         1.11.7  
django-tinymce 2.7.0   
idna           2.7     
Pillow         5.2.0   
pip            18.0    
pycparser      2.19    
PyMySQL        0.9.2   
pytz           2018.5  
setuptools     40.4.3  
six            1.11.0  
uWSGI          2.0.17.1
wheel          0.31.1  

三,專案操作

Django專案結構如下:

此專案使用Django1.11.7,python3.5

axfhz1805/
├── app
├── axfhz1805
│   ├── __init__.py
│   ├── __pycache__
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── static
|── templates
├── manage.py
├── uwsgi.ini  #uwsgi配置檔案
├── uwsgi.log  #uwsgi日誌檔案
└── uwsgi.pid  #uwsgi程序檔案

      (1)uwsgi.ini——自己建立的uwsgi配置檔案(當然還可以是其他格式的)參考uwsgi配置

[uwsgi]
# 使用nginx連線時 使用
socket=127.0.0.1:8010
# 直接作為web伺服器使用
#http=127.0.0.1:8010
# 配置工程目錄
chdir=/home/jgh/project/axfhz1805
# 配置專案的wsgi目錄。相對於工程目錄
wsgi-file=axfhz1805/wsgi.py
#virtualenv =/home/jgh/vir/py3.5/bin/python  #設定虛擬環境路徑,不設定的話在會找不到django

#配置程序,執行緒資訊
processes=4
threads=2
enable-threads=True
master=True
#程序記錄
pidfile=uwsgi.pid
#日誌檔案
daemonize=uwsgi.log

      (2)切換到虛擬環境下,啟動uwsgi

uwsgi --ini /home/jgh/project/axfhz1805/uwsgi.ini


以下結果:說明成功
[uWSGI] getting INI configuration from /home/jgh/project/axfhz1805/uwsgi.ini

      (3)新建nginx配置檔案

              (他有自己預設的配置檔案,直接修改容易出錯,為了不直接修改他的預設配置檔案,我們可以自己建立配置檔案)

              配置檔案放在:/usr/share/nginx/之下,不然找不到

               配置內容如下:

user  root;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
   #這個是引入他的一些預設配置,可以註釋掉
   #include /etc/nginx/conf.d/*.conf;

   server {
     listen       80;
     #你的雲伺服器的公網ip地址
     server_name  10.31.160.194;

     charset utf-8;
     #你的專案存放的位置,不包括專案名
     root   /home/jgh/project;
     #指定首頁,Django中可以設定,這裡註釋掉
     #index  hello.html;

     
     location / {
        #你的uwsgi_params位置
		include /etc/nginx/uwsgi_params;
        #同你前面配置的uwsgi的socket
		uwsgi_pass 127.0.0.1:8010;
     }
     #靜態資源位置
     location /static{
        #訪問/static就相當於訪問下面的路徑
		alias  /home/jgh/project/axfhz1805/static;
     }
  }
}

       (4)測試及啟動nginx服務

#測試
nginx -t -c /usr/share/nginx/nginx.conf

#以下結果說明成功
nginx: the configuration file /usr/share/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/share/nginx/nginx.conf test is successful


#開啟之前我們先關閉系統自啟的nginx
nginx -s quit

#檢視是否已經關閉
ps -ef|grep nginx

#開啟
nginx -c /usr/share/nginx/nginx.conf

        (4)在瀏覽器上輸入你雲伺服器的公網ip,就可以訪問啦。

               注意:Django專案下,你要配置urls.py檔案加入:   url(r'^$', views.home)

               這樣只要輸入ip就能訪問專案主頁了

這裡講以下uwsgi 和 nginx的關係:

可能出現的問題:

         (1)頁面  502錯誤

                 先檢視一下你的靜態資源是否可以訪問

                      示例:10.31.160.194/static/app/cart/cart.js     直接訪問靜態資源

                 如果不可以訪問,那就是nginx配置錯了

                 如果可以訪問,但是動態資源不能訪問,那麼就是uwsgi相關配置出現了錯誤

                  處理:1,清理瀏覽器快取

                             2,看看配置檔案有沒有錯誤

                             3,在uwsgi配置檔案中不需要指定python直譯器,它會自動找到你配置的虛擬環境

                             4,有時候還需要重啟一下你的伺服器