333 lines
6.5 KiB
Markdown
333 lines
6.5 KiB
Markdown
|
|
# Habbo Retro Docker Deployment
|
||
|
|
|
||
|
|
This directory contains a complete Docker containerization of the Habbo Retro server setup.
|
||
|
|
|
||
|
|
## Services Included
|
||
|
|
|
||
|
|
- **MySQL Database** (Port 3306) - Habbo database with all translations
|
||
|
|
- **Arcturus Emulator** (Ports 30000, 2096) - Game server with 84 plugins
|
||
|
|
- **Cool UI** (Port 5174) - Primary Nitro client
|
||
|
|
- **Standard Nitro** (Port 5173) - Alternative Nitro client
|
||
|
|
- **Asset Server** (Port 8080) - Static assets (images, gamedata, sounds)
|
||
|
|
- **AtomCMS** (Ports 80, 443) - Website and admin panel
|
||
|
|
|
||
|
|
## Prerequisites
|
||
|
|
|
||
|
|
- Docker Engine 20.10+
|
||
|
|
- Docker Compose 2.0+
|
||
|
|
- At least 4GB RAM available
|
||
|
|
- 10GB free disk space
|
||
|
|
|
||
|
|
## Quick Start
|
||
|
|
|
||
|
|
### 1. Configure Environment
|
||
|
|
|
||
|
|
Copy the example environment file:
|
||
|
|
```bash
|
||
|
|
cp .env.docker .env
|
||
|
|
```
|
||
|
|
|
||
|
|
Edit `.env` and update the following:
|
||
|
|
- `MYSQL_ROOT_PASSWORD` - Set a secure root password
|
||
|
|
- `MYSQL_PASSWORD` - Set a secure user password
|
||
|
|
- `APP_KEY` - Generate Laravel app key (see below)
|
||
|
|
|
||
|
|
Generate Laravel app key:
|
||
|
|
```bash
|
||
|
|
# Option 1: Using existing Laravel installation
|
||
|
|
cd atomcms && php artisan key:generate --show
|
||
|
|
|
||
|
|
# Option 2: Generate manually (base64 encoded 32 character string)
|
||
|
|
echo "base64:$(openssl rand -base64 32)"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Build Containers
|
||
|
|
|
||
|
|
Build all Docker images:
|
||
|
|
```bash
|
||
|
|
docker-compose build
|
||
|
|
```
|
||
|
|
|
||
|
|
This will take 5-10 minutes on first build.
|
||
|
|
|
||
|
|
### 3. Start Services
|
||
|
|
|
||
|
|
Start all services:
|
||
|
|
```bash
|
||
|
|
docker-compose up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
Check service status:
|
||
|
|
```bash
|
||
|
|
docker-compose ps
|
||
|
|
```
|
||
|
|
|
||
|
|
View logs:
|
||
|
|
```bash
|
||
|
|
# All services
|
||
|
|
docker-compose logs -f
|
||
|
|
|
||
|
|
# Specific service
|
||
|
|
docker-compose logs -f emulator
|
||
|
|
docker-compose logs -f mysql
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Verify Services
|
||
|
|
|
||
|
|
Check each service is running:
|
||
|
|
|
||
|
|
**MySQL Database:**
|
||
|
|
```bash
|
||
|
|
docker-compose exec mysql mysql -u habbo_user -p -e "SHOW DATABASES;"
|
||
|
|
# Password: habbo_password_2024 (or your custom password)
|
||
|
|
```
|
||
|
|
|
||
|
|
**Emulator:**
|
||
|
|
```bash
|
||
|
|
# Check emulator logs
|
||
|
|
docker-compose logs emulator | tail -50
|
||
|
|
```
|
||
|
|
|
||
|
|
**Cool UI:**
|
||
|
|
```bash
|
||
|
|
curl -I http://localhost:5174
|
||
|
|
# Should return 200 OK
|
||
|
|
```
|
||
|
|
|
||
|
|
**Asset Server:**
|
||
|
|
```bash
|
||
|
|
curl http://localhost:8080/gamedata/UITexts.json | head -20
|
||
|
|
# Should return JSON data
|
||
|
|
```
|
||
|
|
|
||
|
|
**CMS:**
|
||
|
|
```bash
|
||
|
|
curl -I http://localhost
|
||
|
|
# Should return 200 OK
|
||
|
|
```
|
||
|
|
|
||
|
|
## Service URLs
|
||
|
|
|
||
|
|
- **Cool UI**: http://localhost:5174
|
||
|
|
- **Standard Nitro**: http://localhost:5173
|
||
|
|
- **Asset Server**: http://localhost:8080
|
||
|
|
- **CMS**: http://localhost
|
||
|
|
- **MySQL**: localhost:3306
|
||
|
|
- **Emulator**: localhost:30000 (game), localhost:2096 (WebSocket)
|
||
|
|
|
||
|
|
## Management Commands
|
||
|
|
|
||
|
|
### Start Services
|
||
|
|
```bash
|
||
|
|
docker-compose up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
### Stop Services
|
||
|
|
```bash
|
||
|
|
docker-compose down
|
||
|
|
```
|
||
|
|
|
||
|
|
### Restart a Service
|
||
|
|
```bash
|
||
|
|
docker-compose restart emulator
|
||
|
|
docker-compose restart mysql
|
||
|
|
```
|
||
|
|
|
||
|
|
### View Logs
|
||
|
|
```bash
|
||
|
|
# All services
|
||
|
|
docker-compose logs -f
|
||
|
|
|
||
|
|
# Specific service
|
||
|
|
docker-compose logs -f emulator
|
||
|
|
docker-compose logs -f cool-ui
|
||
|
|
```
|
||
|
|
|
||
|
|
### Access Container Shell
|
||
|
|
```bash
|
||
|
|
# MySQL
|
||
|
|
docker-compose exec mysql bash
|
||
|
|
|
||
|
|
# Emulator
|
||
|
|
docker-compose exec emulator bash
|
||
|
|
|
||
|
|
# CMS
|
||
|
|
docker-compose exec cms bash
|
||
|
|
```
|
||
|
|
|
||
|
|
### Database Backup
|
||
|
|
```bash
|
||
|
|
docker-compose exec mysql mysqldump \
|
||
|
|
-u habbo_user -p habbo_retro \
|
||
|
|
--routines --triggers > backup_$(date +%Y%m%d).sql
|
||
|
|
```
|
||
|
|
|
||
|
|
### Database Restore
|
||
|
|
```bash
|
||
|
|
docker-compose exec -T mysql mysql -u habbo_user -p habbo_retro < backup.sql
|
||
|
|
```
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### MySQL Won't Start
|
||
|
|
Check if port 3306 is already in use:
|
||
|
|
```bash
|
||
|
|
lsof -i :3306
|
||
|
|
# Kill existing MySQL if needed
|
||
|
|
```
|
||
|
|
|
||
|
|
View MySQL logs:
|
||
|
|
```bash
|
||
|
|
docker-compose logs mysql
|
||
|
|
```
|
||
|
|
|
||
|
|
### Emulator Can't Connect to Database
|
||
|
|
1. Check MySQL is healthy:
|
||
|
|
```bash
|
||
|
|
docker-compose ps mysql
|
||
|
|
# Should show "healthy"
|
||
|
|
```
|
||
|
|
|
||
|
|
2. Verify database credentials in `emulator/config.ini`:
|
||
|
|
```ini
|
||
|
|
db.hostname=mysql # Must be "mysql" (container name)
|
||
|
|
db.username=habbo_user
|
||
|
|
db.password=habbo_password_2024
|
||
|
|
db.database=habbo_retro
|
||
|
|
```
|
||
|
|
|
||
|
|
3. Restart emulator:
|
||
|
|
```bash
|
||
|
|
docker-compose restart emulator
|
||
|
|
```
|
||
|
|
|
||
|
|
### Cool UI Shows Blank Page
|
||
|
|
1. Check asset server is running:
|
||
|
|
```bash
|
||
|
|
curl http://localhost:8080/gamedata/UITexts.json
|
||
|
|
```
|
||
|
|
|
||
|
|
2. Check browser console for errors
|
||
|
|
3. Verify CORS is enabled on asset server
|
||
|
|
|
||
|
|
### CMS Shows 500 Error
|
||
|
|
1. Check Laravel logs:
|
||
|
|
```bash
|
||
|
|
docker-compose exec cms tail -f /var/www/html/storage/logs/laravel.log
|
||
|
|
```
|
||
|
|
|
||
|
|
2. Clear cache:
|
||
|
|
```bash
|
||
|
|
docker-compose exec cms php artisan cache:clear
|
||
|
|
docker-compose exec cms php artisan config:clear
|
||
|
|
docker-compose exec cms php artisan view:clear
|
||
|
|
```
|
||
|
|
|
||
|
|
3. Check database connection:
|
||
|
|
```bash
|
||
|
|
docker-compose exec cms php artisan tinker
|
||
|
|
# Then: DB::connection()->getPdo();
|
||
|
|
```
|
||
|
|
|
||
|
|
### Port Already in Use
|
||
|
|
If you get "port already in use" errors, edit `docker-compose.yml` and change the port mappings:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
ports:
|
||
|
|
- "5175:80" # Changed from 5174:80
|
||
|
|
```
|
||
|
|
|
||
|
|
## Data Persistence
|
||
|
|
|
||
|
|
All important data is stored in Docker volumes:
|
||
|
|
|
||
|
|
- `mysql_data` - Database data
|
||
|
|
- `mysql_logs` - MySQL logs
|
||
|
|
- `emulator_logs` - Emulator logs
|
||
|
|
- `cms_storage` - CMS uploaded files
|
||
|
|
- `cms_cache` - CMS cache files
|
||
|
|
|
||
|
|
To remove all data (⚠️ WARNING: This deletes everything):
|
||
|
|
```bash
|
||
|
|
docker-compose down -v
|
||
|
|
```
|
||
|
|
|
||
|
|
## Updating
|
||
|
|
|
||
|
|
### Update a Service
|
||
|
|
|
||
|
|
1. Make changes to the service files
|
||
|
|
2. Rebuild the specific service:
|
||
|
|
```bash
|
||
|
|
docker-compose build emulator
|
||
|
|
```
|
||
|
|
|
||
|
|
3. Restart the service:
|
||
|
|
```bash
|
||
|
|
docker-compose up -d emulator
|
||
|
|
```
|
||
|
|
|
||
|
|
### Update All Services
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker-compose build
|
||
|
|
docker-compose up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
## Production Deployment
|
||
|
|
|
||
|
|
For production deployment:
|
||
|
|
|
||
|
|
1. **Change all default passwords** in `.env`
|
||
|
|
2. **Set `APP_DEBUG=false`** in `.env`
|
||
|
|
3. **Generate new `APP_KEY`** for Laravel
|
||
|
|
4. **Enable SSL/HTTPS** for CMS (configure nginx SSL)
|
||
|
|
5. **Set up automatic backups** for MySQL
|
||
|
|
6. **Configure firewall rules** to restrict access
|
||
|
|
7. **Use Docker secrets** for sensitive data
|
||
|
|
8. **Enable resource limits** in docker-compose.yml:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
services:
|
||
|
|
mysql:
|
||
|
|
deploy:
|
||
|
|
resources:
|
||
|
|
limits:
|
||
|
|
cpus: '2'
|
||
|
|
memory: 2G
|
||
|
|
```
|
||
|
|
|
||
|
|
## Health Monitoring
|
||
|
|
|
||
|
|
All services include health checks. View health status:
|
||
|
|
```bash
|
||
|
|
docker-compose ps
|
||
|
|
```
|
||
|
|
|
||
|
|
Healthy services show `healthy` in the status column.
|
||
|
|
|
||
|
|
## Network Architecture
|
||
|
|
|
||
|
|
All services communicate on the `habbo-network` bridge network:
|
||
|
|
- Subnet: 172.20.0.0/16
|
||
|
|
- Internal DNS resolution by container name
|
||
|
|
- Isolated from host network (except exposed ports)
|
||
|
|
|
||
|
|
## Support
|
||
|
|
|
||
|
|
For issues:
|
||
|
|
1. Check logs: `docker-compose logs -f [service-name]`
|
||
|
|
2. Verify health: `docker-compose ps`
|
||
|
|
3. Check resources: `docker stats`
|
||
|
|
4. Review configuration files for typos
|
||
|
|
|
||
|
|
## Database Information
|
||
|
|
|
||
|
|
- Database: habbo_retro
|
||
|
|
- Tables: 174
|
||
|
|
- Catalog Items: 51,678 (99.93% English)
|
||
|
|
- Catalog Pages: 2,311 (100% English)
|
||
|
|
- Size: ~51 MB
|
||
|
|
|
||
|
|
The database dump includes all translations completed on December 6, 2025.
|