Initial commit

This commit is contained in:
jeirmeister 2025-12-14 19:32:36 -08:00
parent 3802950b81
commit 3fc550debe
5 changed files with 168 additions and 0 deletions

View file

@ -0,0 +1,139 @@
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;