AI编程Agent从零构建部署网站:Docker容器化到HTTPS全流程

很多人以为,借助Cloud Code、Codex这类AI编程Agent,就能轻松搭建一个网站。但事实上,仅靠"提示词"远远不够——把代码变成一个真正在线、拥有安全连接的网站,才是真正的挑战所在。
本文基于YouTube频道NeuralNine的一期完整教程,梳理了如何在不亲自写前端代码的前提下,用AI Agent完成从开发、容器化、服务器部署到HTTPS加密的完整链路。这份指南特别适合两类人:完全不懂技术的新手,以及懂技术但不想碰CSS/JavaScript/HTML的开发者。
AI编程Agent为什么还不够
作者在开篇就点明了核心观点:编程Agent只解决了整个流程的一小部分。当你让Cloud Code生成一个漂亮的静态网站后,真正需要教程指导的,是接下来的每一步——如何打包成Docker镜像、如何购买和配置VPS服务器、如何用rsync上传文件、如何通过Certbot获取Let's Encrypt证书实现HTTPS。
这里需要理解AI编程Agent的能力边界。Cloud Code是Anthropic推出的基于Claude模型的命令行编程Agent,能够理解项目上下文并自主编写、修改代码。Codex则是OpenAI推出的类似工具。这类Agent的核心能力在于代码生成和重构,但它们本质上运行在本地开发环境中,对网络配置、服务器管理、SSL/TLS证书等基础设施层面的操作缺乏直接控制能力。从技术实现上看,这些Agent通过读取项目文件树、理解代码依赖关系来生成或修改代码,但它们无法直接SSH到远程服务器执行命令,也无法操作DNS记录或管理防火墙规则。DevOps知识体系涵盖了持续集成(CI)、持续部署(CD)、基础设施即代码(IaC,如Terraform、Ansible)、容器编排(如Kubernetes)、监控告警(如Prometheus + Grafana)等多个维度,是将代码转化为可靠线上服务的关键桥梁。这套知识体系的复杂度并不低于编写代码本身,而当前的AI编程Agent尚未系统性地覆盖这一领域。
这个视角很有价值。当前大量AI编程内容停留在"如何写好Prompt"的层面,而生产环境的部署知识往往被忽略。一个只能在localhost运行的项目,和一个拥有安全证书、公网可访问的网站,中间隔着一整套DevOps知识。
本次教程使用的技术栈非常清晰:
- 编程Agent:Cloud Code(作者认为目前最强,但也提到刚发布的Kimi K2值得关注)
- 前端框架:Astro.js(适合静态内容驱动型网站)
- 容器化:Docker + Docker Compose
- 托管服务:hosting.com的VPS(带root权限的Linux服务器)
- HTTPS:Certbot + Let's Encrypt
关于Kimi K2,这是月之暗面(Moonshot AI)于2025年发布的大语言模型,采用了万亿参数级别的混合专家(Mixture of Experts, MoE)架构。MoE架构的特点是模型总参数量巨大,但每次推理时只激活其中一部分专家网络,从而在保持强大能力的同时控制计算成本。具体而言,MoE模型包含多个独立的前馈网络(即"专家"),由一个门控网络(Gating Network)根据输入动态选择激活哪些专家。例如,一个拥有1万亿总参数的MoE模型,每次推理可能只激活其中300亿参数,这使其推理成本远低于同等规模的稠密模型。Google的Switch Transformer和Mixtral是这一架构的早期代表。Kimi K2在SWE-bench(软件工程基准测试)和HumanEval(代码生成基准测试)等多项编程评测中表现突出,被视为Claude和GPT的有力竞争者,反映了AI编程Agent领域竞争日趋激烈的现状。
用Astro搭框架,让AI Agent填充内容
作者的一个实用技巧是:先手动创建Astro项目框架,再交给AI Agent。通过npm create astro@latest(或pnpm)初始化项目,选择基础模板,这样就为Agent提供了明确的工作边界和结构。
Astro.js是一个以内容为中心的现代Web框架,其核心设计理念是"零JavaScript by default"——默认情况下不向浏览器发送任何JavaScript代码,只输出纯静态HTML和CSS。这使得它在性能上远超React、Vue等SPA(单页应用,Single Page Application)框架。传统SPA框架需要将整个应用的JavaScript bundle发送到浏览器,由客户端执行渲染,这会导致首次加载时间长、低端设备体验差等问题。Astro则在构建时将所有页面预渲染为静态HTML,浏览器收到的就是可以直接展示的页面内容,无需等待JavaScript下载和执行。Astro还支持"岛屿架构"(Islands Architecture),这一概念由Etsy前端架构师Katie Sylor-Miller提出,并由Preact作者Jason Miller进一步发展。它允许在需要交互的局部区域(如轮播图、评论组件)选择性加载JavaScript组件,同时保持页面其余部分为纯静态。每个"岛屿"都是独立水合(hydration)的,互不影响。对于个人主页、博客、文档站等内容驱动型网站,Astro能生成极小的构建产物(通常仅几十KB),加载速度极快,Lighthouse性能评分轻松达到满分,非常适合部署在轻量级Web服务器上。
接下来是提供设计所需的两样东西:设计思路和资源素材。作者把AI生成的头像图片放入source/assets目录,然后用自然语言向Cloud Code描述整个网站结构——左侧头像、右侧标题"Mike Smith AI"、副标题slogan、三个特性图标(可靠、高效、前沿)、五项服务(MLOps、Agentic系统、微调、RAG管线、合规检查),以及最后的联系方式区块,并指定导航蓝与白色交替的配色。

这里提到的几项服务值得简要说明:MLOps(Machine Learning Operations)是将机器学习模型从实验阶段推向生产部署的工程实践,涵盖数据版本管理、模型训练流水线、A/B测试、模型监控和漂移检测等环节;Agentic系统指的是能够自主规划、执行多步骤任务的AI代理系统,典型代表如AutoGPT、LangChain Agent等;微调(Fine-tuning)是在预训练模型基础上用特定领域数据进行二次训练,使模型适应特定任务或领域的知识;RAG管线(Retrieval-Augmented Generation)是将检索系统与大语言模型结合,让模型能基于外部知识库生成更准确回答的技术架构,解决了LLM知识截止和幻觉问题。这些服务反映了当前AI咨询市场的主流需求方向。
结果令人印象深刻:作者只需按几次回车运行构建命令,网站就自动生成完成。虽然第一次不一定完美,但可以通过持续对话来调整细节。作者刻意没有把重点放在"如何Prompt"上,因为这部分读者大多已经熟悉——真正的干货在部署环节。
Docker容器化:从localhost到可移植部署
这是从"能跑"到"可部署"的关键一跃。作者采用了**多阶段构建(multi-stage build)**的Dockerfile策略:
FROM node:22-bookworm-slim AS build
WORKDIR /app
RUN corepack enable
COPY . .
RUN pnpm install --frozen-lockfile
RUN pnpm build
FROM nginx:1.27-alpine
COPY --from=build /app/dist /usr/share/nginx/html
多阶段构建是Docker 17.05(2017年发布)引入的重要特性,解决了容器镜像臃肿的经典问题。传统做法中,构建工具链(如Node.js运行时、npm包、编译器、构建脚本)会残留在最终镜像中,导致生产镜像可能达到数百MB甚至数GB。通过定义多个FROM指令,将构建阶段和运行阶段彻底分离:第一阶段使用node:22-bookworm-slim镜像(基于Debian Bookworm的精简版本,约200MB)安装依赖并构建Astro项目,包含完整的开发工具链;第二阶段使用nginx:1.27-alpine镜像(基于Alpine Linux,仅约7MB),仅从第一阶段通过COPY --from=build指令拷贝构建产物(dist目录中的静态HTML/CSS/JS文件)。Alpine Linux是一个以安全为导向的轻量级Linux发行版,使用musl libc和BusyBox替代传统的glibc和GNU工具,镜像体积极小。最终的生产镜像可压缩到10-30MB级别,不包含任何Node.js运行时或源代码。Nginx在这里充当高性能静态文件服务器的角色,它基于事件驱动的异步架构,单个worker进程就能处理数万并发连接,以极低的内存消耗(通常几十MB)提供高并发的文件分发能力,这对于轻量VPS尤为重要。

配套的docker-compose.yaml定义了web服务,将容器80端口映射到主机80端口,并设置restart: unless-stopped保证稳定性。这个重启策略意味着除非手动停止容器,否则在容器崩溃或服务器重启后,Docker守护进程会自动重新启动容器,确保网站持续可用。构建过程中作者遇到了一个典型问题:pnpm在CI环境下的交互报错,解决方案是设置ENV CI=true,并添加.dockerignore文件排除node_modules、dist、.astro、.git等无关文件。
关于这个CI兼容性问题值得展开说明:pnpm是一个高效的Node.js包管理器,与npm和Yarn不同,它通过硬链接和内容寻址存储(Content-Addressable Storage)实现磁盘空间节约和安装速度提升。传统的npm会为每个项目独立复制一份完整的依赖包,而pnpm在全局存储中只保留每个包的一份副本,并通过硬链接在各项目的node_modules中创建引用。--frozen-lockfile参数确保安装过程严格按照pnpm-lock.yaml文件执行,不会意外更新依赖版本,这是保证构建可重复性的关键措施。在Docker构建的非交互式环境中,pnpm可能会触发交互式提示(如Node.js的corepack工具在首次启用pnpm时要求用户确认下载),而Docker构建过程无法响应stdin输入,导致构建挂起或失败。设置ENV CI=true环境变量是业界通用做法,它告知pnpm、npm、Yarn以及其他工具(如create-react-app)当前处于自动化环境中,应跳过所有交互提示并采用默认行为。.dockerignore文件的作用类似于.gitignore,它指定在执行COPY . .时哪些文件和目录不应被复制到构建上下文中,避免将本地的node_modules(可能有数百MB)传输到Docker守护进程,显著加快构建速度。
值得一提的是,作者强调这些Docker配置文件本身也可以交给编程Agent生成——你不必手动敲每一行。
VPS服务器部署与文件上传
有了容器,就需要一台服务器。作者选择了hosting.com的VPS方案(本视频赞助商),配置为Ubuntu 24.04 LTS,位于法兰克福节点。VPS(Virtual Private Server,虚拟专用服务器)是通过虚拟化技术(如KVM、Xen或VMware)在物理服务器上划分出的独立运行环境,每个VPS拥有独立的操作系统、内存、CPU和存储资源。与共享主机不同,VPS提供root权限,允许用户完全控制服务器配置,可以自由安装软件、修改内核参数、配置防火墙规则;与独立物理服务器相比,VPS的成本则低得多(通常每月几美元到几十美元)。Ubuntu 24.04 LTS(Long Term Support)是Canonical于2024年发布的长期支持版本,将获得5年的标准安全更新维护(扩展安全维护ESM可达10年),是服务器部署最主流的Linux发行版选择之一,其apt包管理系统和庞大的社区支持使其特别适合初学者。通过SSH(Secure Shell)以root用户登录服务器后,就获得了完整的终端控制权。
在文件上传方式上,作者列举了三种选择——Git仓库推送、SCP、rsync,并选用了自己偏好的rsync:
rsync -avz --progress personal-website root@<IP>:/root/personal-website
rsync是Unix/Linux系统中强大的文件同步工具,由Andrew Tridgell和Paul Mackerras于1996年开发,其核心优势在于增量传输算法——通过对比源文件和目标文件的滚动校验和(rolling checksum)与强校验和(MD5),精确定位文件中发生变化的数据块,只传输差异部分,而非每次全量上传。这意味着当你修改了一个10MB文件中的几行代码,rsync可能只需要传输几KB的数据。参数-a表示归档模式(保留权限、时间戳、符号链接、设备文件等元信息),-v表示详细输出(显示正在传输的文件列表),-z启用传输过程中的gzip压缩以节省带宽,--progress显示每个文件的传输进度条。相比SCP的全量拷贝方式(每次传输完整文件内容),rsync在后续更新部署时效率显著更高,特别是当项目文件众多但只修改了少量文件时;相比Git推送方式,rsync不需要在服务器上安装和配置Git仓库,也避免了将.git历史记录(可能比项目本身更大)等非必要内容传输到生产服务器的问题。对于频繁迭代的个人项目,rsync提供了最直接、最高效的部署路径。

