零编程 + 零成本:我是怎么把 TRAE 作品部署到公网的(DNSHE 免费域名 + Cloudflare Tunnel + 家庭 NAS)

零编程 + 零成本:我是怎么把 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 个。

  1. 打开 https://dnshe.com
  2. 注册账号(邮箱 + 密码)
  3. 搜索你想要的域名前缀,比如 meowhouse
  4. 选一个免费后缀,注册
  5. 注册成功后,先不要做任何 DNS 解析配置,后面交给 Cloudflare 管

第二步:把域名托管到 Cloudflare(5 分钟)

  1. 打开 https://dash.cloudflare.com/sign-up 注册 Cloudflare 账号
  2. 登录后点击 Add a Site(添加站点)
  3. 输入你的 DNSHE 免费域名(如 meowhouse.cc.cd
  4. Free(免费版),点击 Confirm

:warning: 卡住怎么办? 新域名没有 DNS 记录,Cloudflare 的"下一步"按钮可能是灰色的。解决方法:手动添加一条 A 记录,随便填个 IP(如 192.0.2.1),然后就能继续了。这条记录后续会被 Tunnel 的 CNAME 自动覆盖,不用担心。

  1. Cloudflare 会给你两个 NS 服务器地址,类似:

    anna.ns.cloudflare.com
    hank.ns.cloudflare.com
    

    复制这两个地址。

  2. 回到 DNSHE 后台 → 找到你的域名 → 点击 DNS 服务器 按钮

  3. 把默认的 DNS 服务器删掉,粘贴 Cloudflare 的两个 NS 地址,保存

  4. 回到 Cloudflare,点击 Done, check nameservers

  5. 等几分钟到 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

:warning: 注意: 如果你的 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 做了个个人项目想部署上线,这套方案完全可以照搬。

欢迎交流,有问题可以在评论区问我 :backhand_index_pointing_down:


我的作品帖: [【生活娱乐赛道】【已可实际使用】 喵屋 Meow House — 一个零编程铲屎官用 TRAE 做的全栈养猫管理系统 ]

体验地址: https://meowhouse.cc.cd

觉得有帮助的话,也可以看看我的初赛贴子,给我提提意见

1 个赞

反代理试试?

2 个赞