# 🚀 Deployment Instructions für pounce.ch

## Server Setup

### 1. Code auf den Server pullen
```bash
cd /path/to/server
git clone https://git.6bit.ch/yvg/pounce.git
cd pounce
```

### 2. Environment Dateien einrichten

#### Backend (.env)
```bash
# Kopiere DEPLOY_backend.env nach backend/.env
cp DEPLOY_backend.env backend/.env
```

**Wichtige Anpassungen für Production:**
- `DATABASE_URL`: Wenn du PostgreSQL verwendest, passe die Connection-String an
- `CORS_ORIGINS`: Stelle sicher, dass deine Domain(s) enthalten sind
- `ENVIRONMENT=production`
- `DEBUG=false`

#### Frontend (.env.local)
```bash
# Kopiere DEPLOY_frontend.env nach frontend/.env.local
cp DEPLOY_frontend.env frontend/.env.local
```

**Wichtig:** `NEXT_PUBLIC_API_URL` muss auf deine Backend-URL zeigen (z.B. `https://pounce.ch/api/v1`)

### 3. Backend Setup
```bash
cd backend

# Python Virtual Environment erstellen
python3 -m venv venv
source venv/bin/activate

# Dependencies installieren
pip install -r requirements.txt

# Datenbank initialisieren
python init_db.py

# TLD Preise seeden
python seed_tld_prices.py

# Auctions initial scrapen (echte Daten, keine Demo-Daten)
python scripts/scrape_auctions.py

# Stripe Produkte erstellen
python -c "
from app.services.stripe_service import create_stripe_products
import asyncio
asyncio.run(create_stripe_products())
"
```

### 4. Frontend Setup
```bash
cd ../frontend

# Node.js Dependencies installieren
npm install

# Production Build
npm run build
```

### 5. Server starten

#### Option A: Mit PM2 (empfohlen)
```bash
# Backend
pm2 start backend/ecosystem.config.js

# Frontend
pm2 start frontend/ecosystem.config.js

# Prozesse speichern
pm2 save
pm2 startup
```

#### Option B: Mit systemd
Siehe `deploy.sh` Skript für systemd Service-Konfiguration.

#### Option C: Docker
```bash
docker-compose up -d
```

### 6. Nginx Reverse Proxy (empfohlen)

```nginx
# /etc/nginx/sites-available/pounce.ch

upstream backend {
    server 127.0.0.1:8000;
}

upstream frontend {
    server 127.0.0.1:3000;
}

server {
    listen 80;
    listen [::]:80;
    server_name pounce.ch www.pounce.ch;

    # Redirect HTTP to HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name pounce.ch www.pounce.ch;

    # SSL Certificates (Let's Encrypt)
    ssl_certificate /etc/letsencrypt/live/pounce.ch/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pounce.ch/privkey.pem;
    
    # Backend API
    location /api/ {
        proxy_pass http://backend;
        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_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }

    # Frontend
    location / {
        proxy_pass http://frontend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
```

### 7. SSL Zertifikate (Let's Encrypt)
```bash
sudo certbot --nginx -d pounce.ch -d www.pounce.ch
```

### 8. Cronjobs einrichten

Für automatische TLD-Preis-Updates und Domain-Checks:

```bash
crontab -e
```

```cron
# Täglich um 3:00 Uhr TLD Preise aktualisieren
0 3 * * * cd /path/to/pounce/backend && source venv/bin/activate && python -c "from app.services.tld_scraper import scrape_all_tlds; import asyncio; asyncio.run(scrape_all_tlds())"

# Stündlich Auctions scrapen
0 * * * * cd /path/to/pounce/backend && source venv/bin/activate && python -c "from app.services.auction_scraper import auction_scraper; from app.database import AsyncSessionLocal; import asyncio; async def run(): async with AsyncSessionLocal() as db: await auction_scraper.scrape_all_platforms(db); asyncio.run(run())"
```

**Hinweis:** Die Domain-Checks laufen automatisch über den internen Scheduler (APScheduler), keine Cronjobs nötig!

## Wichtige Checks nach Deployment

1. ✅ Backend läuft: `curl https://pounce.ch/api/v1/health`
2. ✅ Frontend läuft: Browser öffnen zu `https://pounce.ch`
3. ✅ Datenbank funktioniert: Login/Register testen
4. ✅ Email-Versand funktioniert: Password Reset testen
5. ✅ Stripe funktioniert: Checkout Flow testen
6. ✅ OAuth funktioniert: Google/GitHub Login testen

## Monitoring

```bash
# PM2 Logs ansehen
pm2 logs

# PM2 Status
pm2 status

# PM2 Restart (bei Problemen)
pm2 restart all
```

## Backup

```bash
# Datenbank Backup (SQLite)
cp backend/domainwatch.db backend/domainwatch.db.backup.$(date +%Y%m%d)

# Oder mit PostgreSQL
pg_dump pounce > pounce_backup_$(date +%Y%m%d).sql
```

## Support

Bei Fragen oder Problemen:
- Email: hello@pounce.ch
- GitHub Issues: https://git.6bit.ch/yvg/pounce

---

**Neue Preise (aktualisiert):**
- Scout: Free
- Trader: $9/mo
- Tycoon: $29/mo

**Währung:** USD (aktualisiert)