上传完成后,服务器上还缺少Docker环境。作者演示了从Docker官方Ubuntu安装页面复制粘贴命令的完整流程:更新包索引(apt-get update)、安装必要的证书和传输工具(ca-certificates、curl)、添加Docker的GPG密钥和APT仓库源、最后执行apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin安装Docker引擎及其组件。这里docker-ce是Docker社区版引擎,containerd.io是底层容器运行时(负责容器的生命周期管理),docker-compose-plugin则是以插件形式集成的Compose工具(取代了旧版独立的docker-compose二进制文件)。装好Docker后,一条docker compose up --build就能把整个网站跑起来。Docker Compose会按照YAML文件的定义,自动执行镜像构建、创建网络、启动容器等一系列操作。此时访问服务器IP,网站已经在线——但连接尚不安全,浏览器地址栏没有HTTPS标识,意味着客户端与服务器之间的通信是明文传输的,存在被中间人窃听或篡改的风险。
Certbot配置HTTPS证书:为IP地址加密
这是整个教程中最具技术含量的部分。通常HTTPS证书是绑定域名的,但作者演示了一个进阶技巧:为纯IP地址申请Let's Encrypt证书。
要理解这一步的技术背景:HTTPS(HyperText Transfer Protocol Secure)是HTTP协议的安全版本,通过TLS(Transport Layer Security,传输层安全协议)在客户端和服务器之间建立加密通道。TLS握手过程中,服务器向客户端出示数字证书,证书由受信任的证书颁发机构(Certificate Authority, CA)签发,证明服务器身份的真实性。Let's Encrypt是由互联网安全研究组(ISRG,Internet Security Research Group)运营的免费、自动化证书颁发机构,自2015年正式推出以来已颁发超过数十亿张证书,将全网HTTPS覆盖率从不到40%推高至超过80%,是互联网安全领域最具影响力的基础设施之一。其背后的ACME(Automatic Certificate Management Environment)协议是一个标准化的证书自动管理协议(RFC 8555),定义了完整的自动化证书签发流程:申请者通过在Web服务器的/.well-known/acme-challenge/路径下放置特定验证文件(一个包含随机令牌和账户密钥指纹的文本文件),向CA证明对该服务器的控制权,这被称为HTTP-01验证方式。Let's Encrypt的验证服务器会向申请的域名或IP发起HTTP请求,检查该文件是否存在且内容正确,通过验证后即签发证书。Certbot是由电子前沿基金会(EFF)开发的ACME协议最流行的客户端实现,支持自动完成验证、下载证书、配置Web服务器等全流程操作。
作者首先创建了certbot/www和letsencrypt目录,然后编写Nginx配置文件,在80端口的server块中加入ACME challenge的location(指向/.well-known/acme-challenge/),用于完成证书验证。这个location块将验证请求代理到Certbot容器写入验证文件的共享目录,使Let's Encrypt的验证服务器能够成功读取到验证令牌。
随后在docker-compose中新增一个certbot服务,使用certbot/certbot:latest镜像,并挂载共享卷(web服务只读挂载certbot目录和letsencrypt目录)。这种卷共享机制是容器化环境中服务间协作的标准模式:Certbot容器将验证文件写入共享卷,Nginx容器从同一卷中读取并对外提供访问。作者特别提醒:IP地址的HTTPS支持需要Certbot 2.x以上版本(他实测的57版本满足要求),因为使用了short-lived(短期有效)证书profile——这是IP证书唯一支持的类型。
通常Let's Encrypt证书有效期为90天并支持通过Certbot的renew命令自动续期(通常配合cron定时任务或systemd timer实现,每天运行两次检查,在证书到期前30天自动续期),但为IP地址签发的证书属于特殊情况。由于IP地址的所有权验证比域名更复杂——IP地址由区域互联网注册机构(如ARIN负责北美、RIPE NCC负责欧洲、APNIC负责亚太)分配给ISP或托管商,可能随时被重新分配给其他用户;而域名通过WHOIS记录和DNS控制有更可靠的所有权证明机制——Let's Encrypt仅对IP地址支持短期证书(short-lived profile),有效期仅7天,且不支持通配符。这也是为什么生产环境强烈建议使用域名的根本原因:域名不仅能获得90天有效期的标准证书和自动续期支持,还提供了品牌识别、CDN接入、邮件配置(MX记录)、子域名管理等诸多附加价值。
申请证书的核心命令指定了short-lived profile、IP地址、证书名称和邮箱。成功后,证书保存在/etc/letsencrypt/live/<IP>/fullchain.pem(包含服务器证书和中间证书的完整证书链,浏览器通过中间证书可以追溯到根证书从而建立信任链),私钥为privkey.pem,有效期仅7天。
最后一步是修改Nginx配置以真正提供HTTPS服务:
- 80端口返回301重定向(永久重定向,浏览器会缓存此重定向),把所有HTTP流量导向HTTPS,确保用户始终使用加密连接
- 新增443端口的server块,配置
ssl_certificate指向fullchain.pem(证书链)和ssl_certificate_key指向privkey.pem(私钥),启用TLS加密 - 在web服务的docker-compose配置中挂载letsencrypt目录,让Nginx容器能访问证书文件;同时将容器443端口映射到主机443端口
重新执行docker compose down和docker compose up --build后,访问IP地址,浏览器终于显示"连接安全"(地址栏出现锁形图标),HTTPS网站正式上线。
总结:AI建站的完整技术路径
这份教程的真正价值,不在于用AI生成网站有多神奇,而在于它补全了从Prompt到生产部署之间被普遍忽视的鸿沟。作者反复强调"编程Agent还不够",正是提醒我们:AI能加速代码生成,但容器化、服务器运维、证书管理这些工程环节,仍需要扎实的基础知识。
需要注意的是,教程为了演示省略了域名购买环节,直接用IP地址配置HTTPS——这只是短期方案(证书7天过期)。生产环境中,你依然需要注册域名(通过Namecheap、Cloudflare Registrar等域名注册商),配置DNS A记录将域名指向服务器IP,并针对域名申请标准的长期证书(90天有效期,支持自动续期)。此外,完整的生产部署还应考虑防火墙配置(如UFW或iptables,仅开放80、443和SSH的22端口,拒绝所有其他入站流量)、日志监控(如使用ELK Stack——Elasticsearch、Logstash、Kibana组合——或简单的logrotate日志轮转配置防止磁盘写满)、自动化CI/CD管线(如GitHub Actions在代码推送后自动构建Docker镜像并通过SSH部署到服务器)、数据备份策略(定期快照或rsync到异地备份服务器)、以及DDoS防护(如接入Cloudflare CDN,利用其全球边缘节点缓存静态资源并过滤恶意流量)等环节,这些都是本教程未涉及但同样重要的运维知识。
对于想要快速拥有个人网站的开发者而言,这套"Astro + Docker + VPS + Certbot"的组合,配合AI编程Agent,确实提供了一条门槛更低、也更接近真实生产流程的路径。它展示了一个重要趋势:AI不会取代DevOps知识,而是让开发者能将更多精力从重复性的编码工作中释放出来,投入到架构设计和运维保障等更高层次的工程决策中。
相关推荐

Qwen3 27B深度评测:推理能力强大却过度思考的解决方案
深度评测Qwen3 27B开源模型的推理能力与过度思考问题。分析27B参数规模的性能优势、过度思考的原因与代价,并提供关闭思考模式、分场景配置等实用优化建议。

Gemini 3.7 Flash发布:智能体经济学之争全面打响
Google DeepMind发布Gemini 3.7 Flash,聚焦编程与智能体能力,激进定价抢占市场。OpenAI推出Ultrafast押注延迟,DeepSeek持续施压成本效率,AI行业智能体经济学竞争格局深度解析。

AI算法工程师自学路线:从零基础到拿到Offer的完整规划
详解AI算法工程师自学路线图,涵盖基础阶段、核心算法、CV与NLP方向选择及转行就业策略。帮助零基础和跨专业学习者建立系统学习规划,掌握从需求分析到模型部署的全链路能力。