什么是 Flask?
Flask 是一个微型的 Python 开发的 Web 框架。
基本安装
最基本的服务只需要安装Python和Flask就可以运行。
安装Python
安装编译工具
yum -y install gcc zlib zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi libffi-devel
准备安装文件
wget https://www.python.org/ftp/python/3.7.8/Python-3.7.8.tgz
tar -zxvf Python-3.7.8.tgz
编译安装
mkdir /usr/local/python3 #创建编译安装目录
cd Python-3.7.8
./configure --prefix=/usr/local/python3
make && make install
建立软连接
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
安装Flask
通过Pip安装
pip3 install Flask
基本代码
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
测试运行
export FLASK_APP=hello
flask run --host 0.0.0.0 --port 5000
uWSGI+Flask
安装uWSGI
pip3 install uwsgi
基本运行
uwsgi --http 0.0.0.0:5000 --wsgi-file hello.py --callable app
配置文件
一般情况下会使用配置文件uwsgi.ini
[uwsgi]
# uwsgi启动时所使用的地址与端口,使用nginx时要设置为socket,不使用时要用http
http = 0.0.0.0:5000
# flask文件目录
chdir = /var/www/hello/
# flask程序文件名
wsgi-file = hello.py
# python程序内用以启动的application变量名
callable = app
# 处理器数
processes = 1
# 线程数
threads = 1
# 后台运行,并输出日志到文件
daemonize = /var/log/hello_uwsgi.log
通过配置文件运行
uwsgi uwsgi.ini
或 uwsgi --ini uwsgi.ini
坑:千万注意不是uwsgi -c uwsgi.ini
。想当然写成了-c
,在chrome下出了莫名奇妙的ERR_INVALID_HTTP_RESPONSE
错误。
Supervisor+uWSGI+Flask
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
- supervisord
运行 Supervisor 时会启动一个进程 supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。
- supervisorctl
是命令行管理工具,可以用来执行 stop、start、restart 等命令,来对这些子进程进行管理。
supervisor是所有进程的父进程,管理着启动的子进展,supervisor以子进程的PID来管理子进程,当子进程异常退出时supervisor可以收到相应的信号量。
安装Supervisor
pip3 install supervisor
配置文件
生成配置文件
echo_supervisord_config > /etc/supervisord.conf
增加配置
[program:hello]
command=/usr/local/python3/bin/uwsgi --ini /var/www/hello/uwsgi.ini
directory=/var/www/hello
user=root
基本运行
supervisord -c /etc/supervisord.conf supervisorctl -c /etc/supervisord.conf start hello
Nginx+Supervisor+uWSGI+Flask
安装Nginx
yum install nginx
配置Nginx
location /hello {
root /var/www/hello;
include uwsgi_params;
uwsgi_pass 0.0.0.0:5000;
}
运行Nginx
systemctl start nginx
坑:一定要把uWSGI的配置文件修改为socket模式
SSL+Nginx+Supervisor+uWSGI+Flask
为了满足小程序的要求,需要将http网站升级为https。
域名证书
购买域名->申请备案->申请SSL证书->下载证书
找到Nginx目录下的1_www.xxx.com_bundle.crt
和2_www.xxx.com.key
,拷到服务器上。
修改配置
server {
# 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块
listen 443 ssl;
# 域名,多个以空格分开
server_name xxx.com www.xxx.com;
# ssl证书地址
ssl_certificate /usr/share/nginx/cert/1_www.xxx.com_bundle.crt; # pem文件
的路径
ssl_certificate_key /usr/share/nginx/cert/2_www.xxx.com.key; # key文件的路径
# ssl验证相关配置
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法
location / {
root /var/www/blog;
index index.html index.htm;
}
location /static/ {
alias /var/www/static/;
index index.html index.htm;
}
location /hello {
root /var/www/hello;
include uwsgi_params;
uwsgi_pass 0.0.0.0:5000;
}
}
以上です。