天天看點

Python Web伺服器搭建(gunicorn+nginx+supervisor)基礎環境gunicorn伺服器nginx伺服器 supervisor工具完成搭建伺服器 

最近學習的過程中,簡單搭建了一個web伺服器用于測試,在這裡分享一下搭建過程,以供有緣人一同學習。适用于初學者在雲伺服器或者自己的電腦上搭建一個學習環境

目錄

基礎環境

gunicorn伺服器

安裝Gunicorn

指令直接啟動Gunicorn

終止Gunicorn程序

通過配置檔案啟動

nginx伺服器 

安裝Nginx

Nginx基本指令

Nginx配置檔案

supervisor工具

安裝Supervisor

建立配置檔案

 啟動Supervisor

檢視程序的狀态

配置Gunicorn啟動程式

重新開機Supervisor

完成搭建伺服器 

基礎環境

不管是在雲伺服器還是自己的電腦上,都需要一個基礎的系統(已安裝python)。我使用的是ubuntu系統,自帶python,為後續的學習提供了一丢丢便利。也可以是其他linux系統,都是一個邏輯。

gunicorn伺服器

常用的WSGI Server容器有Gunicorn和uWSGI。Gunicorn直接用指令啟動,不需要編寫配置檔案,相對uWSGI要容易很多。

安裝Gunicorn

Gunicorn可以直接用pip進行安裝。

pip install gunicorn
           

指令直接啟動Gunicorn

gunicorn -w 3 -b 0.0.0.0:9100 run:app
# -w: 用于處理工作的程序數量
# -b: 綁定運作的主機和端口
# run: 執行的Python檔案 run.py
# app: 建立的應用名
           

終止Gunicorn程序

pkill gunicorn
           

通過配置檔案啟動

使用 -c 選項

gunicorn -c gunicorn/gunicorn_conf.py run:app
# gunicorn_conf.py: 配置檔案,放在根目錄的gunicorn檔案夾(自己建立的檔案夾)下
           

gunicorn_conf.py檔案模闆如下,可根據自己的需要更改:

import multiprocessing


bind = '0.0.0.0:9100'
workers = multiprocessing.cpu_count() * 2 + 1
reload = True
loglevel = 'info'
timeout = 600

# 注意檔案是否有讀寫權限
log_path = "/tmp/logs/mytest"
accesslog = log_path + '/gunicorn.access.log'
errorlog = log_path + '/gunicorn.error.log'
           

(注意tmp是臨時檔案存放的目錄,會被删除,根據自己的需要更改路徑)

nginx伺服器 

Nginx是一款輕量級的Web伺服器和反向代理伺服器,由于它的記憶體占用少,啟動極快,高并發能力強,在網際網路項目中受到廣泛應用。

安裝Nginx

ubuntu系統中使用如下指令,其他系統類似。

sudo apt-get install nginx
           

Nginx基本指令

nginx -s <signal>

# signal可以是以下四個參數
# stop: 快速關閉
# quit: 優雅關閉(完成目前請求再關閉)
# reload: 重新加載配置檔案
# reopen: 重新打開日志檔案
           

Nginx配置檔案

放在/etc/nginx目錄下,并且/etc/nginx/sites-enabled(和conf.d目錄)下的所有檔案都會作為配置檔案被加載進來。

靜态檔案,如圖像或靜态HTML頁面:

經過配置後,Nginx可以直接處理靜态檔案請求而不用經過應用伺服器,避免占用寶貴的運算資源;還能緩存靜态資源,使通路靜态資源的速度提高。

在sites-enabled目錄下建立檔案,配置模闆如下:

server {
    location / {
        root /var/www/html
    }
    location /images/ {
        root /var/www/html/images
    }
}
           

代理伺服器:

即接受用戶端的請求并将其轉發給伺服器,再接受伺服器發來的響應,将它們發送到用戶端。

在sites-enabled目錄下建立檔案,配置模闆如下:

server {
    listen 8000;    # 監聽的端口
    listen [::]:8000;
    server_name 1xx.2xx.1xx.1xx;    # 監聽的位址
    location / {
        proxy_pass http://1xx.2xx.1xx.1xx:9100;    # 代理轉發
        include proxy_params;    # 引入Nginx預設推薦的配置,也可以自己設定
    }
}
           

 添加完新的配置檔案後,記得重新加載配置檔案。

nginx -s reload
           

supervisor工具

Supervisor是一個用Python編寫的程序管理工具,我們可以用它來監控伺服器,并在伺服器意外停止時自動重新開機。

安裝Supervisor

pip install supervisor
           

建立配置檔案

sudo su -root -c "echo_supervisord_conf > /etc/supervisor/supervisord.conf"
           

執行完成後,在/etc/supervisor/目錄下會生成一個supervisord.conf,使用vim編輯該檔案,修改最後一行代碼。

[include]
;files = relative/directory/*.ini
files = /etc/supervisor/conf.d/*.ini
           

(注意;不要忘記了)作用是将/etc/supervisor/conf.d目錄下所有字尾為.ini的檔案作為配置檔案加載。

此外,因為預設是将supervisord.pid以及supervisord.sock存放在/tmp目錄下,/tmp是存放臨時檔案的目錄,容易産生丢失檔案的錯誤。是以需要将配置檔案中包含/tmp的目錄修改到别的地方。示例如下:

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock

[unix_http_server]
file=/var/run/supervisor.sock

[supervisord]
logfile=/var/log/supervisord.log
pidfile=/var/run/supervisord.pid
           

 啟動Supervisor

sudo supervisord -c /etc/supervisor/supervisor.conf
           

檢視程序的狀态

sudo supervisorctl status
           

配置Gunicorn啟動程式

在/etc/supervisor/conf.d目錄下建立一個配置檔案,示例:

[program:notebook]
command = /var/www/html/notebook/venv/bin/gunicorn -c gunicorn/gunicorn_conf.py manage:app
directory = /var/www/html/notebook
user = root
autostart = True
autorestart = True
startsecs = 10
startretries = 3
stdout_logfile = /var/log/notebook_logs/notebook_error.log
stderr_logfile = /var/log/notebook_logs/notebook_out.log
stopasgroup = True
stopsignal = QUIT
           

program: 程式的名字,也就是檢視狀态時,程序顯示的名字。

command: 要執行的指令。

directory: 當Supervisor作為守護程式運作時,在守護程式之前cd到該目錄,一般是項目根目錄。

user: 以哪個使用者執行。

autostart: 是否與Supervisor一起啟動。

autorestart: 是否自動啟動。

startsecs: 延時啟動時間,預設為10秒。

startretries: 重新開機嘗試次數,預設為3次。

stdout_logfile: 正常輸出日志。

sterr_logfile: 錯誤輸出日志。

(注意讀寫權限)

stopasgroup: 如果為True,則該标志使Supervisor将停止信号發送到整個過程組,并暗示killasgroup為True。

stopsignal: 停止信号。

重新開機Supervisor

配置完成後使用如下重新開機Supervisor。

sudo supervisorctl reload
           

完成搭建伺服器 

若是在如騰訊雲伺服器上搭建環境,完成以上步驟以後,記得防火牆開放一下Nginx監聽的端口,就基本完成了伺服器的搭建。

若是在自己的電腦的虛拟機内,還需要在虛拟網絡編輯器中,将虛拟機内監聽的端口與主機的端口做一個映射,并且主機在防火牆内開放映射的端口。

Python Web伺服器搭建(gunicorn+nginx+supervisor)基礎環境gunicorn伺服器nginx伺服器 supervisor工具完成搭建伺服器 

繼續閱讀