🐳 添加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:
parent
c26105b684
commit
0d9ae59e19
70
Dockerfile.git
Normal file
70
Dockerfile.git
Normal 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"]
|
||||||
16
README.md
16
README.md
@ -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
72
build-from-git.sh
Executable 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
87
docker-compose.git.yml
Normal 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
|
||||||
@ -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} \
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user