部署Flask应用通常涉及以下几个步骤:准备应用程序、选择合适的WSGI服务器、配置Web服务器代理、申请SSL证书以及配置SSL。
准备Flask应用
首先,你需要在Linux服务器上安装必要的软件,包括:
- Python和pip(Python包管理器)
- 虚拟环境(virtualenv或conda)
- Flask框架和依赖库
使用以下命令安装Flask及其依赖:
pip install flask gunicorn
这里gunicorn是一个Python WSGI HTTP服务器,适合用来运行Python web应用。
选择WSGI服务器
Gunicorn是Flask框架中广泛使用的WSGI服务器之一。它能处理应用程序的并发请求,提高性能。确保Flask应用可通过Gunicorn运行无误,命令格式如下:
gunicorn app:app
其中第一个 app
是你的Python文件名(不含.py扩展名),第二个 app
是Flask应用实例的名称。
配置Web服务器代理
尽管Gunicorn能作为Web服务器使用,但在生产环境中通常会在它前面设置一个代理服务器,如Nginx或Apache,以增强安全性、负载均衡等。这里以Nginx为例,首先安装Nginx:
sudo apt update
sudo apt install nginx
配置Nginx代理传输到Gunicorn,编辑Nginx配置文件:
sudo nano /etc/nginx/sites-available/your_domain
添加以下内容到配置文件中:
server {listen 80;server_name your_domain.com www.your_domain.com;location / {proxy_pass http://localhost:8000;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;}
}
将 your_domain.com
替换成你的域名,localhost:8000
则是指向Gunicorn服务。然后,启用新的配置并重启Nginx服务:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
申请SSL/TLS证书
现在的Web应用应该通过HTTPS提供服务,这要求你得为你的域名获取SSL/TLS证书。Let's Encrypt是一个流行的选择,它提供了免费的证书。可以使用Certbot来自动化证书的申请和维护过程。
安装Certbot和Nginx插件:
sudo apt install certbot python3-certbot-nginx
然后运行Certbot并遵循提示完成证书的部署:
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
这将调整Nginx配置以使用SSL,并将证书和密钥文件放在标准的位置。
配置SSL/TLS
Certbot会自动配置SSL,但你可能还想优化配置以使用强密码或实现其他安全性能。
编辑Nginx配置文件,指定SSL设置:
server {listen 443 ssl http2;server_name your_domain.com www.your_domain.com;ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;# ... 其他SSL配置location / {proxy_pass http://localhost:8000;# ... 其他proxy设置}
}
完成后,重启Nginx以使更改生效:
sudo systemctl restart nginx
至此,你的Flask应用应该能够通过安全的HTTPS协议提供服务了。记得定期更新SSL证书,Certbot可以帮你自动更新证书。可以设定cronjob以实现这一点。