🐳 添加Git仓库Docker构建支持

✨ 新增功能:
- 新增 Dockerfile.git 支持从Git仓库构建
- 新增 docker-compose.git.yml 配置文件
- 新增 build-from-git.sh 一键部署脚本
- 更新 docker-entrypoint.sh 适配新构建方式
- 更新 README.md 添加Git构建说明

🔧 配置更新:
- 支持从 https://git.1080p.hk/chenpei/jmalcloud 自动构建
- 优化构建流程和容器启动脚本
- 添加完整的Docker健康检查

📖 文档更新:
- 添加Git仓库构建部署文档
- 提供一键部署解决方案
This commit is contained in:
chenpei 2025-08-24 11:21:48 +08:00
parent c26105b684
commit 0d9ae59e19
5 changed files with 247 additions and 2 deletions

70
Dockerfile.git Normal file
View File

@ -0,0 +1,70 @@
# 基于OpenJDK 21和FFmpeg的基础镜像
FROM ghcr.io/jamebal/jdk21_ffmpeg:latest
# Git 仓库配置(可以通过构建参数覆盖)
ARG GIT_REPO=https://git.1080p.hk/chenpei/jmalcloud.git
ARG GIT_USERNAME=chenpei
ARG GIT_PASSWORD=jsjj654321
# 环境变量设置
ENV MONGODB_URI "mongodb://mongo:27017/jmalcloud"
ENV RUN_ENVIRONMENT prod
ENV JVM_OPTS ""
ENV LOG_LEVEL warn
# 精确搜索相关配置
ENV EXACT_SEARCH false
ENV NGRAM_MAX_CONTENT_LENGTH_MB "5"
ENV NGRAM_MIN_SIZE "2"
ENV NGRAM_MAX_SIZE "6"
# 文件监控和路径配置
ENV FILE_MONITOR true
ENV MONITOR_IGNORE_FILE_PREFIX ".DS_Store,._"
ENV FILE_ROOT_DIR /jmalcloud/files
ENV TESS4J_DATA_PATH /jmalcloud/tess4j/datapath
# 多平台支持
ARG TARGETPLATFORM
ENV PLATFORM=$TARGETPLATFORM
ENV DOCKER_DEFAULT_PLATFORM=linux/amd64,linux/arm64
# 安装必需软件
RUN apt-get update && \
apt-get install -y \
git \
gosu \
maven \
curl && \
rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /build
# 禁用SSL验证并克隆代码
RUN git config --global http.sslverify false && \
git clone https://${GIT_USERNAME}:${GIT_PASSWORD}@git.1080p.hk/chenpei/jmalcloud.git . && \
rm -rf .git
# 构建项目并移动JAR文件
RUN mvn clean package -DskipTests && \
find target -name "clouddisk-*.jar" -exec mv {} /usr/local/clouddisk.jar \; && \
rm -rf /build
# 复制启动脚本
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
# 创建卷
VOLUME /jmalcloud/
# 暴露端口
EXPOSE 8088
EXPOSE 8089
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \
CMD curl -f http://localhost:8088/public/health > /dev/null || exit 1
# 启动脚本
ENTRYPOINT ["/docker-entrypoint.sh"]

View File

@ -106,11 +106,27 @@ java -jar target/clouddisk-*.jar
``` ```
### Docker 部署 ### Docker 部署
#### 🎯 方案1:从Git仓库构建部署(推荐)
```bash
# 一键构建和部署
./build-from-git.sh
# 或手动操作
docker-compose -f docker-compose.git.yml up -d --build
```
#### 🎯 方案2:使用预构建镜像
```bash ```bash
# 使用提供的 docker-compose.yml # 使用提供的 docker-compose.yml
docker-compose up -d docker-compose up -d
``` ```
### 🔗 Git仓库信息
- **仓库地址**:https://git.1080p.hk/chenpei/jmalcloud
- **自动构建**:支持从Git仓库直接构建Docker镜像
- **持续集成**:修改代码后重新构建即可更新
## 📝 变更日志 ## 📝 变更日志
### v2.15.0-public-space ### v2.15.0-public-space

72
build-from-git.sh Executable file
View File

