# Server-Setup Anleitung für TaskMate

Diese Anleitung erklärt Schritt für Schritt, wie Sie TaskMate auf Ihrem Linux-Server installieren.

---

## Voraussetzungen

- Ein Linux-Server (Ubuntu 20.04/22.04 oder Debian empfohlen)
- SSH-Zugang zu Ihrem Server
- Root-Rechte oder sudo-Berechtigungen

---

## Schritt 1: Mit dem Server verbinden

Öffnen Sie ein Terminal (Windows: PowerShell oder CMD) und verbinden Sie sich per SSH:

```bash
ssh benutzername@ihre-server-ip
```

Ersetzen Sie `benutzername` mit Ihrem Benutzernamen und `ihre-server-ip` mit der IP-Adresse Ihres Servers.

---

## Schritt 2: System aktualisieren

```bash
sudo apt update
sudo apt upgrade -y
```

---

## Schritt 3: Docker installieren

### 3.1 Erforderliche Pakete installieren

```bash
sudo apt install -y ca-certificates curl gnupg lsb-release
```

### 3.2 Docker GPG-Schlüssel hinzufügen

```bash
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
```

### 3.3 Docker-Repository hinzufügen

Für Ubuntu:
```bash
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

Für Debian:
```bash
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

### 3.4 Docker installieren

```bash
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
```

### 3.5 Docker für Ihren Benutzer aktivieren

```bash
sudo usermod -aG docker $USER
```

**Wichtig:** Melden Sie sich ab und wieder an, damit diese Änderung wirksam wird:
```bash
exit
```
Dann erneut verbinden mit SSH.

### 3.6 Docker testen

```bash
docker --version
docker compose version
```

---

## Schritt 4: Projektdateien auf den Server übertragen

### Option A: Mit SCP (vom lokalen Computer)

Öffnen Sie ein **neues** Terminal auf Ihrem lokalen Computer:

```bash
scp -r C:\Users\hendr\Desktop\IntelSight\Projektablage\TaskMate benutzername@ihre-server-ip:~/
```

### Option B: Mit Git (falls vorhanden)

Falls Sie die Dateien in einem Git-Repository haben:
```bash
git clone ihr-repository-url ~/TaskMate
```

### Option C: Mit FileZilla (grafisch)

1. Laden Sie FileZilla herunter: https://filezilla-project.org/
2. Verbinden Sie sich:
   - Host: `sftp://ihre-server-ip`
   - Benutzername: Ihr Benutzername
   - Passwort: Ihr Passwort
   - Port: 22
3. Ziehen Sie den Ordner `TaskMate` in Ihr Home-Verzeichnis

---

## Schritt 5: Umgebungsvariablen konfigurieren

Wechseln Sie in das Projektverzeichnis:
```bash
cd ~/TaskMate
```

Erstellen Sie die Konfigurationsdatei:
```bash
cp .env.example .env
```

Öffnen Sie die Datei zum Bearbeiten:
```bash
nano .env
```

Ändern Sie folgende Werte:

```env
# WICHTIG: Ändern Sie diese Werte!
JWT_SECRET=IhrGeheimesPasswort123!
SESSION_SECRET=EinAnderesGeheimesPasswort456!

# Optional: Port ändern (Standard: 3000)
PORT=3000
```

**Tipp für sichere Passwörter:**
```bash
openssl rand -base64 32
```
Kopieren Sie diese generierten Passwörter in die .env-Datei.

Speichern mit: `Ctrl + O`, `Enter`, `Ctrl + X`

---

## Schritt 6: Anwendung starten

### Erster Start (dauert einige Minuten)

```bash
docker compose up -d
```

Die `-d` Option startet die Container im Hintergrund.

### Status prüfen

```bash
docker compose ps
```

Sie sollten sehen, dass der Container "running" ist.

### Logs anzeigen

```bash
docker compose logs -f
```

Mit `Ctrl + C` können Sie die Logs beenden.

---

## Schritt 7: Firewall konfigurieren (falls aktiv)

```bash
sudo ufw allow 3000/tcp
sudo ufw status
```

