最近學習的過程中,簡單搭建了一個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監聽的端口,就基本完成了伺服器的搭建。
若是在自己的電腦的虛拟機内,還需要在虛拟網絡編輯器中,将虛拟機内監聽的端口與主機的端口做一個映射,并且主機在防火牆内開放映射的端口。