# 🚀 TimeClock v3 - Schnellstart Deployment

Eine Schritt-für-Schritt-Anleitung für das Deployment auf **stechuhr3.tsschulz.de**.

## Voraussetzungen

✅ Ubuntu 22.04 Server  
✅ Root/Sudo-Zugriff  
✅ Domain `stechuhr3.tsschulz.de` zeigt auf Server-IP  
✅ MySQL/MariaDB läuft  
✅ SSH-Zugang zum Server  

## Option 1: Automatisches Deployment (Empfohlen) 🎯

### Auf deinem lokalen Rechner:

```bash
# 1. Projekt auf Server übertragen
cd /home/torsten/Programs/TimeClock
rsync -avz --exclude 'node_modules' --exclude '.git' . user@YOUR_SERVER_IP:/tmp/timeclock-deploy/

# 2. SSH zum Server
ssh user@YOUR_SERVER_IP
```

### Auf dem Server:

```bash
# 3. Projekt vorbereiten
sudo mkdir -p /var/www
sudo mv /tmp/timeclock-deploy /var/www/timeclock
sudo chown -R $USER:$USER /var/www/timeclock

# 4. Automatisches Deployment starten
cd /var/www/timeclock
chmod +x deploy.sh
./deploy.sh install
```

Das war's! 🎉 Das Script führt automatisch durch alle notwendigen Schritte.

---

## Option 2: Manuelles Deployment (Schritt für Schritt) 📝

### Schritt 1: System vorbereiten

```bash
# System aktualisieren
sudo apt update && sudo apt upgrade -y

# Node.js 20.x installieren
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

# Weitere Abhängigkeiten
sudo apt install -y nginx certbot python3-certbot-nginx
sudo npm install -g pm2
```

### Schritt 2: Datenbank einrichten

```bash
# MySQL/MariaDB
sudo mysql -u root -p

# In MySQL:
CREATE DATABASE IF NOT EXISTS stechuhr2;
CREATE USER IF NOT EXISTS 'timeclock'@'localhost' IDENTIFIED BY 'DEIN_SICHERES_PASSWORT';
GRANT ALL PRIVILEGES ON stechuhr2.* TO 'timeclock'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```

### Schritt 3: Projekt auf Server übertragen

```bash
# Auf lokalem Rechner:
rsync -avz --exclude 'node_modules' ~/Programs/TimeClock/ user@YOUR_SERVER_IP:/var/www/timeclock/

# ODER per Git (wenn in Repository):
# ssh user@YOUR_SERVER_IP
# cd /var/www
# git clone https://github.com/IHR-USERNAME/TimeClock.git timeclock
```

### Schritt 4: Backend konfigurieren

```bash
cd /var/www/timeclock/backend

# Dependencies installieren
npm install --production

# .env erstellen
cp env.production.template .env
nano .env

# Wichtige Werte anpassen:
# - DB_PASSWORD=dein_db_passwort
# - JWT_SECRET=generiere_mit_node_crypto
# - SESSION_SECRET=generiere_mit_node_crypto
# - FRONTEND_URL=https://stechuhr3.tsschulz.de

# Secrets generieren:
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
```

### Schritt 5: Frontend bauen

```bash
cd /var/www/timeclock/frontend
npm install
npm run build
```

### Schritt 6: Nginx einrichten

```bash
# Konfiguration kopieren
sudo cp /var/www/timeclock/nginx.conf /etc/nginx/sites-available/stechuhr3.tsschulz.de

# Site aktivieren
sudo ln -s /etc/nginx/sites-available/stechuhr3.tsschulz.de /etc/nginx/sites-enabled/

# Default-Site deaktivieren (optional)
sudo rm /etc/nginx/sites-enabled/default

# Testen und neuladen
sudo nginx -t
sudo systemctl reload nginx
```

### Schritt 7: SSL-Zertifikat erstellen

```bash
# Let's Encrypt Zertifikat
sudo certbot --nginx -d stechuhr3.tsschulz.de

# Folge den Anweisungen:
# - E-Mail eingeben
# - Nutzungsbedingungen akzeptieren
# - HTTPS-Redirect aktivieren (empfohlen)
```

### Schritt 8: Backend starten

**Option A: Mit PM2 (empfohlen):**

```bash
cd /var/www/timeclock/backend
pm2 start src/index.js --name timeclock-backend --env production
pm2 save
pm2 startup systemd
# Führe den angezeigten Befehl aus
```

**Option B: Mit systemd:**

```bash
# Service installieren
sudo cp /var/www/timeclock/timeclock.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable timeclock
sudo systemctl start timeclock
```

### Schritt 9: Firewall konfigurieren

```bash
sudo ufw allow ssh
sudo ufw allow 'Nginx Full'
sudo ufw enable
```

### Schritt 10: Testen

```bash
# Backend-Health-Check
curl http://localhost:3010/api/health

# Frontend aufrufen
# Browser: https://stechuhr3.tsschulz.de
```

---

## Nützliche Befehle

### Mit PM2:

```bash
pm2 status                    # Status anzeigen
pm2 logs timeclock-backend    # Logs anzeigen
pm2 restart timeclock-backend # Neustart
pm2 stop timeclock-backend    # Stoppen
pm2 monit                     # Monitoring
```

### Mit systemd:

```bash
sudo systemctl status timeclock    # Status
sudo journalctl -u timeclock -f    # Logs
sudo systemctl restart timeclock   # Neustart
sudo systemctl stop timeclock      # Stoppen
```

### Nginx:

```bash
sudo nginx -t                      # Config testen
sudo systemctl reload nginx        # Neuladen
sudo tail -f /var/log/nginx/stechuhr3.access.log
sudo tail -f /var/log/nginx/stechuhr3.error.log
```

### SSL:

```bash
sudo certbot certificates          # Zertifikate anzeigen
sudo certbot renew                 # Erneuern
sudo certbot renew --dry-run       # Test-Erneuerung
```

---

## Updates durchführen

### Automatisch mit Script:

```bash
cd /var/www/timeclock
./deploy.sh backup  # Erst Backup
./deploy.sh update  # Dann Update
```

### Manuell:

```bash
# 1. Backup erstellen
cd /var/www/timeclock
./deploy.sh backup

# 2. Code aktualisieren
git pull  # oder neue Dateien übertragen

# 3. Backend
cd backend
npm install --production
pm2 restart timeclock-backend

# 4. Frontend
cd ../frontend
npm install
npm run build
```

---

## Problembehebung

### Backend startet nicht

```bash
# Logs prüfen
pm2 logs timeclock-backend --err

# .env prüfen
cat /var/www/timeclock/backend/.env

# Port-Belegung prüfen
sudo netstat -tulpn | grep 3010
```

### Frontend zeigt nicht an

```bash
# Nginx testen
sudo nginx -t

# Build-Verzeichnis prüfen
ls -la /var/www/timeclock/frontend/dist/

# Nginx neuladen
sudo systemctl reload nginx
```

### API-Anfragen schlagen fehl

```bash
# CORS: FRONTEND_URL in .env prüfen
# Backend muss FRONTEND_URL=https://stechuhr3.tsschulz.de haben

# Nginx Proxy prüfen
sudo nginx -t
```

### SSL-Probleme

```bash
# Zertifikat erneuern
sudo certbot renew --force-renewal

# Nginx neustarten
sudo systemctl restart nginx
```

---

## Backup & Restore

### Backup erstellen:

```bash
# Automatisch
./deploy.sh backup

# Manuell - Datenbank
mysqldump -u timeclock -p stechuhr2 | gzip > backup_$(date +%Y%m%d).sql.gz

# Manuell - Code
tar -czf backup_code_$(date +%Y%m%d).tar.gz /var/www/timeclock
```

### Restore:

```bash
# Datenbank
gunzip < backup_20251018.sql.gz | mysql -u timeclock -p stechuhr2

# Code
./deploy.sh rollback
```

---

## Performance-Tipps

### PM2 Cluster-Modus (nutzt alle CPU-Kerne):

```bash
pm2 delete timeclock-backend
pm2 start src/index.js --name timeclock-backend --instances max --env production
pm2 save
```

### Nginx Caching aktivieren:

Füge in `/etc/nginx/sites-available/stechuhr3.tsschulz.de` hinzu:

```nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api_cache:10m max_size=100m;

location /api {
    proxy_cache api_cache;
    proxy_cache_valid 200 5m;
    # ... rest der Config
}
```

---

## Sicherheits-Checkliste

- [ ] Starke Passwörter für DB, JWT, Session
- [ ] SSL/TLS aktiviert
- [ ] Firewall konfiguriert
- [ ] NODE_ENV=production
- [ ] Console-Logs deaktiviert (Vite Build)
- [ ] Regelmäßige Backups eingerichtet
- [ ] fail2ban installieren (optional)
- [ ] Rate Limiting aktivieren (optional)

---

## Monitoring einrichten

### Einfaches Health-Check Script:

```bash
# /usr/local/bin/check-timeclock.sh
#!/bin/bash
if ! curl -sf http://localhost:3010/api/health > /dev/null; then
    echo "Backend down! $(date)" >> /var/log/timeclock/health.log
    pm2 restart timeclock-backend
fi
```

```bash
sudo chmod +x /usr/local/bin/check-timeclock.sh

# Cronjob alle 5 Minuten
sudo crontab -e
# */5 * * * * /usr/local/bin/check-timeclock.sh
```

### PM2 Plus (Cloud-Monitoring):

```bash
pm2 plus
# Link folgen und Account verbinden
```

---

## Support

Detaillierte Dokumentation: `DEPLOYMENT.md`

Bei Problemen:
1. Logs prüfen (`pm2 logs` oder `journalctl -u timeclock`)
2. Nginx-Logs prüfen (`/var/log/nginx/`)
3. Health-Check testen: `curl http://localhost:3010/api/health`

---

**Deployment erfolgreich! 🎉**

Deine App läuft auf: **https://stechuhr3.tsschulz.de**

