Python之Flask开发框架开发项目阿里云部署介绍
1. 准备工作
1.1 购买阿里云ECS服务器
- 进入阿里云官网,选择“云服务器ECS”。
- 推荐配置:2核4GB内存(或最低1核2GB),系统盘40GB,操作系统选择 Ubuntu 20.04 64位(或CentOS 7/8,本文以Ubuntu为例)。
- 安全组配置:在创建实例时,或之后在安全组规则中,放行22端口(SSH)、80端口(HTTP)、443端口(HTTPS,如果需要)。
- 购买后,获取服务器的公网IP。
1.2 本地准备
- 确保您的项目代码已完整并测试通过。
- 记录数据库文件路径(默认为
instance/goals.db),后续需要设置权限。
2. 连接服务器
使用SSH客户端(如终端、PuTTY、Xshell)连接服务器:
ssh root@你的服务器公网IP
(如果使用普通用户,替换root为用户名)
3. 安装基础环境
3.1 更新系统包
apt update && apt upgrade -y
3.2 安装Python3、pip、虚拟环境工具
apt install python3 python3-pip python3-venv -y
3.3 安装Nginx
apt install nginx -y
systemctl start nginx
systemctl enable nginx
访问 http://你的服务器IP 应看到Nginx欢迎页。
3.4 安装git(可选,用于代码拉取)
apt install git -y
4. 上传项目代码
方法一:使用scp(从本地复制到服务器)
在本地终端执行:
scp -r /本地路径/goal_tracker root@你的服务器IP:/root/
(如果使用普通用户,替换root和路径)
方法二:使用git
如果代码已托管到Git仓库,在服务器上:
cd /root
git clone 你的仓库地址
假设项目目录为 /root/goal_tracker。
5. 配置Python虚拟环境并安装依赖
cd /root/goal_tracker
python3 -m venv venv
source venv/bin/activate
pip install flask python-dateutil gunicorn
注:
gunicorn用于生产部署。
6. 配置环境变量(SECRET_KEY)
Flask 需要设置一个安全的 SECRET_KEY,建议通过环境变量设置。创建 .env 文件(或直接在shell中export),但为了持久化,可以写入系统环境变量或使用 .env 文件。
创建 .env 文件:
cat > /root/goal_tracker/.env << EOF
SECRET_KEY=$(openssl rand -hex 32)
EOF
然后在 app.py 中读取该文件(需安装 python-dotenv)或直接在代码中从环境变量获取。简单起见,可以在 app.py 中修改:
import os
app.secret_key = os.environ.get('SECRET_KEY', 'your-secret-key-here') # 生产务必从环境变量获取
并确保在启动服务前设置环境变量(后续在systemd服务文件中设置)。
7. 测试运行
7.1 修改app.py监听地址
在 app.py 末尾,将 app.run() 修改为:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=False) # 关闭debug
7.2 运行测试
cd /root/goal_tracker
source venv/bin/activate
python app.py
此时在本地浏览器访问 http://服务器IP:5000,应能看到系统登录页面。如果无法访问,检查阿里云安全组是否放行5000端口(测试完成后建议关闭,或使用Nginx反向代理)。
8. 配置Gunicorn
Gunicorn 作为WSGI服务器,可以更好地处理并发请求。
8.1 测试Gunicorn启动
cd /root/goal_tracker
source venv/bin/activate
gunicorn -w 4 -b 127.0.0.1:8000 app:app
-w 4:启动4个工作进程(根据CPU核心数调整)-b 127.0.0.1:8000:监听本地8000端口,等待Nginx转发app:app:模块名:Flask实例名
访问 http://服务器IP:8000 应能看到页面,但此时只能通过本地访问(127.0.0.1),需配合Nginx对外暴露。
9. 配置Nginx反向代理
9.1 创建Nginx站点配置文件
vim /etc/nginx/sites-available/goal_tracker
写入以下内容(注意修改 server_name 为你的域名或IP):
server {
listen 80;
server_name 你的服务器IP; # 如果有域名,填写域名
location / {
proxy_pass http://127.0.0.1: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;
}
# 静态文件(如果有)可以直接由Nginx处理
location /static {
alias /root/goal_tracker/static;
expires 30d;
}
}
9.2 启用站点
ln -s /etc/nginx/sites-available/goal_tracker /etc/nginx/sites-enabled/
nginx -t # 测试配置
systemctl reload nginx
现在访问 http://你的服务器IP,应该看到系统首页。
10. 使用Systemd管理Gunicorn服务
为了让应用在后台持续运行并开机自启,创建systemd服务文件。
10.1 创建服务文件
vim /etc/systemd/system/goal_tracker.service
内容如下(注意路径和用户):
[Unit]
Description=Gunicorn instance to serve goal tracker
After=network.target
[Service]
User=root
Group=root
WorkingDirectory=/root/goal_tracker
Environment="PATH=/root/goal_tracker/venv/bin"
Environment="SECRET_KEY=你的随机密钥" # 或者从文件读取
ExecStart=/root/goal_tracker/venv/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 app:app
[Install]
WantedBy=multi-user.target
注意:将
Environment="SECRET_KEY=..."替换为实际的密钥,或通过其他方式设置。
10.2 启动并设置开机自启
systemctl start goal_tracker
systemctl enable goal_tracker
systemctl status goal_tracker # 查看状态
11. 设置文件权限
SQLite数据库文件需要可写权限。默认位置为 instance/goals.db,需确保运行用户(root)有读写权限:
chown -R root:root /root/goal_tracker/instance
chmod 755 /root/goal_tracker/instance
如果数据库文件已存在,也需设置权限:
chmod 664 /root/goal_tracker/instance/goals.db
12. 配置防火墙(可选但推荐)
如果系统防火墙(如UFW)已启用,放行80端口:
ufw allow 80/tcp
ufw allow 22/tcp # SSH
ufw enable
阿里云安全组已放行80和22,系统防火墙可以保持关闭或相应配置。
13. 配置域名和HTTPS(可选)
13.1 购买域名并解析
- 在域名服务商处将域名解析到服务器IP。
13.2 修改Nginx配置中的 server_name 为域名
server_name yourdomain.com;
13.3 申请SSL证书(Let’s Encrypt)
安装Certbot:
apt install certbot python3-certbot-nginx -y
certbot --nginx -d yourdomain.com
按照提示完成证书申请,Certbot会自动修改Nginx配置启用HTTPS。
14. 数据库备份策略
SQLite是一个文件,定期备份即可。可编写cron任务每天备份:
crontab -e
添加一行(每天凌晨2点备份):
0 2 * * * cp /root/goal_tracker/instance/goals.db /root/backups/goals_$(date +\%Y\%m\%d).db
记得提前创建 /root/backups 目录。
15. 日志管理
- Gunicorn的日志默认输出到journal,可使用
journalctl -u goal_tracker查看。 - Nginx日志在
/var/log/nginx/access.log和error.log。 - 可配置logrotate管理日志轮转。
16. 常见问题排查
16.1 访问出现502 Bad Gateway
- 检查Gunicorn是否运行:
systemctl status goal_tracker - 查看Gunicorn日志:
journalctl -u goal_tracker -f - 确认Nginx反向代理地址是否正确(127.0.0.1:8000)
16.2 静态文件404
- 检查Nginx配置中
location /static的路径是否正确。 - 确认静态文件目录权限是否可读。
16.3 数据库无法写入
- 检查instance目录和数据库文件的权限。
- 查看应用日志是否有权限错误。
16.4 无法登录/注册
- 检查数据库是否初始化(表结构是否存在)。
- 可手动删除数据库文件重启应用,系统会自动重建表。
17. 部署完成
现在您的目标管理系统已正式上线。可以通过域名或IP访问,所有数据持久化存储,服务自动重启。
如需更新代码,重新拉取或上传后,重启Gunicorn即可:
systemctl restart goal_tracker
如有任何问题,欢迎查阅阿里云文档或咨询技术支持。
更多推荐


所有评论(0)