在华为云 ECS 上用 Python 部署一个最小 Web 服务:从开通到访问的完整记录

举报
yd_2703867848 发表于 2026/10/23 10:10:27 2026/10/23
【摘要】 最近在华为云上做了一次完整的练手:开通一台 ECS,用 Python 起一个最小的 Web 服务,并让它能被外网访问。整个过程不复杂,但每个环节都有一个容易踩的小坑,记录下来供同样在练手的朋友参考。 1. 开通 ECS 并登录在控制台创建弹性云服务器时,镜像我选了常见的 Linux 发行版,规格选最小的练手就够用。创建时要特别注意两件事:一是密钥对或密码要保存好,这是后面登录的唯一凭证;二是...

最近在华为云上做了一次完整的练手:开通一台 ECS,用 Python 起一个最小的 Web 服务,并让它能被外网访问。整个过程不复杂,但每个环节都有一个容易踩的小坑,记录下来供同样在练手的朋友参考。

1. 开通 ECS 并登录

在控制台创建弹性云服务器时,镜像我选了常见的 Linux 发行版,规格选最小的练手就够用。创建时要特别注意两件事:一是密钥对或密码要保存好,这是后面登录的唯一凭证;二是记下分配的弹性公网 IP。创建完成后,在本地终端用 SSH 登录:

ssh root@<你的公网IP>

能顺利进入命令行,第一步就完成了。

2. 安装运行环境

登录后先更新软件包列表,再安装 Python 3 和 pip。大多数云镜像自带 Python,但版本和 pip 不一定齐全,装一遍最稳妥。安装完成后用 python3 --version 确认版本,避免后面运行报错才发现环境没装好。

3. 写一个最小 Web 服务

不用框架,Python 标准库就能起服务。新建 app.py:

from http.server import BaseHTTPRequestHandler, HTTPServer

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-Type", "text/plain; charset=utf-8")
        self.end_headers()
        self.wfile.write("Hello from Huawei Cloud ECS!".encode("utf-8"))

HTTPServer(("0.0.0.0", 8000), Handler).serve_forever()

注意监听地址要写 0.0.0.0,只写 127.0.0.1 的话外网是访问不到的,这是我第一次部署时踩过的坑。然后运行:

python3 app.py

先在服务器本机用 curl 访问 127.0.0.1:8000 验证服务本身是好的。

4. 放行安全组端口

本机 curl 通了、外网打不开,十有八九是安全组没放行。在 ECS 的安全组入方向规则里添加一条:协议 TCP、目的端口 8000、源地址 0.0.0.0/0。保存后在浏览器访问 <公网IP>:8000,就能看到返回的那行文字了。

需要提醒的是,练手时对全网放行图省事,正式环境一定要把源地址收窄到实际需要的 IP 段,并改用 HTTPS。

5. 让服务常驻

终端一关,python3 app.py 就停了。练手阶段可以用 nohup 让它在后台运行:

nohup python3 app.py > app.log 2>&1 &

更正式的做法是写一个 systemd 服务单元,设置开机自启和异常自动重启。无论用哪种方式,上线后都要再从外网完整访问一遍,并查看日志确认没有报错,才算真正部署完成。

小结

这次练手的完整链路是:开通 ECS → SSH 登录 → 装 Python → 写最小服务 → 本机验证 → 放行安全组 → 外网访问 → 后台常驻。其中最容易卡住的是安全组和监听地址这两处,排查时按「服务在本机通不通、端口在安全组放没放行、监听的是哪个地址」的顺序逐段确认,基本都能定位到问题。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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