Python Web服务器搭建(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监听的端口,就基本完成了服务器的搭建。

若是在自己的电脑的虚拟机内,还需要在虚拟网络编辑器中,将虚拟机内监听的端口与主机的端口做一个映射,并且主机在防火墙内开放映射的端口。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值