---

## Schritt 8: Anwendung aufrufen

Öffnen Sie in Ihrem Browser:
```
http://ihre-server-ip:3000
```

### Erste Anmeldung

- Benutzername: `admin`
- Passwort: `admin123`

**WICHTIG:** Ändern Sie das Passwort sofort nach der ersten Anmeldung!

---

## Nützliche Befehle

### Anwendung stoppen
```bash
docker compose stop
```

### Anwendung neu starten
```bash
docker compose restart
```

### Anwendung komplett beenden und entfernen
```bash
docker compose down
```

### Logs anzeigen
```bash
docker compose logs -f
```

### Container-Status prüfen
```bash
docker compose ps
```

### Anwendung aktualisieren

Falls Sie Änderungen am Code gemacht haben:
```bash
docker compose down
docker compose build --no-cache
docker compose up -d
```

---

## Automatischer Start beim Serverstart

Um die Anwendung automatisch zu starten, wenn der Server neu startet:

```bash
sudo systemctl enable docker
```

Docker Compose startet Container mit `restart: unless-stopped` automatisch.

---

## Backups

Die Datenbank wird automatisch täglich gesichert. Die Backups finden Sie unter:
```
~/TaskMate/backups/
```

### Manuelles Backup erstellen
```bash
cp ~/TaskMate/data/database.sqlite ~/TaskMate/backups/backup_$(date +%Y%m%d).sqlite
```

### Backup wiederherstellen
```bash
docker compose stop
cp ~/TaskMate/backups/backup_DATUM.sqlite ~/TaskMate/data/database.sqlite
docker compose start
```

---

## HTTPS mit SSL-Zertifikat (Optional, aber empfohlen)

Für eine sichere Verbindung empfehlen wir die Einrichtung von HTTPS.

### Option A: Mit Nginx als Reverse Proxy

1. Nginx installieren:
```bash
sudo apt install -y nginx
```

2. Certbot für Let's Encrypt installieren:
```bash
sudo apt install -y certbot python3-certbot-nginx
```

3. Nginx-Konfiguration erstellen:
```bash
sudo nano /etc/nginx/sites-available/taskmate
```

Inhalt:
```nginx
server {
    listen 80;
    server_name ihre-domain.de;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
}
```

4. Konfiguration aktivieren:
```bash
sudo ln -s /etc/nginx/sites-available/taskmate /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
```

5. SSL-Zertifikat erstellen:
```bash
sudo certbot --nginx -d ihre-domain.de
```

Folgen Sie den Anweisungen auf dem Bildschirm.

---

## Fehlerbehebung

### Container startet nicht

1. Prüfen Sie die Logs:
```bash
docker compose logs
```

2. Prüfen Sie, ob Port 3000 bereits verwendet wird:
```bash
sudo lsof -i :3000
```

3. Falls ja, ändern Sie den Port in der `.env`-Datei.

### Verbindung nicht möglich

1. Prüfen Sie die Firewall:
```bash
sudo ufw status
```

2. Prüfen Sie, ob Docker läuft:
```bash
sudo systemctl status docker
```

### Datenbank-Fehler

1. Stoppen Sie die Anwendung:
```bash
docker compose stop
```

2. Prüfen Sie die Datenbankdatei:
```bash
ls -la ~/TaskMate/data/
```

3. Falls beschädigt, stellen Sie ein Backup wieder her (siehe oben).

---

## Unterstützung

Bei Problemen prüfen Sie:
1. Die Logs (`docker compose logs -f`)
2. Ob alle Container laufen (`docker compose ps`)
3. Die Firewall-Einstellungen
4. Die .env-Konfiguration

---

## Sicherheitshinweise

1. **Ändern Sie die Standard-Passwörter** sofort nach der Installation
2. **Halten Sie Docker aktuell**: `sudo apt update && sudo apt upgrade`
3. **Regelmäßige Backups** - Die automatischen Backups prüfen
4. **HTTPS verwenden** für Produktionsumgebungen
5. **Firewall konfigurieren** - Nur notwendige Ports öffnen
