139 lines
3.9 KiB
YAML
139 lines
3.9 KiB
YAML
name: cockatrice
|
|
|
|
services:
|
|
servatrice:
|
|
build:
|
|
context: .
|
|
dockerfile: .build/Dockerfile
|
|
image: servatrice
|
|
ports:
|
|
- "${SERVER_PORT:-4747}:4747"
|
|
- "${WEBSOCKET_PORT:-4748}:4748"
|
|
environment:
|
|
- DATABASE_HOST=mariadb
|
|
- DATABASE_PORT=3306
|
|
- DATABASE_NAME=${DB_NAME:-servatrice}
|
|
- DATABASE_USER=${DB_USER:-servatrice}
|
|
- DATABASE_PASSWORD=${DB_PASSWORD:-changeme}
|
|
configs:
|
|
- source: servatrice_config
|
|
target: /config/servatrice.ini
|
|
mode: 0444
|
|
volumes:
|
|
- ./.data/logs:/var/log/servatrice
|
|
- ./.data/replays:/var/lib/servatrice/replays
|
|
depends_on:
|
|
mariadb:
|
|
condition: service_healthy
|
|
restart: unless-stopped
|
|
networks:
|
|
- servatrice-net
|
|
|
|
mariadb:
|
|
image: mariadb:10.11
|
|
container_name: servatrice-db
|
|
environment:
|
|
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD:-rootchangeme}
|
|
- MYSQL_DATABASE=${DB_NAME:-servatrice}
|
|
- MYSQL_USER=${DB_USER:-servatrice}
|
|
- MYSQL_PASSWORD=${DB_PASSWORD:-changeme}
|
|
configs:
|
|
- source: db_init
|
|
target: /docker-entrypoint-initdb.d/init.sql
|
|
mode: 0444
|
|
volumes:
|
|
- mariadb-data:/var/lib/mysql
|
|
healthcheck:
|
|
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
restart: unless-stopped
|
|
networks:
|
|
- servatrice-net
|
|
|
|
volumes:
|
|
mariadb-data:
|
|
driver: local
|
|
|
|
networks:
|
|
servatrice-net:
|
|
driver: bridge
|
|
|
|
|
|
configs:
|
|
servatrice_config:
|
|
content: |
|
|
[server]
|
|
name=${SERVER_NAME:-My Cockatrice Server}
|
|
host=0.0.0.0
|
|
port=4747
|
|
serverversion=${SERVER_VERSION:-2.10.2}
|
|
websocket_port=4748
|
|
|
|
[database]
|
|
type=mysql
|
|
hostname=mariadb
|
|
port=3306
|
|
database=${DB_NAME:-servatrice}
|
|
user=${DB_USER:-servatrice}
|
|
password=${DB_PASSWORD:-changeme}
|
|
|
|
[security]
|
|
enable_registration=${ENABLE_REGISTRATION:-true}
|
|
enable_forgot_password=true
|
|
max_users_per_address=${MAX_USERS_PER_ADDRESS:-4}
|
|
max_users_total=${MAX_USERS:-500}
|
|
idle_client_timeout=${IDLE_TIMEOUT:-3600}
|
|
|
|
[authentication]
|
|
method=sql
|
|
|
|
[logging]
|
|
log_level=${LOG_LEVEL:-info}
|
|
log_file=/var/log/servatrice/servatrice.log
|
|
|
|
[rooms]
|
|
default_room=${DEFAULT_ROOM:-Main}
|
|
allow_room_creation=true
|
|
max_rooms=${MAX_ROOMS:-50}
|
|
|
|
db_init:
|
|
content: |
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(64) NOT NULL UNIQUE,
|
|
password_hash VARCHAR(128) NOT NULL,
|
|
email VARCHAR(128),
|
|
realname VARCHAR(128),
|
|
country VARCHAR(3),
|
|
is_admin TINYINT(1) DEFAULT 0,
|
|
is_moderator TINYINT(1) DEFAULT 0,
|
|
active TINYINT(1) DEFAULT 1,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
last_login TIMESTAMP NULL,
|
|
INDEX idx_name (name)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS bans (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_id INT,
|
|
ip_address VARCHAR(45),
|
|
banned_by INT,
|
|
ban_reason TEXT,
|
|
banned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
expires_at TIMESTAMP NULL,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
INDEX idx_user_id (user_id),
|
|
INDEX idx_ip (ip_address)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS replays (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
replay_name VARCHAR(128) NOT NULL,
|
|
creator_id INT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
game_length INT,
|
|
player_count INT,
|
|
FOREIGN KEY (creator_id) REFERENCES users(id) ON DELETE SET NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|