零编程 + 零成本:我是怎么把 TRAE 作品部署到公网的(DNSHE 免费域名 + Cloudflare Tunnel + 家庭 NAS)
全程不花一分钱,不需要公网 IP,不需要买服务器,不需要买域名。跟我一样完全不会编程的参赛同学可以直接抄作业。
背景
我参加的是生活娱乐赛道,作品叫「喵屋 Meow House」——一个全栈养猫管理工具。用 TRAE 做完之后,初赛要求提供"可公开访问的体验链接",我就懵了。
我家里有一台飞牛 NAS,但它是内网设备,外面访问不了。我搜了一下,发现买服务器最便宜一个月也要几十块,而且我还得学怎么部署、怎么配环境……
后来 TRAE 告诉我:你不需要花一分钱,用 Cloudflare Tunnel 就能搞定。 下面是我踩过的坑和最终成功的方案,全程零成本。
方案总览
用户浏览器 → https://你的域名.cc.cd
↓
Cloudflare CDN(全球加速 + 免费 SSL)
↓
Cloudflare Tunnel(加密隧道,穿透内网)
↓
你家里的 NAS / 旧电脑(Docker 跑你的应用)
| 组件 | 费用 | 作用 |
|---|---|---|
| DNSHE 免费域名 | 0 元 | 提供公网可访问的域名 |
| Cloudflare(免费版) | 0 元 | DNS 托管、CDN 加速、SSL 证书 |
| Cloudflare Tunnel | 0 元 | 内网穿透,不需要公网 IP |
| 家庭 NAS / 旧电脑 | 0 元(已有) | 跑 Docker 部署你的应用 |
第一步:注册免费域名(DNSHE,5 分钟)
DNSHE 提供 .cc.cd、.tk、.ml 等后缀的免费域名,每个账号可以注册 3 个。
- 打开 https://dnshe.com
- 注册账号(邮箱 + 密码)
- 搜索你想要的域名前缀,比如
meowhouse - 选一个免费后缀,注册
- 注册成功后,先不要做任何 DNS 解析配置,后面交给 Cloudflare 管
第二步:把域名托管到 Cloudflare(5 分钟)
- 打开 https://dash.cloudflare.com/sign-up 注册 Cloudflare 账号
- 登录后点击 Add a Site(添加站点)
- 输入你的 DNSHE 免费域名(如
meowhouse.cc.cd) - 选 Free(免费版),点击 Confirm
卡住怎么办? 新域名没有 DNS 记录,Cloudflare 的"下一步"按钮可能是灰色的。解决方法:手动添加一条 A 记录,随便填个 IP(如 192.0.2.1),然后就能继续了。这条记录后续会被 Tunnel 的 CNAME 自动覆盖,不用担心。
-
Cloudflare 会给你两个 NS 服务器地址,类似:
anna.ns.cloudflare.com hank.ns.cloudflare.com复制这两个地址。
-
回到 DNSHE 后台 → 找到你的域名 → 点击 DNS 服务器 按钮
-
把默认的 DNS 服务器删掉,粘贴 Cloudflare 的两个 NS 地址,保存
-
回到 Cloudflare,点击 Done, check nameservers
-
等几分钟到 1 小时,域名状态变成 Active 就成功了
第三步:Docker 化你的应用(如果你还没做)
如果你的应用是纯前端 HTML,可以跳过这步直接部署。我的是全栈应用(Next.js + SQLite),需要 Docker 化。
TRAE 帮我写了 Dockerfile 和 docker-compose.yml,我贴出来供参考:
Dockerfile(关键部分):
# 多阶段构建
FROM node:20-slim AS builder
RUN apt-get update && apt-get install -y python3 make g++
WORKDIR /app
COPY package*.json ./
RUN npm ci --registry=https://registry.npmmirror.com
COPY . .
RUN npx prisma generate
RUN npm run build
RUN npm prune --omit=dev
FROM node:20-slim AS runner
RUN apt-get update && apt-get install -y sqlite3 tini
WORKDIR /app
COPY --from=builder /app ./
EXPOSE 3000
CMD ["sh", "-c", "npx prisma migrate deploy && node scripts/bootstrap-admin.mjs && npm run start"]
docker-compose.yml(精简版):
services:
meow-house:
build: .
ports:
- "3080:3000"
volumes:
- ./data:/app/data
- ./uploads:/app/public/uploads
environment:
- DATABASE_URL=file:/app/data/meow-house.db
- ENCRYPTION_KEY=你的64位随机密钥
- ALLOWED_ORIGIN=https://你的域名.cc.cd
- COOKIE_SECURE=false
- ADMIN_EMAIL=你的邮箱
- ADMIN_PASSWORD=你的密码
restart: unless-stopped
在 NAS 上执行:
docker-compose up -d
确认应用能正常访问:在浏览器打开 http://192.168.x.x:3080
第四步:安装 Cloudflare Tunnel(10 分钟)
4.1 SSH 登录 NAS
ssh 你的用户名@你的NAS的IP
4.2 下载并安装 cloudflared
# 下载(amd64 架构)
curl -L --output /tmp/cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i /tmp/cloudflared.deb
# 验证安装
cloudflared --version
4.3 登录 + 创建隧道
# 登录(复制弹出的 URL 到浏览器授权)
cloudflared tunnel login
# 创建隧道
cloudflared tunnel create meow-house
注意: 如果你的 NAS 用户没有 home 目录(飞牛 NAS 常见问题),用 sudo 执行所有 cloudflared 命令。
执行后会输出一个隧道 ID(UUID 格式),记下来。
4.4 配置隧道
sudo nano /root/.cloudflared/config.yml
写入:
tunnel: 你的隧道ID
credentials-file: /root/.cloudflared/你的隧道ID.json
ingress:
- hostname: 你的域名.cc.cd
service: http://localhost:3080
- service: http_status:404
注意:
localhost:3080是你应用在 NAS 上的端口,根据实际情况改。
4.5 创建 DNS 路由
sudo cloudflared tunnel route dns meow-house 你的域名.cc.cd
4.6 测试运行
sudo cloudflared tunnel run meow-house
看到 Connection registered 后,用手机流量(断开 WiFi)访问 https://你的域名.cc.cd,能打开就成功了。
按 Ctrl+C 停止测试。
第五步:设置开机自启(Docker 方式)
sudo docker run -d \
--name cloudflared \
--restart unless-stopped \
--network host \
-v /root/.cloudflared:/etc/cloudflared:ro \
cloudflare/cloudflared:latest tunnel run meow-house
验证:
docker ps | grep cloudflared
docker logs cloudflared --tail 20
看到 Connection registered 就说明一切正常。NAS 重启后会自动恢复。
踩过的坑
坑 1:飞牛 NAS 用户没有 home 目录
cloudflared tunnel login 报错 cannot create directory '/home/xxx': Permission denied。
解决: 全部用 sudo 执行,配置文件放在 /root/.cloudflared/,Docker 运行时也用这个路径挂载。
坑 2:Cloudflare 添加站点时"下一步"是灰色的
新注册的域名没有 DNS 记录,Cloudflare 不让继续。
解决: 手动添加一条 A 记录,随便填 192.0.2.1,让流程能继续。后续 Tunnel 创建 CNAME 记录时会自动覆盖。
坑 3:better-sqlite3 在 Docker 里编译失败
SQLite 是 native 模块,Docker Alpine 镜像里编译失败。
解决: 换成 node:20-slim 基础镜像,加上 python3 make g++ 编译工具链,用多阶段构建。
坑 4:Cloudflare 国内访问偶尔抽风
Cloudflare 节点在海外,国内访问有时候会慢。
解决方案: 在 DNSHE 后台也留一个域名解析(虽然不用它做主要解析,但作为备用入口)。帖子中附上"如遇访问较慢请稍等或刷新"的提示。
总结
| 项目 | 花费 |
|---|---|
| 域名 | 0 元(DNSHE 免费) |
| CDN + SSL | 0 元(Cloudflare 免费版) |
| 内网穿透 | 0 元(Cloudflare Tunnel) |
| 服务器 | 0 元(家里 NAS,电费本来就要付) |
| 合计 | 0 元 |
整个过程从零开始,我这样一个完全不会编程的人,在 TRAE 的帮助下花了差不多一个小时就搞定了。如果你也参加了大赛,或者用 TRAE 做了个个人项目想部署上线,这套方案完全可以照搬。
欢迎交流,有问题可以在评论区问我 ![]()
我的作品帖: [【生活娱乐赛道】【已可实际使用】 喵屋 Meow House — 一个零编程铲屎官用 TRAE 做的全栈养猫管理系统 ]
体验地址: https://meowhouse.cc.cd
觉得有帮助的话,也可以看看我的初赛贴子,给我提提意见