項目部署(代碼上線)


 

靜態文件要這樣訪問  專業!! 

 

上線之前要把 配置這樣修改

HOST="192.167.12.42"  #改成在公網ip

DEBUG=false

所有人能訪問

測試版的  本地測試,不是上線版的

 

 

安裝python 3.6?? (看以前的筆記)

 

wsgiref的性能要差一

第二個版本裝uwsgi

 

 

  

 

 

 

 

 UWSGI  缺點:處理I靜態文件有問題

    當訪問量大的時候,需要有負載均衡

這個時候ngxj

 能夠處理靜態文

-- 做反向代理

--做負載均衡(處理多個接口)(LVS,hapropx也可以做負載均衡)

 

這個時候 可以這樣寫  因為他們是內部傳遞的 所以可以用socket來傳送數據

 

 

UWSgi中加上  &就可以后台運行

然后ngix做負載均衡  如下

 

 uwsgi中的processes=1  這個數字跟cup核數有關, 能同時開啟的進程數

 

 

 

 

小白的項目部署

 

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

1. 簡單粗暴

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

1
ALLOWED_HOSTS  =  [ "*" ,]

示例源碼:猛擊下載

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

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

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

1
python3 mange.py runserver  0.0 . 0.0 : 8000   

 

2. uwsgi

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

a. 在服務器上安裝uwsgi

1
pip3 install uwsgi

需要先安裝:yum install python-devel

 

b. 單文件使用uwsgi

在服務器上編寫一個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

PS: flask需要再加 --callable app

訪問查看即可:

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
復制代碼

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

 

 

6. 第三版本上線:uwsgi + nginx 

nginx作用:
       - 處理靜態文件
       - 反向代理
       - 負載均衡(LVS、haproxy)
uwsig作用:
       - 處理動態請求

nginx配置:/etc/nginx/nginx.conf   

user root;
                #進程數量   4
                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 127.0.0.1:8002; 
                    }
                    server {
                        #監聽80端口
                        listen      80;

                        charset     utf-8;

                        # max upload size
                        client_max_body_size 75M;

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

                        location / {
                            uwsgi_pass  django;
                            include     uwsgi_params;
                        }
                    }
                }
View Code

uwsgi配置:/data/s8day145/

          s8day145_uwsgi_8001.ini 
                    [uwsgi]
                    socket = 127.0.0.1:8001
                    chdir = /data/s8day145/
                    wsgi-file = s8day145/wsgi.py
                    processes = 1
                    
                    
                s8day145_uwsgi_8002.ini 
                    [uwsgi]
                    socket = 127.0.0.1:8002
                    chdir = /data/s8day145/
                    wsgi-file = s8day145/wsgi.py
                    processes = 1

啟動:

  

          nginx:
                    /etc/init.d/nginx start 
                    /bin/systemctl restart nginx.service
                    /bin/systemctl start nginx.service
                    /bin/systemctl stop nginx.service
                
                uwsgi:
                #這里后邊加一個  & 表示在后端啟動,不會在前面打印一些日志
                    uwsgi --ini s8day145_uwsgi_8001.ini &
                    uwsgi --ini s8day145_uwsgi_8002.ini & 

7. 如果進程掛了,supervisor幫助你自動將服務重新啟動。

/etc/supervisord.conf
                [program:s8day145]
                command=/usr/local/bin/uwsgi --ini /data/s8day145/s8day145_uwsgi_8001.ini ;命令
                priority=999                ; 優先級(越小越優先)
                autostart=true              ; supervisord啟動時,該程序也啟動
                autorestart=true            ; 異常退出時,自動啟動
                startsecs=10                ; 啟動后持續10s后未發生異常,才表示啟動成功
                startretries=3              ; 異常后,自動重啟次數
                exitcodes=0,2               ; exit異常拋出的是0、2時才認為是異常
                stopsignal=QUIT             ; 殺進程的信號
                stopwaitsecs=10             ; 向進程發出stopsignal后等待OS向supervisord返回SIGCHILD 的時間。若超時則supervisord將
                使用SIGKILL殺進程
                user=root                 ; 設置啟動該程序的用戶
                log_stdout=true             ; 如果為True,則記錄程序日志
                log_stderr=false            ; 如果為True,則記錄程序錯誤日志
                logfile=/var/log/cat.log    ; 程序日志路徑
                logfile_maxbytes=1MB        ; 日志文件最大大小
                logfile_backups=10          ; 日志文件最大數量

            systemctl start supervisord.service

- 公司中的部署步驟及負責人:
- 開發提交代碼
- 測試人員開始測試
- 運維人員進行上線
使用軟件:jenkins+自己寫腳本,運維人員點點點。

- 從git上啦代碼到一個服務器,在該服務器上對代碼進行編譯(c/vue/java)
- 通過以下工具 將代碼同步到每台服務器上
- saltstack
- ansible
- 執行命令啟動程序

- 自己搭建yum源

 


免責聲明!

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



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