在华为云 ECS 上用 Python 部署 Flask 服务:步骤与注意事项

举报
yd_285284254 发表于 2026/10/25 14:52:46 2026/10/25
【摘要】 记录在华为云 ECS 上用 Python、Gunicorn 和 systemd 部署简单 Flask 服务的完整步骤,并总结安全组、监听地址、debug 模式等常见坑点。

前言

Flask 是 Python 里最轻量的 Web 框架之一,很适合用来快速搭一个接口服务或内部小工具。本文记录在华为云 ECS(弹性云服务器)上,从零部署一个简单 Flask 服务的完整步骤,并总结几个我认为最容易踩的坑,适合刚接触云服务器的开发者参考。

一、准备 ECS 实例

  1. 在华为云控制台购买或使用已有的 ECS,操作系统可选 Ubuntu 22.04 或 EulerOS。学习用途选最低规格即可,注意按自己的需求选择计费方式。
  2. 在安全组入站规则里放行 22 端口(SSH)和你打算对外提供服务的端口,例如 5000 或 80。安全组没放行是“本机能访问、外网打不开”的头号原因。
  3. 使用 SSH 登录实例:ssh root@弹性公网IP。生产环境建议创建普通用户并禁用 root 密码登录。

二、安装 Python 与虚拟环境

sudo apt update
sudo apt install -y python3 python3-venv python3-pip
mkdir -p ~/flask-demo && cd ~/flask-demo
python3 -m venv venv
source venv/bin/activate
pip install flask gunicorn

使用虚拟环境可以避免污染系统 Python,也方便以后迁移依赖。

三、编写最小 Flask 应用

在 app.py 中写入:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello, Huawei Cloud ECS!"

@app.route("/health")
def health():
    return jsonify(status="ok")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

注意 host 要设置为 0.0.0.0,默认的 127.0.0.1 只允许本机访问,外网无法连通。

四、用 Gunicorn 运行

Flask 自带的开发服务器不适合生产环境。使用 Gunicorn:

gunicorn -w 2 -b 0.0.0.0:5000 app:app

worker 数量一般取 CPU 核数的 1 到 2 倍,小规格实例 2 个就够了。

五、使用 systemd 守护进程

为避免关闭 SSH 后服务退出,可以写一个 systemd 服务文件 /etc/systemd/system/flask-demo.service:

[Unit]
Description=Flask Demo
After=network.target

[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/flask-demo
ExecStart=/home/ubuntu/flask-demo/venv/bin/gunicorn -w 2 -b 0.0.0.0:5000 app:app
Restart=always

[Install]
WantedBy=multi-user.target

然后执行 sudo systemctl daemon-reload && sudo systemctl enable --now flask-demo,用 systemctl status flask-demo 查看状态,用 journalctl -u flask-demo -f 查看日志。

六、常见问题与注意事项

  • 外网访问不了:依次检查 ① 服务是否监听 0.0.0.0;② 安全组入站规则;③ 系统防火墙(ufw/firewalld);④ 是否绑定了弹性公网 IP。
  • 端口被占用:用 ss -lntp | grep 5000 找到占用进程。
  • 不要开启 debug 模式:debug=True 会暴露交互式调试器,存在远程代码执行风险。
  • 敏感信息不要写进代码:数据库密码等放到环境变量或配置文件,并且不要提交到代码仓库。
  • 建议前置 Nginx:由 Nginx 监听 80/443,做反向代理、HTTPS 和静态资源处理,再转发给 Gunicorn。
  • 注意成本:不用的实例及时关机或释放,避免产生不必要的费用。

总结

整个流程可以概括为:放行安全组 → 安装 Python 环境 → 编写应用 → Gunicorn 运行 → systemd 守护 →(可选)Nginx 反向代理。掌握这套流程后,部署其他 Python Web 项目也是类似的思路。希望这篇笔记对你有帮助,欢迎交流指正。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。