228 lines
4.5 KiB
Markdown
228 lines
4.5 KiB
Markdown
# Quick Deploy Guide
|
|
|
|
Schnellanleitung für Production Deployments.
|
|
|
|
## Voraussetzungen
|
|
|
|
- WireGuard VPN aktiv: `sudo wg-quick up wg0-production`
|
|
- SSH-Zugang konfiguriert
|
|
- Docker Registry läuft auf Production Server
|
|
|
|
## Deployment in 5 Schritten
|
|
|
|
### 1. Image bauen und pushen
|
|
|
|
```bash
|
|
# Im Projekt-Root
|
|
docker build -f Dockerfile.production -t 94.16.110.151:5000/framework:latest .
|
|
docker push 94.16.110.151:5000/framework:latest
|
|
```
|
|
|
|
**Verify Push**:
|
|
```bash
|
|
curl http://94.16.110.151:5000/v2/framework/tags/list
|
|
```
|
|
|
|
### 2. Config-Files auf Server kopieren
|
|
|
|
```bash
|
|
# Falls docker-compose.prod.yml oder .env geändert wurden
|
|
scp docker-compose.prod.yml deploy@94.16.110.151:/home/deploy/framework/
|
|
scp .env.production deploy@94.16.110.151:/home/deploy/framework/.env
|
|
```
|
|
|
|
### 3. Auf Server deployen
|
|
|
|
```bash
|
|
ssh deploy@94.16.110.151
|
|
cd /home/deploy/framework
|
|
|
|
# Pull und Deploy
|
|
docker-compose -f docker-compose.yml -f docker-compose.prod.yml pull
|
|
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
|
|
```
|
|
|
|
### 4. Status checken
|
|
|
|
```bash
|
|
# Container Status
|
|
docker-compose -f docker-compose.yml -f docker-compose.prod.yml ps
|
|
|
|
# Logs anschauen
|
|
docker-compose -f docker-compose.yml -f docker-compose.prod.yml logs -f web php
|
|
|
|
# Supervisor Status (im web container)
|
|
docker exec web supervisorctl status
|
|
```
|
|
|
|
### 5. Application testen
|
|
|
|
```bash
|
|
# Von lokaler Maschine (via WireGuard)
|
|
curl -k -I https://94.16.110.151:8443/
|
|
|
|
# Erwartetes Ergebnis:
|
|
# HTTP/2 200
|
|
# server: nginx
|
|
```
|
|
|
|
## Rollback
|
|
|
|
Falls Probleme auftreten:
|
|
|
|
```bash
|
|
# Auf Server
|
|
cd /home/deploy/framework
|
|
|
|
# Vorheriges Image ID finden
|
|
docker images 94.16.110.151:5000/framework
|
|
|
|
# Zu spezifischem Image wechseln
|
|
docker-compose -f docker-compose.yml -f docker-compose.prod.yml down
|
|
docker tag 94.16.110.151:5000/framework@sha256:<old-digest> 94.16.110.151:5000/framework:latest
|
|
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
|
|
```
|
|
|
|
## Monitoring URLs
|
|
|
|
**Zugang nur via WireGuard VPN (10.8.0.1)**:
|
|
|
|
- Prometheus: http://10.8.0.1:9090
|
|
- Grafana: http://10.8.0.1:3000 (admin / $GRAFANA_PASSWORD)
|
|
- Portainer: https://10.8.0.1:9443
|
|
|
|
## Watchtower Auto-Updates
|
|
|
|
Watchtower überwacht automatisch und updated Container mit neuem Image (alle 5 Minuten).
|
|
|
|
**Status checken**:
|
|
```bash
|
|
docker logs watchtower
|
|
```
|
|
|
|
**Manuell triggern**:
|
|
```bash
|
|
# Watchtower neu starten (triggert sofortigen Check)
|
|
docker restart watchtower
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Container nicht healthy
|
|
|
|
```bash
|
|
# Logs anschauen
|
|
docker logs web
|
|
docker logs php
|
|
|
|
# Im Container debuggen
|
|
docker exec -it web sh
|
|
docker exec -it php sh
|
|
|
|
# Supervisor Status
|
|
docker exec web supervisorctl status
|
|
|
|
# Nginx/PHP-FPM Prozesse
|
|
docker exec web ps aux | grep -E 'nginx|php-fpm'
|
|
```
|
|
|
|
### Database Connection Issues
|
|
|
|
```bash
|
|
# PostgreSQL Connection testen
|
|
docker exec php php -r "new PDO('pgsql:host=db;dbname=framework_db', 'framework_user', 'password');"
|
|
|
|
# Database Logs
|
|
docker logs db
|
|
|
|
# In Database connecten
|
|
docker exec -it db psql -U framework_user -d framework_db
|
|
```
|
|
|
|
### Redis Connection Issues
|
|
|
|
```bash
|
|
# Redis Connection testen
|
|
docker exec php php -r "var_dump((new Redis())->connect('redis', 6379));"
|
|
|
|
# Redis Logs
|
|
docker logs redis
|
|
|
|
# Redis CLI
|
|
docker exec -it redis redis-cli
|
|
```
|
|
|
|
## Maintenance Commands
|
|
|
|
### Database Backup
|
|
|
|
```bash
|
|
# Manual Backup
|
|
docker exec db pg_dump -U framework_user framework_db > backup_$(date +%Y%m%d_%H%M%S).sql
|
|
```
|
|
|
|
### Logs Cleanup
|
|
|
|
```bash
|
|
# Storage Logs leeren (auf Server)
|
|
docker exec web sh -c 'rm -rf /var/www/html/storage/logs/*.log'
|
|
|
|
# Docker Logs cleanup
|
|
docker system prune -f
|
|
docker volume prune -f
|
|
```
|
|
|
|
### Image Cleanup
|
|
|
|
```bash
|
|
# Alte Images entfernen
|
|
docker image prune -a -f
|
|
|
|
# Nur untagged images
|
|
docker image prune -f
|
|
```
|
|
|
|
## Performance Check
|
|
|
|
```bash
|
|
# Container Resource Usage
|
|
docker stats
|
|
|
|
# PHP-FPM Status
|
|
docker exec web curl http://localhost/php-fpm-status
|
|
|
|
# Nginx Status
|
|
docker exec web curl http://localhost/nginx-status
|
|
|
|
# Database Connections
|
|
docker exec db psql -U framework_user -d framework_db -c "SELECT count(*) FROM pg_stat_activity;"
|
|
```
|
|
|
|
## SSL Certificate Renewal
|
|
|
|
```bash
|
|
# Let's Encrypt Renewal (auf Server als root)
|
|
certbot renew
|
|
docker exec web nginx -s reload
|
|
```
|
|
|
|
## Nützliche Aliases
|
|
|
|
Füge zu `~/.bashrc` auf Production Server hinzu:
|
|
|
|
```bash
|
|
alias dc='docker-compose -f docker-compose.yml -f docker-compose.prod.yml'
|
|
alias dcup='dc up -d'
|
|
alias dcdown='dc down'
|
|
alias dcps='dc ps'
|
|
alias dclogs='dc logs -f'
|
|
alias dcrestart='dc restart'
|
|
```
|
|
|
|
Dann kannst du einfach verwenden:
|
|
```bash
|
|
dcup # Deploy
|
|
dcps # Status
|
|
dclogs # Logs anschauen
|
|
```
|