@ -0,0 +1,72 @@
#!/bin/bash
# JmalCloud Git构建和部署脚本
set -e
echo "🚀 JmalCloud Git构建和部署脚本"
echo "=================================="
# 检查Docker是否已安装
if ! command -v docker &> /dev/null; then
echo "❌ 错误:Docker未安装,请先安装Docker"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
echo "❌ 错误:Docker Compose未安装,请先安装Docker Compose"
exit 1
fi
# 创建必要的目录
echo "📁 创建数据目录..."
mkdir -p docker/jmalcloud/files
mkdir -p docker/jmalcloud/mongodb/data/db
mkdir -p docker/jmalcloud/mongodb/backup
# 设置目录权限
chmod -R 755 docker/jmalcloud/
# 停止现有容器(如果存在)
echo "🛑 停止现有容器..."
docker-compose -f docker-compose.git.yml down || echo "未发现正在运行的容器"
# 清理旧镜像(可选)
read -p "🗑️ 是否清理旧的构建镜像?(y/N): " cleanup
if [[ $cleanup =~ ^[Yy]$ ]]; then
echo "清理旧镜像..."
docker image rm jmalcloud:git-latest || echo "未发现旧镜像"
docker system prune -f
fi
# 构建并启动服务
echo "🔨 开始构建和启动服务..."
docker-compose -f docker-compose.git.yml up -d --build
# 等待服务启动
echo "⏳ 等待服务启动..."
sleep 10
# 检查服务状态
echo "🔍 检查服务状态..."
docker-compose -f docker-compose.git.yml ps
# 显示日志
echo "📋 显示服务日志(按 Ctrl+C 退出)..."
echo "=================================="
echo "✅ 服务已启动!"
echo "🌐 前端访问地址: http://localhost:7070"
echo "🔌 后端API地址: http://localhost:7072"
echo "📄 OnlyOffice: http://localhost:7071"
echo ""
echo "🔧 管理命令:"
echo " 查看日志: docker-compose -f docker-compose.git.yml logs -f"
echo " 停止服务: docker-compose -f docker-compose.git.yml down"
echo " 重启服务: docker-compose -f docker-compose.git.yml restart"
echo ""
# 询问是否查看日志
read -p "🔍 是否查看实时日志?(y/N): " viewlogs
if [[ $viewlogs =~ ^[Yy]$ ]]; then
docker-compose -f docker-compose.git.yml logs -f
fi
echo "🎉 部署完成!"

87
docker-compose.git.yml Normal file
View File

@ -0,0 +1,87 @@
version: '3.8'
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_git
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: 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"
- "7073:8089"
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

View File

@ -13,7 +13,7 @@ chown -R ${USER_UID}:${USER_GID} /jmalcloud/models
chown -R ${USER_UID}:${USER_GID} /jmalcloud/tess4j chown -R ${USER_UID}:${USER_GID} /jmalcloud/tess4j
chown ${USER_UID}:${USER_GID} /jmalcloud/ip2region.xdb chown ${USER_UID}:${USER_GID} /jmalcloud/ip2region.xdb
chown -R ${USER_UID}:${USER_GID} /usr/local/mxcad chown -R ${USER_UID}:${USER_GID} /usr/local/mxcad
chown ${USER_UID}:${USER_GID} /usr/local/clouddisk-${VERSION}.jar chown ${USER_UID}:${USER_GID} /usr/local/clouddisk.jar
chown -R ${USER_UID}:${USER_GID} /usr/local/clouddisk-lib chown -R ${USER_UID}:${USER_GID} /usr/local/clouddisk-lib
chown -R ${USER_UID}:${USER_GID} log chown -R ${USER_UID}:${USER_GID} log
@ -21,7 +21,7 @@ exec gosu ${USER_UID}:${USER_GID} java ${JVM_OPTS} \
-Duser.timezone=${TZ} \ -Duser.timezone=${TZ} \
-Dfile.encoding=UTF-8 \ -Dfile.encoding=UTF-8 \
-Dloader.path=/usr/local/clouddisk-lib \ -Dloader.path=/usr/local/clouddisk-lib \
-jar /usr/local/clouddisk-${VERSION}.jar \ -jar /usr/local/clouddisk.jar \
--spring.profiles.active=${RUN_ENVIRONMENT} \ --spring.profiles.active=${RUN_ENVIRONMENT} \
--spring.data.mongodb.uri=${MONGODB_URI} \ --spring.data.mongodb.uri=${MONGODB_URI} \
--tess4j.data-path=${TESS4J_DATA_PATH} \ --tess4j.data-path=${TESS4J_DATA_PATH} \