之前写过 debian8 和 debian9 的配置文章,现在升级到了 debian10,那就重新调整一下安装过程.
查看系统相关信息
debian
版本号
cat /etc/issue
python
及 GCC
版本号
python3
pip
版本号
pip3 -V
安装 uwsgi
注意,有的同学会提前安装好项目的 python
虚拟环境,但这里不是在虚拟环境里安装的,是在根目录环境安装 uwsgi
:
pip install uwsgi
安装 nginx
我用的是 oneinstack
一键脚本。可以百度找一下。
注意:文章所有 xxx.com
地方均需要改为自己的域名或文件夹路径。
通过自带功能新增域名映射文件存放路径:
/data/root/xxxx.com
安装 Flask
创建虚拟环境
使用python3
自带的venv
命令虚进行创建虚拟环境。以下命令中,第二个venv
是文件夹名称:
cd /data/root/xxxx.com
python3 -m venv venv
其它虚拟环境也可以,大家可以自由选择, 比如 virtualenv
。
安装 Flask
进入虚拟环境:
source venv/bin/activate
通过 pip
命令进行安装flask
:
pip3 install flask
新建 uWSGI
配置文件
创建一个新的 uWSGI
配置文件/data/root/xxx.com/xxx.com_uwsgi.ini
:
[uwsgi]
#指向网站跟目录,应用程序的文件夹路径 application's base folder
base = /data/root/xxx.com
# 按字面意思是python的环境变量路径,写的是网站根目录
# 给PYTHONPATH 增加一个目录(或者一个egg),你可以最多使用该选项64次。
# 给PYTHONPATH python-path pp 这三个是相同作用
pythonpath = %(base)
# 虚拟目录,设置PYTHONHOME/virtualenv
home = %(base)/venv
# 指定监听文件,修改后重新打开日志
# 如果修改/碰了指定的文件,那么触发日志的重新打开
touch-logreopen = /data/logs/uwsgi/.touchforlogrotate
#使进程在后台运行,并将日志打到指定的日志文件或者udp服务器。
#这个指令会让uWSGI在后台运行并将日志打到 /data/logs/uwsgi/的对应文件中。
daemonize = /data/logs/uwsgi/%n.log
#日志文件的路径 location of log files
; logto = /data/logs/uwsgi/%n.log
#加载指定的python WSGI模块(模块路径必须在PYTHONPATH里)
module = app
# 设置在收到请求时,uWSGI加载的模块中哪个变量将被调用,默认是名字为“application”的变量。
callable = app
#socket文件的路径 socket file's location
socket = %(base)/tmp/%n.sock
#pchmod-socket的权限 ermissions for the socket file
chmod-socket = 666
# 处理器数
processes = 2
# 线程数
1threads = 2
#您需要的是,reload-mercy是用作回退的全局值。
#what you need, reload-mercy is a global value used as a fallback
#--reload-mercy-在重新加载/停止整个uWSGI实例时使用
#--worker-reload-mercy-在重新加载/停止单个工作程序时使用
worker-reload-mercy = 10
# 修改代码时,自动重启uwsgi服务,每1秒检查一次
python-autoreload = 1
# 这个选项会设置harakiri超时时间(可以看wiki首页的相关内容)。如果一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)。
# 这个设置会使uwsgi丢弃所有需要60秒才能处理完成的请求。
harakiri = 60
按照实际情况修改文件中的路径。
创建日志文件夹
创建一个新文件夹存放uWSGI日志,更改文件夹的所有权(因为我是用 oneinstack
脚本创建的文件夹,默认用户组是www:www
,所以相关文件夹拥有者权限也是给了www:www
):
mkdir -p /data/logs/uwsgi
chown -R www:www /data/logs/uwsgi
配置网站的nginx配置文件
在原有的域名conf
配置文件中添加以下内容:
location / {
try_files $uri @yourapplication;
}
location @yourapplication {
include uwsgi_params;
uwsgi_pass unix:/data/root/xxx.com/tmp/xxx.com_uwsgi.sock;
}
配置uWSGI Emperor
使用uWSGI Emperor
管理多个 uwsgi
。uWSGI Emperor
是用来管理uwsgi
后台运行的。
新建/etc/systemd/system/emperor.uwsgi.service
文件,代码如下:
[Unit]
Description=uWSGI Emperor
After=syslog.target
[Service]
#uwsgi 服务的路径,以及需要启动的 ini 文件路径,根据自己的实际情况进行修改
ExecStart=/usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini
# Requires systemd version 211 or newer
RuntimeDirectory=uwsgi
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
创建/etc/uwsgi
文件夹
mkdir /etc/uwsgi
创建文件/etc/uwsgi/emperor.ini
:
touch /etc/uwsgi/emperor.ini
里面代码如下:
[uwsgi]
emperor = /etc/uwsgi/vassals
uid = www
gid = www
把网站的uwsgi.ini
文件要给个软链,加到/etc/uwsgi/vassals/
文件夹中:
mkdir /etc/uwsgi/vassals
ln -s /data/root/xxx.com/xxx.com_uwsgi.ini /etc/uwsgi/vassals
在/etc/uwsgi/emperor.ini
文件里,设置了文件所有者是 www:www
,我们要给对应的文件夹和文件做所有者权限修改(这一步根据实际情况来判断是否需要):
chown -R www:www /data/root/xxx.com
chown -R www:www /data/logs/uwsgi/
至此,配置已经完成。
相关命令
启动服务
systemctl start emperor.uwsgi.service
检查状态
systemctl status emperor.uwsgi.service
你会看到提示:
emperor.uwsgi.service - uWSGI Emperor
Loaded: loaded (/etc/systemd/system/emperor.uwsgi.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2022-10-31 23:55:52 CST; 3s ago
Main PID: 27634 (uwsgi)
Status: "The Emperor is governing 0 vassals"
Tasks: 1 (limit: 3549)
Memory: 3.4M
CGroup: /system.slice/emperor.uwsgi.service
└─27634 /usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini
Oct 31 23:55:52 giaogiao uwsgi[27634]: *** WARNING: you are running uWSGI without its master process manager ***
Oct 31 23:55:52 giaogiao uwsgi[27634]: your processes number limit is 11830
开机启动
systemctl enable emperor.uwsgi.service
其它命令
systemctl start emperor.uwsgi.service
systemctl stop emperor.uwsgi.service
systemctl status emperor.uwsgi.service
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。