在百度雲服務器上部署Django網站的經歷


前言:

  前段時間,利用Django為單位制作了一個小型的內部考勤系統,本想放到單位內部的服務器上,考慮到運行的穩定、安全防護等問題,最終決定把網站部署到百度雲服務器上,事先也在網上查找了一些資料,但過程還是一波三折,問題為斷,最終用了半天的時間,將網站部署成功,目前依然穩定運行。為了后人少踩坑,也為了自己下一次有跡可循,特意寫一篇隨筆,記錄整個過程。

布署環境:

  1、百度雲服務器:(最便宜的那種,一核,1G內存,1M帶寬),服務器上安裝的是centos 7.1

  2、本機:Python3.7 Django2.0.6 PUTTY

布署過程:

  一、在上線之前,在本地需做的幾項工作:

  1、修改setting.py文件。

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False ALLOWED_HOSTS = ['*']

  主要有三個地方:一是修改DEBUG為False(關閉調試模式,這個必須做,為安全考慮),關閉調試模式后,ALLOWED_HOSTS項必須修改,可以輸入自己網站真實的域名,也可以用*代替。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, '(--.----'),
    }
}

  二是修改數據庫設置,在這里修改為自己的數據庫配置,如MySql等。因為我的網站是一個小型系統,所以直接使用了自帶的sqlite3數據庫,應付一個小型應用,也足夠用了,為安全計,將文件名改一下,並在這里同步。  

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

  三是修改static_url static_root兩項配置,其中static_url項沒有什么價值,采用默認值就可以。但是static_root項很重要,將來網站的所有靜態文件都會收集到這個文件夾中。

  2、收集靜態文件

  運行命令:python manage.py collectstatic,網站中的靜態文件都會收集到static_root指定的文件夾中,記住這個文件夾的位置,后邊配置nginx時要用。 

  3、將網站文件夾上傳到百度雲服務器。

  我是使用PUTTY自帶的pscp工具做的,方法很簡單,直接寫命令  

1、從遠程服務器下載
d:\putty>pscp -r root@IP:/root/dir d:\data  r參數代表要下載的是目錄
如: pscp -r toot@192.168.1.102:/usr/local/temp d:\down 
以上命令,將遠程服務器中的/usr/local/temp文件夾下載到當地的down中。

如:pscp  root@192.168.1.102:/usr/local/temp.txt d:\down 
以上命令,將遠程服務器中的/usr/local/temp文件夾下載到當地的down中。
2、向遠程LINUX服務器上傳

d:\putty>pscp -r dir root@IP:/usr/local/temp    #將指定目錄上傳。
d:\putty>pscp file1.txt root@IP:/usr/local/temp  #將指定文件上傳

 

  二、遠程服務器准備工作。

  1、安裝python3/django,這方面網上文章很多,這里就不多說。

  2、安裝uwsgi,這是一個容器管理文件,用它來運行Django網站。安裝方法很簡單  

pip install uwsgi

或者

pip3 install uwsgi

   3、安裝nginx.(主要用於提供靜態文件的訪問服務)

    (1)到 官網http://nginx.org/en/download.html,選擇適合Linux的版本,這里選擇最新的版本,下載到本地后上傳到服務器或者centos下直接wget命令下載。  

    

  我是用了wget http://nginx.org/download/nginx-1.17.0.tar.gz命令,將安裝文件下載了自己的目錄中。

  (2)安裝nginx。

  安裝前先檢查一下:使用yum list ****命令,檢查以下依賴庫有無安裝,如果沒有安裝,則執行下列命令進行安裝 。

# yum install gcc-c++
# yum install pcre
# yum install pcre-devel
# yum install zlib 
# yum install zlib-devel
# yum install openssl
# yum install openssl-devel

  第一步:解壓。tar -zxvf nginx-1.17.0.tar.gz。第二步:進入解壓后的文件夾, 執行 ./configure,該操作會檢測當前系統環境,以確保能成功安裝nginx,執行該

操作后如果出現錯誤提示,一般就是缺少依賴庫,缺什么就安裝什么。第三步: 執行make和make install編譯nginx。 成功后,nginx就安裝到當前目錄的nginx目錄

下了。

  (3)配置nginx

  在 /lib/systemd/system/ 下創建nginx的后台服務配置文件。"nginx.service",文件內容如下:其中的/usr/local/nginx是我機器上安裝nginx的文件夾。

  

[Unit]
Description=nginx 
After=network.target 
   
[Service] 
Type=forking 
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx reload
ExecStop=/usr/local/nginx/sbin/nginx quit
PrivateTmp=true 
   
