从零到公网分享:用 Python 写一个 Web 服务并用 DevBridge 隧道分享出去

举报
yd_269944482 发表于 2026/11/08 00:34:13 2026/11/08
【摘要】 前言开发一个 Web API 并把它分享给团队或外部用户,传统流程是这样的:写代码 → 买服务器 → 配域名 → 部署 → 配防火墙 → 对方才能访问。整个过程少则半小时,多则半天。今天我们换一种方式:**在华为云开发者空间里写代码,用 DevBridge 开发隧道一键生成公网链接**,全程不离开终端,10 分钟搞定。最终效果——任何人点击这个链接就能直接调用你的 API:```https:...

前言

开发一个 Web API 并把它分享给团队或外部用户,传统流程是这样的:写代码 → 买服务器 → 配域名 → 部署 → 配防火墙 → 对方才能访问。整个过程少则半小时,多则半天。

今天我们换一种方式:**在华为云开发者空间里写代码,用 DevBridge 开发隧道一键生成公网链接**,全程不离开终端,10 分钟搞定。

最终效果——任何人点击这个链接就能直接调用你的 API:

```
https://ae4jjsxd-8080.devbridge-s2.hwtunnel.com
```

---

## 一、我们要做什么

构建一个**任务管理 REST API**,用 Flask 框架,支持完整的增删改查(CRUD):

| 方法 | 路径 | 功能 |
|------|------|------|
| GET | `/` | 健康检查 |
| GET | `/tasks` | 获取所有任务 |
| POST | `/tasks` | 创建任务 |
| GET | `/tasks/<id>` | 获取单个任务 |
| PUT | `/tasks/<id>` | 更新任务 |
| DELETE | `/tasks/<id>` | 删除任务 |

数据用内存存储(列表),不接数据库,保持简洁。每个任务包含 `id`、`title`、`description`、`done`、`created_at`、`updated_at` 字段,并带完善的错误处理。

---

## 二、开发:在沙箱里写代码

### 2.1 环境准备

华为云开发者空间提供了一个预配置的沙箱环境,里面已经装好了 Python 3.12、Node.js、Git 等工具。我们通过 CodeArts(码道)的 ACP 协议与沙箱交互,让 AI 帮我们写代码。

首先检查 ACP 服务是否可用:

```bash
curl -s --max-time 3 http://127.0.0.1:19300/healthz
# 输出: ok
```

然后获取沙箱路径并创建项目目录:

```bash
SANDBOX_DIR=$(python3 -c "
import json
with open('/root/job-envs/registry.json') as f:
    for entry in json.load(f):
        if entry.get('id') == 'codearts':
            print(entry['cwd']); break
")
PROJECT_DIR="$SANDBOX_DIR/python-web-service"
mkdir -p "$PROJECT_DIR"
```

### 2.2 让 CodeArts 写代码

通过 ACP 客户端(acpx)向 CodeArts 发送指令:

```bash
npx acpx --cwd "$PROJECT_DIR" --agent "$MIRROR" --approve-all \
  prompt "Please create a Python web service using Flask..."
```

CodeArts 自动完成了以下工作:

1. **创建 `app.py`** — Flask 主应用,136 行代码,包含全部端点和错误处理
2. **创建 `requirements.txt`** — 依赖清单
3. **安装依赖** — `python3 -m pip install flask`(中间遇到了 pip 指向错误 Python 版本的问题,CodeArts 自动排查并修复)
4. **启动服务** — `python3 app.py`,监听 `0.0.0.0:8080`
5. **自测所有端点** — 创建任务、查询、更新、删除、错误处理全部验证通过

### 2.3 遇到的小坑:pip 环境不匹配

过程中有个小插曲。沙箱里 `python3` 指向 Python 3.12.13,但 `pip` 命令指向的是系统自带的另一个 Python 版本,导致安装时报 `SRE module mismatch` 错误。

解决方法很简单——用 `python3 -m pip` 代替 `pip`,确保 pip 和 python 是同一个版本:

```bash
# ❌ 报错
pip install flask
# AssertionError: SRE module mismatch

# ✅ 正确
python3 -m pip install flask
# Successfully installed flask-3.1.3
```

这是多版本 Python 环境下的常见问题,记住 `python3 -m pip` 这个写法就好。

---

## 三、验证:服务跑起来了

服务启动后,先在本地验证:

```bash
$ curl -s http://127.0.0.1:8080/
{
    "service": "task-management-api",
    "status": "ok",
    "timestamp": "2026-11-07T16:23:44.827852+00:00",
    "total_tasks": 0
}
```

创建一个任务:

```bash
$ curl -s -X POST http://127.0.0.1:8080/tasks \
    -H "Content-Type: application/json" \
    -d '{"title":"学习Flask","description":"完成Flask教程","done":false}'
{
    "id": "7cc66a9d-57d5-4e3b-ac98-678118ddd382",
    "title": "学习Flask",
    "description": "完成Flask教程",
    "done": false,
    "created_at": "2026-11-07T16:24:00.977638+00:00",
    "updated_at": "2026-11-07T16:24:00.977648+00:00"
}
```

一切正常。但此时只有沙箱内部能访问,外部用户访问不了。

---

## 四、分享:用 DevBridge 创建公网隧道

### 4.1 什么是 DevBridge

DevBridge 是华为云提供的开发隧道服务。它的原理很简单:

```
你的本地服务 (localhost:8080)
        ↓
DevBridge 沙箱 (中继转发)
        ↓
华为云 Relay 集群 (公网入口)
        ↓
https://<tunnelId>-<port>.devbridge-s2.hwtunnel.com
```

外部用户访问那个公网地址,请求会被中继转发到你本地的服务。**不需要开放任何入站端口,不需要配域名,不需要部署到服务器**。连接是出站的,安全且简单。

### 4.2 创建隧道

通过 DevBridge WebUI REST API(沙箱内端口 13000)操作,全程几条命令:

```bash
# 1. 初始化并检查认证
source scripts/devbridge_cmd.sh
db_init
db_auth_status
# 输出: {"status": "Logged in (Huawei Cloud IAM)"}

# 2. 创建隧道(名称、描述、有效期72小时)
TUNNEL_ID=$(db_create "python-web-service" "PythonWeb服务分享" 72)
# 输出: ae4jjsxd

# 3. 配置端口 8080,开启匿名访问(公网可访问)
db_port_create "$TUNNEL_ID" 8080 auto true

# 4. 启动托管
db_host "$TUNNEL_ID"

# 5. 获取公网地址
db_tunnel_url "$TUNNEL_ID"
# 输出: https://ae4jjsxd-8080.devbridge-s2.hwtunnel.com
```

就这 5 步,公网链接就生成了。

### 4.3 关键参数说明

| 参数 | 值 | 说明 |
|------|-----|------|
| 隧道名称 | `python-web-service` | 标识用,中文/字母/数字/连字符 |
| 端口 | `8080` | 本地服务监听的端口 |
| 协议 | `auto` | 自动检测 HTTP/HTTPS |
| 匿名访问 | `true` | 开启后任何人凭链接即可访问 |
| 有效期 | `72` 小时 | 过期自动关闭,范围 1-720 小时 |

> **匿名访问(allowAnonymous)** 默认是 `false`,意味着访问隧道需要 token 认证。这里设为 `true` 是因为我们要分享给外部用户直接访问,不需要他们登录。如果你的服务有敏感数据,保持 `false` 并用 `db_token` 生成访问令牌。

---

## 五、最终验证:公网访问成功

通过公网隧道地址访问:

```bash
$ curl -s https://ae4jjsxd-8080.devbridge-s2.hwtunnel.com/
{
    "service": "task-management-api",
    "status": "ok",
    "timestamp": "2026-11-07T16:26:57.150333+00:00",
    "total_tasks": 1
}
```

通过公网创建任务:

```bash
$ curl -s -X POST https://ae4jjsxd-8080.devbridge-s2.hwtunnel.com/tasks \
    -H "Content-Type: application/json" \
    -d '{"title":"测试DevBridge隧道","description":"通过公网隧道创建的任务","done":false}'
{
    "id": "b812240b-a933-4237-8337-191ec35951ff",
    "title": "测试DevBridge隧道",
    "description": "通过公网隧道创建的任务",
    "done": false,
    "created_at": "2026-11-07T16:27:06.607212+00:00",
    "updated_at": "2026-11-07T16:27:06.607223+00:00"
}
```

**公网链路完全畅通,CRUD 操作全部正常。**

---

## 六、回顾与思考

### 整体流程

```
写代码 (CodeArts AI 辅助)
    ↓  自动生成 app.py + requirements.txt
    ↓  自动安装依赖、启动服务
本地验证 (curl localhost:8080)
    ↓
创建 DevBridge 隧道 (5 条命令)
    ↓
公网分享 (https://ae4jjsxd-8080.devbridge-s2.hwtunnel.com)
```

### 为什么这个方案好用

1. **零部署成本** — 不用买服务器、不用配域名、不用管防火墙。代码写完直接分享。
2. **安全** — 隧道连接是出站的,不需要在本地开放任何入站端口。中继由华为云托管。
3. **即用即弃** — 隧道有效期 72 小时,到期自动关闭。适合临时演示、联调测试、给同事看个 demo。
4. **AI 辅助** — CodeArts 自动写代码、装依赖、起服务、跑自测,人只需要描述需求。

### 适用场景

- ✅ 给团队成员演示正在开发的 API
- ✅ 和前端联调(后端在本地跑,前端通过公网隧道调用)
- ✅ 接收第三方 Webhook 回调(公网地址可被外部服务主动请求)
- ✅ 临时分享一个 demo 给产品经理或客户看
- ❌ 生产环境部署(隧道是临时性的,不适合长期稳定服务)

### 注意事项

- **隧道有效期最长 720 小时(30 天)**,到期后需要重新创建
- **匿名访问意味着任何人都能访问**,敏感接口请保持关闭
- **中继域名随集群变化**,不要硬编码 URL,用 `db_tunnel_url` 命令获取
- **端口配置变更后需要重启 host 进程**才能生效

---

## 七、总结

这次实践展示了华为云开发者空间的一个典型工作流:**AI 写代码 → 本地验证 → DevBridge 公网分享**,全程在终端里完成,没有离开过开发环境。

核心就两件事:
1. 用 CodeArts 让 AI 帮你写一个 Flask API(10 分钟)
2. 用 DevBridge 把本地端口变成公网链接(1 分钟)

下次需要快速分享一个本地服务给别人的时候,试试 DevBridge,比部署到服务器快太多了。

---

*本文所有操作均在华为云 AI 开发者空间(DevSpace)中完成。*

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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