diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 456f99e..cc2edbe 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -4,12 +4,16 @@ services: context: . dockerfile: docker/telegram/Dockerfile image: "${CM_IMAGE_PREFIX:-local}/cm-telegram:${DOCKER_IMAGE_TAG:-dev}" + profiles: ["bots"] api-server: build: context: . dockerfile: docker/api/Dockerfile image: "${CM_IMAGE_PREFIX:-local}/cm-api:${DOCKER_IMAGE_TAG:-dev}" + depends_on: + mysql: + condition: service_healthy web-view: build: @@ -27,3 +31,32 @@ services: CM_TRANSFER_MAX_THREADS: "1" mem_limit: 2g cpus: 2 + profiles: ["bots"] + + mysql: + image: mysql:8.0 + container_name: ${CM_DEPLOY_NAME:-cm}-mysql + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-devroot} + MYSQL_DATABASE: ${DB_NAME} + MYSQL_USER: ${DB_USER} + MYSQL_PASSWORD: ${DB_PASSWORD} + ports: + - "127.0.0.1:3306:3306" + volumes: + - mysql-data:/var/lib/mysql + - ./docker/mysql/init.d:/docker-entrypoint-initdb.d:ro + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-devroot}"] + interval: 5s + timeout: 3s + retries: 12 + networks: + - bot-network + +volumes: + mysql-data: + name: ${CM_DEPLOY_NAME:-cm}-mysql-data diff --git a/docker/mysql/init.d/01-schema.sql b/docker/mysql/init.d/01-schema.sql new file mode 100644 index 0000000..6f8bfd1 --- /dev/null +++ b/docker/mysql/init.d/01-schema.sql @@ -0,0 +1,17 @@ +-- Schema for the CM bot dev DB. Mounted at +-- /docker-entrypoint-initdb.d/01-schema.sql in the mysql:8.0 container; +-- runs once on first volume initialization. +CREATE TABLE IF NOT EXISTS acc ( + username VARCHAR(64) PRIMARY KEY, + password VARCHAR(128) NOT NULL, + status VARCHAR(32) DEFAULT '', + link VARCHAR(512) DEFAULT '' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS user ( + f_username VARCHAR(64) PRIMARY KEY, + f_password VARCHAR(128) NOT NULL, + t_username VARCHAR(64) NOT NULL, + t_password VARCHAR(128) NOT NULL, + last_update_time TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; diff --git a/docker/mysql/init.d/02-seed.sql b/docker/mysql/init.d/02-seed.sql new file mode 100644 index 0000000..93c3f47 --- /dev/null +++ b/docker/mysql/init.d/02-seed.sql @@ -0,0 +1,8 @@ +-- Dev-only seed. Four acc rows matching CM_PREFIX_PATTERN=13c so +-- get_next_username has something to anchor on. Passwords are placeholder +-- strings — never real cm99.net credentials. +INSERT INTO acc (username, password, status, link) VALUES + ('13c1000', 'seedpass', '', ''), + ('13c1001', 'seedpass', '', ''), + ('13c1002', 'seedpass', '', ''), + ('13c1003', 'seedpass', '', '');