在生产环境(linux)下部署flask

本文介绍如何使用gunicorn和nginx部署Flask应用,并通过supervisor进行进程管理,确保服务稳定运行。涉及配置文件详解及命令操作。

相关技术

涉及到相关的技术:gunicorn、flask、nginx、supervisor

  • supervisor 进程管理,使得nginx、gunicorn开机自启动,服务挂了可以自动重启 。
  • nginx 服务器反向代理,高并发,日志等。
  • gunicorn 生产环境下部署flask就不用开发者模式了,用gunicorn来实现生产环境提高性能和服务的稳定性。
  • flask python语言实现的一种web应用框架。

安装

sudo apt-get install supervisor 
sudo apt install nginx
pip install gunicorn

配置文件及注解

sudo vim /etc/nginx/sites-available/default
# nginx 默认配置文件
cat /etc/nginx/nginx.conf
# nginx 的用户配置文件,相比默认配置文件优先级高
cat /etc/supervisor/conf.d/gunicorn.conf
# supervisor 管理gunicorn进程的配置文件,要自己创建
cat /etc/supervisor/conf.d/nginx.conf
# supervisor 管理nginx进程的配置文件,要自己创建

反向代理配置nginx的默认配置

listen 8080 是公网暴露的端口
proxy_pass http://localhost:8000是内网服务器接口的地址,这里是服务器本地

server {

        listen 8080 default_server;
        listen [::]:8080 default_server;
        server_name xjfd;
        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;


        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                proxy_pass http://localhost:8000;

                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }
}

/etc/supervisor/conf.d/gunicorn.conf配置文件

手动创建
/home/xjfd/.conda/envs/cp37/bin/gunicorn命令路径
/home/xjfd/server/server_all项目文件夹
user=xjfd用户名

[program:gunicorn]
command=/home/xjfd/.conda/envs/cp37/bin/gunicorn -w 2 -b :8000 server:app -D
directory=/home/xjfd/server/server_all
autostart=true
autorestart=true
user=xjfd
redirect_stderr=true

/etc/supervisor/conf.d/nginx.conf配置文件

手动创建
/usr/sbin/nginx -g 'daemon on;' 守护线程
以root权限启动nginx

[program:nginx]
command=/usr/sbin/nginx -g 'daemon on;'
autostart=true
autorestart=true
user=root
redirect_stderr=true

重启or启动

sudo  /etc/init.d/nginx restart
# 启动nginx 
sudo  /etc/init.d/supervisor restart
# 启动supervisor

测试

cd /home/njit/wind/test/server_all
# 此路径是服务器文件路径

find / -name gunicorn 2>/dev/null
# 用这条命令来查找 /home/user/virtualenvs/py37/bin/gunicorn是查找结果

/home/user/virtualenvs/py37/bin/gunicorn -w 2 -b :8080 server:app -D 
# server是文件名
# -w 是线程数 -b是端口号 -D 是守护线程
# gunicorn 路径是需要查找本机的路径的


curl -X POST 127.0.0.1:8000
curl --request POST --url http://127.0.0.1:8000/rest/wt/v2/tilt
# 测试 使用curl命令,没有的需要安装,具体去查一下吧,此处不详解

日志文件

tail /var/log/nginx/error.log
# nginx 报错日志文件
tail /var/log/nginx/access.log
# nginx 访问日志文件

关闭服务

sudo  /etc/init.d/supervisor stop
sudo  /etc/init.d/nginx stop
sudo pkill nginx
sudo pkill gunicorn
部署一个 Flask 项目在 Linux 环境中通常包括以下几个关键步骤,涉及 Python 环境配置、项目打包、Web 服务器设置以及服务的守护进程管理。 ### 1. 准备 Python 环境 确保 Linux 系统中已安装 Python 和 pip。可以通过以下命令检查: ```bash python3 --version pip3 --version ``` 如果未安装,可使用系统的包管理器安装,例如在 Ubuntu 上: ```bash sudo apt update sudo apt install python3 python3-pip ``` 建议使用虚拟环境来隔离项目的依赖包: ```bash sudo apt install python3-venv python3 -m venv venv source venv/bin/activate ``` ### 2. 安装 Flask 及项目依赖 在虚拟环境中安装 Flask 和项目所需的其他依赖: ```bash pip install flask pip install -r requirements.txt ``` 确保项目根目录下有 `requirements.txt` 文件,它可以通过以下命令生成: ```bash pip freeze > requirements.txt ``` ### 3. 创建 WSGI 入口文件 创建一个 `wsgi.py` 文件作为 WSGI 应用入口: ```python from your_flask_app import app if __name__ == "__main__": app.run() ``` 替换 `your_flask_app` 为实际的 Flask 应用模块名称。 ### 4. 配置 Web 服务器(使用 Apache + mod_wsgi) 安装 Apache 和 `mod_wsgi`: ```bash sudo apt install apache2 libapache2-mod-wsgi-py3 ``` 创建一个新的 Apache 配置文件,例如 `/etc/apache2/sites-available/flask.conf`,并添加以下内容: ```apache <VirtualHost *:80> ServerName your_domain_or_ip WSGIDaemonProcess flaskapp user=www-data group=www-data threads=5 WSGIScriptAlias / /var/www/html/flaskapp.wsgi <Directory /var/www/html/> WSGIProcessGroup flaskapp WSGIApplicationGroup %{GLOBAL} Require all granted </Directory> </VirtualHost> ``` 将 Flask 项目部署到 `/var/www/html/` 目录下,并创建 `.wsgi` 文件,例如 `/var/www/html/flaskapp.wsgi`: ```python import sys sys.path.insert(0, '/var/www/html/') from wsgi import app as application ``` 启用站点并重启 Apache: ```bash sudo a2ensite flask.conf sudo systemctl restart apache2 ``` ### 5. 使用 Gunicorn + Nginx(可选) 安装 Gunicorn 和 Nginx: ```bash pip install gunicorn sudo apt install nginx ``` 启动 Gunicorn: ```bash gunicorn --workers 3 --bind unix:flaskapp.sock -m 007 wsgi:app ``` 配置 Nginx 代理: ```nginx server { listen 80; server_name your_domain_or_ip; location / { proxy_pass http://unix:/path/to/flaskapp.sock:/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` 启用 Nginx 配置并重启服务: ```bash sudo ln -s /etc/nginx/sites-available/flaskapp /etc/nginx/sites-enabled sudo systemctl restart nginx ``` ### 6. 守护进程管理(使用 systemd) 创建一个 systemd 服务文件 `/etc/systemd/system/flaskapp.service`: ```ini [Unit] Description=Gunicorn instance to serve Flask app After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/var/www/html/ ExecStart=/usr/bin/gunicorn --workers 3 --bind unix:flaskapp.sock wsgi:app [Install] WantedBy=multi-user.target ``` 启动并启用服务: ```bash sudo systemctl start flaskapp sudo systemctl enable flaskapp ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sun_Raiser

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值