feat(docker): 使迁移脚本具有执行权限并设置为入口点
- 在 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容器名称配置注释和变量声明
This commit is contained in:
@@ -1,6 +1,3 @@
|
||||
# MySQL Docker 容器名称(根据实际情况修改)
|
||||
MYSQL_CONTAINER=mysql-server
|
||||
|
||||
# 本地数据库连接信息
|
||||
DB_USER=root
|
||||
DB_PASSWORD=mysql123
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -7,5 +7,4 @@ env "local" {
|
||||
env "prod" {
|
||||
src = "file://schema.sql"
|
||||
url = getenv("DB_URL")
|
||||
dev = "mysql://root:mysql123@localhost:3306/atlas_dev"
|
||||
}
|
||||
|
||||
58
docker-compose.test.yml
Normal file
58
docker-compose.test.yml
Normal file
@@ -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"
|
||||
@@ -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
|
||||
16
migrate.sh
16
migrate.sh
@@ -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 "迁移完成!"
|
||||
@@ -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 "========================================="
|
||||
Reference in New Issue
Block a user