From cf74607dbf451703f0b9e64c4ca0d604727bc47b Mon Sep 17 00:00:00 2001 From: licsber Date: Tue, 11 Nov 2025 15:18:01 +0800 Subject: [PATCH] fix: docker permission. --- Dockerfile | 6 ++++++ README.md | 13 +++++++++++-- docker-compose.yml | 3 ++- server/config.js | 2 +- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0efef51..d600cc4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,6 +11,9 @@ FROM base AS production COPY --from=deps /app/node_modules ./node_modules COPY . . +# Create directory for database with proper permissions +RUN mkdir -p /app/data && chown -R 1001:1001 /app/data + EXPOSE 3000 # Create a non-root user @@ -19,4 +22,7 @@ RUN adduser -S nextjs -u 1001 USER nextjs +# Set environment variable for database path +ENV DB_PATH=/app/data/data.db + CMD ["node", "server.js"] diff --git a/README.md b/README.md index dba080e..48a12b5 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,17 @@ docker buildx create --name mybuilder --use docker buildx inspect --bootstrap # 构建并推送多平台镜像 -docker buildx build --platform linux/amd64,linux/arm64 -t yourusername/timeline-calendar:latest --push . +docker buildx build --platform linux/amd64,linux/arm64 -t registry.cn-beijing.aliyuncs.com/licsber/timeline:latest --push . ``` +## 🗄️ 数据库持久化 + +Docker 部署时,用户数据存储在 SQLite 数据库中,默认会持久化到项目根目录的 `data` 文件夹中。 + +- 数据库文件路径:`./data/data.db` + +要备份数据,只需复制整个 `data` 目录。要恢复数据,将备份的 `data` 目录复制回项目根目录即可。 + ## 🧭 使用指南 1. **添加服务器**:页面底部输入想连接的后端地址,点击「添加」,并从下拉框选择它 2. **注册 / 登录**:按提示填写信息,完成后即可自动加载个人日历 @@ -90,11 +98,12 @@ timeline/ ## ⚙️ 配置项 - `PORT`:后端监听端口,默认 `3000` - `JWT_SECRET`:JWT 密钥,默认简单字符串,生产环境务必更换 +- `DB_PATH`:SQLite 数据库文件路径,默认 `/app/data/data.db` ## 💡 小贴士 - 服务器列表保存在浏览器 LocalStorage,可随时增删 - 支持多个浏览器/设备同时登录同一账号,数据实时同步 -- 若要重置数据,直接删除根目录下的 `data.db` 即可(注意备份) +- 若要重置数据,直接删除根目录下的 `data` 目录即可(注意备份) ## 🧱 技术栈速览 - **后端**:Node.js、Express 5、SQLite、JWT、bcryptjs diff --git a/docker-compose.yml b/docker-compose.yml index 49abc80..1ac6d1c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,6 +12,7 @@ services: environment: - PORT=3000 - JWT_SECRET=${JWT_SECRET:-change-this-secret-key-in-production} + - DB_PATH=/app/data/data.db volumes: - - ./data.db:/app/data.db + - ./data:/app/data restart: unless-stopped diff --git a/server/config.js b/server/config.js index 5067ffa..9b51707 100644 --- a/server/config.js +++ b/server/config.js @@ -2,7 +2,7 @@ const path = require('path'); const PORT = process.env.PORT || 3000; const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key-change-in-production'; -const DB_PATH = path.join(__dirname, '..', 'data.db'); +const DB_PATH = process.env.DB_PATH || path.join(__dirname, '..', 'data.db'); module.exports = { PORT,