# 🐳 Docker - TowerControl

Guide d'utilisation de TowerControl avec Docker.

## 🚀 Démarrage rapide

### Production

```bash
# Démarrer le service de production
docker-compose up -d towercontrol

# Accéder à l'application
open http://localhost:3006
```

### Développement

```bash
# Démarrer le service de développement avec live reload
docker-compose --profile dev up towercontrol-dev

# Accéder à l'application
open http://localhost:3005
```

## 📋 Services disponibles

### 🚀 `towercontrol` (Production)

- **Port** : 3006
- **Base de données** : `./data/prod.db`
- **Sauvegardes** : `./data/backups/`
- **Mode** : Optimisé, standalone
- **Restart** : Automatique

### 🛠️ `towercontrol-dev` (Développement)

- **Port** : 3005
- **Base de données** : `./data/dev.db`
- **Sauvegardes** : `./data/backups/` (partagées)
- **Mode** : Live reload, debug
- **Profile** : `dev`

## 📁 Structure des données

```
./data/                    # Mappé vers /app/data dans les conteneurs
├── README.md              # Documentation du dossier data
├── prod.db                # Base SQLite production
├── dev.db                 # Base SQLite développement
└── backups/               # Sauvegardes automatiques
    ├── towercontrol_2025-01-15T10-30-00-000Z.db.gz
    └── ...
```

## 🔧 Configuration

### Variables d'environnement

| Variable               | Production            | Développement        | Description      |
| ---------------------- | --------------------- | -------------------- | ---------------- |
| `NODE_ENV`             | `production`          | `development`        | Mode d'exécution |
| `DATABASE_URL`         | `file:./data/prod.db` | `file:./data/dev.db` | Base Prisma      |
| `BACKUP_DATABASE_PATH` | `./data/prod.db`      | `./data/dev.db`      | Source backup    |
| `BACKUP_STORAGE_PATH`  | `./data/backups`      | `./data/backups`     | Dossier backup   |
| `TZ`                   | `Europe/Paris`        | `Europe/Paris`       | Fuseau horaire   |

### Ports

- **Production** : `3006:3000`
- **Développement** : `3005:3000`

## 📚 Commandes utiles

### Gestion des conteneurs

```bash
# Voir les logs
docker-compose logs -f towercontrol
docker-compose logs -f towercontrol-dev

# Arrêter les services
docker-compose down

# Reconstruire les images
docker-compose build

# Nettoyer tout
docker-compose down -v --rmi all
```

### Gestion des données

```bash
# Sauvegarder les données
docker-compose exec towercontrol pnpm run backup:create

# Lister les sauvegardes
docker-compose exec towercontrol pnpm run backup:list

# Accéder au shell du conteneur
docker-compose exec towercontrol sh
```

### Base de données

```bash
# Migrations Prisma
docker-compose exec towercontrol pnpm prisma migrate deploy

# Reset de la base (dev uniquement)
docker-compose exec towercontrol-dev pnpm prisma migrate reset

# Studio Prisma (dev)
docker-compose exec towercontrol-dev pnpm prisma studio
```

## 🔍 Debugging

### Vérifier la santé

```bash
# Health check
curl http://localhost:3006/api/health
curl http://localhost:3005/api/health

# Vérifier les variables d'env
docker-compose exec towercontrol env | grep -E "(DATABASE|BACKUP|NODE_ENV)"
```

### Logs détaillés

```bash
# Logs avec timestamps
docker-compose logs -f -t towercontrol

# Logs des 100 dernières lignes
docker-compose logs --tail=100 towercontrol
```

## 🚨 Dépannage

### Problèmes courants

**Port déjà utilisé**

```bash
# Trouver le processus qui utilise le port
lsof -i :3006
kill -9 <PID>
```

**Base de données corrompue**

```bash
# Restaurer depuis une sauvegarde
docker-compose exec towercontrol pnpm run backup:restore filename.db.gz
```

**Permissions**

```bash
# Corriger les permissions du dossier data
sudo chown -R $USER:$USER ./data
```

## 📊 Monitoring

### Espace disque

```bash
# Taille du dossier data
du -sh ./data

# Espace libre
df -h .
```

### Performance

```bash
# Stats des conteneurs
docker stats

# Utilisation mémoire
docker-compose exec towercontrol free -h
```

## 🔒 Production

### Recommandations

- Utiliser un reverse proxy (nginx, traefik)
- Configurer HTTPS
- Sauvegarder régulièrement `./data/`
- Monitorer l'espace disque
- Logs centralisés

### Exemple nginx

```nginx
server {
    listen 80;
    server_name towercontrol.example.com;

    location / {
        proxy_pass http://localhost:3006;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
```

---

📚 **Voir aussi** : [data/README.md](./data/README.md)
