Flask部署到VPS详细教程
卡尔云官网
www.kaeryun.com
Flask是一个非常流行的Python框架,用于快速开发Web应用,将Flask部署到虚拟专用服务器(VPS)上,可以让你的Web应用有一个独立的服务器环境,安全可靠,本文将 guides 你如何从零开始将Flask部署到VPS。
安装VPS
你需要一台VPS服务器,这里我们推荐使用Cloudflare的数字Ocean套餐,因为它性价比高,而且支持免费 starter VPS,以下是安装VPS的步骤:
-
选择云Provider
如果你没有VPS服务器,可以使用如AWS、DigitalOcean、HostGator等平台,这里以DigitalOcean为例,因为它操作简单。 -
创建VPS
- 登录DigitalOcean控制台,选择“Create New”。
- 在“Name”字段中输入一个易于记忆的名称,flask-app”。
- 选择“VPS”类型,选择“Standard VPS”。
- 点击“Create”,支付费用并完成购买。
-
登录到VPS
- 在控制台中找到“SSH Access”选项,点击“Get SSH Key”。
- 下载SSH公钥,并将它保存到本地。
- 在终端中运行以下命令,替换公钥路径:
ssh -i ~/.ssh/id_rsa+/flask-app
- 你将被引导到VPS的控制台。
-
启用SSH自动登录
- 在终端中输入以下命令:
ssh -i ~/.ssh/id_rsa+/flask-app -t
- 输入你的VPS用户名和密码,之后SSH会自动登录。
- 在终端中输入以下命令:
-
备份数据
- 定期备份数据,可以使用rsync命令:
rsync -avzC .
- 或者使用云Provider提供的备份工具。
- 定期备份数据,可以使用rsync命令:
-
安全注意事项
- 禁用不必要的服务(如FTP、SFTP、SSH代理)。
- 定期备份数据,防止数据丢失。
配置服务器
在VPS上配置服务器,包括设置防火墙、禁用不必要的服务等。
-
启用HTTP服务
- 在终端中输入以下命令:
systemctl enable http
- 如果没有安装Nginx,运行:
sudo apt-get install nginx
然后重启Nginx:
sudo systemctl restart nginx
- 在终端中输入以下命令:
-
禁用不必要的服务
- 使用systemctl命令,禁用不需要的服务,
systemctl disable httpd ssl-proxy-file
- 使用systemctl命令,禁用不需要的服务,
-
配置防火墙
根据需要启用防火墙规则,确保只有必要的端口开放。
安装Flask
安装Flask框架和相关依赖项:
-
安装Flask
- 在终端中输入以下命令:
pip install flask flask-sqlalchemy
- 在终端中输入以下命令:
-
创建Flask应用
-
创建一个文件,例如
app.py
,并添加以下代码:from flask import Flask app = Flask(__name__) print("Application running.")
-
-
设置环境变量
- 在
app.py
中添加以下代码,指定Flask应用的环境:app.config.from_object('config.py')
- 在
配置Web服务器(Nginx)
配置Nginx作为Web服务器:
-
编辑Nginx配置文件
- 找到
/etc/nginx/sites-available/default
文件,替换其中的ForkLog
部分:# ForkLog off # LogFormat json # LogPath /var/log/nginx/app.log # LogFile /var/log/nginx/app.log
- 找到
-
启用Nginx
- 在
/etc/nginx/sites-enabled/default
文件中,添加以下内容:listen 80 default_server; root /var/www/html; index.html;
- 启动Nginx:
sudo systemctl start nginx
- 在
-
配置安全选项
- 在Nginx中启用SSL:
ssl on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_keyfile /etc/ssl/keys/flask.key ssl_certfile /etc/ssl/certs/flask.crt
- 配置安全头:
ssl_protocols TLSv1.2 TLSv1.3; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
- 在Nginx中启用SSL:
配置数据库
Flask默认支持MySQL和PostgreSQL,这里以MySQL为例:
-
创建数据库
-
在
app.py
中添加:from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy(app) db.create_all()
-
-
设置默认用户
- 在终端中输入:
mysql -u root -p
- 创建一个默认用户:
CREATE USER root@localhost; ADD PASSWORD 'yourpassword'; GRANT ALL PRIVILEGES ON DATABASES TO root@localhost;
- 在终端中输入:
-
配置数据库密码
- 在
app.py
中添加:db.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:yourpassword@localhost:3306/flaskdb'
- 在
-
访问数据库
- 在终端中输入:
mysql -u root -p
- 测试连接:
FLASK_APP=app.py FLASK_ENV=production FLASK_ENV=production python -c "from flask import Flask, render_template; app = Flask(__name__); print('Accessing http://localhost/')"
- 在终端中输入:
部署Flask应用
-
上传应用文件
- 将
app.py
和flask.key
、flask.crt
上传到VPS上。
- 将
-
访问应用
- 在浏览器中访问:
curl http://localhost:5000
- 或者在命令行中:
flask run
- 在浏览器中访问:
-
测试应用
- 在浏览器中输入
http://localhost:5000
,确保应用正常运行。 - 使用命令行工具测试:
curl -v http://localhost:5000
- 在浏览器中输入
定期维护
-
备份数据
定期备份应用数据和数据库。
-
定期维护
- 更新软件包:
sudo apt-get update && sudo apt-get upgrade
- 定期备份数据:
rsync -avzC .
- 更新软件包:
通过以上步骤,你已经成功将Flask部署到VPS上,并且配置好了服务器、数据库和安全选项,就可以根据需要扩展应用功能了。
卡尔云官网
www.kaeryun.com