系列文章目录
环境部署条件: centos7+anncodena+python3+flask+uswgi
前言
flask 自身提供web服务器适用于开发debug测试,性能不佳,并不适用与线上web服务部署。今天介绍flask 应用生产环境部署的一套方案。centos7+anaconda+python3+falsk+uwgicentos: 非常流行的linux版本、稳定免费
anaconda:很好用的python集成安装包
python3: python2 已经过时 ,python3才是主流
flask:轻量级的python web 框架 读写mysql 机器学习模型 报表展示页面等对外提供web服务
uwgi:高性能的web服务器
一.准备前提
1. 新建一个anpython 用户,密码设置为python@123
useradd anpython
passwd anpython
2 将新建的anpython用户,添加sudo 用户组
gpasswd -a anpython wheel
3. 切换到anpython用户
sudo -iu anpython
二. 初始化化境
1.初始化仓库化境
sudo yum install -y epel-release
2 .安装gcc 和nginx
sudo yum install -y gcc nginx
3.安装anaconda
wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh
路径选择的时候不要改动,默认是/home/anpython/anaconda3
安装
sh Anaconda3-2019.10-Linux-x86_64.sh
按回车执行
4.创建虚拟python环境
激活anaconda
cd /home/anpython
source anaconda3/bin/activate
5.安装virtualenv
pip install virtualenv
创建目录
mkdir -p ~/myproject
cd ~/myproject
创建虚拟环境目录
virtualenv myprojectenv
激活新创建的虚拟环境
source myprojectenv/bin/activate
6.安装flask
pip install flask
7.安装uwsgi
pip install uwsgi
8. 新建一个flask 简单应用代码
vi ~/myproject/myproject.py
from flask import Flask
applicaiton= Flask(__name__)
@applicaiton.route('/')
def hello_world():
return 'Hello World'
if __name__ == '__main__':
applicaiton.run('0.0.0.0')
8.回到命令行,启动flask服务测试
python myproject.py
访问服务
发现不可用,这主要是linux 5000端口没有开放导致的
9.开放系统的5000端口
sudo firewall-cmd --permanent --add-port=5000/tcp
sudo firewall-cmd --reload
10 创建一个uwgi入口
vi ~/myproject/myuwgi.py
from myproject import applicaiton
if __name__ == '__main__':
applicaiton.run()
使用如下命令测试下uswgi
uwsgi --socket 0.0.0.0:5000 --protocol=http -w myuwgi
测试通过
11 .配置uwsgi配置文件
vi /home/anpython/myproject/myproject.ini
[uwsgi]
module=myuwgi
master = true
processes = 5
threads = 100
http = 0.0.0.0:5000
virtualenv = /home/anpython/myproject/myprojectenv
die-on-term = true
使用配置文件启动uwsgi
uwsgi --ini myproject.ini
12 创建系统服务随开机自启动
sudo vi /etc/systemd/system/myproject.service
[Unit]
Description=uWSFI instance to serve myproject
After = network.target
[Service]
User=anpython
Group=nginx
WorkingDirectory=/home/anpython/myproject
Envrironment="PATH=/home/anpython/myproject/myprojectenv/bin"
ExecStart=/home/anpython/myproject/myprojectenv/bin/uwsgi --ini myproject.ini
[Install]
WantedBy=multi-user.target
启动服务
sudo systemctl start myproject.service
设置开机自启服务
sudo systemctl enable myproject.service 使用此条命令无效
解决方案创建一个软连接如下,已验证开机可以自启动
ln -s ‘/etc/systemd/system/myproject.service’ ‘/etc/systemd/system/multi-user.target.wants/myproject.service’