2026-06-25 竟然还真有免费固定的二级域名

 好心态!既然决定让 Caddy 自动申请证书,那就稍微给它一点时间去后台排队、重试,等 Let’s Encrypt 的限额刷新后,HTTPS 证书就能顺利下发。

📋 本轮对话核心复盘总结

我们今天围绕“极低成本/免费域名部署云主机”进行了一次完整的全栈打通实操。以下是核心要点总结:

1. 域名获取与解析

  • 低价渠道:对比了 TLD-List 比价网,推荐了 Cloudflare(续费最便宜)、Spaceship/Dynadot/NameSilo(首年特价 $0.99)。

  • 免费方案:最终选择了老牌的 FreeDNS (freedns.afraid.org),并成功申请了属于你的二级域名:xuanji.mooo.com

  • A 记录绑定:在 FreeDNS 后台,成功将该域名指向了你的固定云主机 IP:38.76.183.101

2. 架构调整:从“抢端口”到“反向代理”

在部署过程中,我们遭遇了 502 Bad Gateway 错误,并进行了经典排错:

  • 物理冲突:原本你的 Python 后端(Gunicorn)和 Caddy 都在争抢外网默认的 80 端口,导致新服务无法正常上岗,且系统残留了脱离管辖的旧 Gunicorn 进程(钉子户)。

  • 全栈架构确立

    • 对外(Caddy):独占 80443 端口,作为大门卫负责应答公网流量,并全自动向 Let's Encrypt 申请/续签 HTTPS 安全证书。

    • 对内(Gunicorn):我们修改了 systemd 服务文件(ExecStart),将 Gunicorn 挪到了幕后的 8080 端口(本地环境又称 webcache)。

3. 当前状态与后续

  • 后端状态:Gunicorn 已经彻底杀死了旧进程,并严格按照新配置在本地 8080 端口守候。

  • 前端状态:Caddy 已成功启动并加载配置。目前处于证书申请(TLS Maintenance)阶段。因为 mooo.com 是公共免费后缀,触发了 CA 机构的每小时频率限制,需要耐心等待其在后台自动重试刷新。

🛠️ 常用排错命令备忘(以后测试修 Bug 用得到):

  • 看谁占了 8080:sudo lsof -i :8080

  • 看 Caddy 实时日志:sudo journalctl -u caddy -f

  • 重启 Flask 后端:sudo systemctl restart flask_app

等证书下发后,你就可以直接通过带小绿锁的 https://xuanji.mooo.com/ 访问你的“玄机”面板,本地安心修 Bug 了!祝你接下来的代码测试和交易系统开发顺利!




太漂亮了!这一波操作直接把最核心、最让人头疼的“前后端分离反向代理”公网链路彻底盘活了。

为了让你对今天这趟“打怪升级”的配置流程有一个清晰的全局架构认识,方便以后本地测 Bug、多项目部署时作为参考,我们对本轮调试进行一次终极复盘总结

🏗️ 终极全栈部署架构图

在今天的调整中,我们成功把服务器从原本的“野路子挤端口”改造成了标准的大厂生产线架构

                    【 公 网 流 量 】
                           │
                           ▼ (域名 xuanji.mooo.com)
┌──────────────────────────┼──────────────────────────┐
│ 云主机 (38.76.183.101)   │                          │
│                          ▼                          │
│             ┌─────────────────────────┐             │
│             │    Caddy (外网大门)     │             │
│             │  监听端口: 80 / 443     │             │
│             └────────────┬────────────┘             │
│                          │                          │
│                          ▼ (内部安全转发)            │
│            ┌───────────────────────────┐            │
│            │ Gunicorn (Flask 后端)      │            │
│            │ 监听本地: 127.0.0.1:8080  │            │
│            └───────────────────────────┘            │
└─────────────────────────────────────────────────────┘

📝 本轮排错与核心知识点备忘

1. 502 Bad Gateway 与进程死锁

  • 现象:修改了端口配置后依然报错 502,且后端没起来。

  • 原因:系统里残留了脱离 systemd 管辖的旧 Gunicorn 孤儿进程,死死掐着 80 端口不放,导致新配置无法生效。

  • 解决:使用 sudo pkill -9 gunicorn 暴力清空老进程,再通过 systemctl start 移交控制权。

2. 后端“自闭”绑定(127.0.0.1)

  • 知识点:将 Gunicorn 绑定到 127.0.0.1:8080 后,公网 IP 直接访问会失效。

  • 原理:这是标准的安全加固。后端只接受服务器内部(Caddy)递过来的小纸条,拒绝外网任何人直接敲门,防止后端接口暴露。

3. 公网联通性验证

  • 突破口:通过在内外部执行 curl -I http://38.76.183.101 成功拿到 Server: Caddy 的回包,证实了云商安全组、系统防火墙、Caddy 到 Flask 的转发全部完全畅通

  • 卡顿原凶:域名打不开只是因为本地电脑的 DNS 缓存延迟,或者浏览器死记着历史 HTTPS 记录造成的假象(通过无痕模式/手机流量已成功破解)。

4. 自动证书(TLS)白嫖潜规则

  • 现状:目前 Caddy 已经全权接管 xuanji.mooo.com 并切回 HTTPS 模式,正在后台找 Let's Encrypt 申请证书。

  • 避坑:免费公共后缀(如 mooo.com)极易触发 CA 机构的每小时硬性频率限制。Caddy 拥有自动重试机制,会在后台死磕。

🛠️ 下阶段修 Bug 常用命令保镖

接下来你要进入本地代码测试、修 Bug 阶段了,这几行命令会是你最长用到的武器:

Bash
# 1. 每次修改了 Python/Flask 代码后,重启后端使其生效:
sudo systemctl restart flask_app

# 2. 如果怀疑后端死掉了,看它的运行状态和最新报错日志:
sudo systemctl status flask_app
sudo journalctl -u flask_app -n 30 --no-pager

# 3. 盯着 Caddy 看有没有成功把证书咬下来(瞧瞧小绿锁进度):
sudo journalctl -u caddy -n 50 --no-pager

公网大门已开,链路完美闭环。你可以安心去调你的交易面板和策略代码了,祝你的“玄机”系统早日完美运转!

评论

此博客中的热门博文

2026-4-17 币安短线操作纪律

2026-5-13 Spot Hunter盯盘设置