Erste Compose Files und Scripte zum deployen. Lokal wird mit docker-compose.overwrite.yml gestartet

rapp/pick-what-you-like
Robert Rapp 2025-02-07 02:13:26 +01:00
parent 1c5d9359ff
commit 2dbc359bd2
10 changed files with 240 additions and 1 deletions

0
apps/README.md Normal file
View File

@ -1 +1 @@
Subproject commit 0a0ce37688b0ed26aa5003c9d4deafbb1835fec1
Subproject commit 1ef8c2a309d5905eae19d362d57c8dac9996f45f

View File

@ -0,0 +1,63 @@
##
## DIESES COMPOSE FILE IST FÜR DIE LOKALE ENTWICKLUNG MITTELS DOCKER
##
## Der Inhalt von frontend und von backend wird über ein volume eingebunden, dass
## bedeutet Änderungen innerhalb der Projektordner ./frontend/src und ./backend/src
## Ändern direkt die Werte innerhalb des Containers wie z.B. das Austauschen einer Grafik.
##
## Datenbank ebenfalls lokal und KEIN reverse-Proxy (traefik)
## Image der DB ist auf ARM Archtektur (Apple Silicon) ausgelegt
##
services:
mariadb:
image: mariadb:latest
container_name: local_mariadb
command: --bind-address=0.0.0.0
environment:
- ALLOW_EMPTY_PASSWORD
- MARIADB_USER=mindboost
- MARIADB_DATABASE=mindboost
- MARIADB_PASSWORD=mindboost
- MARIADB_ROOT_PASSWORD=root-mindboost
networks:
- backend
frontend:
build:
context: ./frontend/src
dockerfile: Dockerfile.dev
container_name: local_frontend
volumes:
- ./frontend/src:/app
- /app/node_modules
ports:
- "3000:3000"
networks:
- backend
environment:
NODE_ENV: development
backend:
build:
context: ./backend/src
dockerfile: Dockerfile.dev
container_name: local_backend
ports:
- "8000:8000"
- "5173:5173"
volumes:
- ./backend/src:/var/www
networks:
- backend
depends_on:
- mariadb
adminer:
image: adminer
container_name: local_adminer
restart: always
ports:
- 8080:8080
networks:
- backend
networks:
backend:
external: false

View File

@ -0,0 +1,71 @@
# Stack for Mindboost Webapp
services:
prod-mariadb:
image: mariadb:latest
container_name: prod-mariadb
hostname: mariadb
command: --bind-address=0.0.0.0
env_file:
- ../config/.env.db
networks:
- ${BACKEND_NETWORK}
volumes:
- ../volumes/daten/mariadb:/var/lib/mysql
prod-redis:
image: redis:alpine
container_name: prod-redis
hostname: redis
networks:
- ${BACKEND_NETWORK}
restart: unless-stopped
command: redis-server --appendonly yes --requirepass laravel-redis-passwort # Redis Passwort eingeben
volumes:
- ../volumes/daten/redis:/data
prod-frontend:
build:
context: ./frontend/src
dockerfile: Dockerfile
container_name: prod-frontend
networks:
- ${BACKEND_NETWORK}
- ${TRAEFIK_NETWORK}
env_file:
- ../config/.env.frontend
- ../config/.env.traefik
labels:
- "traefik.enable=${TRAEFIK_ENABLE}"
- "traefik.http.routers.prod-frontend.entrypoints=${TRAEFIK_ROUTER_FRONTEND_ENTRYPOINT}"
- "traefik.http.routers.prod-frontend.rule=${TRAEFIK_ROUTER_FRONTEND_RULE}"
- "traefik.http.routers.prod-frontend.tls=${TRAEFIK_ROUTER_FRONTEND_TLS}"
- "traefik.http.routers.prod-frontend.tls.certresolver=${TRAEFIK_ROUTER_FRONTEND_CERTRESOLVER}"
- "traefik.http.routers.prod-frontend.tls.domains[0].main=${TRAEFIK_ROUTER_FRONTEND_TLS_DOMAIN_MAIN}"
- "traefik.http.routers.prod-frontend.tls.domains[0].sans=${TRAEFIK_ROUTER_FRONTEND_TLS_DOMAIN_SANS}"
- "traefik.http.services.prod-frontend.loadbalancer.server.port=${TRAEFIK_SERVICE_FRONTEND_PORT}"
- "traefik.docker.network=${TRAEFIK_NETWORK}"
prod-backend:
build:
context: ./backend/src
dockerfile: Dockerfile
env_file:
- ../config/.env.backend
- ../config/.env.traefik
labels:
- "traefik.enable=${TRAEFIK_ENABLE}"
- "traefik.http.routers.prod-backend.entrypoints=${TRAEFIK_ROUTER_BACKEND_ENTRYPOINT}"
- "traefik.http.routers.prod-backend.rule=${TRAEFIK_ROUTER_BACKEND_RULE}"
- "traefik.http.routers.prod-backend.tls=${TRAEFIK_ROUTER_BACKEND_TLS}"
- "traefik.http.routers.prod-backend.tls.certresolver=${TRAEFIK_ROUTER_BACKEND_CERTRESOLVER}"
- "traefik.http.routers.prod-backend.tls.domains[0].main=${TRAEFIK_ROUTER_BACKEND_TLS_DOMAIN_MAIN}"
- "traefik.http.services.prod-backend.loadbalancer.server.port=${TRAEFIK_SERVICE_BACKEND_PORT}"
- "traefik.docker.network=${TRAEFIK_NETWORK}"
networks:
- ${BACKEND_NETWORK}
- ${TRAEFIK_NETWORK}
depends_on:
- prod-mariadb
networks:
prod-backend:
external: false
proxy:
external: true

