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