Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

明裕的小窝

骆家有男,人称明裕 —— 博客 · 知识库 · 个人简历,合而为一。

一个基于 VuePress 2 + vuepress-theme-hope 的个人站点,把原来的博客与在线简历合并成同一个站点, 采用深空星空视觉(参考 linverse.cn 的设计语言:深空底色、星云渐晕、 Canvas 星场、衬线标题、柔紫强调色、纸感颗粒),并通过 Cloudflare Pages / Workers 托管、GitHub 做版本管理。


一、这个项目做了什么

合并前的两个独立站点:

原项目 内容 原地址
MYXZ-Blog-main VuePress 博客:博文、随笔、关于我 blog.明裕.top
Yu-Luo-Resume-master VuePress 个人简历页 resume.明裕.top

现在合并为单一站点、单次构建、单次部署:

  • 首页:星空首屏 +「骆家有男,人称明裕」引言 + 快速入口
  • 博文:前端 / 后端 / 安全 / 运维 / VPS / 简历技术栈 六个方向
  • 随笔:生活记录
  • 生活:追剧推荐、音乐推荐
  • 简历:/resume.html,整合了原简历页、原「关于我」页与《骆裕简历》PDF 的全部内容

合并与调整记录

  • 原「关于我」页面已并入简历页:个人信息、网名、爱好(可点击跳转到生活栏目)、 以及原页面的「安利时刻」推荐板块,现在都在 /resume.html 里。
  • 原「关于我 → 追剧 / 音乐」两个栏目迁移到独立的 生活 栏目(/life/追剧/、/life/音乐/)。
  • 所属机构不再包含「淮安裕见新声信息科技有限公司」,现为 「南京盛网信息科技有限公司 / OnePanda安全团队」。
  • 政治面貌统一为中共党员。

相对原简历页新增的内容(来自 PDF)

  • 基本信息补充:网名、政治面貌、出生日期、求职意向、期望城市、联系电话
  • AIGC 应用能力板块(原简历页没有)
  • 项目经历新增:「网安 2026」「宁工铸盾」「蓝剑护网 2026」南京联合专项行动(2026.08,7 严重 3 中危)
  • 教育经历补充非全日制/全日制标注与学习方向
  • 自我评价补充 OnePanda 团队、技术学习小组等细节

二、目录结构

mingyu-space/
├── docs/                          # VuePress 源目录(构建入口)
│   ├── README.md                  # 首页(星空首屏)
│   ├── resume.md                  # 简历页(含原「关于我」内容)
│   ├── intro.md                   # 博客介绍页
│   ├── posts/                     # 博文(六个技术方向)
│   ├── notes/                     # 生活随笔
│   ├── life/                      # 生活(追剧 / 音乐)
│   └── .vuepress/
│       ├── config.ts              # 站点配置
│       ├── theme.ts               # 主题配置(导航、博客、评论、图标)
│       ├── navbar.ts              # 顶部导航
│       ├── sidebar.ts             # 侧边栏
│       ├── client.ts              # 客户端增强(挂载星场、注册组件)
│       ├── starfield.ts           # Canvas 星场实现
│       ├── components/
│       │   ├── StarHome.vue       # 首页首屏组件
│       │   └── ResumePage.vue     # 简历页组件
│       ├── styles/
│       │   ├── palette.scss       # 主题色
│       │   ├── config.scss        # 布局尺寸
│       │   └── index.scss         # 星空主题全局样式
│       └── public/                # 静态资源(随构建原样拷贝)
│           ├── _headers           # Cloudflare Pages 响应头
│           ├── _redirects         # Cloudflare Pages 重定向
│           ├── images/            # 个人风采照(已压缩)
│           └── ...
├── worker/
│   └── index.js                   # Cloudflare Worker(Static Assets + 旧链接跳转)
├── .github/workflows/
│   ├── ci.yml                     # PR / push 构建校验
│   └── deploy.yml                 # 部署到 Cloudflare Pages 与 Workers
├── wrangler.toml                  # Cloudflare 部署配置(Pages + Workers)
└── package.json

