docker
This commit is contained in:
9
.dockerignore
Normal file
9
.dockerignore
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
**/target/
|
||||||
|
**/.git/
|
||||||
|
**/.idea/
|
||||||
|
**/*.iml
|
||||||
|
**/.vscode/
|
||||||
|
**/node_modules/
|
||||||
|
**/*.log
|
||||||
|
**/.DS_Store
|
||||||
|
**/uploadPath/
|
||||||
15
.env.example
Normal file
15
.env.example
Normal 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
4
.gitignore
vendored
@@ -38,6 +38,10 @@ dist/
|
|||||||
nbdist/
|
nbdist/
|
||||||
.nb-gradle/
|
.nb-gradle/
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
# Docker / local secrets
|
||||||
|
.env
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Others
|
# Others
|
||||||
*.log
|
*.log
|
||||||
|
|||||||
18
Dockerfile
Normal file
18
Dockerfile
Normal 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"]
|
||||||
@@ -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}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM ubuntu:latest
|
# 已废弃:请在仓库根目录使用 Dockerfile 与 docker-compose.yml 构建镜像。
|
||||||
LABEL authors="admin"
|
# Deprecated — use the Dockerfile at the repository root.
|
||||||
|
FROM alpine:3.19
|
||||||
ENTRYPOINT ["top", "-b"]
|
RUN echo "ERROR: build from repo root (../Dockerfile). See docker/README.md" >&2 && exit 1
|
||||||
|
|||||||
94
docker-compose.yml
Normal file
94
docker-compose.yml
Normal 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
52
docker/README.md
Normal 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}`)。
|
||||||
0
docker/mysql/init/.gitkeep
Normal file
0
docker/mysql/init/.gitkeep
Normal file
30
docker/mysql/init/README.md
Normal file
30
docker/mysql/init/README.md
Normal 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。
|
||||||
1413
docker/mysql/init/_localhost-2026_04_09_10_53_40-dump.sql
Normal file
1413
docker/mysql/init/_localhost-2026_04_09_10_53_40-dump.sql
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user