Centos使用Nginx+Supervisor离线部署Flask应用

Centos部署Python环境

部署Flask应用需要提前配置Python环境,如果您的Centos机器中没有Python环境,可以参考我的另外一篇博客《Centos离线安装Python》,在Centos中离线部署Python环境。

安装Flask应用所需的Python库

这一步的安装,有以下假设:

  • 假设您已经下载了Flask应用所需的Python库,并存放在Centos机器的/root/softwares/06-python-packages文件夹中;如果没有,您可以从我的百度网盘链接中下载(链接:https://pan.baidu.com/s/1RBmPcHim2OWbwNtY3XzlSw ,提取码:ovjm)。如果我提供的Python库不能满足您的需求,您可以把下载后的Python库存放在06-python-packages文件夹中
  • 假设您的Flask应用有requirements.txt文件存储Flask应用所需的Python库;如果通过命令pip freeze > requirements.txt导出Flask应用依赖的库至requirements.txt文件。

以上的假设,如果都满足了,可以开始安装Flaks应用依赖的Python库。

  • 在Centos中,使用命令进入Flask应用的根目录
  • 使用命令pip install --no-index --find-links=/root/softwares/06-python-packages/ -r requirements.txt安装Python库

安装、配置supervisor

安装supervisor

  • 使用命令cd /root/softwares/09-supervisor进入09-supervisor文件夹
  • 使用命令rpm -Uvh *.rpm --nodeps --force安装supervisor

为Flask配置supervisor

  • 使用命令echo_supervisord_conf > /etc/supervisord.d/flask.conf创建flask.conf文件
  • 使用命令vi /etc/supervisord.d/flask.conf打开该文件,并在此文件的最下方添加以下内容
[program:yngt]
command=python3 manage.py runserve
directory=/root/resources_directory_tree/server
startsecs=1
autostart=true
autorestart=true

相关的配置选项的意思如下:

  • yngt表示supervisor子进程的名称
  • directory表示脚本目录
  • command表示脚本执行的命令
  • startsecs表示子进程启动多少秒之后,如果其状态为RUNNING,则supervisor认为其已经启动
  • autostart表示子进程会随着supervisor启动而启动
  • autorestart表示如果子进程如果异常退出后,是否会自动重启,共有true、false和unexpected,其中unexpected表示如果子进程的退出码不再exitcodes里定义的退出码时,才会自动重启

更多的配置选项请查看 https://wuguiyunwei.com/index.php/2017/06/26/1028.html

启动supervisor子进程

  • 使用命令supervisord -c /etc/supervisord.d/flask.conf初始化supervisor
  • 使用命令supervisorctl -c /etc/supervisord.d/flask.conf进入supervisorctl命令管理界面
  • 使用命令start yngt启动子进程,其中yngt表示上一步配置中的子进程名称
  • 如果Centos重启后,子进程没有自动启动,请重复这一步操作

安装Nginx

安装nginx

  • 使用命令cd /root/softwares/03-nginx进入03-nginx文件夹
  • 使用命令tar -xzvf nginx-1.14.2.tar.gz解压,然后cd nginx-1.14.2/进入nginx-1.14.2文件夹
  • 使用命令./configure --prefix=/usr/local/nginx配置nginx的编译选项,其中prefix指定了安装路径
  • 使用命令make编译nginx源代码
  • 使用命令make install安装编译后的nginx
  • 使用命令ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx配置nginx可以全局访问
  • 使用命令nginx -v,如果能够获取到nginx的版本,表示nginx安装成功

将nginx添加到系统服务

  • 使用命令vi /etc/init.d/nginx创建文件,并输入以下内容
#! /bin/bash
# chkconfig: - 85 15
PATH=/usr/local/nginx
DESC="nginx daemon"
NAME=nginx
DAEMON=$PATH/sbin/$NAME
CONFIGFILE=$PATH/conf/$NAME.conf
PIDFILE=$PATH/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
set -e
[ -x "$DAEMON" ] || exit 0
do_start() {
$DAEMON -c $CONFIGFILE || echo -n "nginx already running"
}
do_stop() {
$DAEMON -s stop || echo -n "nginx not running"
}
do_reload() {
$DAEMON -s reload || echo -n "nginx can't reload"
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
do_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
do_stop
echo "."
;;
reload|graceful)
echo -n "Reloading $DESC configuration..."
do_reload
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
do_stop
do_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
exit 3
;;
esac
exit 0
  • 使用命令chmod a+x /etc/init.d/nginx设置权限
  • 使用命令chkconfig --add nginx注册成服务
  • 使用命令chkconfig nginx on配置开机启动

为Flask应用配置nginx

  • 使用命令vi /usr/local/nginx/conf/nginx.conf打开nginx默认配置文件,修改server配置如下:
server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            proxy_pass http://127.0.0.1:5000;
            proxy_set_header Host $host;        
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            index  index.html index.htm;
        }

其中,proxy_pass和proxy_set_header是新增的配置,其余不变。

  • 使用命令systemctl reload nginx.service重新加载nginx配置文件
  • 使用命令nginx -t,如果提示successful信息,表示nginx配置文件加载成功

nginx常用命令

  • systemctl start nginx.service,启动nginx服务
  • systemctl stop nginx.service,停止nginx服务
  • systemctl restart nginx.service,重启nginx服务
  • systemctl reload nginx.service重新加载nginx配置文件

其他

如果您想了解更多的关于nginx的内容,请查看以下链接:

  • Nginx简介:https://blog.csdn.net/javalean/article/details/80083555
  • Nginx简介:https://blog.csdn.net/MrJavaweb/article/details/79635430
  • Nginx的介绍和使用:https://www.cnblogs.com/yaomajor/p/6272647.html

你可能感兴趣的:(Python,Linux,Centos,Python,部署)