首家工业级全流程 AI 影视生产平台。Industry-first professional AI Agent platform for controllable film & video production. From shorts to live-action with...
docker pull library/mysql
docker run -d --name waoowaoo --restart always mysql:8.0
podman run -d --name waoowaoo --restart always mysql:8.0
skopeo inspect docker://docker.io/library/mysql:8.0
oras pull mysql:8.0
docker compose up -d
x-logging: &default-logging
driver: json-file
options:
max-size: "50m"
max-file: "5"
services:
mysql:
image: mysql:8.0
logging: *default-logging
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: waoowaoo_test
MYSQL_ROOT_HOST: "%"
ports:
- "127.0.0.1:${TEST_MYSQL_PORT:-0}:3306"
command:
- "--default-authentication-plugin=mysql_native_password"
- "--sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -proot"]
interval: 5s
timeout: 5s
retries: 30
start_period: 15s
redis:
image: redis:7-alpine
logging: *default-logging
ports:
- "127.0.0.1:${TEST_REDIS_PORT:-0}:6379"
command: ["redis-server", "--appendonly", "no"]
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 5s
retries: 30
start_period: 5s
temporal-db-bootstrap:
image: mysql:8.0
profiles: ["temporal"]
restart: "no"
logging: *default-logging
network_mode: "service:mysql"
depends_on:
mysql:
condition: service_healthy
environment:
MYSQL_HOST: 127.0.0.1
MYSQL_PORT: "3306"
MYSQL_ROOT_PASSWORD: root
TEMPORAL_MYSQL_USER: temporal
TEMPORAL_MYSQL_PASSWORD: temporal-test-only
entrypoint: ["/bin/sh", "-ec"]
command:
- |
MYSQL_PWD="$$MYSQL_ROOT_PASSWORD" mysql \
--protocol=TCP --host="$$MYSQL_HOST" --port="$$MYSQL_PORT" --user=root <<SQL
CREATE DATABASE IF NOT EXISTS \`temporal\`
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE DATABASE IF NOT EXISTS \`temporal_visibility\`
CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER IF NOT EXISTS 'temporal'@'%' IDENTIFIED BY 'temporal-test-only';
ALTER USER 'temporal'@'%' IDENTIFIED BY 'temporal-test-only';
GRANT ALL PRIVILEGES ON \`temporal\`.* TO 'temporal'@'%';
GRANT ALL PRIVILEGES ON \`temporal_visibility\`.* TO 'temporal'@'%';
SQL
temporal-schema:
image: temporalio/admin-tools:1.31.2
profiles: ["temporal"]
restart: "no"
logging: *default-logging
depends_on:
temporal-db-bootstrap:
condition: service_completed_successfully
environment:
MYSQL_SEEDS: mysql
MYSQL_USER: temporal
SQL_PASSWORD: temporal-test-only
DB_PORT: "3306"
entrypoint: ["/bin/sh", "-ec"]
command:
- |
setup_database() {
temporal-sql-tool \
--plugin mysql8 --ep "$$MYSQL_SEEDS" -u "$$MYSQL_USER" \
-p "$$DB_PORT" --db "$$1" setup-schema -v 0.0 || true
temporal-sql-tool \
--plugin mysql8 --ep "$$MYSQL_SEEDS" -u "$$MYSQL_USER" \
-p "$$DB_PORT" --db "$$1" update-schema -d "$$2"
}
setup_database temporal /etc/temporal/schema/mysql/v8/temporal/versioned
setup_database temporal_visibility /etc/temporal/schema/mysql/v8/visibility/versioned
temporal-config:
image: busybox:1.37
profiles: ["temporal"]
restart: "no"
logging: *default-logging
volumes:
- temporal_test_config:/config
entrypoint: ["/bin/sh", "-ec"]
command:
- |
printf '%s\n' \
'limit.maxIDLength:' \
' - value: 255' \
' constraints: {}' \
> /config/docker.yaml
test -s /config/docker.yaml
temporal:
image: temporalio/server:1.31.2
profiles: ["temporal"]
restart: unless-stopped
logging: *default-logging
depends_on:
temporal-schema:
condition: service_completed_successfully
temporal-config:
condition: service_completed_successfully
environment:
DB: mysql8
DB_PORT: "3306"
MYSQL_SEEDS: mysql
MYSQL_USER: temporal
MYSQL_PWD: temporal-test-only
BIND_ON_IP: 0.0.0.0
ports:
- "127.0.0.1:${TEST_TEMPORAL_PORT:-0}:7233"
volumes:
- temporal_test_config:/etc/temporal/config/dynamicconfig:ro
healthcheck:
test: ["CMD", "nc", "-z", "127.0.0.1", "7233"]
interval: 5s
timeout: 3s
retries: 60
start_period: 30s
temporal-create-namespace:
image: temporalio/admin-tools:1.31.2
profiles: ["temporal"]
restart: "no"
logging: *default-logging
depends_on:
temporal:
condition: service_healthy
environment:
TEMPORAL_ADDRESS: temporal:7233
TEMPORAL_NAMESPACE: "${TEST_TEMPORAL_NAMESPACE:-waoowaoo-test}"
TEMPORAL_NAMESPACE_RETENTION: 1d
TEMPORAL_HEALTH_CHECK_MAX_ATTEMPTS: "60"
TEMPORAL_HEALTH_CHECK_SLEEP_SECONDS: "1"
entrypoint: ["/bin/sh", "-ec"]
command:
- |
attempt=1
until temporal operator cluster health \
--address "$$TEMPORAL_ADDRESS" >/dev/null 2>&1; do
if [ "$$attempt" -ge "$$TEMPORAL_HEALTH_CHECK_MAX_ATTEMPTS" ]; then
echo "Temporal test server did not become healthy" >&2
exit 1
fi
attempt=$$((attempt + 1))
sleep "$$TEMPORAL_HEALTH_CHECK_SLEEP_SECONDS"
done
if temporal operator namespace describe \
--namespace "$$TEMPORAL_NAMESPACE" \
--address "$$TEMPORAL_ADDRESS" >/dev/null 2>&1; then
exit 0
fi
temporal operator namespace create \
--namespace "$$TEMPORAL_NAMESPACE" \
--retention "$$TEMPORAL_NAMESPACE_RETENTION" \
--address "$$TEMPORAL_ADDRESS"
volumes:
temporal_test_config: