安装部署Flask服务器
发布于 4 年前 作者 gaofang 365 次浏览 来自 分享

什么是 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.iniuwsgi --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.crt2_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;
    }
}

以上です。

回到顶部