Flask001一云主机搭建Flask环境:Flask+gunicorn+supervisor+nginx部署
Posted xygranger
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask001一云主机搭建Flask环境:Flask+gunicorn+supervisor+nginx部署相关的知识,希望对你有一定的参考价值。
查看内核位数
# getconf LONG_BIT
连接远程服务器命令
# ssh xyg@117.x.x.x
云主机安装jdk
从oracle官网下周jdk1.8,我的是 jdk-8u281-linux-x64.tar.gz
在远程主机新建java目录,路径:
/usr/local/java
下载完成后通过FileZilla上传到远程服务器,或者通过scp上传,scp命令如下:
# scp jdk-8u281-linux-x64.tar.gz xyg@117.x.x.x:/etc/local/java
解压tar包:
# tar zxvf jdk-8u281-linux-x64.tar.gz
记下jdk路径如下:
/usr/local/java/jdk1.8.0_281
配置全局环境变量,使jdk全局起作用
编辑/etc/profile:
# vim /etc/profile
在文件末尾增加以下内容:
export JAVA_HOME=/usr/local/java/jdk.1.8.0_281
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
保存退出后,执行以下命令,使修改立即生效:
# source /etc/profile
现在看下是否生效:
# java -version
java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
云主机安装python
查看当前python版本:
# python --version
我系统预装的是2.7.5。
从网址:https://www.python.org/ftp/python/,下载需要的python版本,我下载的是Python3.9.2:
# wget https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tgz
对于centos,如果没有wget命令,需要安装下:
# yum -y install wget
下载后,解压包:
# tar zxvf ~/Python-3.9.2.tgz
安装python编译依赖包:
1.首先安装yum-utils
# yum install yum-utils
1.使用yum-builddep为Python3构建环境,安装缺失的软件依赖
# yum-builddep python
以上准备好后,进入Python-3.9.2源码路径,编译程序:
# ./configure
# make && make install
云主机配置Python环境
先找到自己的python安装位置,我的安装在/usr/local/lib/python3.9.2,在/usr/local/bin中也有,记着这个路径。开始修改系统python环境,在/usr/bin中创建软连接:
# ln -s /usr/local/bin/python3 /usr/bin/python3
# ln -s /usr/local/bin/python3.9 /usr/bin/python3.9
# rm -f /usr/bin/python
# ln -s /usr/bin/python3 /usr/bin/python
验证下系统中默认程序是否变了:
# python --version
下面配置下pip环境:
# ln -s /usr/local/bin/pip3 /usr/bin/pip3
# ln -s /usr/bin/pip3 /usr/bin/pip
因为yum命令运行依赖python2,所以需要改下相关依赖文件的python开头声明:
# vim /usr/bin/yum
# vim /usr/libexec/urlgrabber-ext-down
将文件开头声明改下:
#! /usr/bin/python
改为:
#! /usr/bin/python2
这样yum运行就不会报错了。
安装virtualenv和virtualenvwrapper
安装virtualenv
针对不同项目可能依赖不同的python环境,这里使用virtualenv来管理python虚拟环境。安装virtualenv:
# pip install virtualenv
执行程序在以下路径:
/usr/local/bin/virtualenv
安装virtualenvwrapper
virtualenvwrapper是用来管理virtualenv的扩展包,方便虚拟环境管理。安装命令:
# pip install virtualenvwrapper
安装成功后,配置用户环境变量:
$ vim ~/.bashrc
在.bashrc最后添加以下内容:
export WORKON_HOME=$HOME/.venvs # 所有虚拟环境都在这个目录
source /usr/local/bin/virtualenvwrapper.sh
保存后,运行以下命令使配置生效:
$ source ~/.bashrc
如果嫌virtualenvwrapper命令太长,可以配置命令别名,一样编辑.bashrc文件,添加以下内容:
# virtualenvwrapper cmd
alias mkv='mkvirtualenv' # 创建一个虚拟环境:mkv env
alias rmv='rmvirtualenv' # 删除虚拟环境:rmv env
alias lsv='lsvirtualenv' # 查看所有的虚拟环境
保存退出,使变更生效。之后就可以创建虚拟环境了。这里我创建一个自己网站的虚拟环境:
$ mkv vxyg
进入~/.venvs目录,检查vxyg目录是否存在。如果存在,说明已经成功创建虚拟环境。激活虚拟环境:
$ workon vxyg
退出虚拟环境:
$ deactivate
安装Flask,调试环境
以上环境搭建完毕,接下来调试下环境。首先,切换到虚拟环境,安装Flask:
$ workon vxyg
(vxyg)...$ pip install flask
创建网站目录:
(vxyg)...$ cd
(vxyg)...$ mkdir apps
(vxyg)...$ cd apps
(vxyg)...$ mkdir xygweb
(vxyg)...$ cd xygweb
(vxyg)...$ touch app.py
(vxyg)...$ vim app.py
编辑app.py内容:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello World</h1>'
if __name__ == '__main__':
app.run()
以上完成后,下面就是部署了,这里我们用gunicorn作为wsgi http服务器。
安装gunicorn,部署网站
进入vxyg虚拟环境,然后安装gunicorn:
$ workon vxyg
(vxyg)...$ pip install gunicorn
进入网站目录,启动服务:
(vxyg)...$ cd ~/apps/xygweb
(vxyg)...$ gunicorn -w4 -b0.0.0.0:5000 app:app
注:最后两个app:第一个app是app.py模块,第二个app是app.py内的Flask实例。
现在执行以下命令,看gunicorn是否启动:
$ ps -ef |grep gunicorn
对于gunicorn其他配置,请参阅https://docs.gunicorn.org/en/stable/run.html
nginx安装与配置
安装nginx
添加yum源,下载安装nginx:
$ cd /etc/yum.repos.d
$ sudo touch nginx.repo
$ sudo vim nginx.repo
添加nginx源:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
检查nginx源是否添加完成:
$ yum list | grep nginx
安装nginx:
$ sudo yum -y install nginx
配置nginx
安装完成后,添加xygweb项目独有的配置文件:
$ cd /etc/nginx/conf.d
$ sudo touch xygweb.conf
$ sudo vim xygweb.conf
添加以下内容:
server {
listen 8066; # 监听8066端口
server_name xxx.xxx.xxx.xxx; # 公网ip或者域名
location / {
proxy_pass http://127.0.0.1:5000/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwared-Proto $scheme;
}
}
添加后,检查下nginx配置是否正确:
$ sudo nginx -t
显示如下说明配置正确:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
开启端口8066
查看防火墙状态:
$ sudo systemctl status firewalld
如果是disabled的,先启用:
$ sudo systemctl enable firewalld
如果要禁用防火墙,执行以下命令:
$ sudo systemctl disable firewalld
启用后,需要启动下防火墙:
$ sudo systemctl start firewalld
查看端口8066是否开启:
$ sudo firewall-cmd --query-port=8066/tcp
如果开启,会显示
yes
如果没有开启8066端口,执行以下命令开启:
$ sudo firewall-cmd --permanent --add-port=8066/tcp
注:--permanent 永久生效,没有此参数重启后失效
然后重启防火墙,使操作生效:
$ sudo systemctl stop firewalld
$ sudo systemctl start firewalld
再检查下是否开启成功:
$ sudo firewall-cmd --query-port=8066/tcp
启动nginx和gunicorn
(vxyg)...$ nohup gunicorn -w4 -b0.0.0.0:5000 app:app &
(vxyg)...$ ps -ef | grep gunicorn
(vxyg)...$ sudo systemctl stop nginx
(vxyg)...$ sudo systemctl start nginx
外网输入网站域名或者ip:8066,看是否可以访问网站。
注:如果是天翼云,还需要添加端口准入规则。
安装supervisor
先检查系统有没有安装supervisor:
$ find / -name supervisor
没有安装的话,我们使用yum来安装,需要先检查下yum源中有没有supervisor源:
$ yum list|grep supervisor
什么都不显示,说明没有,需要安装下epel源:
$ sudo yum install epel-release
之后执行以下命令安装supervisor:
$ sudo yum install -y supervisor
安装完成后,进入/etc目录:
$ cd /etc
$ ll supervisor*
会显示一个supervisord.conf和一个supervisord.d。先看看supervisord.conf中最后是否有以下内容:
[include]
files = supervisord.d/*.ini
这表示supervisord程序会加载supervisord.d目录下的所有.ini文件,对于一个应用程序可以在该目录下新建项目专有的.ini文件,针对我们的项目xygweb,新建xygweb.ini:
$ cd /etc/supervisord.d
$ sudo touch xygweb.ini
在xygweb.ini中新增项目配置:
[program:xygweb]
#命令执行的目录
directory=/home/xyg/apps/xygweb
#要执行的命令
command=/home/xyg/.venvs/vxyg/bin/gunicorn -w 4 -b 0.0.0.0:5000 app:app
#是否自动启动
autostart=true
#是否自动重启
autorestart=true
#自动重启间隔 秒
startsecs=1
#标准错误日志
stderr_logfile=/home/xyg/logs/xygweb/log/xyg.err.log
#标准输出日志
stdout_logfile=/home/xyg/logs/xygweb/log/xyg.out.log
上面项目的标准输出日志和错误日志目前没有,我们需要新建下,否则启动supervisor会报错:
$ cd /home/xyg/logs/xygweb/log
$ sudo touch xyg.error.log xyg.out.log
接下来就可以启动supervisor了,在启动之前,我们需要修改下两个程序的python依赖版本,由python改为python2:
$ sudo vim /usr/bin/supervisord
$ sudo vim /bin/supervisorctl
执行以下命令启动项目:
$ sudo systemctl enable supervisord
$ sudo systemctl start supervisord
$ sudo supervisorctl start xygweb
以上最后一个命令即启动我们web了,如果有报错,可以执行以下命令看报错信息:
$ journalctl -xe
大家可以根据该命令查看报错的信息,分析定位问题。
环境搭建完成。
以上是关于Flask001一云主机搭建Flask环境:Flask+gunicorn+supervisor+nginx部署的主要内容,如果未能解决你的问题,请参考以下文章
全栈的自我修养: 001环境搭建 (使用Vue,Spring Boot,Flask,Django 完成Vue前后端分离开发)