从零到公网:AI 写代码 + DevBridge 隧道,10 分钟分享你的 Web 服务
【摘要】 # 从零到公网可访问:用 AI 开发 Python Web 服务并用 DevBridge 分享> 本文记录了一次完整的开发实践:在华为云开发者空间中,用 AI 辅助编写一个 Python Flask Web 服务,再通过 DevBridge 开发隧道把它暴露到公网,让任何人都能直接访问。全程不到 10 分钟。## 一、背景开发一个 Web 服务并分享给别人看,传统流程大概是这样的:1. 本地...
# 从零到公网可访问:用 AI 开发 Python Web 服务并用 DevBridge 分享
> 本文记录了一次完整的开发实践:在华为云开发者空间中,用 AI 辅助编写一个 Python Flask Web 服务,再通过 DevBridge 开发隧道把它暴露到公网,让任何人都能直接访问。全程不到 10 分钟。
## 一、背景
开发一个 Web 服务并分享给别人看,传统流程大概是这样的:
1. 本地写代码 → 2. 本地跑起来 → 3. 买服务器 → 4. 配域名 → 5. 部署上线 → 6. 把链接发给别人
其中第 3-5 步又贵又麻烦,尤其是「我就是想给你看一眼 demo」的场景。
今天我们用一种更轻的方式:**在华为云开发者空间里用 AI 写代码,然后用 DevBridge 隧道把本地端口直接暴露到公网**,跳过买服务器、配域名、部署这些步骤。
## 二、架构一览
```
用户浏览器
│
▼
https://g2bqvm5z-8080.devbridge-s2.hwtunnel.com ← DevBridge 公网 URL
│
▼
DevBridge 中继服务(华为云)
│ 出站连接(无需开放入站端口)
▼
DevBridge 沙箱(WebUI :13000)
│
▼
Flask 应用(0.0.0.0:8080) ← 本地 Web 服务
```
关键点:DevBridge 通过**出站连接**与华为云中继服务通信,不需要在本地开放任何入站端口。外部用户访问公网 URL,请求经中继服务转发到本地服务。
## 三、第一步:用 AI 写一个 Flask Web 服务
### 3.1 服务设计
我们要的是一个「麻雀虽小五脏俱全」的 Web 服务——有健康检查、有 API 端点、有错误处理,能直接当模板用:
| 端点 | 方法 | 功能 |
|------|------|------|
| `/` | GET | 欢迎信息(服务名 + 状态) |
| `/health` | GET | 健康检查(含 UTC 时间戳) |
| `/api/info` | GET | 服务信息(名称、版本、端点列表) |
| `/api/time` | GET | 当前服务器时间 |
### 3.2 让 AI 来写
在华为云开发者空间中,CodeArts 提供了 ACP(Agent Communication Protocol)接口,可以让 AI 直接在沙箱里写代码、装依赖。
整个过程只需要一句话:
> "Please create a simple but complete Python Flask web service..."
AI 会自动:
1. 创建 `app.py`——包含所有路由和错误处理
2. 创建 `requirements.txt`——声明依赖
3. 安装 Flask 依赖
4. 验证所有端点是否正常
### 3.3 生成的代码
```python
import os
from datetime import datetime, timezone
from flask import Flask, jsonify
app = Flask(__name__)
SERVICE_NAME = "python-web-service"
SERVICE_VERSION = "1.0.0"
ENDPOINTS = [
{"path": "/", "method": "GET", "description": "Welcome message"},
{"path": "/health", "method": "GET", "description": "Health check"},
{"path": "/api/info", "method": "GET", "description": "Service information"},
{"path": "/api/time", "method": "GET", "description": "Current server time"},
]
@app.route("/", methods=["GET"])
def welcome():
return jsonify({
"service": SERVICE_NAME,
"status": "running",
"message": "Welcome to the Python Web Service",
}), 200
@app.route("/health", methods=["GET"])
def health():
return jsonify({
"status": "healthy",
"service": SERVICE_NAME,
"timestamp": datetime.now(timezone.utc).isoformat(),
}), 200
@app.route("/api/info", methods=["GET"])
def info():
return jsonify({
"name": SERVICE_NAME,
"version": SERVICE_VERSION,
"endpoints": ENDPOINTS,
}), 200
@app.route("/api/time", methods=["GET"])
def server_time():
return jsonify({
"service": SERVICE_NAME,
"current_time": datetime.now(timezone.utc).isoformat(),
"timezone": "UTC",
}), 200
@app.errorhandler(404)
def not_found(error):
return jsonify({
"error": "Not Found",
"message": "The requested resource does not exist",
"status": 404,
}), 404
@app.errorhandler(405)
def method_not_allowed(error):
return jsonify({
"error": "Method Not Allowed",
"message": "The request method is not supported for this resource",
"status": 405,
}), 405
@app.errorhandler(500)
def internal_server_error(error):
return jsonify({
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"status": 500,
}), 500
if __name__ == "__main__":
port = int(os.environ.get("PORT", 8080))
app.run(host="0.0.0.0", port=port)
```
几个设计细节值得一提:
- **所有响应都是 JSON**:包括错误响应。这样前端调用时不需要区分成功和失败两种解析逻辑。
- **UTC 时间**:`datetime.now(timezone.utc)` 而不是 `datetime.now()`,避免服务器时区配置不一致带来的问题。
- **端口可配置**:通过环境变量 `PORT` 覆盖默认的 8080,方便部署到不同环境。
- **三个错误处理器**:404、405、500 都有兜底,不会返回 Flask 默认的 HTML 错误页。
### 3.4 启动并验证
```bash
$ python3 app.py
* Serving Flask app 'app'
* Running on http://127.0.0.1:8080
$ curl http://127.0.0.1:8080/
{"message":"Welcome to the Python Web Service","service":"python-web-service","status":"running"}
$ curl http://127.0.0.1:8080/health
{"status":"healthy","service":"python-web-service","timestamp":"2026-10-31T16:52:12Z"}
$ curl http://127.0.0.1:8080/api/info
{"name":"python-web-service","version":"1.0.0","endpoints":[...]}
```
四个端点全部返回 200,服务在本地跑起来了。
## 四、第二步:用 DevBridge 把服务分享到公网
### 4.1 什么是 DevBridge
DevBridge 是华为云提供的开发隧道服务。它的核心思路很简单:
> 你的本地服务不需要对公网开放入站端口,而是主动向华为云中继服务建立一个**出站连接**。外部用户访问公网 URL 时,请求经中继服务转发到你的本地服务。
这跟 ngrok、Cloudflare Tunnel 的思路类似,但集成在华为云开发者空间里,不需要额外安装 CLI、不需要注册账号、不需要配置域名。
### 4.2 创建隧道
DevBridge 的所有操作通过 WebUI REST API(沙箱内 `localhost:13000`)完成。创建一个隧道只需要三步:
**① 创建隧道**
```bash
TUNNEL_ID=$(db_create "python-web-tunnel" "PythonWeb服务隧道" 72)
# → g2bqvm5z
```
三个参数分别是:隧道名称、描述、过期时间(小时)。隧道 72 小时后自动失效。
**② 配置端口**
```bash
db_port_create "$TUNNEL_ID" 8080 auto true
# → Port created successfully
```
四个参数:隧道 ID、本地端口、协议(auto 自动检测 HTTP/HTTPS)、是否允许匿名访问。设为 `true` 意味着任何人拿到链接就能访问,不需要 token 认证。
**③ 启动托管**
```bash
PID=$(db_host "$TUNNEL_ID")
# → host-1793465584262-98dkqy
# Tunnel URL: https://g2bqvm5z-8080.devbridge-s2.hwtunnel.com
```
这一步会启动一个托管进程,把本地 8080 端口通过中继服务暴露出去。URL 由华为云动态分配。
### 4.3 验证公网访问
```bash
$ curl https://g2bqvm5z-8080.devbridge-s2.hwtunnel.com/
{"message":"Welcome to the Python Web Service","service":"python-web-service","status":"running"}
$ curl https://g2bqvm5z-8080.devbridge-s2.hwtunnel.com/api/info
{"name":"python-web-service","version":"1.0.0","endpoints":[...]}
```
公网 URL 访问成功,返回内容与本地完全一致。把这个链接发给任何人,用浏览器打开就能看到结果。
## 五、回顾与思考
### 整个流程做了什么
| 步骤 | 传统方式 | 本文方式 |
|------|---------|---------|
| 写代码 | 手动编写 | AI 生成 + 自动安装依赖 |
| 本地运行 | 手动启动 | 自动启动 + 验证 |
| 公网访问 | 买服务器 + 部署 + 配域名 | DevBridge 隧道,3 个 API 调用 |
| 分享给别人 | 发域名链接 | 发隧道链接 |
| 用完清理 | 服务器继续计费 | 隧道自动过期,或手动删除 |
### DevBridge 适合什么场景
- **Demo 展示**:给客户或同事看一个还在开发中的页面
- **Webhook 调试**:接收第三方回调(如支付回调、GitHub Webhook),本地直接调试
- **临时 API 共享**:移动端开发时,让 App 直接访问本地 API
- **远程协助**:让对方看到你本地跑的服务状态
### 不适合什么场景
- **生产环境**:隧道有有效期(最长 720 小时),中继服务不保证 SLA
- **高流量场景**:中继转发有带宽限制,适合开发调试而非正式服务
- **长期运行**:隧道本质是临时性的,长期服务还是需要正式部署
### 关于 AI 写代码
这次让 AI 写的是一个很简单的 Flask 应用。但值得注意的是整个流程:
1. **AI 不只是生成代码**——它还处理了依赖安装中的环境问题(Python 版本不匹配、pip 源配置),自己排查并解决了
2. **验证是自动的**——AI 写完后自动测试了所有端点,包括 404 错误路径
3. **人只需要说意图**——"创建一个 Flask Web 服务,有这些端点",剩下的交给 AI
对于更复杂的项目,AI 的价值会更明显——不是因为它写得比你快,而是因为它把「写代码 → 装依赖 → 跑起来 → 验证」这个循环压缩成了一次对话。
## 六、清理
用完之后,清理隧道很简单:
```bash
# 停止托管进程
db_process_stop <process-id>
# 删除隧道
db_delete g2bqvm5z
```
或者不手动清理,等 72 小时后自动过期。
---
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)