跳转至

部署记录

📄 第一篇文章 Markdown

# 从零搭建 AI 博客:MkDocs + Docker + Cloudflare Pages

> 本文记录我如何从零开始,用 MkDocs 构建博客,并通过 Docker 和 Cloudflare Pages 实现自动化部署与域名绑定。目标是打造一个轻量、可维护、工程师友好的知识输出平台。

---

## 🧰 环境准备

- macOS + zsh
- Python 3.11 + uv 虚拟环境管理
- Docker + Docker Desktop
- Git + GitHub
- Cloudflare Pages + 自定义域名 littlec.tech

---

## 🏗️ 初始化 MkDocs 项目

```bash
uv venv
source .venv/bin/activate
pip install mkdocs mkdocs-material
mkdocs new .
mkdocs serve
  • 本地访问 http://127.0.0.1:8000 验证首页
  • 修改 mkdocs.yml 配置中文标题与主题
  • 创建 docs/index.md 内容:“欢迎来到 Li 的 AI 学习笔记”

🐳 构建 Docker 镜像(开发预览)

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["mkdocs", "serve", "-a", "0.0.0.0:8000"]
docker build -t ai-blog:dev .
docker run --rm -p 8000:8000 ai-blog:dev

🏭 构建生产镜像(多阶段 + Nginx)

# 构建阶段
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN mkdocs build --clean

# 部署阶段
FROM nginx:alpine
COPY --from=builder /app/site /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
docker build -t ai-blog:nginx .
docker run --rm -p 9090:80 ai-blog:nginx

浏览器访问 http://127.0.0.1:9090 验证生产站点。


🚀 推送到 GitHub

git init
git remote add origin git@github.com:xiaoxiaoc111/ai-blog.git
git add .
git commit -m "初始化博客项目"
git push -u origin main

🌐 部署到 Cloudflare Pages

  • 登录 Cloudflare → Pages → 创建项目
  • 连接 GitHub 仓库 ai-blog
  • 构建参数填写:
  • Build command: mkdocs build
  • Output directory: site
  • Root directory: .

部署成功后生成预览域名:

https://ai-blog-7jw.pages.dev

🔗 绑定自定义域名 littlec.tech

  • 在 Pages 项目中添加域名 littlec.tech
  • 在 DNS 设置中添加 CNAME 记录:
    名称:@ 或 www 值:ai-blog-7jw.pages.dev
  • 验证成功后可访问:
    https://littlec.tech

✅ 总结与展望

这次部署过程让我重新梳理了静态站点构建、容器化、自动化部署与域名绑定的完整流程。后续计划包括:

  • 内容结构优化(分类、导航、搜索)
  • GitHub Actions 自动构建
  • 添加 AI 工具使用记录与技术笔记
  • 持续探索知识输出与自动化集成的最佳实践

如果你也想搭建一个轻量博客,不妨试试 MkDocs + Cloudflare Pages,简单、稳定、免费,还支持自定义域名和 HTTPS。 ```


你可以直接复制这段 Markdown 保存到 docs/deploy.md
要不要我帮你顺便生成一个更新后的 mkdocs.yml,把这篇文章加到导航栏里?