最近学习的过程中,简单搭建了一个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监听的端口,就基本完成了服务器的搭建。
若是在自己的电脑的虚拟机内,还需要在虚拟网络编辑器中,将虚拟机内监听的端口与主机的端口做一个映射,并且主机在防火墙内开放映射的端口。