351 lines
8.0 KiB
YAML
351 lines
8.0 KiB
YAML
# Habland Unified Docker Compose
|
|
# Orchestrates all Habbo Hotel emulators, clients, databases, and admin tools
|
|
|
|
x-shared-environment: &shared-db-env
|
|
MYSQL_ROOT_PASSWORD: root
|
|
MYSQL_HOSTNAME: unified-db
|
|
|
|
services:
|
|
# ======================
|
|
# DATABASE SERVICES
|
|
# ======================
|
|
|
|
unified-db:
|
|
image: mariadb:latest
|
|
container_name: unified-db
|
|
restart: unless-stopped
|
|
environment:
|
|
MYSQL_ROOT_PASSWORD: root
|
|
MYSQL_ROOT_HOST: '%'
|
|
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
|
|
ports:
|
|
- "3306:3306"
|
|
volumes:
|
|
- ./unified-db/init:/docker-entrypoint-initdb.d
|
|
- db_data:/var/lib/mysql
|
|
networks:
|
|
- habbo-network
|
|
healthcheck:
|
|
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 30s
|
|
|
|
phpmyadmin:
|
|
image: phpmyadmin:latest
|
|
container_name: phpmyadmin
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8081:80"
|
|
environment:
|
|
- PMA_HOST=unified-db
|
|
- PMA_PORT=3306
|
|
- UPLOAD_LIMIT=100M
|
|
depends_on:
|
|
unified-db:
|
|
condition: service_healthy
|
|
networks:
|
|
- habbo-network
|
|
|
|
redis:
|
|
image: redis:alpine
|
|
container_name: habbo-redis
|
|
restart: unless-stopped
|
|
ports:
|
|
- "6379:6379"
|
|
volumes:
|
|
- redis_data:/data
|
|
networks:
|
|
- habbo-network
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# ======================
|
|
# EMULATOR SERVICES
|
|
# ======================
|
|
|
|
# Arcturus Morningstar (Retro)
|
|
arcturus-emulator:
|
|
build:
|
|
context: ./retro/emulator
|
|
dockerfile: Dockerfile
|
|
container_name: arcturus-emulator
|
|
restart: unless-stopped
|
|
ports:
|
|
- "30000:30000" # Game port
|
|
- "2096:2096" # RCON port
|
|
volumes:
|
|
- ./retro/emulator/config.docker.ini:/emulator/config.ini:ro
|
|
- ./retro/emulator/plugins:/emulator/plugins:ro
|
|
- arcturus_logs:/emulator/logging
|
|
networks:
|
|
- habbo-network
|
|
environment:
|
|
- JAVA_OPTS=-Xmx2G -Xms512M
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
depends_on:
|
|
unified-db:
|
|
condition: service_healthy
|
|
|
|
# Havana Server (v26 Emulator)
|
|
havana-server:
|
|
build:
|
|
context: ./havana/Havana_Repo
|
|
dockerfile: Dockerfile-Server
|
|
container_name: havana-server
|
|
restart: unless-stopped
|
|
ports:
|
|
- "12321:12321" # Game port
|
|
- "12322:12322" # MUS port
|
|
- "12323:12323" # RCON port
|
|
networks:
|
|
- habbo-network
|
|
environment:
|
|
MYSQL_HOSTNAME: unified-db
|
|
MYSQL_USERNAME: havana
|
|
MYSQL_PASSWORD: havana
|
|
MYSQL_DATABASE: havana
|
|
depends_on:
|
|
unified-db:
|
|
condition: service_healthy
|
|
|
|
# Kepler Server (r26/r30 Emulator)
|
|
kepler-server:
|
|
build:
|
|
context: ./kepler
|
|
dockerfile: Dockerfile
|
|
container_name: kepler-server
|
|
restart: unless-stopped
|
|
ports:
|
|
- "13321:13321" # Game port
|
|
- "13309:13309" # RCON port
|
|
- "13322:13322" # MUS port
|
|
volumes:
|
|
- ./kepler/config/config.ini:/kepler/server.ini
|
|
- kepler_logs:/kepler/log
|
|
networks:
|
|
- habbo-network
|
|
environment:
|
|
- MYSQL_HOSTNAME=unified-db
|
|
- MYSQL_PORT=3306
|
|
- MYSQL_USERNAME=kepler
|
|
- MYSQL_PASSWORD=kepler
|
|
- MYSQL_DATABASE=kepler
|
|
depends_on:
|
|
unified-db:
|
|
condition: service_healthy
|
|
|
|
# Roseau Server (Modern Java Emulator)
|
|
roseau-server:
|
|
build:
|
|
context: ./roseau
|
|
dockerfile: Dockerfile
|
|
container_name: roseau-server
|
|
restart: unless-stopped
|
|
ports:
|
|
- "37120:37120" # Game port
|
|
- "37119:37119" # RCON port
|
|
volumes:
|
|
- ./roseau/roseau.properties:/app/roseau.properties
|
|
- ./roseau/habbohotel.properties:/app/habbohotel.properties
|
|
- ./roseau/log:/app/log
|
|
networks:
|
|
- habbo-network
|
|
depends_on:
|
|
unified-db:
|
|
condition: service_healthy
|
|
|
|
# ======================
|
|
# CLIENT SERVICES
|
|
# ======================
|
|
|
|
# Cool UI (Primary Modern Client)
|
|
cool-ui:
|
|
build:
|
|
context: ./retro
|
|
dockerfile: ./cool-ui/Dockerfile.simple
|
|
container_name: cool-ui
|
|
restart: unless-stopped
|
|
ports:
|
|
- "5174:80"
|
|
environment:
|
|
- VITE_API_URL=${RETRO_API_URL:-http://localhost}
|
|
- VITE_WEBSOCKET_URL=${RETRO_WS_URL:-ws://localhost:30000}
|
|
depends_on:
|
|
- asset-server
|
|
- arcturus-emulator
|
|
networks:
|
|
- habbo-network
|
|
|
|
# Nitro React (Standard Client)
|
|
nitro-react:
|
|
build:
|
|
context: ./retro
|
|
dockerfile: ./nitro-react/Dockerfile.simple
|
|
container_name: nitro-react
|
|
restart: unless-stopped
|
|
ports:
|
|
- "5173:80"
|
|
environment:
|
|
- VITE_API_URL=${RETRO_API_URL:-http://localhost}
|
|
- VITE_WEBSOCKET_URL=${RETRO_WS_URL:-ws://localhost:30000}
|
|
depends_on:
|
|
- asset-server
|
|
- arcturus-emulator
|
|
networks:
|
|
- habbo-network
|
|
|
|
# Havana Web Client
|
|
havana-web:
|
|
build:
|
|
context: ./havana/Havana_Repo
|
|
dockerfile: Dockerfile-Web
|
|
container_name: havana-web
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8084:80"
|
|
volumes:
|
|
- ./havana/Havana_Repo/tools:/havana-web/bin/tools:ro
|
|
environment:
|
|
MYSQL_HOSTNAME: unified-db
|
|
MYSQL_USERNAME: havana
|
|
MYSQL_PASSWORD: havana
|
|
MYSQL_DATABASE: havana
|
|
SITE_URL: http://localhost:8084
|
|
depends_on:
|
|
- havana-server
|
|
networks:
|
|
- habbo-network
|
|
|
|
# Roseau Client
|
|
roseau-client:
|
|
image: nginx:alpine
|
|
container_name: roseau-client
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8082:80"
|
|
volumes:
|
|
- ./roseau/client/dcr0910:/usr/share/nginx/html:ro
|
|
depends_on:
|
|
- roseau-server
|
|
networks:
|
|
- habbo-network
|
|
|
|
# Kepler Client (Shockwave Client)
|
|
kepler-client:
|
|
build:
|
|
context: ./kepler/Kepler-www
|
|
dockerfile: Dockerfile
|
|
container_name: kepler-client
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8085:80"
|
|
volumes:
|
|
- ./kepler/Kepler-www:/var/www/html:ro
|
|
depends_on:
|
|
- kepler-server
|
|
networks:
|
|
- habbo-network
|
|
|
|
# ======================
|
|
# ASSET & CMS SERVICES
|
|
# ======================
|
|
|
|
# Asset Server (Nitro Assets)
|
|
asset-server:
|
|
build:
|
|
context: ./retro
|
|
dockerfile: ./asset-server/Dockerfile
|
|
container_name: asset-server
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8083:80"
|
|
volumes:
|
|
- ./retro/nitro-assets/nitro-assets:/usr/share/nginx/html:ro
|
|
networks:
|
|
- habbo-network
|
|
|
|
# AtomCMS (Laravel-based CMS)
|
|
atomcms:
|
|
build:
|
|
context: ./retro
|
|
dockerfile: ./cms/docker/Dockerfile
|
|
container_name: atomcms
|
|
restart: unless-stopped
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
volumes:
|
|
- ./retro/atomcms:/var/www/html
|
|
- atomcms_storage:/var/www/html/storage
|
|
- atomcms_cache:/var/www/html/bootstrap/cache
|
|
networks:
|
|
- habbo-network
|
|
environment:
|
|
- DB_CONNECTION=mysql
|
|
- DB_HOST=unified-db
|
|
- DB_PORT=3306
|
|
- DB_DATABASE=${ATOMCMS_DB:-arcturus}
|
|
- DB_USERNAME=${ATOMCMS_DB_USER:-root}
|
|
- DB_PASSWORD=${ATOMCMS_DB_PASS:-root}
|
|
depends_on:
|
|
unified-db:
|
|
condition: service_healthy
|
|
|
|
# ======================
|
|
# ADMIN & TOOLS
|
|
# ======================
|
|
|
|
admin-panel:
|
|
build:
|
|
context: ./admin-panel
|
|
dockerfile: Dockerfile
|
|
container_name: admin-panel
|
|
restart: unless-stopped
|
|
ports:
|
|
- "3000:3000"
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
- ./havana/Havana_Repo:/config/havana
|
|
- ./kepler:/config/kepler
|
|
- ./roseau:/config/roseau
|
|
- ./retro/emulator:/config/retro
|
|
networks:
|
|
- habbo-network
|
|
depends_on:
|
|
- unified-db
|
|
|
|
# ======================
|
|
# NETWORKS
|
|
# ======================
|
|
|
|
networks:
|
|
habbo-network:
|
|
driver: bridge
|
|
ipam:
|
|
config:
|
|
- subnet: 172.28.0.0/16
|
|
|
|
# ======================
|
|
# VOLUMES
|
|
# ======================
|
|
|
|
volumes:
|
|
db_data:
|
|
driver: local
|
|
redis_data:
|
|
driver: local
|
|
arcturus_logs:
|
|
driver: local
|
|
kepler_logs:
|
|
driver: local
|
|
atomcms_storage:
|
|
driver: local
|
|
atomcms_cache:
|
|
driver: local
|