debian9+flask+uwsgi 安装及配置教程步骤

debian9+flask+uwsgi 安装及配置教程步骤

查看系统相关信息

debian版本号

cat /etc/issue

pythonGCC 版本号

python

pip 版本号

pip -V

安装 uwsgi

pip install uwsgi

安装 nginx

我用的是oneinstack一键脚本。可以百度找一下。

通过自带功能新增域名映射,路径:

/home/wwwroot/luejiao.com

安装Flask

创建虚拟环境

使用python自带的venv命令虚进行创建虚拟环境。以下命令中,第二个venv是文件夹名称:

cd /home/wwwroot/luejiao.com
python3 -m venv venv

也可以使用其它命令,比如 virtualenv

cd /home/wwwroot/luejiao.com
virtualenv venv

安装 Flask

进入虚拟环境:

source venv/bin/activate

通过 pip命令进行安装flask

pip install flask

新建uWSGI配置文件

创建一个新的uWSGI配置文件/home/wwwroot/luejiao.com/luejiao.com_uwsgi.ini

[uwsgi]

#指向网站跟目录,应用程序的文件夹路径 application's base folder
base = /home/wwwroot/luejiao.com

# 按字面意思是python的环境变量路径,写的是网站根目录
# 给PYTHONPATH 增加一个目录(或者一个egg),你可以最多使用该选项64次。
# 给PYTHONPATH python-path pp 这三个是相同作用
pythonpath = %(base)

# 虚拟目录,设置PYTHONHOME/virtualenv
home = %(base)/venv

# 指定监听文件,修改后重新打开日志
# 如果修改/碰了指定的文件,那么触发日志的重新打开
touch-logreopen = /home/wwwlogs/uwsgi/.touchforlogrotate

#使进程在后台运行,并将日志打到指定的日志文件或者udp服务器。
#这个指令会让uWSGI在后台运行并将日志打到 /home/wwwlogs/uwsgi/的对应文件中。
daemonize = /home/wwwlogs/uwsgi/%n.log

#日志文件的路径 location of log files
; logto = /home/wwwlogs/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日志,更改文件夹的所有权(因为我装了ftp,而且ftp账号的用户组是www:www,所以文件权限也是给了www:www):

mkdir -p /home/wwwlogs/uwsgi
chown -R www:www /home/wwwlogs/uwsgi

配置网站的nginx配置文件

在原有的域名conf配置文件中添加以下内容:

location / {
    try_files $uri @yourapplication;
}
location @yourapplication {
    include uwsgi_params;
    uwsgi_pass unix:/home/wwwroot/luejiao.com/luejiao.com_uwsgi.sock;
}

配置uWSGI Emperor

使用uWSGI Emperor管理多个 uwsgiuWSGI 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,里面代码如下:

[uwsgi]
emperor = /etc/uwsgi/vassals
uid = www
gid = www

把网站的uwsgi.ini文件要给个软链,加到/etc/uwsgi/vassals/ 文件夹中:

mkdir /etc/uwsgi/vassals
ln -s /home/wwwroot/luejiao.com/luejiao.com_uwsgi.ini /etc/uwsgi/vassals

/etc/uwsgi/emperor.ini文件里,设置了文件所有者是 www:www,我们要给对应的文件夹和文件做所有者权限修改(这一步根据实际情况来判断是否需要):

chown -R www:www /home/wwwroot/luejiao.com
chown -R www:www /home/wwwlogs/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 Sat 2018-06-23 11:34:18 CST; 7s ago
Main PID: 19288 (uwsgi)
   Status: "The Emperor is governing 1 vassals"
    Tasks: 2 (limit: 19660)
   CGroup: /system.slice/emperor.uwsgi.service
           └─19288 /usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini

开机启动

systemctl enable emperor.uwsgi.service

标签: none

添加新评论