python+flask+uswgi+nginx搭建web环境

# 环境:python3.9.2,flask1.1.2,uswgi2.0.19.1,nginx1.19.8,Werkzeug 1.0.1,Jinja2-2.11.3
# 操作系统:centos7
# 编译安装python3.9.2环境

下载python3.9.2稳定版本,下载地址 https://www.python.org/downloads/source/
yum -y install make cmake gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf patch 
yum -y install wget crontabs libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel 
yum -y install libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel unzip tar bzip2 bzip2-devel libzip-devel 
yum -y install libevent libevent-devel ncurses ncurses-devel curl curl-devel libcurl libcurl-devel e2fsprogs e2fsprogs-devel 
yum -y install krb5 krb5-devel libidn libidn-devel openssl openssl-devel pcre-devel gettext gettext-devel ncurses-devel 
yum -y install gmp-devel pspell-devel unzip libcap diffutils ca-certificates net-tools libc-client-devel psmisc libXpm-devel 
yum -y install git-core c-ares-devel libicu-devel libxslt libxslt-devel xz expat-devel libaio-devel rpcgen libtirpc-devel 
yum -y install perl python-devel cyrus-sasl-devel sqlite-devel oniguruma-devel lsof re2c
yum install libffi-devel -y

tar -xvf Python-3.9.2.tar.xz
cd Python-3.9.2 
./configure
make
make install
注:python3.9安装完成后自动安装了虚拟机环境和pip,命令是venv和pip

# 新建虚拟机并搭建flask

python3 -m venv /home/python_object/venv-flask
cd /home/python_object/venv-flask
source ./bin/activate
pip install Flask

执行完上述命令后会在/home/python_object/目录下新建虚拟机环境venv-flask,该虚拟环境目录中有bin,include,lib文件。
source ./bin/activate命令用于激活虚拟环境,pip install Flask命令安装Flask,如果其实提示升级pip直接升级就好,
这样flask就安装在venv-flask这个虚拟环境中了,如果需要安装其它的版本的flask只要再新建虚拟机在新的虚拟机中安装需要的版本即可。
venv 模块支持使用自己的站点目录创建轻量级“虚拟环境”,可选择与系统站点目录隔离。
每个虚拟环境都有自己的 Python 二进制文件(与用于创建此环境的二进制文件的版本相匹配),
并且可以在其站点目录中拥有自己独立的已安装 Python 软件包集

# 虚拟环境中写一个超级简单的flask应用

venv-flask目录下新建www目录,并将hello.py方在该目录下
hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello,World!'

# 虚拟环境中安装uwsgi

pip install uwsgi

# 编写uswgi配置文件 uwsgi.ini

[uwsgi] 
# uWSGI 的监听端口
socket          = 127.0.0.1:5555
# 项目根目录
chdir           = /home/python_object/venv-flask/www
# Flask 项目的启动文件
wsgi-file       = hello.py
# 程序内启用的application变量名
callable        = app 
# 进程数量
processes       = 4
vacuum          = true
master          = true
# 保存主进程pid文件
pidfile = /home/python_object/venv-flask/www/uwsgi.pid
# 修改flask代码后自动重启uswgi
py-autoreload = 1
# uswgi服务器运行日志,现在是与uswgi.ini同级目录
logto = log.txt

# 通过uwsgi启动flask应用

uwsgi --ini uwsgi.ini &

# nginx配置

server {   
    listen 5050;
    
    server_name 127.0.0.1;
    charset utf-8;
    client_max_body_size 75M;
    
    location / { 
        include uwsgi_params; # 导入uwsgi配置 
        uwsgi_pass 127.0.0.1:5555; # 转发端口,需要和uwsgi配置当中的监听端口一致
        uwsgi_param UWSGI_PYTHON /home/python_object/venv-flask/bin; # Python解释器所在的路径,如果有虚拟环境可将路径设置为虚拟环境
        uwsgi_param UWSGI_CHDIR /home/python_object/venv-flask/www; # 项目根目录
        uwsgi_param UWSGI_SCRIPT run:app;  # 项目的主程序,比如你测试用run.py文件,文件中app = Flask(__name__),那么这里就填run:app 
    }
}

重启nginx,执行 curl 127.0.0.1 命令后即可看到 Hello,World

# 手动启动和停止uwsgi

启动:uwsgi --ini uwsgi.ini
重启:uwsgi --reload uwsgi.pid
停止:uwsgi --stop uwsgi.pid

(完)


(完)