阿里云ECS部署python及flask(二)使用uwsgi emperor +Nginx部署自动启动多个web项目

前提:本文是《阿里云ECS部署python及flask(一)》的续文,单个python项目的uwsgi和nginx都已能成功配置。
参考:

  1. 在系统环境下安装uwsgi(非python项目中的虚拟环境):

pip3 install uwsgi

  1. 新建一个目录:/etc/uwsgi/vassals,将各项目的uwsgi配置文件拷贝至该目录下面(这一步网上很多博客都说是做软链接ln -s,但不知为何我使用软链接不成功,最后无奈使用直接拷贝):

mkdir /etc/uwsgi && mkdir /etc/uwsgi/vassals
cp ~/first_project/f_uwsgi.ini /etc/uwsgi/vassals/
cp ~/second_project/s_uwsgi.ini /etc/uwsgi/vassals/

  1. 新建/etc/uwsgi/emperor.ini 文件,代码如下:
[uwsgi]
emperor = /etc/uwsgi/vassals
# uid = www
# gid = www

注(权限问题已解决,可参考:阿里云ECS部署python及flask(三)通过设置uid和gid来改变uwsgi+emperor通常使用root权限的问题
):

  • 由于我尚未搞清楚linux系统中用户和用户组权限问题,所以所有操作包括最后的自启动部署,都是在root下完成的。包括nginx.conf中的user也是root。
  • 我在这里给绕了好久,若真正部署起来全使用root权限还是不好,目前也是迫于无奈,待学习好用户权限问题后再做修改。
  • 权限问题会涉及:1、配置静态文件直接由Nginx处理;2、上边的emporer.ini。(由于我都是用root,所以uid和gid我都注释掉了)
  1. 新建/etc/systemd/system/emperor.uwsgi.service文件,代码如下:
[Unit]
Description=uWSGI Emperor
After=syslog.target

[Service]
#uwsgi 服务的路径,以及需要启动的 ini 文件路径,根据自己的实际情况进行修改
ExecStart=/usr/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
  1. 创建/usr/lib/systemd/system/nginx.service,(由于我是使用yum install nginx安装的,所以这个文件已经有了。)代码如下:
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target
  1. 设置开机启动:

systemctl enable nginx.service
systemctl enable emperor.uwsgi.service

  1. 运行服务、停止服务、重启服务、状态查询:

systemctl start emperor.uwsgi.service
systemctl stop emperor.uwsgi.service
systemctl restart emperor.uwsgi.service
systemctl status emperor.uwsgi.service

systemctl start nginx.service
systemctl stop nginx.service
systemctl restart nginx.service
systemctl status nginx.service

查看所有已启动的服务

systemctl list-units --type=service

猜你喜欢

转载自blog.csdn.net/qq_41090453/article/details/83959862