三、本地开发

# 安装依赖
npm install

# 启动开发服务器(默认 http://localhost:8080)
npm run dev

# 生产构建,产物在 docs/.vuepress/dist
npm run build

# 清缓存构建(改了主题/样式配置后建议用这个)
npm run build:clean

要求 Node.js 20 或更高(CI 固定用 22)。仓库内已包含 package-lock.json, CI 使用 npm ci 保证依赖版本一致。

依赖版本提示

本项目锁定 vuepress-theme-hope@2.0.0-rc.74 与 vuepress@2.0.0-rc.20。 安装时必须使用仓库内的 package-lock.json:直接 npm install 若解析到过新的 @vuepress/helper(rc.134+)会因 API 移除导致构建报错 (does not provide an export named 'getRootLang')。如需升级依赖,请整组一起升级并重新构建验证。


四、部署

方式一:Cloudflare Pages(推荐)

A. Dashboard 连接 GitHub(最省事)

  1. Cloudflare Dashboard → Workers & Pages → Create → Pages → Connect to Git

  2. 选择本仓库,构建设置填:

    配置项 值
    Framework preset None
    Build command npm run build
    Build output directory docs/.vuepress/dist
  3. 环境变量加一个 NODE_VERSION = 22

  4. 保存后每次 push 到 main 会自动构建部署

B. 本地 wrangler 部署

npm run build
npx wrangler login          # 首次需要登录
npm run cf:deploy           # 等价于 wrangler pages deploy docs/.vuepress/dist

方式二:Cloudflare Workers(Static Assets)

Worker 版本额外提供了旧链接 301 跳转与统一安全响应头:

npm run build
npm run cf:worker           # 等价于 wrangler deploy(读仓库根目录 wrangler.toml)

A. Dashboard 连接 GitHub(Workers Builds 自动部署)

Cloudflare Dashboard → Workers & Pages → Create → Workers → Connect to Git,构建设置填:

配置项 值
Build command npm run build
Deploy command npx wrangler deploy(默认值,不用改)

环境变量加 NODE_VERSION = 22。

⚠️ 注意:Workers Builds 默认的 Deploy command 就是 npx wrangler deploy, 它只认仓库根目录的 wrangler.toml,并且必须能从该文件解析出入口 (main 或 [assets])。构建时若报 Missing entry-point to Worker script or to assets directory, 说明根配置里只有 pages_build_output_dir(那是 Pages 专用字段), 需要像本仓库一样补上 main 与 [assets]。 另外 Workers Builds 不读取 wrangler.toml 里的 [build] 段, 构建命令必须填在 Dashboard 上。

B. 本地 wrangler 部署

npm run build
npx wrangler login          # 首次需要登录
npm run cf:worker           # wrangler deploy,读根目录 wrangler.toml

配置见根目录 wrangler.toml:

  • main = worker/index.js(旧链接 301、安全响应头、404 兜底)
  • [assets] 绑定到 docs/.vuepress/dist
  • run_worker_first = true — 让每个请求都先过 Worker。默认的「静态资源优先」 在命中已存在文件时会直接由边缘返回、完全跳过 Worker,于是 Worker 里 针对已有文件的规则(如 /resume.html → /resume)和 X-Site 头都不生效
  • not_found_handling = "404-page" — 未命中时返回站内样式化的 404 页

补充:_headers / _redirects 这两个文件在 Workers 静态资源下同样有效, 所以即便不开 run_worker_first,基础安全头也不会丢; 它的作用是保证 Worker 代码里的规则成为唯一真源,避免两套规则各管一半。

方式三:GitHub Actions 自动部署

.github/workflows/deploy.yml 已写好,在仓库 Settings → Secrets and variables → Actions 添加两个 Secret 即可:

Secret 说明
CLOUDFLARE_API_TOKEN Cloudflare API Token,需带 Cloudflare Pages:Edit 与 Workers Scripts:Edit 权限
CLOUDFLARE_ACCOUNT_ID Cloudflare 账户 ID(Dashboard 右侧栏可见)

