Files
Rezepte/docker-compose.yml

114 lines
2.4 KiB
YAML

services:
# MySQL Database
mysql:
image: mysql:8.0
container_name: rezepte_mysql
restart: always
profiles:
- default
environment:
MYSQL_ROOT_PASSWORD: rezepte123
MYSQL_DATABASE: rezepte
MYSQL_USER: rezepte_user
MYSQL_PASSWORD: rezepte_pass
ports:
- "3307:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./sql-init:/docker-entrypoint-initdb.d
networks:
- rezepte_network
# PHP Application with Apache
php-app:
build: .
container_name: rezepte_app
restart: always
profiles:
- legacy
ports:
- "8082:80"
volumes:
- .:/var/www/html
depends_on:
- mysql
networks:
- rezepte_network
environment:
DB_HOST: mysql
DB_NAME: rezepte
DB_USER: rezepte_user
DB_PASS: rezepte_pass
# phpMyAdmin
phpmyadmin:
image: phpmyadmin:latest
container_name: rezepte_phpmyadmin
restart: always
profiles:
- admin
ports:
- "8083:80"
environment:
PMA_HOST: mysql
PMA_USER: rezepte_user
PMA_PASSWORD: rezepte_pass
MYSQL_ROOT_PASSWORD: rezepte123
depends_on:
- mysql
networks:
- rezepte_network
# Node.js Backend API
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: rezepte-backend
profiles:
- default
environment:
NODE_ENV: production
PORT: 3001
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
# CORS_ORIGIN: Restrict in production (example: http://esprimo:3000,http://localhost:3000)
CORS_ORIGIN: "*"
ports:
- "3001:3001"
volumes:
- uploads_data:/app/uploads
- ./uploads:/app/legacy-uploads:ro
networks:
- rezepte_network
depends_on:
- mysql
restart: unless-stopped
# Frontend (React + Vite build served by nginx)
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
args:
VITE_API_URL: http://localhost:3001/api
container_name: rezepte-frontend
profiles:
- default
ports:
- "3000:80"
networks:
- rezepte_network
depends_on:
- backend
restart: unless-stopped
volumes:
mysql_data:
uploads_data:
networks:
rezepte_network:
driver: bridge