今天花了一天,把这个小站从零搭了起来,顺便把发文章、部署这条路也打通了。这篇就记一下当时的思路、用的技术,还有中间踩过的坑,免得以后自己忘了。
一、想要一个什么样的博客
一开始的要求其实很简单,就三条:
- 要好看,要有博客该有的样子:首页横幅、文章列表、分类、标签、归档,而不是干巴巴的文档页。
- 要能展示我自己的东西:做的项目、听的歌、看的番,还有联系方式,都想放在站里。
- 要简单:以后只用一个域名加一台服务器就能跑,不要给博客再配数据库和后端。
框架必须用 Vue 写的,最后选了 Valaxy + Yun 主题。Yun 本身就是博客主题,首页、文章卡片、暗色模式这些都自带,改改配置就能看,符合“好看”这个要求。
二、技术选型
整站是纯静态的,思路是“写 Markdown,生成网页”:
- 框架:Valaxy 1.2.0 + valaxy-theme-yun 1.2.0,Vue 3。
- 内容:文章就是
pages/posts下面的 Markdown 文件,标题、日期、分类、标签写在文件头,构建后自动出现在首页和列表里。 - 组件:项目页、首页联系图标这些都是 Vue 组件,不是写死的 HTML。项目卡片有悬停抬起的效果,联系图标点开能看到二维码和账号。
- 部署:构建产物是
dist/,纯静态文件,扔到服务器上用 nginx 提供访问就行,不用在服务器上跑 Node,也不用数据库。
发文章的流程也按“静态 + Git”来,不搞注册和公开投稿,只给自己用:浏览器打开 /admin,登录后写文章,点发布,文章就以 Markdown 的形式提交到仓库里。后面再构建、部署,就能在站上看到了。
三、内容是怎么来的
- 项目页:放了两个自己做的项目,一个是 AI 辅助学数据结构与算法的学习平台,一个是 AI 去水印工具,后者还有在线演示。
- 歌单页:一开始是酷狗分享的一个 10 首播放队列,后来把酷狗“我喜欢”里的歌倒了过来。那个歌单有 279 首,我只按发出去的 20 张截图来对,只留了在 Spotify 上有正版原唱的 139 首,DJ 版、变速版、片段版、翻唱版都没要,最后嵌了一个 Spotify 官方播放器,之前那 10 首队列后来也删掉了。
- 联系方式:微信、QQ、抖音用二维码,邮箱和 GitHub 直接给账号,点图标弹窗查看,不再单独占一个页面,就放在首页名字下面。
- 动漫页:本来也想把看过的番放上去,和歌单并列,但还没给到追番主页的链接,所以这页还没做,不编片名,等有了再补。
四、浏览器里写文章:Decap + Worker
/admin 用的是 Decap CMS,后端是 GitHub。纯静态页自己保管不了密钥,所以登录这一步要靠一个中转:
- 浏览器打开
/admin,点登录,跳到一个 Cloudflare Worker 的/auth。 - Worker 再跳到 GitHub 授权,授权完 GitHub 跳回 Worker 的
/callback。 - Worker 在服务端用密钥把 code 换成 token,再回传给 Decap,Decap 拿着 token 把文章提交到仓库的 main 分支。
- 密钥只存在 Worker 的加密变量里,不进博客仓库,也不出现在页面上。
也就是说,Decap 本身不存文章,文章还是在 Git 里,发布就是一次提交。
五、部署到服务器
域名是 xiutu.site,服务器就是原来跑去水印的那台,部署时特意没动去水印:
- 域名解析:裸域名和 www 都指向服务器 IP。
- nginx 单独给 xiutu.site 建了一个站点,根目录是
/var/www/xiutu.site,IP 直接访问还是去水印站。 - 构建好的
dist/解压到这个目录,nginx 测试通过后只 reload,不 restart。
六、碰到的问题
今天踩的坑不少,记几个最典型的:
- SSH 直连不通。 助手那边连服务器 22 端口时,连接还没到服务器就被出口代理重置了,HTTP 访问却是通的。最后改走华为云控制台的网页终端来部署,才绕过去。
- GitHub 权限 403。 一开始新建仓库、推送都报“集成没有权限”,装了应用、选了全部仓库也没立刻好。最后是手动建了仓库,再推源码才通,后面助手直接推送也能用了。
- 酷狗歌单拉不出来。 歌单页在助手那边打不开,是地区限制,只能改发截图来对歌;博客里直接播酷狗也走不通,解析接口要么没链接、要么被限流,最后改成 Spotify 内嵌播放器。
- Decap 登录卡住。 一开始后台配置里 Worker 地址还是占位符,登不上去;后来建 Worker 时,Cloudflare 的登录信息被拒,又改走 GitHub 登录才进原有账号;建好 Worker 后,浏览器还填不进 Cloudflare 的代码编辑器,最后是手动粘贴代码、点部署才解决。
- 部署包传不上去。 直接给服务器的下载链接在北京服务器上打不开,改成把部署包切成 base64 分片,放到仓库的临时分支上,用 CDN 链接下载,拼出来再对校验值,确认一致才解压。
- 解压后首页 403。 刚解压完文件权限太严,首页打不开,只对博客目录放宽了权限才好,nginx 配置本身没动。
- 域名解析漏了一条。 一开始只加了 www,裸域名没记录,打不开,补上
@的 A 记录后两个域名才都通。
七、下一步
还没做完的还有几件:
- 给 xiutu.site 加 HTTPS,现在还是 HTTP。
- 接自动部署:现在发完文章还要手动重新部署一次,以后想做到提交到 main 就自动构建、自动传到服务器,接近热更新。
- 动漫页:等拿到追番主页链接再做。
/admin登录和新建文章的实测:部署完新版后,要真登录一次、发一篇文章,看整条链路是不是通的。
博客搭起来只是第一步,后面能顺手发文章、不用折腾部署,才算真的好用。