阿里云 ECS 部署 Python Flask 项目:从零到上线完整指南
阿里云 ECS 部署 Python Flask 项目:从零到上线完整指南
花了一整天踩完所有坑,写了这份指南。面向新手,每一步都有解释,跟着操作就能上线。
一、准备工作
1.1 注册阿里云
打开 aliyun.com,手机号注册。新用户有免费试用额度,可以白嫖一个月。
1.2 创建 ECS 实例
进入控制台 → 云服务器 ECS → 创建实例。我选的配置:
| 参数 | 选择 | 月费 |
|---|---|---|
| 地域 | 离你最近的(上海/杭州) | - |
| 规格 | 2 vCPU + 2GB 内存 | ¥68/月 |
| 系统 | Ubuntu 22.04 | - |
| 带宽 | 按量计费(1Mbps) | ~¥23/月 |
| 硬盘 | 40GB 高效云盘 | ~¥14/月 |
总共约 ¥105/月。新用户首月通常免费,注册的时候注意看优惠活动。
1.3 安全组配置
创建实例后,进入安全组,添加规则:
| 方向 | 端口 | 来源 | 用途 |
|---|---|---|---|
| 入方向 | 22 | 0.0.0.0/0 | SSH 登录 |
| 入方向 | 80 | 0.0.0.0/0 | HTTP 网站 |
| 入方向 | 443 | 0.0.0.0/0 | HTTPS(以后配 SSL) |
| 入方向 | 5000 | 0.0.0.0/0 | Flask 开发端口 |
二、连接到服务器
ssh root@你的ECS公网IP
首次登录会提示改密码。建议顺手创建一个非 root 用户:
adduser deploy
usermod -aG sudo deploy
三、部署 Flask 项目
3.1 安装环境
sudo apt update
sudo apt install python3 python3-pip python3-venv nginx -y
3.2 创建 Flask 项目
mkdir ~/myapp && cd ~/myapp
python3 -m venv venv
source venv/bin/activate
pip install flask gunicorn
写一个最简单的 app:
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello from ECS!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
测试一下:
python app.py
# 浏览器访问 http://你的IP:5000,应该看到 "Hello from ECS!"
3.3 用 Gunicorn 运行
Flask 自带的服务器不能用于生产。用 Gunicorn:
gunicorn -w 4 -b 0.0.0.0:5000 app:app
-w 4 表示 4 个 worker 进程,一般设为 CPU 核数 × 2。
四、配置 Nginx 反向代理
Gunicorn 直接对外不太安全,前面加一层 Nginx。
sudo nano /etc/nginx/sites-available/myapp
写入:
server {
listen 80;
server_name 你的域名或IP;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
启用配置:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置
sudo systemctl restart nginx
现在访问 http://你的IP,不用加 5000 端口了。
五、让项目后台运行
写个 systemd 服务:
sudo nano /etc/systemd/system/myapp.service
[Unit]
Description=My Flask App
After=network.target
[Service]
User=deploy
WorkingDirectory=/home/deploy/myapp
ExecStart=/home/deploy/myapp/venv/bin/gunicorn -w 4 -b 127.0.0.1:5000 app:app
Restart=always
[Install]
WantedBy=multi-user.target
启动:
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
现在关了 SSH 窗口,服务还在跑。
六、踩坑记录
坑1:安全组忘了开端口
最常犯的错误。确认安全组 80/5000 端口是入方向允许。
坑2:Gunicorn 绑定 0.0.0.0
通过 Nginx 代理时 Gunicorn 绑 127.0.0.1 就够了。绑 0.0.0.0 会让服务直接暴露,不安全。
坑3:虚拟环境路径写错
systemd 里的 ExecStart 要用 venv 里的 gunicorn,不是系统全局的。
坑4:忘记 enable 服务
systemctl start 只管当前,重启后会停。必须 systemctl enable。
七、成本与后续
ECS 月费 ~¥105,如果只是个人项目,比 PaaS(Heroku、Railway)便宜。加上域名一年几十块,总成本很低。
下一步计划:加上 SSL 证书(Let’s Encrypt 免费)、配置自动部署(GitHub Actions)、接入数据库(RDS 或自建 MySQL)。
如果有问题,欢迎在评论区交流。阿里云新用户注册有免费试用:aliyun.com
更多推荐

所有评论(0)