項目部署

項目開發完畢後,須要將代碼放到服務器上,這樣用戶才能訪問。接下來咱們一步一步來進行一波部署操做。html

1. 簡單粗暴

項目開發完畢,在部署以前須要再配置文件中將 ALLOWED_HOSTS配置設置爲:當前服務器IP或*,如:node

1
ALLOWED_HOSTS  =  [ "*" ,]

示例源碼:猛擊下載python

而後將源碼上傳至服務器指定目錄,如:/data/ ,而後執行命令來運行:nginx

注: 上傳命令: scp /Users/wupeiqi/PycharmProjects/oldboy-1.zip root@192.168.10.33:/data/django

解壓,進入目錄並執行如下命令:vim

1
python3 mange.py runserver  0.0 . 0.0 : 8000   

 

2. uwsgi

Django框架運行依賴wsgi(本質提供socket服務端),衆多模塊實現了wsgi規範,而django框架中默認使用wsigiref模塊來實現,他因爲性能比較低,因此用於本地開發和測試,而線上部署時須要使用uwsgi來代替。bash

a. 在服務器上安裝uwsgi服務器

1
pip3 install uwsgi

b. 單文件使用uwsgiapp

在服務器上編寫一個Python文件:負載均衡

1
2
3
def  application(env, start_response):
     start_response( '200 OK' , [( 'Content-Type' , 'text/html' )])
     return  [b "Hello World" ]

在服務器上執行命令啓動Web服務器:

1
2
3
uwsgi  - - http : 9001  - - wsgi - file  app.py
# 或
uwsgi  - - http : 9002  - - wsgi - file  foobar.py  - - master  - - processes  4

訪問查看便可:

c. django程序使用uwsgi

將開發好的django程序拷貝到服務器目錄【同示例一】,即:/data/oldboy ,執行命令啓動:

1
uwsgi  - - http : 9005  - - chdir  / data / oldboy /  - - wsgi - file  oldboy / wsgi.py  - - master  - - processes  4
1. 建立配置文件 oldboy.ini

[uwsgi]
http = 0.0.0.0:9005
chdir = /data/oldboy/
wsgi-file = oldboy/wsgi.py
processes = 4
static-map = /static=/data/oldboy/allstatic

2. 根據配置文件啓動uwsgi

uwsigi --ini  oldboy.ini
配置文件的形式啓動uwsgi

PS: 若是有虛擬環境能夠添加上虛擬環境路徑配置: virtualenv = /env/oldboy_venv

此時訪問時,會出現找不到靜態文件的錯誤。

想要uwsgi處理靜態文件,須要先將django的靜態文件收集到制定目錄,而後再設置對應關係。

  • 收集django靜態文件
    • 在django的配置文件中添加:STATIC_ROOT = os.path.join(BASE_DIR,"allstatic")
    • 執行 python3 manage.py collectstatic 命令,至此django項目全部相關靜態文件都會收集到制定目錄。
  • 設置uwsgi靜態文件對應關係
    • uwsgi --http :9005 --chdir /data/oldboy/ --wsgi-file oldboy/wsgi.py --master --processes 4 --static-map /static=/data/oldboy/allstatic

訪問地址,便可看到你的女友們了....

3. nginx

利用Nginx作反向代理、負載均衡以及處理靜態文件。

a. 安裝Nginx

1
yum install nginx

b. 配置nginx

user root;
worker_processes 4;

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

events {
    worker_connections  1024;
}


http {
    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;
    tcp_nodelay         on;
    keepalive_timeout   65;

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

    upstream django {
        server 127.0.0.1:8001; 
        # server 192.1.123.1; 
    }
    server {
        listen      80;

        charset     utf-8;

        # max upload size
        client_max_body_size 75M;

        location /static {
            alias  /data/oldboy/allstatic; 
        }

        location / {
            uwsgi_pass  django;
            include     uwsgi_params;
        }
    }
}
示例配置文件/etc/nginx/nginx.conf

確保nginx配置文件目錄下有uwsgi_params文件(默認)

c. 配置uwsgi

爲了確保讓全部請求均經過80端口來訪問網站,將uwsgi的配置文件修改成:

1
2
3
4
5
6
[uwsgi]
socket  =  127.0 . 0.1 : 9005
chdir  =  / data / oldboy /
wsgi - file  =  oldboy / wsgi.py
processes  =  4
logto  =  / tmp / oldboy.log

d. 啓動uwsgi和nginx

1
2
3
uwsgi --ini  /data/oldboy/oldboy .ini &
 
/etc/init .d /nginx  start

3. supervisor

supervisor是一個對進程管理的軟件,能夠幫助咱們啓動uwsgi並維護(uwsgi進程關閉時,自動將其啓動起來)。

a. 安裝

1
yum  install  supervisor

b. 配置 vim /etc/supervisor.conf

  配置詳細

c. 啓動

1
2
3
supervisord  /etc/supervisor .conf
/etc/init .d /supervisor  start