From 3a571d576c8d6c99bf29fcacfcc44a34ed1dc656 Mon Sep 17 00:00:00 2001 From: danial Date: Sat, 13 Dec 2025 22:11:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(docker):=20=E4=BD=BF=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E5=85=B7=E6=9C=89=E6=89=A7=E8=A1=8C=E6=9D=83?= =?UTF-8?q?=E9=99=90=E5=B9=B6=E8=AE=BE=E7=BD=AE=E4=B8=BA=E5=85=A5=E5=8F=A3?= =?UTF-8?q?=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 Dockerfile 中添加对 migrate.sh 脚本的执行权限设置 - 将 migrate.sh 脚本设为容器启动的入口点 - 删除 atlas.hcl 文件中无用的 dev 环境配置项 chore(docker): 更换基础镜像并简化迁移流程 - 将基础镜像从 arigaio/atlas:latest 修改为更轻量的 latest-alpine - 删除 migrate.sh 脚本,改用 atlas 命令直接进行数据库迁移 - 优化 Dockerfile 入口点,移除对外部脚本的依赖 - 简化镜像构建和运行流程,提高构建效率和镜像体积优化 chore(docker): 更新基础镜像版本为 latest - 将基础镜像从 arigaio/atlas:latest-alpine 更改为 arigaio/atlas:latest - 可能包含非alpine版本的更多功能或优化 - 保持工作目录设置不变 - 减少了潜在的依赖冲突风险 refactor(docker): 优化Dockerfile和docker-compose配置以支持测试环境 - 修改Dockerfile的ENTRYPOINT,简化启动命令 - 新增docker-compose.test.yml,配置测试用MySQL服务及数据库迁移流程 - 在docker-compose.yml中调整db-migrate服务启动参数,支持动态环境变量数据库连接 - 通过依赖和健康检查确保测试数据库在迁移前可用 - 增加测试数据库和开发数据库的自动创建和迁移功能 fix(docker): 修复开发环境数据库连接字符串配置 - 修改了 docker-compose.yml 中开发环境数据库的连接参数 - 使用了新的环境变量 DB_USER_DEV、DB_PASSWORD_DEV 和 DB_NAME_DEV - 修正了数据库 URL 拼接格式,确保连接正确 - 删除了冗余或者错误的参数设置 - 保持其他配置不变,防止影响运行机制 chore(docker): 优化 Docker 镜像和 docker-compose 配置 - 切换基础镜像为更轻量的 alpine 版本 - 设置工作目录为 /app,方便挂载迁移目录 - 修改 ENTRYPOINT 指向正确的 atlas 可执行文件路径 - 在 docker-compose.yml 中添加重启策略为 no - 使用环境变量简化数据库连接字符串配置 - 调整命令行参数格式,提升可读性和维护性 fix(docker): 修正基础镜像和入口点路径 - 将基础镜像从alpine版本更改为latest版本 - 修改ENTRYPOINT路径以匹配新的镜像结构 - 保持工作目录和文件复制配置不变 chore(docker): 切换基础镜像为alpine版本 - 将基础镜像从arigaio/atlas:latest更改为arigaio/atlas:latest-alpine - 使用轻量级alpine版本以减少镜像体积 - 保持工作目录设置不变,确保迁移目录挂载位置正确 chore(migration): 删除本地测试脚本并优化docker-compose配置 - 删除了用于本地数据库迁移测试的test-local.sh脚本文件 - 简化并优化docker-compose.yml中db-migrate服务的命令格式 - 移除.env.local中的无用MySQL容器名称配置注释和变量声明 --- .env.local | 3 --- Dockerfile | 7 ++--- atlas.hcl | 1 - docker-compose.test.yml | 58 +++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 9 ++++--- migrate.sh | 16 ------------ test-local.sh | 44 ------------------------------- 7 files changed, 67 insertions(+), 71 deletions(-) create mode 100644 docker-compose.test.yml delete mode 100755 migrate.sh delete mode 100755 test-local.sh diff --git a/.env.local b/.env.local index 1ffeb93..421c124 100644 --- a/.env.local +++ b/.env.local @@ -1,6 +1,3 @@ -# MySQL Docker 容器名称(根据实际情况修改) -MYSQL_CONTAINER=mysql-server - # 本地数据库连接信息 DB_USER=root DB_PASSWORD=mysql123 diff --git a/Dockerfile b/Dockerfile index 3c278b6..d1a9090 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,10 @@ -FROM arigaio/atlas:latest +FROM arigaio/atlas:latest-alpine +# 设置工作目录,迁移目录通常会挂载到这里 WORKDIR /app COPY atlas.hcl . COPY schema.sql . -COPY migrate.sh . -ENTRYPOINT ["/app/migrate.sh"] +# 设置 ENTRYPOINT,使得容器启动时默认运行 Atlas +ENTRYPOINT ["/atlas"] diff --git a/atlas.hcl b/atlas.hcl index 18e817b..354b73b 100644 --- a/atlas.hcl +++ b/atlas.hcl @@ -7,5 +7,4 @@ env "local" { env "prod" { src = "file://schema.sql" url = getenv("DB_URL") - dev = "mysql://root:mysql123@localhost:3306/atlas_dev" } diff --git a/docker-compose.test.yml b/docker-compose.test.yml new file mode 100644 index 0000000..fb649cd --- /dev/null +++ b/docker-compose.test.yml @@ -0,0 +1,58 @@ +version: "3.8" + +services: + # 测试数据库 + test-mysql: + image: mysql:8.0 + environment: + MYSQL_ROOT_PASSWORD: testpass + MYSQL_DATABASE: testdb + ports: + - "13306:3306" + healthcheck: + test: + [ + "CMD", + "mysqladmin", + "ping", + "-h", + "localhost", + "-u", + "root", + "-ptestpass", + ] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + + # 创建 testdb_dev 数据库 + create-dev-db: + image: mysql:8.0 + command: + [ + "sh", + "-c", + "sleep 10 && mysql -h test-mysql -u root -ptestpass -e 'CREATE DATABASE IF NOT EXISTS testdb_dev;'", + ] + depends_on: + test-mysql: + condition: service_healthy + + # 数据库迁移服务 + db-migrate: + build: . + command: + - "schema" + - "apply" + - "--url" + - "mysql://root:testpass@test-mysql:3306/testdb" + - "--to" + - "file://schema.sql" + - "--dev-url" + - "mysql://root:testpass@test-mysql:3306/testdb_dev" + - "--auto-approve" + depends_on: + create-dev-db: + condition: service_completed_successfully + restart: "no" diff --git a/docker-compose.yml b/docker-compose.yml index 6a9f6be..9e08741 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,11 @@ version: "3.8" services: - # 数据库迁移服务 db-migrate: build: . - environment: - # 从环境变量读取数据库连接信息 - DB_URL: "mysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}" restart: "no" + command: > + schema apply + --url "mysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}" + --to "file://schema.sql" + --auto-approve \ No newline at end of file diff --git a/migrate.sh b/migrate.sh deleted file mode 100755 index d10d98f..0000000 --- a/migrate.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -set -e - -echo "开始数据库迁移..." - -if [ -z "$DB_URL" ]; then - echo "错误: DB_URL 环境变量未设置" - exit 1 -fi - -atlas schema apply \ - --env prod \ - --auto-approve - -echo "迁移完成!" diff --git a/test-local.sh b/test-local.sh deleted file mode 100755 index c28e80d..0000000 --- a/test-local.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash - -set -e - -# 加载配置 -if [ -f .env.local ]; then - export $(cat .env.local | grep -v '^#' | xargs) -fi - -echo "=========================================" -echo "本地测试数据库迁移" -echo "使用容器: $MYSQL_CONTAINER" -echo "=========================================" - -# 1. 创建 atlas_dev 数据库 -echo "" -echo "步骤 1: 创建 atlas_dev 数据库" -docker exec $MYSQL_CONTAINER mysql -uroot -pmysql123 -e "CREATE DATABASE IF NOT EXISTS atlas_dev;" - -# 2. 生成 schema.sql -echo "" -echo "步骤 2: 生成 schema.sql" -./generate-migration.sh - -# 3. 创建测试数据库 -echo "" -echo "步骤 3: 创建测试数据库" -docker exec $MYSQL_CONTAINER mysql -uroot -pmysql123 -e "DROP DATABASE IF EXISTS kami_test; CREATE DATABASE kami_test;" - -# 4. 测试迁移 -echo "" -echo "步骤 4: 测试迁移到 kami_test" -export DB_URL="mysql://root:mysql123@localhost:3306/kami_test" -atlas schema apply --env prod --auto-approve - -# 5. 验证结果 -echo "" -echo "步骤 5: 验证迁移结果" -docker exec $MYSQL_CONTAINER mysql -uroot -pmysql123 kami_test -e "SHOW TABLES;" - -echo "" -echo "=========================================" -echo "测试完成!" -echo "========================================="