49
config/.env.backend Normal file
View File

@ -0,0 +1,49 @@
# ----------------------------------
# Datenbank (MariaDB)
# ----------------------------------
MARIADB_USER=mindboost
MARIADB_DATABASE=mindboost
MARIADB_PASSWORD=1stronges-mindboostdb-passwort
MARIADB_ROOT_PASSWORD=1stronges-passwort-fuer-diedb
# ----------------------------------
# Redis
# ----------------------------------
REDIS_PASSWORD=laravel-redis-passwort
REDIS_PORT=6379
# ----------------------------------
# Vue Frontend (Nuxt.js)
# ----------------------------------
VUE_APP_BACKEND_HOST_ADDRESS=https://dev.b.mindboost.team
VUE_FRONTEND_PORT=3001
VUE_INTERNAL_PORT=3000
VUE_FRONTEND_DOMAIN_1=app.mindboost.team
VUE_FRONTEND_DOMAIN_2=mindboost.app
# ----------------------------------
# Laravel Backend
# ----------------------------------
BACKEND_NETWORK=backend
APP_NAME="mindboost backend - Compose Deployment"
APP_URL=https://b.mindboost.team
LARAVEL_PORT=8000
LARAVEL_VITE_PORT=5173
DB_HOST=mariadb
DB_PORT=3306
DB_PASSWORD=1stronges-mindboostdb-passwort
DB_USERNAME=mindboost
DB_DATABASE=mindboost
LARAVEL_DOMAIN=b.mindboost.team
JWT_SECRET=zMtO8sgsnc4UixWSsYWE1pK9EdpNLzxNSoIPlUpTe6dDlarM3bu4cwM80tH3jA0F
# ----------------------------------
# Traefik
# ----------------------------------
TRAEFIK_CERT_RESOLVER=http_resolver
TRAEFIK_ENTRYPOINT=websecure
TRAEFIK_NETWORK=proxy
# ----------------------------------
# Adminer
# ----------------------------------
ADMINER_PORT=8080

8
config/.env.db Normal file
View File

@ -0,0 +1,8 @@
# ----------------------------------
# Datenbank (MariaDB)
# ----------------------------------
MARIADB_USER=mindboost
MARIADB_DATABASE=mindboost
MARIADB_PASSWORD=1stronges-mindboostdb-passwort
MARIADB_ROOT_PASSWORD=1stronges-passwort-fuer-diedb
ADMINER_PORT=8000

1
config/.env.frontend Normal file
View File

@ -0,0 +1 @@
DB_HOST= BLALBLAB

1
config/.env.shared Normal file
View File

@ -0,0 +1 @@
DB_HOST= BLALBLAB

24
config/.env.traefik Normal file
View File

@ -0,0 +1,24 @@
# ----------------------------------
# Traefik
# ----------------------------------
# Allgemein
TRAEFIK_ENABLE=true
TRAEFIK_NETWORK=proxy
# Backend
TRAEFIK_ROUTER_BACKEND_ENTRYPOINT=websecure
TRAEFIK_ROUTER_BACKEND_RULE=Host(`b.mindboost.team`)
TRAEFIK_ROUTER_BACKEND_TLS=true
TRAEFIK_ROUTER_BACKEND_CERTRESOLVER=http_resolver
TRAEFIK_ROUTER_BACKEND_TLS_DOMAIN_MAIN=b.mindboost.team
TRAEFIK_SERVICE_BACKEND_PORT=8000
# Frontend
TRAEFIK_ROUTER_FRONTEND_ENTRYPOINT=websecure
TRAEFIK_ROUTER_FRONTEND_RULE=Host(`app.mindboost.team` || `mindboost.app`)
TRAEFIK_ROUTER_FRONTEND_TLS=true
TRAEFIK_ROUTER_FRONTEND_CERTRESOLVER=http_resolver
TRAEFIK_ROUTER_FRONTEND_TLS_DOMAIN_MAIN=app.mindboost.team
TRAEFIK_ROUTER_FRONTEND_TLS_DOMAIN_SANS=mindboost.app
TRAEFIK_SERVICE_FRONTEND_PORT=3000

22
scripts/deploy-app.sh Executable file
View File

@ -0,0 +1,22 @@
#!/bin/bash
set -e
echo "Prüfe, ob Traefik läuft..."
if ! docker ps --format '{{.Names}}' | grep -q 'traefik'; then
echo "Traefik läuft nicht."
read -p "Möchtest du die lokale Version zum Debuggen (docker-compose.overwrite.yml) starten? (y/n): " answer
if [[ "$answer" =~ ^[Yy]$ ]]; then
echo "Starte lokale Version..."
docker compose -f ../apps/docker-compose.overwrite.yml up -d
else
echo "Deployment abgebrochen."
exit 1
fi
else
echo "Traefik läuft."
echo "Starte Deployment mit docker-compose.prod.yml..."
docker compose -f ../apps/docker-compose.prod.yml up -d
fi
echo "Deployment abgeschlossen."