diff --git a/DOCKER_COMPOSE_GUIDE.md b/DOCKER_COMPOSE_GUIDE.md new file mode 100644 index 0000000..ae63f0b --- /dev/null +++ b/DOCKER_COMPOSE_GUIDE.md @@ -0,0 +1,110 @@ +# Docker Compose 部署指南 + +> **重要**:所有Docker Compose文件已更新为使用你的JmalCloud公共空间改造版本 + +## 📋 可用的部署配置 + +| 文件名 | 用途 | 特点 | +|--------|------|------| +| `docker-compose.git.yml` | **Git构建版(推荐)** | ✅ 从Git仓库自动构建
✅ 最新的改造版本 | +| `docker-compose.base.yml` | **基础版本** | ✅ 标准配置
✅ 适合大部分用户 | +| `docker-compose.base-git.yml` | **简化Git版本** | ✅ 精简配置
✅ Git自动构建 | +| `docker-compose.base-aliyun-beijing.yml` | **阿里云北京** | ✅ 针对阿里云北京优化
✅ Git自动构建 | +| `docker-compose.base-aliyun-guangzhou.yml` | **阿里云广州** | ✅ 针对阿里云广州优化
✅ Git自动构建 | +| `docker-compose.base.proxy.yml` | **代理版本** | ✅ 支持代理环境
✅ Git自动构建 | +| `docker-compose.example.yml` | **模板配置** | ✅ 环境变量模板
✅ 适合自定义部署 | + +## 🚀 快速部署 + +### 方案1:推荐部署(最简单) +```bash +# 使用一键部署脚本 +./build-from-git.sh +``` + +### 方案2:选择特定配置 +```bash +# 基础版本 +docker-compose -f docker-compose.base.yml up -d --build + +# Git版本 +docker-compose -f docker-compose.git.yml up -d --build + +# 阿里云北京 +docker-compose -f docker-compose.base-aliyun-beijing.yml up -d --build + +# 阿里云广州 +docker-compose -f docker-compose.base-aliyun-guangzhou.yml up -d --build +``` + +## ⚙️ 主要更新内容 + +### ✅ 全面替换镜像源 +- **原版**:`jmal/jmalcloud:latest` +- **改造版**:从 `https://git.1080p.hk/chenpei/jmalcloud` 自动构建 + +### ✅ 统一配置标准 +- **Java内存**:`-Xms512m -Xmx2g` ~ `-Xmx4g` +- **MongoDB版本**:升级到 `mongo:7.0` +- **健康检查**:添加完整的健康检查机制 +- **环境变量**:标准化所有环境变量 + +### ✅ 新增功能配置 +- **公共空间模式**:所有配置都支持公共共享文件空间 +- **文件监控**:`FILE_MONITOR=true` +- **精确搜索**:`EXACT_SEARCH=false` +- **加密配置**:自动生成加密密钥和盐值 + +## 🔧 环境变量说明 + +| 变量名 | 默认值 | 说明 | +|--------|--------|------| +| `MONGODB_URI` | `mongodb://mongo:27017/jmalcloud` | MongoDB连接地址 | +| `JVM_OPTS` | `-Xms512m -Xmx2g` | Java虚拟机参数 | +| `FILE_ROOT_DIR` | `/jmalcloud/files` | 文件存储根目录 | +| `EXACT_SEARCH` | `false` | 是否启用精确搜索 | +| `FILE_MONITOR` | `true` | 是否启用文件监控 | +| `ENCRYPTION_SECRET_KEY` | `""` | 加密密钥(自动生成) | +| `ENCRYPTION_SALT` | `""` | 加密盐值(自动生成) | + +## 🌐 访问地址 + +部署成功后,你可以通过以下地址访问: + +- 🌐 **前端界面**: http://localhost:7070 +- 🔌 **后端API**: http://localhost:7072 +- 📄 **OnlyOffice**: http://localhost:7071 + +## 🔧 管理命令 + +```bash +# 查看服务状态 +docker-compose -f [配置文件] ps + +# 查看日志 +docker-compose -f [配置文件] logs -f + +# 停止服务 +docker-compose -f [配置文件] down + +# 重启服务 +docker-compose -f [配置文件] restart + +# 重新构建 +docker-compose -f [配置文件] up -d --build --force-recreate +``` + +## ⚠️ 重要提示 + +1. **首次部署**:建议使用 `./build-from-git.sh` 脚本 +2. **数据目录**:确保 `./docker/jmalcloud/` 目录有适当权限 +3. **端口冲突**:如有端口冲突,请修改配置文件中的端口映射 +4. **内存配置**:根据服务器配置调整 `JVM_OPTS` 参数 +5. **Git认证**:构建时需要访问Git仓库,确保网络连通性 + +## 📞 支持 + +如果遇到问题: +1. 查看容器日志:`docker-compose -f [配置文件] logs` +2. 检查服务状态:`docker-compose -f [配置文件] ps` +3. 重新构建:`docker-compose -f [配置文件] up -d --build --force-recreate` diff --git a/docker-compose.base-aliyun-beijing.yml b/docker-compose.base-aliyun-beijing.yml index 088e75f..8655409 100644 --- a/docker-compose.base-aliyun-beijing.yml +++ b/docker-compose.base-aliyun-beijing.yml @@ -17,17 +17,44 @@ services: jmalcloud: container_name: jmalcloud_server - image: registry.cn-beijing.aliyuncs.com/jmalcloud/jmalcloud:latest + build: + context: . + dockerfile: Dockerfile.git + args: + GIT_REPO: https://git.1080p.hk/chenpei/jmalcloud.git + GIT_USERNAME: chenpei + GIT_PASSWORD: jsjj654321 + TARGETPLATFORM: linux/amd64 + image: chenpei/jmalcloud:aliyun-beijing environment: MONGODB_URI: "mongodb://mongo:27017/jmalcloud" TZ: "Asia/Shanghai" - JVM_OPTS: "-Xms256m -Xmx1024m" + JVM_OPTS: "-Xms512m -Xmx2g" + RUN_ENVIRONMENT: "prod" + LOG_LEVEL: "warn" + EXACT_SEARCH: "false" + FILE_MONITOR: "true" + FILE_ROOT_DIR: "/jmalcloud/files" + TESS4J_DATA_PATH: "/jmalcloud/tess4j/datapath" + MONITOR_IGNORE_FILE_PREFIX: ".DS_Store,._" + ENCRYPTION_SECRET_KEY: "" + ENCRYPTION_SALT: "" + PUID: 0 + PGID: 0 volumes: - ./docker/jmalcloud/files:/jmalcloud/files/ restart: unless-stopped + ports: + - 7072:8088 depends_on: mongo: condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8088/public/health"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 60s nginx: container_name: jmalcloud_nginx diff --git a/docker-compose.base-aliyun-guangzhou.yml b/docker-compose.base-aliyun-guangzhou.yml index 6179d4b..b166e9d 100644 --- a/docker-compose.base-aliyun-guangzhou.yml +++ b/docker-compose.base-aliyun-guangzhou.yml @@ -17,17 +17,44 @@ services: jmalcloud: container_name: jmalcloud_server - image: registry.cn-guangzhou.aliyuncs.com/jmalcloud/jmalcloud:latest + build: + context: . + dockerfile: Dockerfile.git + args: + GIT_REPO: https://git.1080p.hk/chenpei/jmalcloud.git + GIT_USERNAME: chenpei + GIT_PASSWORD: jsjj654321 + TARGETPLATFORM: linux/amd64 + image: chenpei/jmalcloud:aliyun-guangzhou environment: MONGODB_URI: "mongodb://mongo:27017/jmalcloud" TZ: "Asia/Shanghai" - JVM_OPTS: "-Xms256m -Xmx1024m" + JVM_OPTS: "-Xms512m -Xmx2g" + RUN_ENVIRONMENT: "prod" + LOG_LEVEL: "warn" + EXACT_SEARCH: "false" + FILE_MONITOR: "true" + FILE_ROOT_DIR: "/jmalcloud/files" + TESS4J_DATA_PATH: "/jmalcloud/tess4j/datapath" + MONITOR_IGNORE_FILE_PREFIX: ".DS_Store,._" + ENCRYPTION_SECRET_KEY: "" + ENCRYPTION_SALT: "" + PUID: 0 + PGID: 0 volumes: - ./docker/jmalcloud/files:/jmalcloud/files/ restart: unless-stopped + ports: + - 7072:8088 depends_on: mongo: condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8088/public/health"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 60s nginx: container_name: jmalcloud_nginx diff --git a/docker-compose.base-git.yml b/docker-compose.base-git.yml new file mode 100644 index 0000000..bfb9fe1 --- /dev/null +++ b/docker-compose.base-git.yml @@ -0,0 +1,83 @@ +services: + mongo: + container_name: jmalcloud_mongodb + image: mongo:7.0 + environment: + TZ: "Asia/Shanghai" + volumes: + - ./docker/jmalcloud/mongodb/data/db:/data/db + - ./docker/jmalcloud/mongodb/backup:/dump + restart: unless-stopped + healthcheck: + test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] + interval: 10s + timeout: 5s + retries: 3 + command: --wiredTigerCacheSizeGB 0.5 + + jmalcloud: + container_name: jmalcloud_server + build: + context: . + dockerfile: Dockerfile.git + args: + GIT_REPO: https://git.1080p.hk/chenpei/jmalcloud.git + GIT_USERNAME: chenpei + GIT_PASSWORD: jsjj654321 + TARGETPLATFORM: linux/amd64 + image: chenpei/jmalcloud:git-latest + environment: + MONGODB_URI: "mongodb://mongo:27017/jmalcloud" + TZ: "Asia/Shanghai" + JVM_OPTS: "-Xms512m -Xmx4g" + RUN_ENVIRONMENT: "prod" + LOG_LEVEL: "warn" + EXACT_SEARCH: "false" + FILE_MONITOR: "true" + FILE_ROOT_DIR: "/jmalcloud/files" + TESS4J_DATA_PATH: "/jmalcloud/tess4j/datapath" + MONITOR_IGNORE_FILE_PREFIX: ".DS_Store,._" + NGRAM_MAX_CONTENT_LENGTH_MB: "5" + NGRAM_MIN_SIZE: "2" + NGRAM_MAX_SIZE: "6" + ENCRYPTION_SECRET_KEY: "" + ENCRYPTION_SALT: "" + PUID: 0 + PGID: 0 + volumes: + - ./docker/jmalcloud/files:/jmalcloud/files/ + restart: unless-stopped + ports: + - 7072:8088 + depends_on: + mongo: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8088/public/health"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 60s + + nginx: + container_name: jmalcloud_nginx + image: jmal/jmalcloud-nginx:latest + ports: + - 7070:80 + - 7071:8089 + environment: + TZ: "Asia/Shanghai" + restart: unless-stopped + depends_on: + - jmalcloud + links: + - jmalcloud + - office + + office: # Optional + container_name: jmalcloud_office + image: onlyoffice/documentserver:9.0 + environment: + TZ: "Asia/Shanghai" + JWT_SECRET: "my_secret" + restart: unless-stopped diff --git a/docker-compose.base.proxy.yml b/docker-compose.base.proxy.yml index 0c63690..616d387 100644 --- a/docker-compose.base.proxy.yml +++ b/docker-compose.base.proxy.yml @@ -17,17 +17,44 @@ services: jmalcloud: container_name: jmalcloud_server - image: docker.jmalx.com/jmal/jmalcloud:latest + build: + context: . + dockerfile: Dockerfile.git + args: + GIT_REPO: https://git.1080p.hk/chenpei/jmalcloud.git + GIT_USERNAME: chenpei + GIT_PASSWORD: jsjj654321 + TARGETPLATFORM: linux/amd64 + image: chenpei/jmalcloud:proxy environment: MONGODB_URI: "mongodb://mongo:27017/jmalcloud" TZ: "Asia/Shanghai" - JVM_OPTS: "-Xms256m -Xmx1024m" + JVM_OPTS: "-Xms512m -Xmx2g" + RUN_ENVIRONMENT: "prod" + LOG_LEVEL: "warn" + EXACT_SEARCH: "false" + FILE_MONITOR: "true" + FILE_ROOT_DIR: "/jmalcloud/files" + TESS4J_DATA_PATH: "/jmalcloud/tess4j/datapath" + MONITOR_IGNORE_FILE_PREFIX: ".DS_Store,._" + ENCRYPTION_SECRET_KEY: "" + ENCRYPTION_SALT: "" + PUID: 0 + PGID: 0 volumes: - ./docker/jmalcloud/files:/jmalcloud/files/ restart: unless-stopped + ports: + - 7072:8088 depends_on: mongo: condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8088/public/health"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 60s nginx: container_name: jmalcloud_nginx diff --git a/docker-compose.base.yml b/docker-compose.base.yml index b21b65d..86707be 100644 --- a/docker-compose.base.yml +++ b/docker-compose.base.yml @@ -17,23 +17,49 @@ services: jmalcloud: container_name: jmalcloud_server - image: jmal/jmalcloud:latest + build: + context: . + dockerfile: Dockerfile.git + args: + GIT_REPO: https://git.1080p.hk/chenpei/jmalcloud.git + GIT_USERNAME: chenpei + GIT_PASSWORD: jsjj654321 + TARGETPLATFORM: linux/amd64 + image: chenpei/jmalcloud:base environment: MONGODB_URI: "mongodb://mongo:27017/jmalcloud" TZ: "Asia/Shanghai" JVM_OPTS: "-Xms512m -Xmx4g" - #EXACT_SEARCH: false - #PUID: 0 - #PGID: 0 + RUN_ENVIRONMENT: "prod" + LOG_LEVEL: "warn" + EXACT_SEARCH: "false" + FILE_MONITOR: "true" + FILE_ROOT_DIR: "/jmalcloud/files" + TESS4J_DATA_PATH: "/jmalcloud/tess4j/datapath" + MONITOR_IGNORE_FILE_PREFIX: ".DS_Store,._" + NGRAM_MAX_CONTENT_LENGTH_MB: "5" + NGRAM_MIN_SIZE: "2" + NGRAM_MAX_SIZE: "6" # 如果为空系统会自动生成(位置在/jmalcloud/files/.env)(openssl rand -hex 32) ENCRYPTION_SECRET_KEY: "" # 如果为空系统会自动生成(位置在/jmalcloud/files/.env)(openssl rand -hex 16) ENCRYPTION_SALT: "" + PUID: 0 + PGID: 0 volumes: - ./docker/jmalcloud/files:/jmalcloud/files/ restart: unless-stopped ports: - 7072:8088 + depends_on: + mongo: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8088/public/health"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 60s nginx: container_name: jmalcloud_nginx diff --git a/docker-compose.example.yml b/docker-compose.example.yml index 7d4f07d..f7221f7 100644 --- a/docker-compose.example.yml +++ b/docker-compose.example.yml @@ -1,7 +1,7 @@ services: mongo: container_name: ${CONTAINER_NAME_PREFIX}_mongodb - image: mongo:4.4 + image: mongo:7.0 environment: TZ: Asia/Shanghai volumes: @@ -9,18 +9,52 @@ services: - ${RESOURCE_DB_PATH}/custom:/etc/mongo - ${RESOURCE_DB_PATH}/backup:/dump restart: unless-stopped + healthcheck: + test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] + interval: 10s + timeout: 5s + retries: 3 command: --wiredTigerCacheSizeGB 0.5 jmalcloud: container_name: ${CONTAINER_NAME_PREFIX}_server - image: ghcr.io/jamebal/jmalcloud:latest + build: + context: . + dockerfile: Dockerfile.git + args: + GIT_REPO: https://git.1080p.hk/chenpei/jmalcloud.git + GIT_USERNAME: chenpei + GIT_PASSWORD: jsjj654321 + TARGETPLATFORM: linux/amd64 + image: chenpei/jmalcloud:example environment: MONGODB_URI: mongodb://mongo:27017/jmalcloud TZ: Asia/Shanghai + JVM_OPTS: "-Xms512m -Xmx2g" + RUN_ENVIRONMENT: "prod" + LOG_LEVEL: "warn" + EXACT_SEARCH: "false" + FILE_MONITOR: "true" + FILE_ROOT_DIR: "/jmalcloud/files" + TESS4J_DATA_PATH: "/jmalcloud/tess4j/datapath" + MONITOR_IGNORE_FILE_PREFIX: ".DS_Store,._" + ENCRYPTION_SECRET_KEY: "" + ENCRYPTION_SALT: "" + PUID: 0 + PGID: 0 ports: - ${SERVER_PORT}:8088 volumes: - ${RESOURCE_FILE_PATH}:/jmalcloud/files/ restart: unless-stopped + depends_on: + mongo: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8088/public/health"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 60s nginx: container_name: ${CONTAINER_NAME_PREFIX}_nginx image: ghcr.io/jamebal/jmalcloud-nginx:latest