# 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