[Install] 
WantedBy=multi-user.target

 

  保存文件后,執行systemctl enable nginx.service命令,讓nginx在開機后能自動以服務的形式在后台啟動。

  這里有幾個常用的命令:

  systemctl status nginx   查看nginx啟動狀態。

  systemctl start nginx  /  systemctl stop nginx   /   systemctl restart nginx     分別為啟動、停止、重啟nginx的命令。

  檢查一下配置的結果:瀏覽網址http://服務器IP地址,出現歡迎界面,說明nginx的配置初步成功了。

 

  到這一步,服務器的准備工作就基本完成了,從下一步開始,就要開始正式的部署工作了。

  

  三、在遠程服務器正式部署網站

  (一)利用uwsgi來提供Django網站的訪問功能。

  1、進入用戶目錄 :cd /usr/local(這個位置沒要求),新建nginx目錄,其中有三個文件:分別是nginx.ini nginx.pid   nginx.status。編輯nginx.ini文件,

  

[uwsgi]
socket=127.0.0.1:8000

chdir=/var/www/myproject   

module=attproject.wsgi


master=true
processes=3
threads=2

stats=%(chdir)/uwsgi.status
pidfile=%(chdir)/uwsgi.pid

 

其中的chdir是我們網站的根目錄所在位置。module指的是wsgi.py文件所在的位置,格式為:所在目錄.wsgi   processes是進程數(實際進程數是這個數+1)   

threads是線程數,這兩個數根據機器配置來設置,如果機器配置高,這個數就可以多一些。

    2、執行uwsgi-d --ini uwsgi.ini命令,啟動Django網站。 其中 -d指的是從后台啟動。 --ini指的是讀取指定配置文件的方式啟動。uwsgi.ini是剛才編輯好的

配置文件。提示[uWSGI] getting INI configuration from uwsgi.ini。說明已經啟動成功。

關閉uwsgi的命令:uwsgi --stop uwsgi.pid。

    (二)利用 nginx來提供靜態文件的訪問。

    通過上面的步驟,Django網站已經能夠成功運行了,但是會出現找不到靜態文件。(沒有樣式,圖片等),這個就需要用到nginx了。

    1、編輯nginx的配置文件。

    nginx.conf是nginx的配置文件,在安裝文件夾的conf目錄下。

    vim nginx.conf

    編輯其中的

 server {
        listen       80;
        server_name  http://www.********;
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;
 #這里是關鍵,可以理解為是一個映射,當用戶訪問 http://ip/static時,讓nginx找哪個文件夾。以下的設置,就是讓nginx讀網站根目錄下的static文件,靜態文件都在那里面。
         location /static {
            alias   /var/www/attproject/static;

        }
        
    
    #這里是nginx與uwsgi互相聯系的部分。其中include uwsgi_params,這行必須有,這個文件在nginx的conf文件夾下。第二行,要與前邊那個uwsgi.ini文件中指定的一樣。
    location
/{ include uwsgi_params; uwsgi_pass 127.0.0.1:8000; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }

 

 

 

   編輯完成后,先運行nginx -t命令,判斷一下設置是否有問題,如果提示:

   nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful,則表示沒有問題,如果提示錯誤,則認真核對一下nginx.conf文件,特別是注意

里面的{ }是成對的。

  

成功后,執行systemctl restart nginx.service    或 systemctl start nginx.service命令,啟動nginx,這時網站應該能正常訪問了。(在此之前,uwsgi已經成功運行

了)

 

四、在部署過程中遇到的幾個坑:

1、安裝nginx后,啟動不成功,發現是端口占用,分析原因,服務器上原本運行了apache,停止並刪除了httpd服務后,解決了問題。

 

2、安裝nginx和uwsgi以后,運行命令,提示找不到。分析后,發現需要將執行路徑放到系統的PATH中,編輯 /etc/profile文件,將路徑加進去,結果沒有效果,查資

料后發現,在添加PATH時,需要將  :$PATH放到添加的路徑的后面,意思是包含以前的路徑,如果放到前面,則原本定義的路徑就找不到了。具體如下:

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

export PATH="/usr/local/nginx/sbin:$PATH"

export PATH="/usr/local/python3/bin:$PATH"

3、在使用uwsgi的停止命令時,到網上查到,同目錄下會自動創建一個***.pid文件 ,停止uwsgi時,直接用uwsgi --stop ***.pid就可以,結果根本不好使,只能自己

創建一個,並添加到uwsgi.ini文件中,才好使。

 

 

 

 

  

 

 

  

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM