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/
|
||||
.nb-gradle/
|
||||
|
||||
######################################################################
|
||||
# Docker / local secrets
|
||||
.env
|
||||
|
||||
######################################################################
|
||||
# Others
|
||||
*.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
|
||||
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
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