Alles jetzt OHNE 'Klaus'
This commit is contained in:
65
.env
65
.env
@@ -1,46 +1,29 @@
|
||||
# Docker Environment Configuration für Rezepte Klaus
|
||||
# Development Environment - Linux Server
|
||||
# Generated on Mon Sep 22 05:45:27 PM UTC 2025
|
||||
|
||||
# Database Configuration
|
||||
DB_HOST=mysql
|
||||
DB_PORT=3306
|
||||
DB_USER=recipes_user
|
||||
DB_PASSWORD=recipes_password_2024
|
||||
DB_NAME=rezepte_klaus
|
||||
DB_ROOT_PASSWORD=root_password_2024
|
||||
# Server Configuration
|
||||
HOST_IP=192.168.178.94
|
||||
DEVELOPMENT_MODE=true
|
||||
|
||||
# Database URL für Prisma
|
||||
DATABASE_URL=mysql://recipes_user:recipes_password_2024@mysql:3306/rezepte_klaus
|
||||
# Database Configuration (local development DB)
|
||||
MYSQL_PASSWORD=dev_password_123
|
||||
MYSQL_ROOT_PASSWORD=dev_root_password_123
|
||||
|
||||
# Backend Configuration
|
||||
BACKEND_PORT=3001
|
||||
NODE_ENV=production
|
||||
|
||||
# Upload Configuration
|
||||
UPLOAD_DIR=/app/uploads
|
||||
MAX_FILE_SIZE=10485760
|
||||
ALLOWED_EXTENSIONS=jpg,jpeg,png,webp
|
||||
|
||||
# Frontend Configuration
|
||||
FRONTEND_PORT=80
|
||||
VITE_API_URL=http://localhost:3001
|
||||
|
||||
# phpMyAdmin Configuration (optional)
|
||||
PMA_HOST=mysql
|
||||
PMA_PORT=3306
|
||||
PHPMYADMIN_PORT=8080
|
||||
|
||||
# Legacy PHP Configuration (optional)
|
||||
LEGACY_PHP_PORT=8090
|
||||
LEGACY_MYSQL_HOST=mysql
|
||||
LEGACY_MYSQL_DATABASE=rezepte_klaus
|
||||
LEGACY_MYSQL_USER=recipes_user
|
||||
LEGACY_MYSQL_PASSWORD=recipes_password_2024
|
||||
|
||||
# Security
|
||||
JWT_SECRET=your_jwt_secret_here_change_in_production
|
||||
# CORS Configuration for remote access
|
||||
CORS_ORIGIN=*
|
||||
|
||||
# Volume Paths
|
||||
MYSQL_DATA_PATH=./docker-data/mysql
|
||||
UPLOADS_PATH=./docker-data/uploads
|
||||
LEGACY_UPLOADS_PATH=./upload
|
||||
# Development URLs:
|
||||
# - Frontend: http://192.168.178.94:3000
|
||||
# - Backend API: http://192.168.178.94:3001/api
|
||||
# - phpMyAdmin: http://192.168.178.94:8080
|
||||
# - MySQL: 192.168.178.94:3307
|
||||
|
||||
# Registry Configuration (for image pulls)
|
||||
DOCKER_REGISTRY=docker.citysensor.de
|
||||
# DOCKER_USERNAME=your_username
|
||||
# DOCKER_PASSWORD=your_password
|
||||
|
||||
# Development Notes:
|
||||
# - Use this for testing Linux-specific behavior
|
||||
# - Access from Mac via: http://192.168.178.94:3000
|
||||
# - SSH tunnel for secure access: ssh -L 3000:192.168.178.94:3000 user@server
|
||||
|
||||
@@ -19,5 +19,5 @@ DOCKER_NAMESPACE=
|
||||
IMAGE_TAG=latest
|
||||
|
||||
# Generated Image Names (automatically set by build script)
|
||||
# BACKEND_IMAGE=docker.citysensor.de/rezepte-klaus-backend:latest
|
||||
# FRONTEND_IMAGE=docker.citysensor.de/rezepte-klaus-frontend:latest
|
||||
# BACKEND_IMAGE=docker.citysensor.de/rezepte-backend:latest
|
||||
# FRONTEND_IMAGE=docker.citysensor.de/rezepte-frontend:latest
|
||||
@@ -1,15 +1,15 @@
|
||||
# Docker Environment Configuration für Rezepte Klaus
|
||||
# Docker Environment Configuration für Rezepte
|
||||
|
||||
# Database Configuration
|
||||
DB_HOST=mysql
|
||||
DB_PORT=3306
|
||||
DB_USER=recipes_user
|
||||
DB_PASSWORD=recipes_password_2024
|
||||
DB_NAME=rezepte_klaus
|
||||
DB_NAME=rezepte
|
||||
DB_ROOT_PASSWORD=root_password_2024
|
||||
|
||||
# Database URL für Prisma
|
||||
DATABASE_URL=mysql://recipes_user:recipes_password_2024@mysql:3306/rezepte_klaus
|
||||
DATABASE_URL=mysql://recipes_user:recipes_password_2024@mysql:3306/rezepte
|
||||
|
||||
# Backend Configuration
|
||||
BACKEND_PORT=3001
|
||||
@@ -32,7 +32,7 @@ PHPMYADMIN_PORT=8080
|
||||
# Legacy PHP Configuration (optional)
|
||||
LEGACY_PHP_PORT=8090
|
||||
LEGACY_MYSQL_HOST=mysql
|
||||
LEGACY_MYSQL_DATABASE=rezepte_klaus
|
||||
LEGACY_MYSQL_DATABASE=rezepte
|
||||
LEGACY_MYSQL_USER=recipes_user
|
||||
LEGACY_MYSQL_PASSWORD=recipes_password_2024
|
||||
|
||||
|
||||
@@ -29,12 +29,12 @@ DOCKER_USERNAME=your_username_here
|
||||
DOCKER_PASSWORD=your_password_here
|
||||
|
||||
# Docker Registry Images (CitySensor)
|
||||
BACKEND_IMAGE=docker.citysensor.de/rezepte-klaus-backend:latest
|
||||
FRONTEND_IMAGE=docker.citysensor.de/rezepte-klaus-frontend:latest
|
||||
BACKEND_IMAGE=docker.citysensor.de/rezepte-backend:latest
|
||||
FRONTEND_IMAGE=docker.citysensor.de/rezepte-frontend:latest
|
||||
|
||||
# Setup Instructions:
|
||||
# 1. Find your Gitea MySQL container name: docker ps | grep mysql
|
||||
# 2. Find your Gitea network: docker network ls | grep gitea
|
||||
# 3. Update MYSQL_HOST with the correct container name
|
||||
# 4. Update EXTERNAL_MYSQL_NETWORK with the correct network name
|
||||
# 5. Create rezepte_klaus database and user (see setup script)
|
||||
# 5. Create rezepte database and user (see setup script)
|
||||
@@ -15,4 +15,4 @@ API_BASE_URL=https://yourdomain.com/api
|
||||
# JWT_SECRET=your_super_secure_jwt_secret_minimum_32_characters_long
|
||||
|
||||
# Optional: Database URL override
|
||||
# DATABASE_URL=mysql://rezepte_user:password@mysql:3306/rezepte_klaus
|
||||
# DATABASE_URL=mysql://rezepte_user:password@mysql:3306/rezepte
|
||||
@@ -14,17 +14,17 @@ DOCKER_USERNAME=your_username_here
|
||||
DOCKER_PASSWORD=your_password_here
|
||||
|
||||
# Docker Registry Images
|
||||
BACKEND_IMAGE=docker.citysensor.de/rezepte-klaus-backend:latest
|
||||
FRONTEND_IMAGE=docker.citysensor.de/rezepte-klaus-frontend:latest
|
||||
BACKEND_IMAGE=docker.citysensor.de/rezepte-backend:latest
|
||||
FRONTEND_IMAGE=docker.citysensor.de/rezepte-frontend:latest
|
||||
|
||||
# Alternative: Docker Hub
|
||||
# BACKEND_IMAGE=your-username/rezepte-klaus-backend:latest
|
||||
# FRONTEND_IMAGE=your-username/rezepte-klaus-frontend:latest
|
||||
# BACKEND_IMAGE=your-username/rezepte-backend:latest
|
||||
# FRONTEND_IMAGE=your-username/rezepte-frontend:latest
|
||||
|
||||
# Alternative: AWS ECR
|
||||
# BACKEND_IMAGE=123456789.dkr.ecr.eu-central-1.amazonaws.com/rezepte-klaus-backend:latest
|
||||
# FRONTEND_IMAGE=123456789.dkr.ecr.eu-central-1.amazonaws.com/rezepte-klaus-frontend:latest
|
||||
# BACKEND_IMAGE=123456789.dkr.ecr.eu-central-1.amazonaws.com/rezepte-backend:latest
|
||||
# FRONTEND_IMAGE=123456789.dkr.ecr.eu-central-1.amazonaws.com/rezepte-frontend:latest
|
||||
|
||||
# Alternative: Azure Container Registry
|
||||
# BACKEND_IMAGE=yourregistry.azurecr.io/rezepte-klaus-backend:latest
|
||||
# FRONTEND_IMAGE=yourregistry.azurecr.io/rezepte-klaus-frontend:latest
|
||||
# BACKEND_IMAGE=yourregistry.azurecr.io/rezepte-backend:latest
|
||||
# FRONTEND_IMAGE=yourregistry.azurecr.io/rezepte-frontend:latest
|
||||
@@ -21,8 +21,8 @@ DOCKER_USERNAME=your_username_here
|
||||
DOCKER_PASSWORD=your_password_here
|
||||
|
||||
# Docker Registry Images (CitySensor)
|
||||
BACKEND_IMAGE=docker.citysensor.de/rezepte-klaus-backend:latest
|
||||
FRONTEND_IMAGE=docker.citysensor.de/rezepte-klaus-frontend:latest
|
||||
BACKEND_IMAGE=docker.citysensor.de/rezepte-backend:latest
|
||||
FRONTEND_IMAGE=docker.citysensor.de/rezepte-frontend:latest
|
||||
|
||||
# Optional: JWT Secret (currently not used, but prepared for future authentication)
|
||||
# JWT_SECRET=your_super_secure_jwt_secret_minimum_32_characters_long
|
||||
4
.github/workflows/docker-build.yml
vendored
4
.github/workflows/docker-build.yml
vendored
@@ -9,8 +9,8 @@ on:
|
||||
|
||||
env:
|
||||
REGISTRY: ${{ vars.DOCKER_REGISTRY || 'docker.citysensor.de' }}
|
||||
IMAGE_NAME_BACKEND: rezepte-klaus-backend
|
||||
IMAGE_NAME_FRONTEND: rezepte-klaus-frontend
|
||||
IMAGE_NAME_BACKEND: rezepte-backend
|
||||
IMAGE_NAME_FRONTEND: rezepte-frontend
|
||||
|
||||
jobs:
|
||||
build-and-push:
|
||||
|
||||
@@ -59,8 +59,8 @@ MYSQL_ROOT_PASSWORD=super_secure_root_password
|
||||
DOCKER_REGISTRY=docker.citysensor.de
|
||||
DOCKER_USERNAME=your_username
|
||||
DOCKER_PASSWORD=your_password
|
||||
BACKEND_IMAGE=docker.citysensor.de/rezepte-klaus-backend:latest
|
||||
FRONTEND_IMAGE=docker.citysensor.de/rezepte-klaus-frontend:latest
|
||||
BACKEND_IMAGE=docker.citysensor.de/rezepte-backend:latest
|
||||
FRONTEND_IMAGE=docker.citysensor.de/rezepte-frontend:latest
|
||||
```
|
||||
|
||||
## 🔧 Registry-Authentifizierung
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
|
||||
## 1. Repository auf Server klonen
|
||||
```bash
|
||||
git clone <your-repository-url> /opt/rezepte-klaus
|
||||
cd /opt/rezepte-klaus
|
||||
git clone <your-repository-url> /opt/rezepte
|
||||
cd /opt/rezepte
|
||||
```
|
||||
|
||||
## 2. Produktions-Umgebung konfigurieren
|
||||
@@ -22,7 +22,7 @@ cp .env.example .env.production
|
||||
### .env.production anpassen:
|
||||
```env
|
||||
# Database
|
||||
DATABASE_URL="mysql://rezepte_user:secure_password_here@mysql:3306/rezepte_klaus"
|
||||
DATABASE_URL="mysql://rezepte_user:secure_password_here@mysql:3306/rezepte"
|
||||
|
||||
# Security
|
||||
JWT_SECRET="your-super-secure-jwt-secret-min-32-chars"
|
||||
@@ -53,7 +53,7 @@ services:
|
||||
container_name: rezepte-mysql-prod
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MYSQL_DATABASE: rezepte_klaus
|
||||
MYSQL_DATABASE: rezepte
|
||||
MYSQL_USER: rezepte_user
|
||||
MYSQL_PASSWORD: secure_password_here
|
||||
MYSQL_ROOT_PASSWORD: super_secure_root_password
|
||||
@@ -78,7 +78,7 @@ services:
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- DATABASE_URL=mysql://rezepte_user:secure_password_here@mysql:3306/rezepte_klaus
|
||||
- DATABASE_URL=mysql://rezepte_user:secure_password_here@mysql:3306/rezepte
|
||||
- JWT_SECRET=your-super-secure-jwt-secret-min-32-chars
|
||||
- CORS_ORIGIN=https://yourdomain.com
|
||||
- PORT=3001
|
||||
@@ -148,7 +148,7 @@ sudo cp /etc/letsencrypt/live/yourdomain.com/privkey.pem ./ssl/
|
||||
|
||||
### Option B: Reverse Proxy (empfohlen)
|
||||
```nginx
|
||||
# /etc/nginx/sites-available/rezepte-klaus
|
||||
# /etc/nginx/sites-available/rezepte
|
||||
server {
|
||||
listen 80;
|
||||
server_name yourdomain.com;
|
||||
@@ -193,7 +193,7 @@ server {
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🚀 Deploying Rezepte Klaus..."
|
||||
echo "🚀 Deploying Rezepte..."
|
||||
|
||||
# Git pull latest changes
|
||||
git pull origin main
|
||||
@@ -221,12 +221,12 @@ fi
|
||||
```bash
|
||||
#!/bin/bash
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_DIR="/opt/backups/rezepte-klaus"
|
||||
BACKUP_DIR="/opt/backups/rezepte"
|
||||
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
# Database backup
|
||||
docker exec rezepte-mysql-prod mysqldump -u root -psuper_secure_root_password rezepte_klaus > $BACKUP_DIR/database_$DATE.sql
|
||||
docker exec rezepte-mysql-prod mysqldump -u root -psuper_secure_root_password rezepte > $BACKUP_DIR/database_$DATE.sql
|
||||
|
||||
# Uploads backup
|
||||
docker cp rezepte-backend-prod:/app/uploads $BACKUP_DIR/uploads_$DATE
|
||||
@@ -262,7 +262,7 @@ docker-compose -f docker-compose.production.yml ps
|
||||
### Crontab für automatische Backups:
|
||||
```bash
|
||||
# Täglich um 2 Uhr
|
||||
0 2 * * * /opt/rezepte-klaus/backup.sh
|
||||
0 2 * * * /opt/rezepte/backup.sh
|
||||
|
||||
# Wöchentlich SSL-Zertifikat erneuern
|
||||
0 3 * * 0 certbot renew --quiet && systemctl reload nginx
|
||||
@@ -290,7 +290,7 @@ docker exec -it rezepte-mysql-prod mysql -u root -p
|
||||
|
||||
# Database-Status prüfen
|
||||
SHOW DATABASES;
|
||||
USE rezepte_klaus;
|
||||
USE rezepte;
|
||||
SHOW TABLES;
|
||||
```
|
||||
|
||||
|
||||
@@ -10,11 +10,11 @@
|
||||
echo $GITHUB_TOKEN | docker login ghcr.io -u YOUR_USERNAME --password-stdin
|
||||
|
||||
# Images taggen und pushen
|
||||
docker build -t ghcr.io/YOUR_USERNAME/rezepte-klaus-backend:latest ./nodejs-version/backend
|
||||
docker build -t ghcr.io/YOUR_USERNAME/rezepte-klaus-frontend:latest ./nodejs-version/frontend
|
||||
docker build -t ghcr.io/YOUR_USERNAME/rezepte-backend:latest ./nodejs-version/backend
|
||||
docker build -t ghcr.io/YOUR_USERNAME/rezepte-frontend:latest ./nodejs-version/frontend
|
||||
|
||||
docker push ghcr.io/YOUR_USERNAME/rezepte-klaus-backend:latest
|
||||
docker push ghcr.io/YOUR_USERNAME/rezepte-klaus-frontend:latest
|
||||
docker push ghcr.io/YOUR_USERNAME/rezepte-backend:latest
|
||||
docker push ghcr.io/YOUR_USERNAME/rezepte-frontend:latest
|
||||
```
|
||||
|
||||
#### Docker Hub
|
||||
@@ -23,11 +23,11 @@ docker push ghcr.io/YOUR_USERNAME/rezepte-klaus-frontend:latest
|
||||
docker login
|
||||
|
||||
# Images taggen und pushen
|
||||
docker build -t YOUR_USERNAME/rezepte-klaus-backend:latest ./nodejs-version/backend
|
||||
docker build -t YOUR_USERNAME/rezepte-klaus-frontend:latest ./nodejs-version/frontend
|
||||
docker build -t YOUR_USERNAME/rezepte-backend:latest ./nodejs-version/backend
|
||||
docker build -t YOUR_USERNAME/rezepte-frontend:latest ./nodejs-version/frontend
|
||||
|
||||
docker push YOUR_USERNAME/rezepte-klaus-backend:latest
|
||||
docker push YOUR_USERNAME/rezepte-klaus-frontend:latest
|
||||
docker push YOUR_USERNAME/rezepte-backend:latest
|
||||
docker push YOUR_USERNAME/rezepte-frontend:latest
|
||||
```
|
||||
|
||||
#### Private Registry (AWS ECR, Azure ACR, etc.)
|
||||
@@ -36,11 +36,11 @@ docker push YOUR_USERNAME/rezepte-klaus-frontend:latest
|
||||
aws ecr get-login-password --region eu-central-1 | docker login --username AWS --password-stdin YOUR_ACCOUNT.dkr.ecr.eu-central-1.amazonaws.com
|
||||
|
||||
# Images taggen und pushen
|
||||
docker build -t YOUR_ACCOUNT.dkr.ecr.eu-central-1.amazonaws.com/rezepte-klaus-backend:latest ./nodejs-version/backend
|
||||
docker build -t YOUR_ACCOUNT.dkr.ecr.eu-central-1.amazonaws.com/rezepte-klaus-frontend:latest ./nodejs-version/frontend
|
||||
docker build -t YOUR_ACCOUNT.dkr.ecr.eu-central-1.amazonaws.com/rezepte-backend:latest ./nodejs-version/backend
|
||||
docker build -t YOUR_ACCOUNT.dkr.ecr.eu-central-1.amazonaws.com/rezepte-frontend:latest ./nodejs-version/frontend
|
||||
|
||||
docker push YOUR_ACCOUNT.dkr.ecr.eu-central-1.amazonaws.com/rezepte-klaus-backend:latest
|
||||
docker push YOUR_ACCOUNT.dkr.ecr.eu-central-1.amazonaws.com/rezepte-klaus-frontend:latest
|
||||
docker push YOUR_ACCOUNT.dkr.ecr.eu-central-1.amazonaws.com/rezepte-backend:latest
|
||||
docker push YOUR_ACCOUNT.dkr.ecr.eu-central-1.amazonaws.com/rezepte-frontend:latest
|
||||
```
|
||||
|
||||
### 2. Server-Deployment (nur Docker Compose)
|
||||
@@ -53,14 +53,14 @@ Auf dem Server benötigen Sie nur diese Dateien:
|
||||
|
||||
```bash
|
||||
# Minimales Setup auf Server
|
||||
mkdir -p /opt/rezepte-klaus
|
||||
cd /opt/rezepte-klaus
|
||||
mkdir -p /opt/rezepte
|
||||
cd /opt/rezepte
|
||||
|
||||
# Nur diese Dateien kopieren:
|
||||
scp docker-compose.registry.yml user@server:/opt/rezepte-klaus/
|
||||
scp .env.production user@server:/opt/rezepte-klaus/
|
||||
scp *.sql user@server:/opt/rezepte-klaus/
|
||||
scp deploy-registry.sh user@server:/opt/rezepte-klaus/
|
||||
scp docker-compose.registry.yml user@server:/opt/rezepte/
|
||||
scp .env.production user@server:/opt/rezepte/
|
||||
scp *.sql user@server:/opt/rezepte/
|
||||
scp deploy-registry.sh user@server:/opt/rezepte/
|
||||
```
|
||||
|
||||
## Option 2: CI/CD Pipeline (Automatisiert)
|
||||
@@ -108,7 +108,7 @@ jobs:
|
||||
username: ${{ secrets.USERNAME }}
|
||||
key: ${{ secrets.SSH_KEY }}
|
||||
script: |
|
||||
cd /opt/rezepte-klaus
|
||||
cd /opt/rezepte
|
||||
docker-compose -f docker-compose.registry.yml pull
|
||||
docker-compose -f docker-compose.registry.yml up -d
|
||||
```
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Rezepte Klaus - Docker Deployment
|
||||
# Rezepte - Docker Deployment
|
||||
|
||||
Dieses Projekt kann komplett über Docker containerisiert betrieben werden.
|
||||
|
||||
@@ -178,7 +178,7 @@ docker-compose -f docker-compose.modern.yml down -v
|
||||
|
||||
### Database Backup
|
||||
```bash
|
||||
docker-compose -f docker-compose.modern.yml exec mysql mysqldump -u recipes_user -p rezepte_klaus > backup.sql
|
||||
docker-compose -f docker-compose.modern.yml exec mysql mysqldump -u recipes_user -p rezepte > backup.sql
|
||||
```
|
||||
|
||||
### Upload Backup
|
||||
@@ -189,7 +189,7 @@ tar -czf uploads-backup.tar.gz docker-data/uploads/
|
||||
### Restore
|
||||
```bash
|
||||
# Database
|
||||
docker-compose -f docker-compose.modern.yml exec -T mysql mysql -u recipes_user -p rezepte_klaus < backup.sql
|
||||
docker-compose -f docker-compose.modern.yml exec -T mysql mysql -u recipes_user -p rezepte < backup.sql
|
||||
|
||||
# Uploads
|
||||
tar -xzf uploads-backup.tar.gz
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Externe MySQL-Datenbank Integration - Rezepte Klaus
|
||||
# Externe MySQL-Datenbank Integration - Rezepte
|
||||
|
||||
## 🗄️ Bestehende MySQL-Datenbank nutzen (Gitea)
|
||||
|
||||
@@ -72,7 +72,7 @@ EXTERNAL_MYSQL_NETWORK=gitea_default
|
||||
1. ✅ **Container-Erkennung**: Findet Gitea MySQL-Container
|
||||
2. ✅ **Netzwerk-Validierung**: Prüft Docker-Netzwerk
|
||||
3. ✅ **Verbindungstest**: Testet MySQL-Zugriff
|
||||
4. ✅ **Datenbank-Setup**: Erstellt `rezepte_klaus` DB
|
||||
4. ✅ **Datenbank-Setup**: Erstellt `rezepte` DB
|
||||
5. ✅ **User-Erstellung**: Legt `rezepte_user` an
|
||||
6. ✅ **Daten-Import**: Importiert SQL-Dateien
|
||||
7. ✅ **Service-Start**: Startet alle Services
|
||||
@@ -97,7 +97,7 @@ EXTERNAL_MYSQL_NETWORK=gitea_default
|
||||
│ Shared MySQL │
|
||||
│ ┌─────────────────────────────┐│
|
||||
│ │ ┌──────────┐ ┌────────────┐││
|
||||
│ │ │ gitea │ │rezepte_klaus│││
|
||||
│ │ │ gitea │ │rezepte│││
|
||||
│ │ └──────────┘ └────────────┘││
|
||||
│ └─────────────────────────────┘│
|
||||
└─────────────────────────────────┘
|
||||
@@ -127,7 +127,7 @@ networks:
|
||||
```yaml
|
||||
backend:
|
||||
environment:
|
||||
- DATABASE_URL=mysql://rezepte_user:${MYSQL_REZEPTE_PASSWORD}@${MYSQL_HOST}:3306/rezepte_klaus
|
||||
- DATABASE_URL=mysql://rezepte_user:${MYSQL_REZEPTE_PASSWORD}@${MYSQL_HOST}:3306/rezepte
|
||||
networks:
|
||||
- traefik-network
|
||||
- gitea_default # Zugriff auf Gitea MySQL
|
||||
@@ -143,10 +143,10 @@ backend:
|
||||
### **Getrennte Benutzer:**
|
||||
```sql
|
||||
-- Gitea nutzt eigenen User (meist 'gitea')
|
||||
-- Rezepte Klaus bekommt eigenen User ('rezepte_user')
|
||||
-- Rezepte bekommt eigenen User ('rezepte_user')
|
||||
-- Keine gegenseitigen Zugriffe
|
||||
|
||||
GRANT ALL PRIVILEGES ON rezepte_klaus.* TO 'rezepte_user'@'%';
|
||||
GRANT ALL PRIVILEGES ON rezepte.* TO 'rezepte_user'@'%';
|
||||
-- Kein Zugriff auf 'gitea' Datenbank
|
||||
```
|
||||
|
||||
@@ -229,10 +229,10 @@ docker-compose -f docker-compose.traefik-external-db.yml logs -f backend
|
||||
docker exec -it gitea-mysql-1 mysql -uroot -p
|
||||
|
||||
# Als Rezepte-User (nur Rezepte)
|
||||
docker exec -it gitea-mysql-1 mysql -urezepte_user -p rezepte_klaus
|
||||
docker exec -it gitea-mysql-1 mysql -urezepte_user -p rezepte
|
||||
|
||||
# Backup erstellen
|
||||
docker exec gitea-mysql-1 mysqldump -uroot -p rezepte_klaus > backup.sql
|
||||
docker exec gitea-mysql-1 mysqldump -uroot -p rezepte > backup.sql
|
||||
```
|
||||
|
||||
## 🎯 Fazit
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# phpMyAdmin Integration - Rezepte Klaus
|
||||
# phpMyAdmin Integration - Rezepte
|
||||
|
||||
## 🗄️ Datenbank-Verwaltung über Web-Interface
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Portainer Integration mit Traefik - Rezepte Klaus
|
||||
# Portainer Integration mit Traefik - Rezepte
|
||||
|
||||
## 🐳 Container-Management über Web-Interface
|
||||
|
||||
@@ -80,7 +80,7 @@ volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
```
|
||||
|
||||
## 🛠️ Portainer Features für Rezepte-Klaus
|
||||
## 🛠️ Portainer Features für Rezepte
|
||||
|
||||
### Container-Management:
|
||||
- ✅ **Stack-Verwaltung**: docker-compose.yml direkt bearbeiten
|
||||
@@ -121,7 +121,7 @@ watchtower:
|
||||
|
||||
## 🔄 Stack-Management
|
||||
|
||||
### 1. **Rezepte-Klaus als Stack**:
|
||||
### 1. **Rezepte als Stack**:
|
||||
```yaml
|
||||
# In Portainer: "Stacks" → "Add Stack"
|
||||
# Repository: Git-Integration möglich
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Rezepte Klaus - Docker Setup
|
||||
# Rezepte - Docker Setup
|
||||
|
||||
Eine dockerisierte Version der Rezepte-Verwaltungsanwendung mit PHP, MySQL und phpMyAdmin.
|
||||
|
||||
@@ -28,7 +28,7 @@ Eine dockerisierte Version der Rezepte-Verwaltungsanwendung mit PHP, MySQL und p
|
||||
|
||||
### Für die Anwendung:
|
||||
- Host: mysql
|
||||
- Database: rezepte_klaus
|
||||
- Database: rezepte
|
||||
- User: rezepte_user
|
||||
- Password: rezepte_pass
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@ Optimaler Workflow für Entwicklung auf Mac mit Testing auf Linux-Server, der de
|
||||
### **Auf dem Linux-Server (via SSH):**
|
||||
```bash
|
||||
# 1. Repository klonen (falls nicht geschehen)
|
||||
git clone https://github.com/your-repo/rezepte-klaus.git
|
||||
cd rezepte-klaus
|
||||
git clone https://github.com/your-repo/rezepte.git
|
||||
cd rezepte
|
||||
|
||||
# 2. Development-Umgebung einrichten
|
||||
./setup-development.sh
|
||||
@@ -79,13 +79,13 @@ docker-compose -f docker-compose.development.yml restart frontend
|
||||
```bash
|
||||
# VS Code Extension installieren: "Remote - SSH"
|
||||
# Direkt auf Server entwickeln
|
||||
code --remote ssh-remote+user@server /path/to/rezepte-klaus
|
||||
code --remote ssh-remote+user@server /path/to/rezepte
|
||||
```
|
||||
|
||||
#### **C) rsync-Sync:**
|
||||
```bash
|
||||
# Automatischer Sync von Mac zu Server
|
||||
rsync -avz --exclude 'node_modules' ./ user@server:/path/to/rezepte-klaus/
|
||||
rsync -avz --exclude 'node_modules' ./ user@server:/path/to/rezepte/
|
||||
```
|
||||
|
||||
### **2. Container-Rebuild-Workflows:**
|
||||
|
||||
@@ -24,14 +24,14 @@
|
||||
|
||||
```bash
|
||||
# 1. Create deployment directory
|
||||
mkdir -p /opt/rezepte-klaus
|
||||
cd /opt/rezepte-klaus
|
||||
mkdir -p /opt/rezepte
|
||||
cd /opt/rezepte
|
||||
|
||||
# 2. Copy required files to server
|
||||
scp docker-compose.registry.yml user@server:/opt/rezepte-klaus/
|
||||
scp .env.production user@server:/opt/rezepte-klaus/
|
||||
scp *.sql user@server:/opt/rezepte-klaus/
|
||||
scp deploy-registry.sh user@server:/opt/rezepte-klaus/
|
||||
scp docker-compose.registry.yml user@server:/opt/rezepte/
|
||||
scp .env.production user@server:/opt/rezepte/
|
||||
scp *.sql user@server:/opt/rezepte/
|
||||
scp deploy-registry.sh user@server:/opt/rezepte/
|
||||
|
||||
# 3. Make deployment script executable
|
||||
chmod +x deploy-registry.sh
|
||||
|
||||
@@ -38,8 +38,8 @@ DOMAIN=my.domain.com
|
||||
ACME_EMAIL=admin@my.domain.com
|
||||
MYSQL_PASSWORD=super_secure_password_123
|
||||
MYSQL_ROOT_PASSWORD=even_more_secure_root_password_456
|
||||
BACKEND_IMAGE=ghcr.io/username/rezepte-klaus-backend:latest
|
||||
FRONTEND_IMAGE=ghcr.io/username/rezepte-klaus-frontend:latest
|
||||
BACKEND_IMAGE=ghcr.io/username/rezepte-backend:latest
|
||||
FRONTEND_IMAGE=ghcr.io/username/rezepte-frontend:latest
|
||||
```
|
||||
|
||||
## 🔧 Server-Deployment
|
||||
@@ -47,7 +47,7 @@ FRONTEND_IMAGE=ghcr.io/username/rezepte-klaus-frontend:latest
|
||||
### Minimale Dateien auf Server:
|
||||
```bash
|
||||
# Server-Struktur
|
||||
/opt/rezepte-klaus/
|
||||
/opt/rezepte/
|
||||
├── docker-compose.traefik.yml
|
||||
├── .env.production
|
||||
├── deploy-traefik.sh
|
||||
@@ -60,14 +60,14 @@ FRONTEND_IMAGE=ghcr.io/username/rezepte-klaus-frontend:latest
|
||||
### Deployment-Schritte:
|
||||
```bash
|
||||
# 1. Dateien auf Server kopieren
|
||||
scp docker-compose.traefik.yml user@server:/opt/rezepte-klaus/
|
||||
scp .env.production user@server:/opt/rezepte-klaus/
|
||||
scp *.sql user@server:/opt/rezepte-klaus/
|
||||
scp deploy-traefik.sh user@server:/opt/rezepte-klaus/
|
||||
scp docker-compose.traefik.yml user@server:/opt/rezepte/
|
||||
scp .env.production user@server:/opt/rezepte/
|
||||
scp *.sql user@server:/opt/rezepte/
|
||||
scp deploy-traefik.sh user@server:/opt/rezepte/
|
||||
|
||||
# 2. Auf Server einloggen und deployen
|
||||
ssh user@server
|
||||
cd /opt/rezepte-klaus
|
||||
cd /opt/rezepte
|
||||
chmod +x deploy-traefik.sh
|
||||
./deploy-traefik.sh
|
||||
```
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_DIR="/opt/backups/rezepte-klaus"
|
||||
BACKUP_DIR="/opt/backups/rezepte"
|
||||
|
||||
# Create backup directory
|
||||
mkdir -p $BACKUP_DIR
|
||||
@@ -19,7 +19,7 @@ if docker ps | grep -q rezepte-mysql-prod; then
|
||||
docker exec rezepte-mysql-prod mysqldump \
|
||||
-u rezepte_user \
|
||||
-p${MYSQL_PASSWORD:-change_this_password} \
|
||||
rezepte_klaus > $BACKUP_DIR/database_$DATE.sql
|
||||
rezepte > $BACKUP_DIR/database_$DATE.sql
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ Database backup completed: database_$DATE.sql"
|
||||
|
||||
@@ -15,11 +15,11 @@ TAG=${IMAGE_TAG:-"latest"}
|
||||
|
||||
# Image names (with optional namespace)
|
||||
if [ -n "$NAMESPACE" ]; then
|
||||
BACKEND_IMAGE="$REGISTRY/$NAMESPACE/rezepte-klaus-backend:$TAG"
|
||||
FRONTEND_IMAGE="$REGISTRY/$NAMESPACE/rezepte-klaus-frontend:$TAG"
|
||||
BACKEND_IMAGE="$REGISTRY/$NAMESPACE/rezepte-backend:$TAG"
|
||||
FRONTEND_IMAGE="$REGISTRY/$NAMESPACE/rezepte-frontend:$TAG"
|
||||
else
|
||||
BACKEND_IMAGE="$REGISTRY/rezepte-klaus-backend:$TAG"
|
||||
FRONTEND_IMAGE="$REGISTRY/rezepte-klaus-frontend:$TAG"
|
||||
BACKEND_IMAGE="$REGISTRY/rezepte-backend:$TAG"
|
||||
FRONTEND_IMAGE="$REGISTRY/rezepte-frontend:$TAG"
|
||||
fi
|
||||
|
||||
echo "📦 Building images..."
|
||||
|
||||
@@ -8,7 +8,7 @@ if (session_status() === PHP_SESSION_NONE) {
|
||||
|
||||
// Docker environment variables with fallbacks for local development
|
||||
$host_name = $_ENV['DB_HOST'] ?? 'localhost';
|
||||
$database = $_ENV['DB_NAME'] ?? 'rezepte_klaus';
|
||||
$database = $_ENV['DB_NAME'] ?? 'rezepte';
|
||||
$user_name = $_ENV['DB_USER'] ?? 'root';
|
||||
$password = $_ENV['DB_PASS'] ?? '';
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ if (session_status() === PHP_SESSION_NONE) {
|
||||
|
||||
// Docker environment variables with fallbacks for local development
|
||||
$host_name = $_ENV['DB_HOST'] ?? 'localhost';
|
||||
$database = $_ENV['DB_NAME'] ?? 'rezepte_klaus';
|
||||
$database = $_ENV['DB_NAME'] ?? 'rezepte';
|
||||
$user_name = $_ENV['DB_USER'] ?? 'root';
|
||||
$password = $_ENV['DB_PASS'] ?? '';
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
$host_name = 'localhost';
|
||||
$database = 'rezepte_klaus';
|
||||
$database = 'rezepte';
|
||||
$user_name = 'root';
|
||||
$password = '';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🗄️ Setting up Rezepte Klaus with external MySQL (Gitea)"
|
||||
echo "🗄️ Setting up Rezepte with external MySQL (Gitea)"
|
||||
echo "======================================================"
|
||||
|
||||
# Check if .env.external-db exists
|
||||
@@ -63,33 +63,33 @@ else
|
||||
fi
|
||||
|
||||
# Create database and user
|
||||
echo "🏗️ Setting up Rezepte Klaus database..."
|
||||
echo "🏗️ Setting up Rezepte database..."
|
||||
|
||||
# SQL commands for database setup
|
||||
DATABASE_SETUP_SQL="
|
||||
-- Create Rezepte Klaus database
|
||||
CREATE DATABASE IF NOT EXISTS rezepte_klaus
|
||||
-- Create Rezepte database
|
||||
CREATE DATABASE IF NOT EXISTS rezepte
|
||||
CHARACTER SET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- Create dedicated user for Rezepte Klaus
|
||||
-- Create dedicated user for Rezepte
|
||||
CREATE USER IF NOT EXISTS 'rezepte_user'@'%' IDENTIFIED BY '${MYSQL_REZEPTE_PASSWORD}';
|
||||
|
||||
-- Grant permissions
|
||||
GRANT ALL PRIVILEGES ON rezepte_klaus.* TO 'rezepte_user'@'%';
|
||||
GRANT ALL PRIVILEGES ON rezepte.* TO 'rezepte_user'@'%';
|
||||
|
||||
-- Refresh privileges
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
-- Show created database
|
||||
SHOW DATABASES LIKE 'rezepte_klaus';
|
||||
SHOW DATABASES LIKE 'rezepte';
|
||||
"
|
||||
|
||||
# Execute database setup
|
||||
echo "$DATABASE_SETUP_SQL" | docker exec -i "$MYSQL_HOST" mysql -u"${MYSQL_ADMIN_USER:-root}" -p"${MYSQL_ADMIN_PASSWORD}"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ Database 'rezepte_klaus' and user 'rezepte_user' created successfully"
|
||||
echo "✅ Database 'rezepte' and user 'rezepte_user' created successfully"
|
||||
else
|
||||
echo "❌ Error creating database or user"
|
||||
exit 1
|
||||
@@ -102,7 +102,7 @@ REQUIRED_FILES=("Rezepte.sql" "ingredients.sql" "Zubereitung.sql" "rezepte_bilde
|
||||
for file in "${REQUIRED_FILES[@]}"; do
|
||||
if [ -f "$file" ]; then
|
||||
echo " Importing $file..."
|
||||
docker exec -i "$MYSQL_HOST" mysql -u"${MYSQL_ADMIN_USER:-root}" -p"${MYSQL_ADMIN_PASSWORD}" rezepte_klaus < "$file"
|
||||
docker exec -i "$MYSQL_HOST" mysql -u"${MYSQL_ADMIN_USER:-root}" -p"${MYSQL_ADMIN_PASSWORD}" rezepte < "$file"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo " ✅ $file imported successfully"
|
||||
else
|
||||
@@ -124,7 +124,7 @@ echo "📥 Pulling latest images..."
|
||||
docker compose -f docker compose.traefik-external-db.yml pull
|
||||
|
||||
# Start services
|
||||
echo "🚀 Starting Rezepte Klaus services with external MySQL..."
|
||||
echo "🚀 Starting Rezepte services with external MySQL..."
|
||||
docker compose -f docker compose.traefik-external-db.yml up -d
|
||||
|
||||
# Wait for services to be healthy
|
||||
@@ -145,13 +145,13 @@ if [ "$HEALTHY_SERVICES" -ge 4 ]; then
|
||||
echo ""
|
||||
echo "🗄️ Database Information:"
|
||||
echo " MySQL Host: $MYSQL_HOST (shared with Gitea)"
|
||||
echo " Rezepte Database: rezepte_klaus"
|
||||
echo " Rezepte Database: rezepte"
|
||||
echo " Rezepte User: rezepte_user"
|
||||
echo ""
|
||||
echo "📊 Service Status:"
|
||||
docker compose -f docker compose.traefik-external-db.yml ps
|
||||
echo ""
|
||||
echo "💡 phpMyAdmin now shows both Gitea and Rezepte Klaus databases!"
|
||||
echo "💡 phpMyAdmin now shows both Gitea and Rezepte databases!"
|
||||
else
|
||||
echo "❌ Deployment failed! Check logs:"
|
||||
docker compose -f docker compose.traefik-external-db.yml logs --tail=50
|
||||
@@ -163,4 +163,4 @@ echo "📋 Useful commands:"
|
||||
echo " View logs: docker compose -f docker compose.traefik-external-db.yml logs -f"
|
||||
echo " Update: docker compose -f docker compose.traefik-external-db.yml pull && docker compose -f docker compose.traefik-external-db.yml up -d"
|
||||
echo " Stop: docker compose -f docker compose.traefik-external-db.yml down"
|
||||
echo " Database access: docker exec -it $MYSQL_HOST mysql -urezepte_user -p rezepte_klaus"
|
||||
echo " Database access: docker exec -it $MYSQL_HOST mysql -urezepte_user -p rezepte"
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🚀 Deploying Rezepte Klaus to production..."
|
||||
echo "🚀 Deploying Rezepte to production..."
|
||||
|
||||
# Check if .env.production exists
|
||||
if [ ! -f .env.production ]; then
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🚀 Deploying Rezepte Klaus from Docker Registry..."
|
||||
echo "🚀 Deploying Rezepte from Docker Registry..."
|
||||
|
||||
# Check if .env.production exists
|
||||
if [ ! -f .env.production ]; then
|
||||
@@ -59,8 +59,8 @@ if [ "$HEALTHY_SERVICES" -ge 3 ]; then
|
||||
docker-compose -f docker-compose.registry.yml ps
|
||||
echo ""
|
||||
echo "🏷️ Image Information:"
|
||||
echo "Backend: ${BACKEND_IMAGE:-ghcr.io/your-username/rezepte-klaus-backend:latest}"
|
||||
echo "Frontend: ${FRONTEND_IMAGE:-ghcr.io/your-username/rezepte-klaus-frontend:latest}"
|
||||
echo "Backend: ${BACKEND_IMAGE:-ghcr.io/your-username/rezepte-backend:latest}"
|
||||
echo "Frontend: ${FRONTEND_IMAGE:-ghcr.io/your-username/rezepte-frontend:latest}"
|
||||
else
|
||||
echo "❌ Deployment failed! Check logs:"
|
||||
docker-compose -f docker-compose.registry.yml logs --tail=50
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🚀 Deploying Rezepte Klaus with Traefik Proxy..."
|
||||
echo "🚀 Deploying Rezepte with Traefik Proxy..."
|
||||
|
||||
# Check if .env.production exists
|
||||
if [ ! -f .env.production ]; then
|
||||
@@ -71,8 +71,8 @@ if [ "$HEALTHY_SERVICES" -ge 6 ]; then
|
||||
docker compose -f docker compose.traefik.yml ps
|
||||
echo ""
|
||||
echo "🏷️ Image Information:"
|
||||
echo "Backend: ${BACKEND_IMAGE:-ghcr.io/your-username/rezepte-klaus-backend:latest}"
|
||||
echo "Frontend: ${FRONTEND_IMAGE:-ghcr.io/your-username/rezepte-klaus-frontend:latest}"
|
||||
echo "Backend: ${BACKEND_IMAGE:-ghcr.io/your-username/rezepte-backend:latest}"
|
||||
echo "Frontend: ${FRONTEND_IMAGE:-ghcr.io/your-username/rezepte-frontend:latest}"
|
||||
echo ""
|
||||
echo "🔒 SSL Certificates:"
|
||||
echo "Traefik will automatically request Let's Encrypt certificates."
|
||||
|
||||
@@ -4,7 +4,7 @@ services:
|
||||
container_name: rezepte-mysql-dev
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- MYSQL_DATABASE=rezepte_klaus
|
||||
- MYSQL_DATABASE=rezepte
|
||||
- MYSQL_USER=rezepte
|
||||
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
||||
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||
@@ -33,7 +33,7 @@ services:
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
- DATABASE_URL=mysql://rezepte:${MYSQL_PASSWORD}@mysql:3306/rezepte_klaus
|
||||
- DATABASE_URL=mysql://rezepte:${MYSQL_PASSWORD}@mysql:3306/rezepte
|
||||
- CORS_ORIGIN=${CORS_ORIGIN:-*}
|
||||
- PORT=3001
|
||||
ports:
|
||||
|
||||
@@ -5,7 +5,7 @@ services:
|
||||
container_name: rezepte-mysql
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_DATABASE: rezepte_klaus
|
||||
MYSQL_DATABASE: rezepte
|
||||
MYSQL_USER: rezepte_user
|
||||
MYSQL_PASSWORD: rezepte_pass
|
||||
ports:
|
||||
@@ -30,7 +30,7 @@ services:
|
||||
environment:
|
||||
NODE_ENV: production
|
||||
PORT: 3001
|
||||
DATABASE_URL: mysql://rezepte_user:rezepte_pass@mysql:3306/rezepte_klaus
|
||||
DATABASE_URL: mysql://rezepte_user:rezepte_pass@mysql:3306/rezepte
|
||||
JWT_SECRET: your-super-secret-jwt-key-change-in-production
|
||||
UPLOAD_PATH: /app/uploads
|
||||
MAX_FILE_SIZE: 5242880
|
||||
|
||||
@@ -5,7 +5,7 @@ services:
|
||||
container_name: rezepte-mysql
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_DATABASE: rezepte_klaus
|
||||
MYSQL_DATABASE: rezepte
|
||||
MYSQL_USER: rezepte_user
|
||||
MYSQL_PASSWORD: rezepte_pass
|
||||
ports:
|
||||
@@ -30,7 +30,7 @@ services:
|
||||
environment:
|
||||
NODE_ENV: production
|
||||
PORT: 3001
|
||||
DATABASE_URL: mysql://rezepte_user:rezepte_pass@mysql:3306/rezepte_klaus
|
||||
DATABASE_URL: mysql://rezepte_user:rezepte_pass@mysql:3306/rezepte
|
||||
JWT_SECRET: your-super-secret-jwt-key-change-in-production
|
||||
UPLOAD_PATH: /app/uploads
|
||||
MAX_FILE_SIZE: 5242880
|
||||
@@ -87,7 +87,7 @@ services:
|
||||
- rezepte-network
|
||||
environment:
|
||||
DB_HOST: mysql
|
||||
DB_NAME: rezepte_klaus
|
||||
DB_NAME: rezepte
|
||||
DB_USER: rezepte_user
|
||||
DB_PASS: rezepte_pass
|
||||
profiles:
|
||||
|
||||
@@ -4,7 +4,7 @@ services:
|
||||
container_name: rezepte-mysql-prod
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MYSQL_DATABASE: rezepte_klaus
|
||||
MYSQL_DATABASE: rezepte
|
||||
MYSQL_USER: rezepte_user
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-change_this_password}
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-change_this_root_password}
|
||||
@@ -32,7 +32,7 @@ services:
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- DATABASE_URL=mysql://rezepte_user:${MYSQL_PASSWORD:-change_this_password}@mysql:3306/rezepte_klaus
|
||||
- DATABASE_URL=mysql://rezepte_user:${MYSQL_PASSWORD:-change_this_password}@mysql:3306/rezepte
|
||||
- JWT_SECRET=${JWT_SECRET:-change_this_jwt_secret_min_32_characters}
|
||||
- CORS_ORIGIN=${CORS_ORIGIN:-http://localhost}
|
||||
- PORT=3001
|
||||
|
||||
@@ -4,7 +4,7 @@ services:
|
||||
container_name: rezepte-mysql-prod
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MYSQL_DATABASE: rezepte_klaus
|
||||
MYSQL_DATABASE: rezepte
|
||||
MYSQL_USER: rezepte_user
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-change_this_password}
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-change_this_root_password}
|
||||
@@ -24,12 +24,12 @@ services:
|
||||
|
||||
backend:
|
||||
# Use pre-built image from registry instead of building
|
||||
image: ${BACKEND_IMAGE:-ghcr.io/your-username/rezepte-klaus-backend:latest}
|
||||
image: ${BACKEND_IMAGE:-ghcr.io/your-username/rezepte-backend:latest}
|
||||
container_name: rezepte-backend-prod
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- DATABASE_URL=mysql://rezepte_user:${MYSQL_PASSWORD:-change_this_password}@mysql:3306/rezepte_klaus
|
||||
- DATABASE_URL=mysql://rezepte_user:${MYSQL_PASSWORD:-change_this_password}@mysql:3306/rezepte
|
||||
- JWT_SECRET=${JWT_SECRET:-change_this_jwt_secret_min_32_characters}
|
||||
- CORS_ORIGIN=${CORS_ORIGIN:-http://localhost}
|
||||
- PORT=3001
|
||||
@@ -52,7 +52,7 @@ services:
|
||||
|
||||
frontend:
|
||||
# Use pre-built image from registry instead of building
|
||||
image: ${FRONTEND_IMAGE:-ghcr.io/your-username/rezepte-klaus-frontend:latest}
|
||||
image: ${FRONTEND_IMAGE:-ghcr.io/your-username/rezepte-frontend:latest}
|
||||
container_name: rezepte-frontend-prod
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
|
||||
@@ -47,12 +47,12 @@ services:
|
||||
|
||||
backend:
|
||||
# Use pre-built image from registry instead of building
|
||||
image: ${BACKEND_IMAGE:-ghcr.io/your-username/rezepte-klaus-backend:latest}
|
||||
image: ${BACKEND_IMAGE:-ghcr.io/your-username/rezepte-backend:latest}
|
||||
container_name: rezepte-backend-prod
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- DATABASE_URL=mysql://rezepte_user:${MYSQL_REZEPTE_PASSWORD}@${MYSQL_HOST:-mysql}:${MYSQL_PORT:-3306}/rezepte_klaus
|
||||
- DATABASE_URL=mysql://rezepte_user:${MYSQL_REZEPTE_PASSWORD}@${MYSQL_HOST:-mysql}:${MYSQL_PORT:-3306}/rezepte
|
||||
- CORS_ORIGIN=https://rezepte.${DOMAIN}
|
||||
- PORT=3001
|
||||
volumes:
|
||||
@@ -83,7 +83,7 @@ services:
|
||||
|
||||
frontend:
|
||||
# Use pre-built image from registry instead of building
|
||||
image: ${FRONTEND_IMAGE:-ghcr.io/your-username/rezepte-klaus-frontend:latest}
|
||||
image: ${FRONTEND_IMAGE:-ghcr.io/your-username/rezepte-frontend:latest}
|
||||
container_name: rezepte-frontend-prod
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
|
||||
@@ -49,7 +49,7 @@ services:
|
||||
container_name: rezepte-mysql-prod
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MYSQL_DATABASE: rezepte_klaus
|
||||
MYSQL_DATABASE: rezepte
|
||||
MYSQL_USER: rezepte_user
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-change_this_password}
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-change_this_root_password}
|
||||
@@ -69,12 +69,12 @@ services:
|
||||
|
||||
backend:
|
||||
# Use pre-built image from registry instead of building
|
||||
image: ${BACKEND_IMAGE:-ghcr.io/your-username/rezepte-klaus-backend:latest}
|
||||
image: ${BACKEND_IMAGE:-ghcr.io/your-username/rezepte-backend:latest}
|
||||
container_name: rezepte-backend-prod
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- DATABASE_URL=mysql://rezepte_user:${MYSQL_PASSWORD:-change_this_password}@mysql:3306/rezepte_klaus
|
||||
- DATABASE_URL=mysql://rezepte_user:${MYSQL_PASSWORD:-change_this_password}@mysql:3306/rezepte
|
||||
- CORS_ORIGIN=https://rezepte.${DOMAIN}
|
||||
- PORT=3001
|
||||
volumes:
|
||||
@@ -107,7 +107,7 @@ services:
|
||||
|
||||
frontend:
|
||||
# Use pre-built image from registry instead of building
|
||||
image: ${FRONTEND_IMAGE:-ghcr.io/your-username/rezepte-klaus-frontend:latest}
|
||||
image: ${FRONTEND_IMAGE:-ghcr.io/your-username/rezepte-frontend:latest}
|
||||
container_name: rezepte-frontend-prod
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
|
||||
@@ -6,7 +6,7 @@ services:
|
||||
restart: always
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: rezepte123
|
||||
MYSQL_DATABASE: rezepte_klaus
|
||||
MYSQL_DATABASE: rezepte
|
||||
MYSQL_USER: rezepte_user
|
||||
MYSQL_PASSWORD: rezepte_pass
|
||||
ports:
|
||||
@@ -32,7 +32,7 @@ services:
|
||||
- rezepte_network
|
||||
environment:
|
||||
DB_HOST: mysql
|
||||
DB_NAME: rezepte_klaus
|
||||
DB_NAME: rezepte
|
||||
DB_USER: rezepte_user
|
||||
DB_PASS: rezepte_pass
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${GREEN}Rezepte Klaus - Docker Build & Deploy Script${NC}"
|
||||
echo -e "${GREEN}Rezepte - Docker Build & Deploy Script${NC}"
|
||||
echo "=================================================="
|
||||
|
||||
# Überprüfe ob Docker läuft
|
||||
|
||||
@@ -6,7 +6,7 @@ YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${GREEN}Rezepte Klaus - Docker Stop Script${NC}"
|
||||
echo -e "${GREEN}Rezepte - Docker Stop Script${NC}"
|
||||
echo "==========================================="
|
||||
|
||||
# Stoppe alle Services
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Nginx Configuration for Rezepte Klaus
|
||||
# Place this in /etc/nginx/sites-available/rezepte-klaus
|
||||
# Then: sudo ln -s /etc/nginx/sites-available/rezepte-klaus /etc/nginx/sites-enabled/
|
||||
# Nginx Configuration for Rezepte
|
||||
# Place this in /etc/nginx/sites-available/rezepte
|
||||
# Then: sudo ln -s /etc/nginx/sites-available/rezepte /etc/nginx/sites-enabled/
|
||||
|
||||
# Redirect HTTP to HTTPS
|
||||
server {
|
||||
@@ -132,6 +132,6 @@ server {
|
||||
}
|
||||
|
||||
# Logging
|
||||
access_log /var/log/nginx/rezepte-klaus.access.log;
|
||||
error_log /var/log/nginx/rezepte-klaus.error.log;
|
||||
access_log /var/log/nginx/rezepte.access.log;
|
||||
error_log /var/log/nginx/rezepte.error.log;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
# Database
|
||||
DATABASE_URL="mysql://rezepte_user:rezepte_pass@localhost:3307/rezepte_klaus"
|
||||
DATABASE_URL="mysql://rezepte_user:rezepte_pass@localhost:3307/rezepte"
|
||||
|
||||
# Server
|
||||
PORT=3001
|
||||
|
||||
@@ -3,7 +3,7 @@ NODE_ENV=development
|
||||
PORT=3001
|
||||
|
||||
# Database
|
||||
DATABASE_URL="mysql://rezepte_user:rezepte_pass@localhost:3307/rezepte_klaus"
|
||||
DATABASE_URL="mysql://rezepte_user:rezepte_pass@localhost:3307/rezepte"
|
||||
|
||||
# JWT Secret (change in production!)
|
||||
JWT_SECRET=your-super-secret-jwt-key-change-in-production
|
||||
|
||||
2
nodejs-version/backend/dist/config/config.js
vendored
2
nodejs-version/backend/dist/config/config.js
vendored
@@ -10,7 +10,7 @@ exports.config = {
|
||||
port: process.env.PORT || 3001,
|
||||
nodeEnv: process.env.NODE_ENV || 'development',
|
||||
database: {
|
||||
url: process.env.DATABASE_URL || 'mysql://rezepte_user:rezepte_pass@localhost:3307/rezepte_klaus',
|
||||
url: process.env.DATABASE_URL || 'mysql://rezepte_user:rezepte_pass@localhost:3307/rezepte',
|
||||
},
|
||||
jwt: {
|
||||
secret: process.env.JWT_SECRET || 'your-super-secret-jwt-key',
|
||||
|
||||
2
nodejs-version/backend/dist/routes/health.js
vendored
2
nodejs-version/backend/dist/routes/health.js
vendored
@@ -5,7 +5,7 @@ const router = (0, express_1.Router)();
|
||||
router.get('/', (req, res) => {
|
||||
res.json({
|
||||
success: true,
|
||||
message: 'Rezepte Klaus API is running!',
|
||||
message: 'Rezepte API is running!',
|
||||
timestamp: new Date().toISOString(),
|
||||
environment: process.env.NODE_ENV,
|
||||
});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "rezepte-backend",
|
||||
"version": "1.0.0",
|
||||
"description": "Rezepte Klaus - Node.js Backend",
|
||||
"description": "Rezepte - Node.js Backend",
|
||||
"main": "dist/app.js",
|
||||
"scripts": {
|
||||
"dev": "tsx watch src/app.ts",
|
||||
@@ -53,6 +53,6 @@
|
||||
"typescript",
|
||||
"express"
|
||||
],
|
||||
"author": "Klaus",
|
||||
"author": "Recipe Admin",
|
||||
"license": "MIT"
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ export const config = {
|
||||
nodeEnv: process.env.NODE_ENV || 'development',
|
||||
|
||||
database: {
|
||||
url: process.env.DATABASE_URL || 'mysql://rezepte_user:rezepte_pass@localhost:3307/rezepte_klaus',
|
||||
url: process.env.DATABASE_URL || 'mysql://rezepte_user:rezepte_pass@localhost:3307/rezepte',
|
||||
},
|
||||
|
||||
jwt: {
|
||||
|
||||
@@ -6,7 +6,7 @@ const router = Router();
|
||||
router.get('/', (req: Request, res: Response) => {
|
||||
res.json({
|
||||
success: true,
|
||||
message: 'Rezepte Klaus API is running!',
|
||||
message: 'Rezepte API is running!',
|
||||
timestamp: new Date().toISOString(),
|
||||
environment: process.env.NODE_ENV,
|
||||
});
|
||||
|
||||
@@ -8,7 +8,7 @@ const Header: React.FC = () => {
|
||||
<div className="container">
|
||||
<div className="nav-brand">
|
||||
<Link to="/" className="brand-link">
|
||||
<h1>🍳 Rezepte Klaus</h1>
|
||||
<h1>🍳 Rezepte</h1>
|
||||
</Link>
|
||||
</div>
|
||||
<nav className="nav-menu">
|
||||
|
||||
@@ -56,8 +56,8 @@ echo "MYSQL_ROOT_PASSWORD=super_secure_root_password"
|
||||
echo "DOCKER_REGISTRY=docker.citysensor.de"
|
||||
echo "DOCKER_USERNAME=your_username"
|
||||
echo "DOCKER_PASSWORD=your_password"
|
||||
echo "BACKEND_IMAGE=docker.citysensor.de/rezepte-klaus-backend:latest"
|
||||
echo "FRONTEND_IMAGE=docker.citysensor.de/rezepte-klaus-frontend:latest"
|
||||
echo "BACKEND_IMAGE=docker.citysensor.de/rezepte-backend:latest"
|
||||
echo "FRONTEND_IMAGE=docker.citysensor.de/rezepte-frontend:latest"
|
||||
echo ""
|
||||
|
||||
echo "✅ After setup, your app will be available at:"
|
||||
|
||||
@@ -7,7 +7,7 @@ RED='\033[0;31m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${GREEN}Rezepte Klaus - Development Setup${NC}"
|
||||
echo -e "${GREEN}Rezepte - Development Setup${NC}"
|
||||
echo "================================================"
|
||||
|
||||
# Node.js Version prüfen
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🐧 Setting up Rezepte Klaus for Remote Development on Linux"
|
||||
echo "🐧 Setting up Rezepte for Remote Development on Linux"
|
||||
echo "=========================================================="
|
||||
|
||||
# Check if we're on a Linux system
|
||||
@@ -90,7 +90,7 @@ services:
|
||||
container_name: rezepte-mysql-dev
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- MYSQL_DATABASE=rezepte_klaus
|
||||
- MYSQL_DATABASE=rezepte
|
||||
- MYSQL_USER=rezepte
|
||||
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
||||
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||
@@ -119,7 +119,7 @@ services:
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
- DATABASE_URL=mysql://rezepte:${MYSQL_PASSWORD}@mysql:3306/rezepte_klaus
|
||||
- DATABASE_URL=mysql://rezepte:${MYSQL_PASSWORD}@mysql:3306/rezepte
|
||||
- CORS_ORIGIN=${CORS_ORIGIN:-*}
|
||||
- PORT=3001
|
||||
ports:
|
||||
@@ -198,7 +198,7 @@ cat > start-development.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🚀 Starting Rezepte Klaus Development Environment on Linux"
|
||||
echo "🚀 Starting Rezepte Development Environment on Linux"
|
||||
echo "========================================================="
|
||||
|
||||
# Load environment variables
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🚀 Starting Rezepte Klaus Development Environment on Linux"
|
||||
echo "🚀 Starting Rezepte Development Environment on Linux"
|
||||
echo "========================================================="
|
||||
|
||||
# Load environment variables
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "🌐 Starting Rezepte Klaus for Local Network Access"
|
||||
echo "🌐 Starting Rezepte for Local Network Access"
|
||||
echo "=================================================="
|
||||
|
||||
# Function to detect host IP
|
||||
|
||||
Reference in New Issue
Block a user