概述
本次更新主要解决线上部署的痛点:数据库文件随构建丢失、文章管理路径不一致、点赞功能异常等问题,并大幅简化了部署流程。
数据持久化迁移
问题
之前 .data/db/ 和 content/articles/ 都打包在 .output 里,每次 npm run build 重新部署会把数据覆盖。必须手动备份恢复,还容易丢。
方案
将数据库和文章迁出 .output,通过环境变量指向宿主机持久化目录:
| 环境变量 | 用途 | 线上值 |
|---|---|---|
NUXT_DATA_DIR |
数据库目录 | /data/nuxt-data |
NUXT_ARTICLES_DIR |
文章目录 | /data/nuxt-data/content/articles |
server/utils/db.ts— DB 路径支持环境变量server/utils/articles.ts— 文章路径支持环境变量server/api/articles/write/*— 3 个写入端点同步更新nuxt.config.ts— 删除构建钩子,不再复制数据到.output
效果
bash
# 现在部署只需两步
npm run build # 构建
docker restart nuxt # 重启(数据毫发无损)点赞 Bug 修复
文章详情页点赞无效
原因:[slug].vue 中 <LikeButton :target-id="article.slug" /> 错误引用了不存在的 article.slug,应为路由参数 slug。
修复:改为 <LikeButton :target-id="slug" />。
文章列表点赞跳转
原因:网格模式下点赞按钮嵌套在 <NuxtLink> 内,点击事件冒泡导致跳转。
修复:点赞按钮外层加 @click.stop.prevent 阻止事件冒泡。
GitHub OAuth 配置修正
- 修正环境变量命名:
NUXT_SITE_URL→NUXT_PUBLIC_SITE_URL(public.*必须用此前缀) - 补充
.env中缺失的NUXT_GITHUB_REDIRECT_URI和NUXT_PUBLIC_SITE_URL nuxt.config.ts移除 localhost 硬编码默认值
Docker 部署简化
docker-compose
创建 docker-compose.yml,所有配置集中在文件中:
yaml
services:
nuxt:
image: node:20-alpine
container_name: nuxt
restart: unless-stopped
volumes:
- /data/nuxt/.output:/app
- /data/nuxt-data:/data/nuxt-data
env_file:
- .env.docker
command: node server/index.mjs.env.docker
环境变量独立文件 /data/nuxt/.env.docker,一次配置后不动。
文章缓存刷新
问题:新建/编辑文章后后台和前端不显示,因为文章列表缓存未清除。
修复:articles.ts 新增 clearArticlesCache() 函数,创建/更新/删除文章后自动调用刷新缓存。
技术栈更新
关于页面"网站使用"新增 星造司 标签。
其他优化
- 友链页面申请格式增加一键复制按钮
- 技术栈标签从 7 个手写
<span>重构为v-for数据驱动 - NavLinks 增加游戏和友链的 Live2D 对话文本
- 友链卡片悬停增加专属看板娘对话
devtools仅在开发环境启用,修复线上hm.js连接拒绝错误- JSON 数据库损坏自动诊断修复方法整理到文档