售前学院

全栈项目上线实录:从代码到可访问的 https

以本站真实上线为例,拆解域名/服务器/Docker/HTTPS 各环节的角色关系、典型坑与系统化排障方法。

技术广度基础12 分钟读完更新于 2026-09-08

📌 一句话结论

部署不是"把代码传上去",而是打通五层链路:代码 → 容器 → 端口 → 防火墙 → DNS/证书——每一层都可能断,排障的方法是逐层探测,而容器日志是唯一真相源

🧠 知识要点

各角色是什么关系(先建地图,再动手)

角色 大白话 关键认知
GitHub 配方手册 唯一真相源;本地/服务器都从它拉
服务器 商铺 公网可达的营业场所;选香港是免备案+大陆快
Docker 标准化厨房 环境100%一致;配置改了必须重启容器才生效
域名 门牌 唯一属于你的资产;子域名免费无限,可随时改指向
DNS 解析 指路牌 A 记录把名字翻译成 IP;分钟级生效
HTTPS 证书 营业执照 Caddy 这类工具全自动申请续期,别手动买

一次上线的标准步骤(实测可照抄)

  1. 服务器:apt update && upgrade → 装 Docker → clone 代码 → 加 swap(小内存机跑构建防 OOM)
  2. DNS:@www 两条 A 记录 → 服务器 IP
  3. 防火墙:放行 22/80/443(云厂商默认模板经常缺 443!)
  4. .env(站点 URL 等)→ docker compose up -d --build
  5. 验收四件套:https 绿锁 → 注册打卡 → 换设备登录进度还在 → www 跳转正常

本次真实踩过的五个坑(都是通用坑)

  1. 空环境变量炸构建env.X ?? fallback 只防"不存在"不防"空字符串"——边界测试必须在与生产一致的变量状态下做
  2. 配置更新未重启:文件改了、容器还在跑旧配置——改配置必须配 docker compose restart
  3. 云防火墙缺 443:容器端口映射正常 ≠ 公网可达;docker ps 一切正常但外面超时,先查云防火墙
  4. 检测工具自身故障:探测报错 ≠ 网站坏了;对照实验(同样的工具访问百度)一招隔离变量
  5. 第三方安装脚本 404:教程会过时,以官方文档为准;修完把文档改对,让下一个人不踩

系统化排障五步(可迁移到任何技术问题)

① 看报错找"主角"(报错在对谁操作?域名/IP/文件名直接暴露问题层)
② 逐层探测:DNS → 防火墙 → 端口 → 容器 → 应用,哪层断修哪层
③ 日志为准:docker compose logs 是唯一真相源,不猜
④ 对照实验:怀疑工具本身时,先测已知正常的对象
⑤ 复现验证:修复要在和生产一致的条件下验证,再上线

💼 面试怎么问

"你部署过项目吗?讲讲过程。"——面试官想听的不是成功,是你遇到问题怎么想。推荐叙事结构:

"我部署全栈站点时遇到一个典型问题:容器全部健康、本机 curl 正常,但公网 HTTPS 一直超时。我逐层探测:80 通、HTTP 返回 308 证明应用健康,443 不通——问题锁定在云防火墙,默认模板没开 443。放行后 Caddy 十秒拿到证书。这次给我的最大收获是:容器端口映射正常不等于公网可达,中间还有云厂商防火墙这层;以及排障要逐层隔离,日志是唯一真相源。"

"为什么选香港服务器/Caddy/SQLite?"——每个选型都要能讲出"按场景取舍":免备案省 2-4 周、Caddy 零配置证书省心智、SQLite 零运维但用 volume 保数据——展示的不是用了什么,而是为什么这么选(这正是售前的核心能力:方案设计)。

✅ 自检清单

  • 能画出"访客 → DNS → 防火墙 → Caddy → 应用 → 数据卷"的完整链路图
  • 能解释:为什么改了配置文件还要重启容器
  • 知道 ??|| 对"空字符串"的行为差异
  • 公网服务器必做:系统更新 + 关密码登录 + 只开必要端口
  • 排障时能说出"我现在在验证哪一层"
  • 续费日历已设:服务器和域名到期前提醒(断费 = 简历链接失效)

来源与核实:本站 2026-09 上线第一手实录(docs/上线实录_从代码到https.md):香港轻量服务器 + Docker + Caddy + DNSPod 域名 · 已人工核实