This commit is contained in:
MHW
2026-04-09 15:13:10 +08:00
parent 6add28fdfb
commit 78e5833514
11 changed files with 1662 additions and 4 deletions

9
.dockerignore Normal file
View File

@@ -0,0 +1,9 @@
**/target/
**/.git/
**/.idea/
**/*.iml
**/.vscode/
**/node_modules/
**/*.log
**/.DS_Store
**/uploadPath/

15
.env.example Normal file
View File

@@ -0,0 +1,15 @@
# 复制为 .env 后 docker compose 会自动加载
# copy .env.example .env
MYSQL_ROOT_PASSWORD=1234
MYSQL_DATABASE=autosolution_db
MYSQL_PORT=3307
REDIS_PASSWORD=123456
REDIS_PORT=6379
APP_PORT=1777
APP_IMAGE_TAG=latest
# JVM 可选
# JAVA_OPTS=-Xms512m -Xmx1024m

4
.gitignore vendored
View File

@@ -38,6 +38,10 @@ dist/
nbdist/
.nb-gradle/
######################################################################
# Docker / local secrets
.env
######################################################################
# Others
*.log

18
Dockerfile Normal file
View File

@@ -0,0 +1,18 @@
# 运行已打包的 JAR不依赖源码目录
# 要求构建上下文中存在 solution-admin.jar
# 构建docker build -t auto-solution-admin:latest .
FROM eclipse-temurin:8-jre-jammy
LABEL org.opencontainers.image.title="auto-solution-admin"
WORKDIR /app
RUN mkdir -p /app/uploadPath
COPY solution-admin.jar /app/app.jar
ENV TZ=Asia/Shanghai \
JAVA_OPTS="-Xms512m -Xmx1024m"
EXPOSE 8080
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app/app.jar --spring.profiles.active=druid,docker"]

View File

@@ -0,0 +1,23 @@
# Docker / docker-compose 环境:与 application.yml 的 druid 配置叠加使用
# 启动:-Dspring.profiles.active=druid,docker
spring:
devtools:
restart:
enabled: false
redis:
host: ${REDIS_HOST:redis}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
database: ${REDIS_DB:0}
datasource:
druid:
master:
url: jdbc:mysql://${MYSQL_HOST:mysql}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:autosolution_db}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
username: ${MYSQL_USER:root}
password: ${MYSQL_PASSWORD:root}
server:
port: ${SERVER_PORT:8080}
solution:
profile: ${SOLUTION_UPLOAD_PATH:/app/uploadPath}

View File

@@ -1,4 +1,4 @@
FROM ubuntu:latest
LABEL authors="admin"
ENTRYPOINT ["top", "-b"]
# 已废弃:请在仓库根目录使用 Dockerfile 与 docker-compose.yml 构建镜像。
# Deprecated — use the Dockerfile at the repository root.
FROM alpine:3.19
RUN echo "ERROR: build from repo root (../Dockerfile). See docker/README.md" >&2 && exit 1

94
docker-compose.yml Normal file
View File

@@ -0,0 +1,94 @@
# 若依后端 + MySQL 8 + Redis 7
# 使用1) 将 SQL 放入 docker/mysql/init/(见该目录 README
# 2) 复制 .env.example 为 .env 并按需修改密码
# 3) docker compose up -d --build
#
# 应用访问http://localhost:1777容器内 8080 映射到宿主机 1777
services:
mysql:
image: mysql:8.0
container_name: autosolution-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root}
MYSQL_DATABASE: ${MYSQL_DATABASE:-autosolution_db}
TZ: Asia/Shanghai
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --default-authentication-plugin=mysql_native_password
ports:
- "${MYSQL_PORT:-3307}:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./docker/mysql/init:/docker-entrypoint-initdb.d:ro
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-uroot", "-p${MYSQL_ROOT_PASSWORD:-root}"]
interval: 10s
timeout: 5s
retries: 10
start_period: 40s
redis:
image: redis:7-alpine
container_name: autosolution-redis
restart: unless-stopped
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
entrypoint: ["/bin/sh", "-c"]
command:
- |
if [ -n "$$REDIS_PASSWORD" ]; then
exec redis-server --appendonly yes --requirepass "$$REDIS_PASSWORD"
else
exec redis-server --appendonly yes
fi
ports:
- "${REDIS_PORT:-6379}:6379"
volumes:
- redis_data:/data
healthcheck:
test:
[
"CMD-SHELL",
'if [ -n "$$REDIS_PASSWORD" ]; then redis-cli -a "$$REDIS_PASSWORD" ping | grep -q PONG; else redis-cli ping | grep -q PONG; fi',
]
interval: 5s
timeout: 3s
retries: 5
app:
# 运行已构建好的应用镜像(推荐:在有网络的机器上 docker build然后 docker save/load 到 CentOS
# 如需在本机从 Dockerfile 构建,请在另一份 compose 文件中加入 build 配置,或临时手动 docker build。
image: auto-solution-admin:${APP_IMAGE_TAG:-latest}
container_name: autosolution-app
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
environment:
MYSQL_HOST: mysql
MYSQL_PORT: "3306"
MYSQL_DATABASE: ${MYSQL_DATABASE:-autosolution_db}
MYSQL_USER: root
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root}
REDIS_HOST: redis
REDIS_PORT: "6379"
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
REDIS_DB: "0"
SERVER_PORT: "8080"
SOLUTION_UPLOAD_PATH: /app/uploadPath
TZ: Asia/Shanghai
JAVA_OPTS: ${JAVA_OPTS:--Xms512m -Xmx1024m}
ports:
- "${APP_PORT:-1777}:8080"
volumes:
- app_upload:/app/uploadPath
volumes:
mysql_data:
redis_data:
app_upload:

