Flask 是一个轻量级的 Python web 框架,适合快速地开发小型到中型的web应用。
本文将详细介绍如何将Flask应用部署到生产环境中。文末有技术交流和练手项目,喜欢去练习一下
在部署Flask应用之前,确保你有以下几点:
- sudo apt update
- sudo apt upgrade
-
Flask通常需要Werkzeug作为WSGI工具以及对应版本的Python。以下命令在Ubuntu上安装Python 3和pip。
- sudo apt install python3 python3-pip
-
虚拟环境是Python的一个特性,使得项目的依赖独立于全局的Python环境。
- sudo apt install python3-venv
- python3 -m venv myprojectenv
- source myprojectenv/bin/activate
-
将项目文件上传至服务器,激活虚拟环境后安装Flask和项目所需的其他依赖。
- pip install flask gunicorn
- pip install -r requirements.txt
-
Gunicorn是一个Python WSGI HTTP服务器,用于在生产环境中运行Python web应用。
- gunicorn -w 4 -b 0.0.0.0:8000 myapp:app
-
创建一个systemd服务文件,使得应用可以在后台运行,并在系统启动时自动启动。
- sudo nano /etc/systemd/system/myapp.service
-
添加以下内容到myapp.service:
- [Unit]
- Description=Gunicorn instance to serve myapp
- After=network.target
-
- [Service]
- User=user
- Group=www-data
- WorkingDirectory=/home/user/myapp
- Environment="PATH=/home/user/myapp/myprojectenv/bin"
- ExecStart=/home/user/myapp/myprojectenv/bin/gunicorn --workers 4 --bind unix:myapp.sock -m 007 wsgi:app
-
- [Install]
- WantedBy=multi-user.target
-
激活并启动服务:
- sudo systemctl start myapp
- sudo systemctl enable myapp
-
Nginx是一个高性能的HTTP和反向代理服务器,可以作为Gunicorn的前端服务器,提供静态文件服务,负载均衡等。
- sudo apt install nginx
-
创建一个Nginx服务器配置文件:
- sudo nano /etc/nginx/sites-available/myapp
-
添加以下内容:
- server {
- listen 80;
- server_name server_domain_or_IP;
-
- location / {
- proxy_pass http://unix:/home/user/myapp/myapp.sock;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- }
-
- location /static {
- alias /home/user/myapp/static;
- }
- }
-
- sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled
- sudo nginx -t
- sudo systemctl restart nginx
-
使用ufw配置基本的防火墙规则:
- sudo ufw allow 'Nginx Full'
-
确保定期运行系统和应用的安全更新:
- sudo apt update
- sudo apt upgrade
-
使用Let’s Encrypt提供的Certbot设置SSL/TLS证书。
- sudo apt install certbot python3-certbot-nginx
- sudo certbot --nginx -d your_domain
-
您已经成功地部署了Flask应用到生产环境中。从更新服务器软件开始,您安装了所需的依赖程序,为应用配置了虚拟环境,并使用Gunicorn和Nginx部署了Flask应用。此外,您也实施了基本的安全措施来保护您的服务器和应用。别忘了定期维护和更新您的服务器和应用来确保一切平稳运行。