以前写了一篇 debian8的配置文章。如今云主机用了debian9,就再从新梳理一遍安装流程。python
Debian8 + Flask + Nginx + uWSGI + uWSGI Emperor 基本配置文件注意事项
debian
版本号cat /etc/issue
python
及 GCC
版本号python
pip
版本号pip -V
uwsgi
pip install uwsgi
nginx
我用的是 oneinstack
一键脚本。能够百度找一下。nginx
经过自带功能新增域名映射,路径:shell
/data/root/luanzun.com
Flask
使用python3
自带的venv
命令虚进行建立虚拟环境。如下命令中,第二个venv
是文件夹名称:flask
cd /data/root/luanzun.com python3 -m venv venv
也可使用其它命令,好比 virtualenv
。segmentfault
Flask
进入虚拟环境:服务器
source venv/bin/activate
经过 pip
命令进行安装flask
:app
pip install flask
uWSGI
配置文件建立一个新的 uWSGI
配置文件/data/root/luanzun.com/luanzun.com_uwsgi.ini
:socket
[uwsgi] #指向网站跟目录,应用程序的文件夹路径 application's base folder base = /data/root/luanzun.com # 按字面意思是python的环境变量路径,写的是网站根目录 # 给PYTHONPATH 增长一个目录(或者一个egg),你能够最多使用该选项64次。 # 给PYTHONPATH python-path pp 这三个是相同做用 pythonpath = %(base) # 虚拟目录,设置PYTHONHOME/virtualenv home = %(base)/venv # 指定监听文件,修改后从新打开日志 # 若是修改/碰了指定的文件,那么触发日志的从新打开 touch-logreopen = /data/wwwlogs/uwsgi/.touchforlogrotate #使进程在后台运行,并将日志打到指定的日志文件或者udp服务器。 #这个指令会让uWSGI在后台运行并将日志打到 /data/wwwlogs/uwsgi/的对应文件中。 daemonize = /data/wwwlogs/uwsgi/%n.log #日志文件的路径 location of log files ; logto = /data/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
):ui
mkdir -p /data/wwwlogs/uwsgi chown -R www:www /data/wwwlogs/uwsgi
在原有的域名conf
配置文件中添加如下内容:
location / { try_files $uri @yourapplication; } location @yourapplication { include uwsgi_params; uwsgi_pass unix:/data/root/luanzun.com/luanzun.com_uwsgi.sock; }
使用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
,里面代码以下:
[uwsgi] emperor = /etc/uwsgi/vassals uid = www gid = www
把网站的uwsgi.ini
文件要给个软链,加到/etc/uwsgi/vassals/
文件夹中:
mkdir /etc/uwsgi/vassals ln -s /data/root/luanzun.com/luanzun.com_uwsgi.ini /etc/uwsgi/vassals
在/etc/uwsgi/emperor.ini
文件里,设置了文件全部者是 www:www
,咱们要给对应的文件夹和文件作全部者权限修改(这一步根据实际状况来判断是否须要):
chown -R www:www /data/root/luanzun.com chown -R www:www /data/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
systemctl start emperor.uwsgi.service systemctl stop emperor.uwsgi.service systemctl status emperor.uwsgi.service