首先复制默认配置,然后在默认配置上进行修改:
cd /etc/nginx/sites-available
cp default xxx_web
这里主要是对server_name和网站路由进行修改。修改示例:
server_name xxx.com *.xxx.com;
client_max_body_size 100m;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include uwsgi_params;
uwsgi_pass unix:/path_to_sock/xxx_com.sock;
}
考虑到我还需要往网站上上传一些文件,需要对nginx的默认最大文件大小进行修改。
现在就可以enable该sites了,
ln -s /etc/nginx/sites-available/xxx_web /etc/nginx/sites-enabled/xxx_web
nginx默认情况下会enable默认的网站配置default,需要删除掉。
rm /etc/nginx/sites-enabled/default
现在就可以启动nginx服务,并且enable nginx服务使得nginx能够开机启动。
systemctl enable nginx
systemctl start nginx
如果发现启动过程中出现了一些问题,比如配置语法错误等等,可以查看log信息:
systemctl status nginx
或者 journalctl -xe
为了方便维护和下载安装python的依赖库,强烈建议使用anaconda来安装python。
创建conda环境:
conda create -n flask python=3.5
source activate flask
conda install flask
conda install -c xxx uwsgi
最后一个指令中要指明非官方的channel,因为官方维护的并没有uwsgi。具体的channel可以google。
默认的uwsgi安装过程中,并没有添加uwsgi的systemd服务,因此需要我们自己添加。具体如下:
cd /etc/systemd/system
nano emperor.uwsgi.service
修改得到如下的service配置信息:
[Unit]
Description=uWSGI Emperor
After=syslog.target
[Service]
WorkingDirectory=~
User=xxx_user
Group=xxx_group
Environment="PATH=/home/xxx_user/miniconda3/envs/flask/bin"
ExecStart=/home/xxx_user/miniconda3/envs/flask/bin/uwsgi --ini path_to/uwsgi-config/emperor.ini
RuntimeDirectory=uwsgi
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
这里采用了uwsgi教程中推荐的emperor-vassal模式,具体的emperor的uwsgi配置如下:
[uwsgi]
emperor = /home/xxx_user/web/uwsgi-config/vassals
logto = /home/xxx_user/web/uwsgi-emperor.log
上面第一行表示uwsgi vassal的路径。我们只需要把我们具体要代理的网站配置放到这个文件夹路径下,就可以自动加载这些网站了。第二行则是uwsgi的log file,方便调试。
这里需要主要,由于我都是安装在个人路径下,最后是制定运行的User和Group,避免权限问题。
另外由于我的python是在一个独立的conda environment下的,必须把Path环境切换过去,如Environment=
。
最后就可以像配置nginx那样启动和开机启动uwsgi。
现在开始配置最终的网站后端。
上面介绍了我们只需要将uwsgi的配置文件放在emperor = /home/xxx_user/web/uwsgi-config/vassals
这个路径下面。具体的:
nano xxx_com.ini
编辑得到如下配置:
[uwsgi]
master = true
processes = 4
virtualenv = /home/xxx_user/miniconda3/envs/flask/lib/python3.5
socket = /home/xxx_user/web/xxx_com.sock
chmod-socket = 666
vacuum = true
die-on-term = true
chdir = /home/xxx_user/web/xxx_com/sites
module = main:app
这里需要主要修改socket的mod,不然,由于nginx是以其他用户身份启动的,会导致nginx无法访问socket。这里指定的socket必须与nginx指定的scok对应。