52
docker/README.md Normal file
View File

@@ -0,0 +1,52 @@
# Docker 部署说明
## 前置条件
- 安装 [Docker Desktop](https://www.docker.com/products/docker-desktop/)Windows 需开启 WSL2
- 项目根目录:`auto-solution`(与 `Dockerfile``docker-compose.yml` 同级)。
## 快速开始
1. **准备数据库脚本**(首次必做)
将 SQL 放到 `docker/mysql/init/`,详见 [mysql/init/README.md](mysql/init/README.md)。
2. **环境变量(可选)**
```bash
copy .env.example .env
```
按需修改 `MYSQL_ROOT_PASSWORD`、`REDIS_PASSWORD` 等;若 Redis 设密码,需在 `.env` 中填写 `REDIS_PASSWORD`,并与应用一致。
3. **构建并启动**
```bash
docker compose build
docker compose up -d
```
4. **访问**
- 后端:<http://localhost:1777>(默认映射,可在 `.env` 改 `APP_PORT`
- MySQL宿主机端口默认 `3307`(避免与本机 3306 冲突)
- Redis宿主机端口默认 `6379`(与容器内端口一致,可通过 `.env` 中 `REDIS_PORT` 修改)
## 仅构建应用镜像
```bash
docker build -t auto-solution-admin:latest .
```
## 配置说明
- 容器内使用 Spring 配置:`druid` + `docker`,见 `auto-solution-admin/src/main/resources/application-docker.yml`。
- 数据源与 Redis 主机名在 Compose 中为 `mysql`、`redis`,勿改服务名除非同步改配置。
## 上传文件
附件目录使用数据卷 `app_upload`,持久化在 Docker volume `autosolution_app_upload`(名称前缀随项目目录可能略有不同)。
## 常见问题
- **应用连不上库**:确认 MySQL 健康检查已通过;`init` SQL 是否已执行(空库首次启动才会执行)。
- **Redis 认证失败**:本仓库 `application.yml` 里开发环境 Redis 带密码Compose 中 Redis 默认无密码。若需密码,在 `.env` 设置 `REDIS_PASSWORD`,并确保与 `application-docker.yml` 中 `REDIS_PASSWORD` 环境变量一致(已支持 `${REDIS_PASSWORD}`)。

View File

View File

@@ -0,0 +1,30 @@
# MySQL 首次初始化 SQL
MySQL 官方镜像会在**数据目录为空**时,按文件名顺序执行本目录下:
- `*.sql`
- `*.sql.gz`
- `*.sh`
## 你需要做的事
1. 从本机现有库导出(示例):
```bash
mysqldump -uroot -p --databases autosolution_db --single-transaction --quick > docker/mysql/init/01-autosolution_db.sql
```
2. 或放入若依官方 `ry_*.sql` 与 Quartz 等脚本,**按依赖顺序**命名前缀(如 `01-`、`02-`)。
3. 若容器/卷里已经有数据,这些脚本**不会再次执行**。需要重新初始化时:
```bash
docker compose down -v
docker compose up -d
```
注意:`-v` 会删除 `mysql_data` 卷,请确认无重要数据。
## 字符集
`docker-compose.yml` 中 MySQL 已配置 `utf8mb4`,导入脚本建议同为 UTF-8。

File diff suppressed because one or more lines are too long