diff --git a/.env.demo b/.env.demo new file mode 100644 index 00000000..aea6f929 --- /dev/null +++ b/.env.demo @@ -0,0 +1,5 @@ +# 设置环境变量示例 +MYSQL_ROOT_PASSWORD= +MYSQL_DATABASE=tiny_engine_data_java + + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..cb118b63 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,48 @@ +name: te_java_services_mysql + +services: + mysql: + env_file: + - .env + container_name: te_java_mysql + image: mysql:8 + command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci + restart: always + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-} + MYSQL_ALLOW_EMPTY_PASSWORD: "yes" + MYSQL_DATABASE: ${MYSQL_DATABASE:-tiny_engine_data_java} + volumes: + - te-java-mysql-volumes:/var/lib/mysql + ports: + - 3306:3306 + networks: + - te-java-mysql + + # database explorer + phpmyadmin: + env_file: + - .env + image: phpmyadmin + # for arm64 macos + # image: arm64v8/phpmyadmin + restart: always + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-} + MYSQL_ALLOW_EMPTY_PASSWORD: "yes" + MYSQL_DATABASE: ${MYSQL_DATABASE:-tiny_engine_data_java} + PMA_HOST: "mysql" + ports: + - 8080:80 + networks: + - te-java-mysql + depends_on: + - mysql + +volumes: + te-java-mysql-volumes: + +networks: + te-java-mysql: + name: te-java-mysql + driver: bridge diff --git a/docker_init_data.sh b/docker_init_data.sh new file mode 100644 index 00000000..f644154a --- /dev/null +++ b/docker_init_data.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# set -ex +# 复制 sql script 到 docker 容器内部 +docker cp init_database_mysql.sh te_java_mysql:/tmp/ +docker cp ./app/src/main/resources/sql/mysql te_java_mysql:/tmp/sql +# 在 docker 容器内部执行 script +docker exec te_java_mysql sh -c "chmod +x /tmp/init_database_mysql.sh && /tmp/init_database_mysql.sh" diff --git a/init_database_mysql.sh b/init_database_mysql.sh new file mode 100644 index 00000000..65aee900 --- /dev/null +++ b/init_database_mysql.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# set -ex + +# read variables from environment +db_host=${TE_DATABASE_HOST:-127.0.0.1} +db_port=${TE_DATABASE_PORT:-3306} +db_username=${TE_DATABASE_USER:-root} +db_password=${TE_DATABASE_PASSWORD:-} # default to empty password +db_name=${TE_DATABASE_NAME:-tiny_engine_data_java} + +# prepare MySQL param +param="--default-character-set=utf8mb4 -h $db_host -P $db_port -u $db_username" +if [ -n "$db_password" ]; then + param="$param -p$db_password" +fi + + +# reset database +echo "init database $db_name in local" +mysql $param -e "DROP DATABASE IF EXISTS $db_name" +mysql $param -e "CREATE DATABASE $db_name CHARACTER SET utf8mb4" + + + +# find all sql files and sort +sql_files=$(ls /tmp/sql/*.sql | sort) +echo "🤖 Running the following SQL files:" + +# execute sql files +for file in $sql_files; do + echo "🔖 Running $file..." + mysql $param $db_name < "$file" +done + +echo "🎉 prepare database $db_name done" +mysql $param -e "USE $db_name; SHOW TABLES;"