一个Web应用在本地跑通,和它在生产环境里安全地跑起来,中间隔着一整套没人教过的东西。服务器怎么开、端口怎么封、证书怎么签、日志怎么看——这些事在教程里常常被一句"部署上线"带过。

freeCodeCamp.org的YouTube频道最近上线了一门全栈部署课程,把这套流程从底层讲了一遍。课程由Imad Saddik开发,总时长11小时。它的设计思路有点反常规:先让你把所有事情手动做一遍,再引入CI/CD自动化。

打开网易新闻 查看精彩图片

这个顺序不是随便定的。跳过手动环节直接上流水线,出问题时你面对的是一堆看不懂的报错;而亲手配过一遍之后,自动化工具在替你做什么,心里是有数的。

从一台裸机开始

课程的起点是一台Ubuntu服务器。第一步不是装软件,而是把门锁上:配置SSH密钥认证,然后彻底关闭密码登录和root登录。这一步做完,暴力破解的入口就少了一大半。

接着是防火墙。用UFW封掉不需要的端口,再上Fail2Ban,让它在检测到暴力破解尝试时自动封禁来源IP。这两样东西配置起来不复杂,但很多人的服务器从买来到报废都没装过。

运行环境部分覆盖了Python和Node.js的安装。对于内存吃紧的服务器,课程里还讲了swap内存的配置——这是小配置机器上容易被忽略的一环。后台进程则交给GunicornSupervisor来管理。

数据、搜索与全球分发

数据层面,课程演示了自托管一个轻量的Meilisearch实例,并且用独立的系统用户把它隔离起来,再配上每日数据库快照的自动化。搜索服务单独跑、单独隔离,是权限控制上的常规做法,但自己动手配一遍和看别人配,理解深度不一样。

对外这一层,涉及的东西更多:用DNS把自定义域名映射过去,用Let's Encrypt签SSL证书,把Nginx配成反向代理,再接上Cloudflare的CDN做边缘缓存。域名、证书、代理、缓存,这四件事串起来才是一条完整的访问链路。

自动化与持续安全

手动流程走通之后,课程才进入GitHub Actions。这里构建的流水线覆盖了代码检查、格式化、单元测试和部署,并且支持原子化的虚拟环境回滚——部署出问题时能退回到上一个可用状态。

安全部分没有停在部署那一刻,而是做成了持续动作:

  • 软件成分分析(SCA),检查依赖里有没有已知漏洞
  • 用Bandit做静态应用安全测试(SAST)
  • 用OWASP ZAP做动态测试(DAST)

这三类工具分别对应依赖、代码和运行时三个层面,组合起来才算把安全检查铺开。

看得见才算管得住

课程最后一块是可观测性。用Btop监控CPU、内存和孤儿进程,用GoAccess实时解析Nginx访问日志,识别并拦截恶意的机器人流量。

日志这件事的差别在于:不看日志,你只知道服务器在跑;看了日志,你才知道谁在敲你的门。

整门课下来,一个Vue.jsFastAPI的应用会从手动部署的状态,变成一条完整的、面向生产的自动化流水线。课程已经在freeCodeCamp.org的YouTube频道上线,完整观看时长11小时。