手把手教程:使用Docker快速部署轻量级Markdown博客PaperGrid
在之前的分享中,我们探讨了使用 Halo 2.0 搭建个人博客的方法。对于部分用户而言,这类项目功能虽然全面,但整体架构可能略显繁重。相比之下,许多用户更青睐于轻量化、界面简洁,甚至仅需一个能够稳定托管内容的简易站点。
近期,我发现了一个名为 PaperGrid 的新兴博客项目,其整体设计风格倾向于轻量化,完美支持 Markdown 编辑,并且前端视觉效果相当出色!同时,它还具备不错的可定制性与探索空间。本文将简要介绍如何部署并开始使用它。

就我个人而言,博客已经逐渐取代了传统的笔记工具。将思考过程、技术实践与使用心得记录下来,不仅便于日后回顾,也能分享给有共同兴趣的伙伴。像 PaperGrid 这样部署过程相对简单、界面设计也足够清晰的项目,非常适合用来构建一个专属的个人记录空间。
PaperGrid项目概览
完整项目名称:xywml/PaperGrid,可以在 GitHub 上进行搜索。
这是一个基于 Next.js App Router 构建的轻量化个人博客与后台管理系统。它内置了用户认证、文章管理、评论功能和系统设置模块,并支持中文/英文双语界面与深色模式切换。
作者说明:项目目前处于快速开发迭代阶段,欢迎部署使用、给予 Star 评价或反馈建议。
核心功能特性
- 现代技术栈:采用 Next.js App Router 与 React 19。
- 数据管理:集成 Prisma ORM 进行数据库操作。
- 用户认证:使用 NextAuth 实现安全的身份验证。
- 完整后台:提供文章、标签、分类、评论、用户、系统设置及文件管理的后台界面。
- 文件管理:支持本地图片上传、预览、删除以及 URL 自动回填至编辑器。
- 强大内容支持:兼容 MDX 格式,具备代码高亮、数学公式渲染与图表绘制能力。
- 国际化与主题:支持多语言切换,并内置深色模式。
- 多样前端主题:管理员可在后台“样式”设置中一键切换多套前台主题(例如:纸格笔记、终端机能、清透视窗、像素账本)。
- 扩展可能:具备集成智能 AI 助手的潜能。
详细部署步骤
本文以威联通(QNAP)NAS 为例,演示通过 Docker Compose 进行部署的过程。
以下部署代码可实现服务的快速启动,请根据你的环境调整配置:
services:
papergrid:
image: ghcr.io/xywml/papergrid:latest
container_name: papergrid
ports:
- "6066:3000"
environment:
DATABASE_URL: "file:/data/db.sqlite"
# 可选:为 AI 向量索引使用单独的 SQLite 文件
# AI_VECTOR_DATABASE_URL: "file:/data/ai-index.sqlite"
# SQLITE_JOURNAL_MODE: "DELETE"
# 初始使用 NAS IP 加端口访问,后续若配置反向代理或域名,需修改此处
NEXTAUTH_URL: "http://192.168.100.138:6066"
NEXT_PUBLIC_APP_URL: "http://192.168.100.138:6066"
# 生产环境务必设置一个足够长且复杂的随机字符串
NEXTAUTH_SECRET: "请替换成一串足够长的随机字符串"
# 设置本地媒体文件与缓存存储路径
MEDIA_ROOT: "/data/uploads"
NEXT_CACHE_DIR: "/data/.next-cache"
# 首次初始化容器时的可选配置(用于创建管理员)
# INIT_ADMIN_TOKEN: "请替换为随机字符串"
# ADMIN_INIT_PASSWORD: "请替换为强密码"
# 可先跳过 OAuth / SMTP 配置,待基础服务运行后再补充
NEXT_PUBLIC_DEFAULT_LOCALE: "zh"
# 在内网环境且未配置反向代理时,允许信任 Host 头
AUTH_TRUST_HOST: "true"
volumes:
- /share/Container/boke/data:/data
restart: unless-stopped
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "5"
以下是完整的的环境变量列表,你也可以选择创建独立的 .env 文件进行配置:
DATABASE_URL="file:./dev.db"
# 可选:为 AI 向量索引单独使用 SQLite 文件(推荐生产启用)
# AI_VECTOR_DATABASE_URL="file:/data/ai-index.sqlite"
# 可选:AI 向量索引使用的 SQLite 日志模式;默认 DELETE(稳定优先)
# SQLITE_JOURNAL_MODE="DELETE"
NEXTAUTH_URL="http://localhost:6066"
NEXTAUTH_SECRET="your-secret-key-change-this-in-production"
# 本地媒体存储设置
MEDIA_ROOT="/data/uploads"
MEDIA_MAX_UPLOAD_MB="10"
MEDIA_MAX_INPUT_PIXELS="40000000"
MEDIA_RESOLVE_CACHE_TTL_MS="30000" # 媒体元数据缓存(毫秒)
INIT_ADMIN_TOKEN=""
ADMIN_INIT_PASSWORD=""
# 第三方 OAuth 登录配置(如 GitHub, Google)
GITHUB_CLIENT_ID=""
GITHUB_CLIENT_SECRET=""
GOOGLE_CLIENT_ID=""
GOOGLE_CLIENT_SECRET=""
# 云存储配置(如 Cloudinary)
CLOUDINARY_CLOUD_NAME=""
CLOUDINARY_API_KEY=""
CLOUDINARY_API_SECRET=""
# 邮件服务器配置(用于通知等功能)
SMTP_HOST=""
SMTP_PORT="465"
SMTP_SECURE="true"
SMTP_USER=""
SMTP_PASS=""
# 可选:指定收件人,多个用逗号分隔;留空则发送给所有管理员
EMAIL_TO=""
# 可选:回复通知邮件的拒收名单
EMAIL_REPLY_DENYLIST=""
# 可选:退订链接签名密钥(不填则回退到 NEXTAUTH_SECRET)
EMAIL_UNSUBSCRIBE_SECRET=""
# 可选:退订链接有效期(天)
EMAIL_REPLY_UNSUBSCRIBE_EXPIRE_DAYS="365"
# Gotify 推送配置
GOTIFY_URL=""
GOTIFY_TOKEN=""
NEXT_PUBLIC_APP_URL="http://localhost:6066"
NEXT_PUBLIC_DEFAULT_LOCALE="zh"
# 可选:设置日志级别
# LOG_LEVEL="info"
# 自定义 Head 注入与 CSP 安全策略
# 在管理后台「样式 → 自定义 Head 注入」添加外部脚本后,需将脚本域名加入此处
# HEAD_INJECT_SCRIPT_ORIGINS="https://stats.example.com,https://www.googletagmanager.com"
# 可选:关闭 script-src 'unsafe-inline'(默认保留以兼容旧部署)
# CSP_ALLOW_UNSAFE_INLINE_SCRIPT="false"
打开威联通 NAS 的 Container Station 应用,创建一个新的应用程序项目,并将上述 Docker Compose 配置粘贴进去。

界面与操作体验
部署完成后,在浏览器中输入 你的NAS_IP:6066 即可访问博客前台界面。

点击页面右上角的“登录”按钮,进入登录界面。系统默认的管理员账号邮箱为 admin@example.com,默认密码为 admin123。首次登录后,强烈建议立即修改密码。

创建新文章,其内置的编辑器体验相当出色,甚至优于笔者目前使用的 Halo 编辑器。


后台提供了丰富的配置选项,包括系统设置、用户管理、样式主题切换等,DIY 自由度颇高。

总结与适用场景
总体而言,PaperGrid 非常适合那些追求轻量化部署、同时又希望拥有较高自主定制权的用户。它不像某些传统博客系统那样“厚重”,但其基础功能与可扩展性并不逊色。特别是对于习惯使用 Markdown 写作、并乐于自行调整页面风格与功能的用户来说,PaperGrid 具有相当的吸引力。对于希望在 NAS 上快速搭建一个个人博客、知识库或简易内容站点的朋友,这无疑是一个值得考虑和尝试的新选择。
希望本篇部署指南能对你有所帮助。