Article
2026-06-27-personal-site项目初始化技术方案
个人项目
2026-06-27 personal-site 项目初始化技术方案
创建日期:2026-06-27
目标
初始化一个最小化个人站点项目 personal-site,部署到 Ubuntu-3。
第一阶段只建立稳定、简单、适合 AI Agent 协作的项目骨架和部署通路。业务功能保持克制,只预留文章和简历两个内容入口,不做复杂后台。
已确认决策
- 项目名:
personal-site - 本地目录:
/Users/xuhuan/workspace_new/project/personal-site - 架构:前后端暂不分离,一个 Next.js 项目承载站点
- 站点风格:极简个人主页,偏工程师/创作者,但保留基本 UI 质感
- 内容形态:文章使用 Markdown 文件,先放在项目仓库内
- 文章迁移:本阶段不迁移旧文章,内容目录可以先为空
- 后端/数据库:本阶段不引入数据库,也不做独立 API 服务
- 部署目标:Ubuntu-3
- 部署方式:GitHub Actions 构建 Docker 镜像,推送到 GHCR,Ubuntu-3 使用 Docker Compose 拉取并运行
- 服务器准备:Ubuntu-3 可以安装 Docker 和 Compose plugin
- 域名:后续直接使用正式域名切换到新站点
技术栈
应用
- Next.js App Router
- TypeScript
- Tailwind CSS
- 少量 shadcn/ui 组件
- Markdown 渲染:
react-markdown - Markdown 扩展:
remark-gfm - 代码高亮:
rehype-highlight
选择 react-markdown 而不是 MDX,是因为第一阶段文章只有 Markdown,不需要在文章里嵌入 React 组件。这样更简单,Agent 修改和调试成本更低。
工程
- 包管理:
pnpm - 代码质量:ESLint + TypeScript check
- 构建产物:Docker image
- 镜像仓库:GitHub Container Registry
- CI/CD:GitHub Actions
- 运行时:Docker Compose on Ubuntu-3
推荐项目结构
personal-site/
app/
page.tsx
articles/
page.tsx
[slug]/
page.tsx
resume/
page.tsx
layout.tsx
globals.css
components/
layout/
markdown/
ui/
content/
articles/
.gitkeep
resume/
resume.md
lib/
content/
articles.ts
markdown.ts
public/
infra/
compose/
docker-compose.yml
.github/
workflows/
deploy.yml
Dockerfile
.dockerignore
.env.example
AGENTS.md
README.md
package.json
pnpm-lock.yaml
内容约定
文章文件放在:
content/articles/*.md
文章 frontmatter:
---
title: "文章标题"
date: "2026-06-27"
summary: "一句话摘要"
tags: ["AI", "Engineering"]
published: true
---
简历文件放在:
content/resume/resume.md
本阶段不做在线发布、在线修改、草稿系统、CMS、数据库同步或对象存储。
页面初始化范围
只初始化最小页面:
/:重定向到/articles,不做单独首页/articles:文章列表,支持空状态/articles/[slug]:文章详情/resume:简历页面
UI 可以有基础导航、页脚、内容卡片、文章排版和代码高亮,但不要引入复杂动效或后台界面。
部署设计
GitHub Actions
流水线职责:
- 安装依赖
- TypeScript/ESLint 检查
- 构建 Next.js
- 构建 Docker image
- 推送到 GHCR
- 通过 SSH 触发 Ubuntu-3 拉取镜像并重启 Compose 服务
推荐镜像命名:
ghcr.io/<github-owner>/personal-site:<git-sha>
ghcr.io/<github-owner>/personal-site:latest
Ubuntu-3 运行目录
建议运行目录:
/opt/apps/personal-site/
docker-compose.yml
.env
Compose 服务名:
personal-site
容器内部监听:
3000
初期宿主机可以映射到本地端口:
127.0.0.1:3000 -> container:3000
最终通过 Nginx、Caddy、Traefik 或 Coolify 接入正式域名。
Ubuntu-3 初始化要求
需要安装:
- Docker Engine
- Docker Compose plugin
- Git
- 基础工具:
curl,ca-certificates
需要准备:
/opt/apps/personal-site- GHCR 拉取权限
- GitHub Actions SSH 部署权限
- 反向代理配置,后续切域名时再做
这些动作不在本文档生成时执行,后续确认后再由 Agent 操作。
暂不做
本阶段明确不做:
- 前后端分离
- 数据库
- 登录/后台
- 在线文章发布或编辑
- 旧系统迁移
- 知识库导入
- RAG/embedding
- 自动简历更新
- 动态配置中心
- 多服务编排
- Coolify 安装
后续扩展路径
当第一版站点稳定后,再逐步考虑:
- 从旧知识库筛选文章导入
- 简历内容结构化
- Markdown 内容托管独立仓库
- 搜索
- RAG/embedding 旁路流水线
- 自动生成 PDF 简历
- Coolify 管理部署
- 拆分 API 或后台服务
下一步
确认本方案后,再执行项目初始化:
- 创建
/Users/xuhuan/workspace_new/project/personal-site - 初始化 Next.js + TypeScript + Tailwind 项目
- 加入 Markdown 渲染和内容读取
- 创建 Dockerfile 和 Compose 模板
- 创建 GitHub Actions workflow
- 编写
AGENTS.md - 在 Ubuntu-3 安装 Docker/Compose
- 配置首次部署