# Blog-Server [English](README.en.md) <center>一个简单的博客服务器。基于 Node.js、Next.js 和 SQLite。</center>  > 项目名称尚未确定,也许你可以给我一些建议?   ## 特点 * [x] 支持 GFM (GitHub Flavored Markdown) * [x] 在线编辑文章 * [x] React Server Components * [x] Docker 快速部署 * [x] 后台定制网站 * [ ] 全局搜索 * [ ] 在线上传自定义封面 项目还有很多功能未实现,但已经达到了正常使用的程度。欢迎提出建议和贡献代码。 数据库部分应该不会出现不向前兼容的情况,但配置文件和环境变量可能会有变化。 ## 快速开始 ### 使用 Docker 运行 下载 `docker-compose.yml` 到本地 ```shell wget https://raw.githubusercontent.com/skyone-wzw/blog-server/master/docker-compose.yml ``` 编辑环境变量(如为本地测试无需修改) * `DATABASE_URL`: 数据库文件路径,默认为 `file:./data/data.db` * `DATA_DIR`: 数据目录,默认为 `./data` * `SECRET_KEY`: AES 加密密钥,必填,长度为 32 的字符串 * `SECRET_IV`: AES 加密向量,必填,长度为 16 的字符串 * `AUTH_EMAIL`: 后台登录邮箱,必填 * `AUTH_PASSWORD`: 后台登录密码,必填 ```shell docker-compose up -d ``` 打开浏览器访问 `http://localhost:3000`。 ### 从 Release 下载预编译版 从 [Release](https://github.com/skyone-wzw/blog-server/releases) 下载最新版本的预编译版。解压至任意目录,同步数据库并启动服务器: ```shell npm prisma generate npm run start ``` 打开浏览器访问 `http://localhost:3000`。 ### 从源码构建 > [!NOTE] > 已知构建时可能出现内存泄漏(eslint@8 依赖库问题),正在等待修复,运行时不会出现问题。 > > 若要本地构建,至少需要 2GB 内存。 首先克隆这个仓库并安装依赖 ```bash git clone https://github.com/skyone-wzw/blog-server.git --depth=1 cd blog-server npm install ``` 构建程序 ```shell npx prisma generate npm run run patch-font npm run build ``` 创建运行目录并拷贝构建产物 ```shell mkdir build cp -r public build/public cp -r .next/standalone/* build mkdir build/.next cp -r .next/static .next/static ``` 后续步骤与 [从 Release 下载预编译版](#从-release-下载预编译版) 相同。 ## 配置 有两个配置文件:`.env` 和 `data/config.json`。其他自定义内容(如网站标题、Logo、作者等)可以在网站后台设置。 ### 环境变量 在 `.env` (位于项目根目录)文件中,你可以设置数据目录和数据库文件的路径,写入该文件的环境变量会被自动加载,当然直接设置环境变量也是可以的。 ```ini # Required DATABASE_URL="file:./data/data.db" # Optional, default is ./data DATA_DIR=./data # Optional, you can set it in data/config.json SECRET_KEY="12345678123456781234567812345678" SECRET_IV="1234567812345678" AUTH_EMAIL=abc@example.com AUTH_PASSWORD=123456 ``` ### 配置文件 `data/config.json` (data 目录由环境变量 `DATA_DIR` 指定)文件是环境变量的代替方案。如果你不想使用环境变量,也可以选择配置文件。但无论如何,你必须设置 `DATABASE_URL` 环境变量。 **注意:环境变量优先级高于配置文件。** 参考下面的示例,所有选项均为可选: ```json { "auth": { "email": "", "password": "" }, "secret": { "key": "", "iv": "" }, "dir": { "data": "./data", "image": "./data/post", "cover": "./data/cover", "random": "./data/cover/random", "custom": "./data/custom" } } ``` > 环境变量优先级高于配置文件,且环境变量在加载配置文件之后读取,但 `DATA_DIR` 例外,因为配置文件的位置也由 `DATA_DIR` 确定。 > > 简而言之,配置文件位于 `$DATA_DIR/config.json`,环境变量优先级高于配置文件。 ### 配置项说明 环境变量中: * `DATA_DIR`: 数据目录 * `DATABASE_URL`: 数据库文件路径,格式为 `file:/path/to/database.db` * `SECRET_KEY`: AES 加密密钥 * `SECRET_IV`: AES 加密向量 * `AUTH_EMAIL`: 后台登录邮箱 * `AUTH_PASSWORD`: 后台登录密码 配置文件中: * `auth.email`: 后台登录邮箱 * `auth.password`: 后台登录密码 * `secret.key`: AES 加密密钥 * `secret.iv`: AES 加密向量 * `dir.data`: 数据目录,建议使用环境变量 `DATA_DIR` * `dir.image`: 文章图片目录,不建议修改 * `dir.cover`: 文章封面背景图目录,不建议修改 * `dir.random`: 文章封面背景图随机目录,不建议修改 * `dir.custom`: 自定义文件目录,不建议修改 ## 文章封面背景图 目前尚未实现前端上传功能,你可以通过 FTP 或其他方式上传图片到服务器。 默认情况下,文章封面背景图是随机的。你可以在 `data/cover/random` 目录下放置你的图片。路径为 `data/cover/[slig].(jpg|png|webp)` 的图片会被对应文章的封面使用。具体匹配规则如下: 1. 查找 `data/cover/[slug].(jpg|png|webp)`,如果存在则使用,存在多个格式则随机选择一个 2. 查找 `data/cover/random/`,如果存在则随机选择一个 3. 若程序启动时未找到任何图片,则创建 `data/cover/random/default.webp` 作为默认图片 ## 开源许可证 [MIT](LICENSE)