一个可直接启动的全栈博客系统,默认使用 SQLite,预留 MySQL 配置,并包含:
- 注册 + 登录
- 富文本 / Markdown 写文章
- 图片上传 + 头像上传
- 评论 + 点赞互动
- 访问统计
- 友情链接管理
- 文章分类 + 搜索
- RSS + sitemap + robots + 页面 SEO
- 动画首页
- Docker 一键部署
- 复制环境变量
cp .env.example .env- 安装依赖并初始化数据库
npm install
npm run db:push
npm run db:seed- 启动开发环境
npm run dev默认演示管理员账号:
- 邮箱:
admin@linghan.local - 密码:
admin123456
- 删除文章
- 管理员删除留言
- 管理友情链接(新增 / 隐藏 / 删除)
- 分类管理(新增 / 编辑 / 删除)
- 文章分类选择
- 文章广场分页
- 分类页分页
- 搜索关键词高亮
- 热门文章榜(全部 / 近 7 天 / 近 30 天)
- 文章广场排序(最新 / 最热 / 点赞最多)
rss.xmlsitemap.xmlrobots.txt- 首页、文章列表、分类页、文章详情页元信息
cp .env.example .env
docker compose up -d --build默认让应用容器监听宿主机 127.0.0.1:3000,再由宿主机 Nginx 反向代理对外暴露 80 端口。
如果是服务器部署,建议将 .env 至少改成:
DATABASE_URL="file:./prisma/blog.db"
AUTH_SECRET="替换为随机长字符串"
NEXTAUTH_URL="http://你的服务器IP"
SITE_URL="http://你的服务器IP"
SMTP_HOST="smtp.example.com"
SMTP_PORT="465"
SMTP_SECURE="true"
SMTP_USER="no-reply@example.com"
SMTP_PASS="替换为 SMTP 密码"
SMTP_FROM="灵寒谷 <no-reply@example.com>"例如:
NEXTAUTH_URL="http://120.48.4.105"
SITE_URL="http://120.48.4.105"如果你要启用“忘记密码”,还需要补齐 SMTP 相关环境变量。应用会在登录页提供“忘记密码”入口,并向用户绑定邮箱发送一次性重置链接。
启动后访问:
http://你的服务器IP
服务器侧 Nginx 可直接使用 nginx/default.conf 作为站点配置模板,将其放到:
/etc/nginx/sites-available/blog-system然后建立软链接并重载:
ln -sf /etc/nginx/sites-available/blog-system /etc/nginx/sites-enabled/blog-system
rm -f /etc/nginx/sites-enabled/default
nginx -t && systemctl reload nginx将 .env 中的数据库地址切到 MySQL,然后执行:
DATABASE_URL="mysql://root:password@localhost:3306/blog_system"然后重新执行:
npm run db:generate:mysql
npm run db:push:mysql