配置后:push 到 main 自动部署到 Pages;想去 Workers 时手动触发 workflow 并选 worker 或 both。

自定义域名

在 Cloudflare Dashboard 的 Pages/Workers 项目里 → Custom domains 绑定即可, 国内访问建议同时开启 DNS 代理(小黄云)。


五、修改内容的位置

想改什么 改哪里
站点标题、描述、语言 docs/.vuepress/config.ts
首页姓名、副标题、自我介绍、入口链接 docs/README.md 的 <StarHome /> 属性
首页下方的正文段落 docs/README.md 里组件之后的 markdown
简历全部内容(基本信息、技能、工作、荣誉…) docs/.vuepress/components/ResumePage.vue 顶部的数据数组
顶部导航 docs/.vuepress/navbar.ts
侧边栏 docs/.vuepress/sidebar.ts
主题色、卡片、导航、动效 docs/.vuepress/styles/index.scss 与 palette.scss
星场密度、颜色、流星 docs/.vuepress/starfield.ts(DENSITY 常量与 draw())
社交链接、评论、图标 docs/.vuepress/theme.ts
SEO / 站点地图 由 plugins 中的 seo、sitemap 自动生成

写文章:在 docs/posts/<分类>/ 新建 .md,frontmatter 里带 title、date、category、tag 即可被博客插件收录到归档、分类与时间线页。


六、设计说明(星空主题)

对齐参考站 linverse.cn 的视觉语言,逐项落地:

设计要素 实现
深空底色 #0d0d0d --mg-bg,同时覆盖主题的 --vp-c-bg 系列变量
星云渐晕 body::before 三层 radial-gradient,位置与参考站实测一致
纸感颗粒 body::after 内联 SVG feTurbulence 噪点,透明度 0.03
动态星场 starfield.ts Canvas:星点闪烁、缓慢上浮、偶发流星;prefers-reduced-motion 时退化为静态星点
衬线标题 Noto Serif SC / Songti SC,字重 400,字距 0.04em 以上
柔紫强调 #8b7bb8,用于链接、下划线、时间、徽标
极简导航 半透明毛玻璃 + 1px 发丝分割线,无阴影
内容留白 首屏居中、行距 1.9、卡片细边
动效节制 仅 fade-up 入场与卡片 hover 位移,尊重减弱动效偏好

七、隐私与体积说明

  • 个人风采照共 10 张,原图 37MB,已统一压缩到 1600px 长边、质量 82,总计约 1.33MB, 并剥离 EXIF(含 GPS 定位信息)。
  • favicon.ico 生成为多尺寸 ICO,Apple Touch / PWA 图标由同一张图派生。
  • 图片全部置于 docs/.vuepress/public/,构建时原样拷贝,由 Cloudflare 边缘缓存分发。

简历 PDF

简历 PDF 放在 docs/.vuepress/public/resume.pdf,构建后可通过 /resume.pdf 直接访问, 页面上有两个下载入口:简历页顶部(首屏可见)与页面底部。

需要注意:该 PDF 是公开可访问的,其中包含手机号、邮箱、QQ 号与出生日期等个人信息, 并且可能被搜索引擎收录。

若只想让它不被搜索引擎收录(链接仍然可用),在 docs/.vuepress/public/_headers 中 对应的 /resume.pdf 段落加一行即可:

/resume.pdf
  X-Robots-Tag: noindex
  Cache-Control: public, max-age=3600, must-revalidate

X-Robots-Tag 是专门用于 PDF、图片这类非 HTML 资源的标准响应头,比改 robots.txt 更精确。 (不要用 public/robots.txt 来做这件事:SEO 插件会读取该文件并追加一行空的 User-agent:* 段,与自定义规则冲突,结果不可靠。)

若要真正限制访问,则应改用 Cloudflare Access 之类的访问控制,而不是靠隐藏链接。

替换该文件即可更新简历,无需改代码;页面上标注的「4 页 · 480 KB」如与实际不符, 可在 ResumePage.vue 的 mg-download__meta 处同步修改。


八、许可

MIT Licensed · 内容版权归骆裕(明裕)所有。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages