Compare commits
11 Commits
dff86e0486
...
c9b55aa0ed
Author | SHA1 | Date | |
---|---|---|---|
c9b55aa0ed | |||
b8a6abe100 | |||
2930854814 | |||
d4abe64b0b | |||
1d04638be8 | |||
02f20a277c | |||
0f08168947 | |||
c976fea1c3 | |||
e981a365cc | |||
42b71394df | |||
a9143ae8f8 |
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -4,3 +4,6 @@
|
||||
[submodule "apps/frontend/src"]
|
||||
path = apps/frontend/src
|
||||
url = https://gitea.mindboost.team/Mindboost/mindboost-webapp.git
|
||||
[submodule "apps/tools/invoiceninja/dockerfiles"]
|
||||
path = apps/tools/invoiceninja/dockerfiles
|
||||
url = https://github.com/invoiceninja/dockerfiles.git
|
||||
|
@@ -111,7 +111,7 @@ Each service's `docker-compose.yml` file references the appropriate `.env` file
|
||||
services:
|
||||
backend:
|
||||
env_file:
|
||||
- ../../env/${ENVIRONMENT}/backend.env
|
||||
- ../../env/${ENVIRONMENT:-development}/backend.env
|
||||
```
|
||||
|
||||
## Networking
|
||||
|
36
apps/backend/database/docker-compose.yml
Normal file
36
apps/backend/database/docker-compose.yml
Normal file
@@ -0,0 +1,36 @@
|
||||
### Database (./apps/database/docker-compose.yml)
|
||||
# - [ ] Create a MariaDB service
|
||||
# - [ ] Configure volumes for persistent storage of database data
|
||||
secrets:
|
||||
mariadb_root:
|
||||
file: ${ROOT_DIR:-../../..}/env/secrets.env
|
||||
services:
|
||||
database:
|
||||
secrets:
|
||||
- mariadb_root
|
||||
profiles: ["all", "database", "backend", "app"]
|
||||
image: mariadb:latest
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-mariadb-${ENVIRONMENT:-development}
|
||||
command: --bind-address=0.0.0.0
|
||||
env_file:
|
||||
- ${ROOT_DIR:-../../..}/env/${ENVIRONMENT:-development}/.env.database
|
||||
volumes:
|
||||
- backend_mariadb_data:/var/lib/mysql
|
||||
- ./healthcheck.sh:/usr/local/bin/healthcheck.sh
|
||||
networks:
|
||||
- backend
|
||||
- database
|
||||
healthcheck:
|
||||
test: ["CMD", "bash", "/usr/local/bin/healthcheck.sh"]
|
||||
interval: 1s
|
||||
retries: 3
|
||||
# TODO: ADMINER IS NOT PREPARED FOR TRAEFIK
|
||||
networks:
|
||||
backend:
|
||||
name: ${INFRASTRUCTURE_LABEL:-default}-backend-${ENVIRONMENT:-development}
|
||||
database:
|
||||
name: ${INFRASTRUCTURE_LABEL:-default}-database-${ENVIRONMENT:-development}
|
||||
volumes:
|
||||
backend_mariadb_data:
|
||||
driver: local
|
||||
name: ${INFRASTRUCTURE_LABEL:-default}_mariadb_${ENVIRONMENT:-development}
|
33
apps/backend/database/healthcheck.sh
Executable file
33
apps/backend/database/healthcheck.sh
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Credentials from environment variables
|
||||
MYSQL_USER="${MARIADB_USER:-default}"
|
||||
MYSQL_PASSWORD="${MARIADB_PASSWORD:-default}"
|
||||
MYSQL_HOST="127.0.0.1"
|
||||
|
||||
ROOT_PASSWORD=$(cat /run/secrets/mariadb_root)
|
||||
|
||||
echo "🔑 READ ROOT PASSWORD FROM SECRETS"
|
||||
|
||||
# Check if MariaDB is running
|
||||
if ! mariadb -h "$MYSQL_HOST" -u root -p"$ROOT_PASSWORD" -e "SELECT 1;" &>/dev/null; then
|
||||
echo "❌ MariaDB is not responding"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if a specific user exists
|
||||
USER_EXISTS=$(mariadb -h "$MYSQL_HOST" -u root -p"$ROOT_PASSWORD" -e "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = '${MYSQL_USER}');" | tail -n 1)
|
||||
|
||||
if [ "$USER_EXISTS" -ne 1 ]; then
|
||||
echo "❌ User '${MYSQL_USER}' does not exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if the user can log in with the provided password
|
||||
if ! mariadb -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" -e "SELECT 1;" &>/dev/null; then
|
||||
echo "❌ User '${MYSQL_USER}' exists, but authentication failed with the provided password."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ MariaDB is healthy"
|
||||
exit 0
|
74
apps/backend/database/init-user.sh
Normal file
74
apps/backend/database/init-user.sh
Normal file
@@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
echo "🔄 Running MariaDB initialization script..."
|
||||
|
||||
# Wait until MariaDB is ready
|
||||
until mysqladmin ping -h localhost --silent; do
|
||||
sleep 2
|
||||
done
|
||||
|
||||
echo "✅ MariaDB is ready. Checking root credentials..."
|
||||
|
||||
# Try logging in with the root password
|
||||
if ! mysql -u root -p"$MARIADB_ROOT_PASSWORD" -e "SELECT 1;" &>/dev/null; then
|
||||
echo "❌ ERROR: Root password in .env does not match the database!"
|
||||
echo "🔄 Attempting to reset the root password..."
|
||||
|
||||
# Stop MariaDB safely
|
||||
echo "⚠️ Stopping MariaDB..."
|
||||
service mysql stop || pkill mysqld
|
||||
sleep 5
|
||||
|
||||
# Start MariaDB in recovery mode
|
||||
echo "🚀 Starting MariaDB in recovery mode..."
|
||||
mysqld_safe --skip-grant-tables --skip-networking &
|
||||
sleep 5
|
||||
|
||||
# Reset root password
|
||||
echo "🔐 Resetting root password..."
|
||||
mysql -u root <<EOSQL
|
||||
ALTER USER 'root'@'localhost' IDENTIFIED BY '${MARIADB_ROOT_PASSWORD}';
|
||||
ALTER USER 'root'@'%' IDENTIFIED BY '${MARIADB_ROOT_PASSWORD}';
|
||||
FLUSH PRIVILEGES;
|
||||
EOSQL
|
||||
|
||||
echo "✅ Root password reset successfully!"
|
||||
|
||||
# Restart MariaDB in normal mode
|
||||
echo "🔄 Restarting MariaDB in production mode..."
|
||||
service mysql stop || pkill mysqld
|
||||
sleep 3
|
||||
mysqld_safe &
|
||||
sleep 5
|
||||
else
|
||||
echo "✅ Root password is correct."
|
||||
fi
|
||||
|
||||
# Check if the database exists
|
||||
DB_EXISTS=$(mysql -u root -p"$MARIADB_ROOT_PASSWORD" -e "SHOW DATABASES LIKE '${MARIADB_DATABASE}';" | grep "${MARIADB_DATABASE}" > /dev/null; echo "$?")
|
||||
|
||||
if [ "$DB_EXISTS" -ne 0 ]; then
|
||||
echo "⚠️ Database '${MARIADB_DATABASE}' does not exist. Creating it now..."
|
||||
mysql -u root -p"$MARIADB_ROOT_PASSWORD" -e "CREATE DATABASE ${MARIADB_DATABASE};"
|
||||
echo "✅ Database '${MARIADB_DATABASE}' created!"
|
||||
else
|
||||
echo "✅ Database '${MARIADB_DATABASE}' already exists."
|
||||
fi
|
||||
|
||||
# Ensure the database user exists and has the correct password
|
||||
USER_EXISTS=$(mysql -u root -p"$MARIADB_ROOT_PASSWORD" -e "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = '${MARIADB_USER}');" | tail -n 1)
|
||||
|
||||
if [ "$USER_EXISTS" -eq 0 ]; then
|
||||
echo "⚠️ User '${MARIADB_USER}' does not exist. Creating it now..."
|
||||
mysql -u root -p"$MARIADB_ROOT_PASSWORD" <<EOSQL
|
||||
CREATE USER '${MARIADB_USER}'@'%' IDENTIFIED BY '${MARIADB_PASSWORD}';
|
||||
GRANT ALL PRIVILEGES ON ${MARIADB_DATABASE}.* TO '${MARIADB_USER}'@'%';
|
||||
FLUSH PRIVILEGES;
|
||||
EOSQL
|
||||
echo "✅ User '${MARIADB_USER}' created and granted access to '${MARIADB_DATABASE}'!"
|
||||
else
|
||||
echo "✅ User '${MARIADB_USER}' already exists. Ensuring correct password."
|
||||
mysql -u root -p"$MARIADB_ROOT_PASSWORD" -e "ALTER USER '${MARIADB_USER}'@'%' IDENTIFIED BY '${MARIADB_PASSWORD}'; FLUSH PRIVILEGES;"
|
||||
echo "✅ Password for '${MARIADB_USER}' updated!"
|
||||
fi
|
||||
|
||||
echo "🎉 MariaDB initialization complete!"
|
48
apps/backend/docker-compose.overwrite.yml
Normal file
48
apps/backend/docker-compose.overwrite.yml
Normal file
@@ -0,0 +1,48 @@
|
||||
### Backend (./apps/backend/docker-compose.yml)
|
||||
include:
|
||||
- ./database/docker-compose.yml
|
||||
services:
|
||||
backend:
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-backend-laravel-${ENVIRONMENT:-development}
|
||||
profiles: ["laravel", "backend", "all", "app"]
|
||||
ports:
|
||||
- "${LARAVEL_PORT:-8000}:8000"
|
||||
- "${LARAVEL_VITE_PORT:-5173}:5173"
|
||||
env_file:
|
||||
- ../../env/${ENVIRONMENT:-development}/.env.backend
|
||||
volumes:
|
||||
- ./src/entrypoint.sh:/usr/local/bin/entrypoint.sh
|
||||
depends_on:
|
||||
- database
|
||||
build:
|
||||
context: ./src
|
||||
dockerfile: Dockerfile
|
||||
networks:
|
||||
- backend
|
||||
labels:
|
||||
- "traefik.enable=${TRAEFIK_ENABLE:-false}"
|
||||
- "traefik.http.routers.backend.entrypoints=${TRAEFIK_ENTRYPOINT}"
|
||||
- "traefik.http.routers.backend.rule=Host(`${BACKEND_DOMAIN}`)"
|
||||
- "traefik.http.routers.backend.tls=true"
|
||||
- "traefik.http.routers.backend.tls.certresolver=${TRAEFIK_CERT_RESOLVER}"
|
||||
- "traefik.http.routers.backend.tls.domains[0].main=`${BACKEND_DOMAIN}`"
|
||||
- "traefik.http.services.backend.loadbalancer.server.port=${BACKEND_PORT:-8000}"
|
||||
- "traefik.docker.network=${TRAEFIK_NETWORK}"
|
||||
backend-redis:
|
||||
image: redis:alpine
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-backend-redis-${ENVIRONMENT:-development}
|
||||
profiles: ["redis", "backend", "all"]
|
||||
env_file:
|
||||
- ../../env/${ENVIRONMENT:-development}/.env.backend
|
||||
restart: unless-stopped
|
||||
command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD:-laravel-redis-passwort} # Redis Passwort eingeben
|
||||
volumes:
|
||||
- backend_redis_data:/data
|
||||
networks:
|
||||
- backend
|
||||
volumes:
|
||||
backend_redis_data:
|
||||
driver: local
|
||||
name: "${INFRASTRUCTURE_LABEL}_backend_redis_data"
|
||||
|
||||
|
@@ -1,21 +1,23 @@
|
||||
### Backend (./apps/backend/docker-compose.yml)
|
||||
|
||||
include:
|
||||
- ./database/docker-compose.yml
|
||||
services:
|
||||
backend:
|
||||
container_name: ${INFRASTRUCTURE_LABEL}-laravel-${ENVIRONMENT}
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-backend-laravel-${ENVIRONMENT:-development}
|
||||
profiles: ["laravel", "backend", "all", "app"]
|
||||
env_file:
|
||||
- ../../env/.env.all
|
||||
- ../../env/${ENVIRONMENT}/.env.proxy
|
||||
- ../../env/${ENVIRONMENT}/.env.database
|
||||
- ../../env/${ENVIRONMENT}/.env.backend
|
||||
- ../../env/${ENVIRONMENT:-development}/.env.backend
|
||||
volumes:
|
||||
- ./src/entrypoint.sh:/usr/local/bin/entrypoint.sh
|
||||
depends_on:
|
||||
- database
|
||||
build:
|
||||
context: ./src
|
||||
dockerfile: Dockerfile
|
||||
networks:
|
||||
- backend
|
||||
labels:
|
||||
- "traefik.enable=${TRAEFIK_ENABLE}"
|
||||
- "traefik.enable=${TRAEFIK_ENABLE:-false}"
|
||||
- "traefik.http.routers.backend.entrypoints=${TRAEFIK_ENTRYPOINT}"
|
||||
- "traefik.http.routers.backend.rule=Host(`${BACKEND_DOMAIN}`)"
|
||||
- "traefik.http.routers.backend.tls=true"
|
||||
@@ -23,14 +25,21 @@ services:
|
||||
- "traefik.http.routers.backend.tls.domains[0].main=`${BACKEND_DOMAIN}`"
|
||||
- "traefik.http.services.backend.loadbalancer.server.port=${BACKEND_PORT:-8000}"
|
||||
- "traefik.docker.network=${TRAEFIK_NETWORK}"
|
||||
# Traefik-Crowdsec Stack
|
||||
backend-redis:
|
||||
image: redis:alpine
|
||||
container_name: ${INFRASTRUCTURE_LABEL}-laravelredis-${ENVIRONMENT}
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-backend-redis-${ENVIRONMENT:-development}
|
||||
profiles: ["redis", "backend", "all"]
|
||||
env_file:
|
||||
- ../../env/${ENVIRONMENT:-development}/.env.backend
|
||||
restart: unless-stopped
|
||||
command: redis-server --appendonly yes --requirepass laravel-redis-passwort # Redis Passwort eingeben
|
||||
command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD:-laravel-redis-passwort} # Redis Passwort eingeben
|
||||
volumes:
|
||||
- ../../volumes/backend/redis:/data
|
||||
networks:
|
||||
backend:
|
||||
- backend_redis_data:/data
|
||||
networks:
|
||||
- backend
|
||||
volumes:
|
||||
backend_redis_data:
|
||||
driver: local
|
||||
name: "${INFRASTRUCTURE_LABEL}_backend_redis_data"
|
||||
|
||||
|
||||
|
Submodule apps/backend/src updated: 0e3ecbb0a7...623a270948
@@ -1,39 +0,0 @@
|
||||
### Database (./apps/database/docker-compose.yml)
|
||||
# - [ ] Create a MariaDB service
|
||||
# - [ ] Configure volumes for persistent storage of database data
|
||||
# - [ ] Set up environment variables using the new structure (../../env/${ENVIRONMENT:-development}/database.env)
|
||||
# - [ ] Configure networking to allow connections from the backend service
|
||||
# - [ ] Set up regular backup jobs for the database
|
||||
# - [ ] Configure appropriate resource limits and restart policies
|
||||
services:
|
||||
database:
|
||||
profiles: ["all", "mariadb", "backend", "app"]
|
||||
image: mariadb:latest
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-mariadb-${ENVIRONMENT:-development}
|
||||
command: --bind-address=0.0.0.0
|
||||
env_file:
|
||||
- ../../env/.env.all
|
||||
- ../../env/${ENVIRONMENT:-development}/.env.backend
|
||||
- ../../env/${ENVIRONMENT:-development}/.env.proxy
|
||||
environment:
|
||||
- MARIADB_USER=${MARIADB_USER}
|
||||
- MARIADB_DATABASE=${MARIADB_DATABASE}
|
||||
- MARIADB_PASSWORD=${MARIADB_PASSWORD}
|
||||
- MARIADB_ROOT_PASSWORD=root-mindboost
|
||||
volumes:
|
||||
- ../../volumes/database/mariadb:/var/lib/mysql
|
||||
networks:
|
||||
- backend
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
||||
interval: 10s
|
||||
retries: 3
|
||||
adminer:
|
||||
profiles: ["all", "mariadb", "backend", "app"]
|
||||
image: adminer
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-adminer-${ENVIRONMENT:-development}
|
||||
restart: always
|
||||
ports:
|
||||
- 8082:8080
|
||||
networks:
|
||||
- backend
|
@@ -14,6 +14,9 @@
|
||||
## Stellen Sie sicher, dass die .env.all Datei im angegebenen Verzeichnis existiert und den ENVIRONMENT Wert enthält.
|
||||
##
|
||||
|
||||
configs:
|
||||
all:
|
||||
file: ../env/.env.all
|
||||
include:
|
||||
- path: ./proxy/docker-compose.yml
|
||||
env_file:
|
||||
@@ -23,7 +26,6 @@ include:
|
||||
env_file:
|
||||
- ../env/.env.all
|
||||
- ../env/${ENVIRONMENT:-development}/.env.frontend
|
||||
- ../env/${ENVIRONMENT:-development}/.env.proxy
|
||||
- path: ./backend/docker-compose.yml
|
||||
- path: ./database/docker-compose.yml
|
||||
- path: ./website/docker-compose.yml
|
||||
|
@@ -1,65 +0,0 @@
|
||||
##
|
||||
## 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
|
||||
volumes:
|
||||
- ../volumes/daten/mariadb:/var/lib/mysql
|
||||
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
|
@@ -1,107 +0,0 @@
|
||||
##
|
||||
## 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:
|
||||
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
|
||||
# Traefik-Crowdsec Stack
|
||||
crowdsec:
|
||||
extends:
|
||||
file: ./proxy/docker-compose.yml
|
||||
service: crowdsec
|
||||
networks:
|
||||
- ${TRAEFIK_NETWORK}
|
||||
|
||||
traefik:
|
||||
extends:
|
||||
file: ./proxy/docker-compose.yml
|
||||
service: traefik
|
||||
networks:
|
||||
- ${TRAEFIK_NETWORK}
|
||||
depends_on:
|
||||
- crowdsec
|
||||
|
||||
traefik_crowdsec_bouncer:
|
||||
extends:
|
||||
file: ./proxy/docker-compose.yml
|
||||
service: traefik_crowdsec_bouncer
|
||||
networks:
|
||||
- ${TRAEFIK_NETWORK}
|
||||
depends_on:
|
||||
- crowdsec
|
||||
- traefik
|
||||
|
||||
networks:
|
||||
prod-backend:
|
||||
external: false
|
||||
proxy:
|
||||
external: true
|
19
apps/frontend/docker-compose.overwrite.yml
Normal file
19
apps/frontend/docker-compose.overwrite.yml
Normal file
@@ -0,0 +1,19 @@
|
||||
services:
|
||||
webapp:
|
||||
build:
|
||||
context: ./src
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
BACKEND_URL: ${BACKEND_URL:-http://localhost:8000} # this argument is important on build to set the server url!
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-frontend-${ENVIRONMENT:-development}
|
||||
profiles: ["webapp", "frontend", "all", "app"]
|
||||
ports:
|
||||
- 3000:3000
|
||||
labels:
|
||||
- "traefik.enable=${TRAEFIK_ENABLE:-false}"
|
||||
- "traefik.http.routers.webapp.service=webapp"
|
||||
- "traefik.http.routers.webapp.entrypoints=${TRAEFIK_ENTRYPOINT}"
|
||||
- 'traefik.http.routers.webapp.rule=Host(`${FRONTEND_DOMAIN}`) || Host(`${FRONTEND_DOMAIN_2}`)'
|
||||
- "traefik.http.services.webapp.loadbalancer.server.port=3000"
|
||||
- "traefik.docker.network=${TRAEFIK_NETWORK}"
|
||||
|
@@ -1,27 +1,17 @@
|
||||
### Frontend (./apps/frontend/docker-compose.yml)
|
||||
# - [ ] Create a Vue.js frontend service
|
||||
# - [ ] Set up a Node.js environment for the frontend
|
||||
# - [ ] Configure volumes for persistent storage of frontend assets
|
||||
# - [ ] Set up environment variables using the new structure (../../env/${ENVIRONMENT:-development}/frontend.env)
|
||||
# - [ ] Configure networking to communicate with the backend service
|
||||
# - [ ] Set up healthchecks for the frontend service
|
||||
services:
|
||||
webapp:
|
||||
build:
|
||||
context: ./src
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
BACKEND_URL: ${BACKEND_URL:-http://localhost:8000} # this argument is important on build to set the backend server url!
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-frontend-${ENVIRONMENT:-development}
|
||||
profiles: ["webapp", "frontend", "all", "app"]
|
||||
depends_on:
|
||||
- database
|
||||
- backend
|
||||
labels:
|
||||
- "traefik.enable=${TRAEFIK_ENABLE}"
|
||||
- "traefik.enable=${TRAEFIK_ENABLE:-false}"
|
||||
- "traefik.http.routers.webapp.service=webapp"
|
||||
- "traefik.http.routers.webapp.entrypoints=${TRAEFIK_ENTRYPOINT}"
|
||||
- 'traefik.http.routers.webapp.rule=Host(`${FRONTEND_DOMAIN}`) || Host(`${FRONTEND_DOMAIN_2}`)'
|
||||
- "traefik.http.routers.webapp.tls=true"
|
||||
- "traefik.http.routers.webapp.tls.certresolver=${TRAEFIK_CERT_RESOLVER}"
|
||||
- "traefik.http.routers.webapp.tls.domains[0].main=${FRONTEND_DOMAIN}"
|
||||
- "traefik.http.routers.webapp.tls.domains[0].sans=${FRONTEND_DOMAIN_2}"
|
||||
- "traefik.http.services.webapp.loadbalancer.server.port=3000"
|
||||
- "traefik.docker.network=${TRAEFIK_NETWORK}"
|
||||
- "traefik.docker.network=${TRAEFIK_NETWORK}"
|
||||
|
Submodule apps/frontend/src updated: 2d8bcb6067...b5ed737d10
@@ -5,63 +5,7 @@
|
||||
# - [ ] Configure networking to expose these services to the internet via the proxy
|
||||
# - [ ] Set up regular backup jobs for critical data in these services
|
||||
|
||||
services:
|
||||
nextcloud-db:
|
||||
image: mariadb:10.6
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-nextcloud-db-${ENVIRONMENT:-development}
|
||||
profiles: ["all", "tools", "nextcloud"]
|
||||
command: --transaction-isolation=READ-COMMITTED --innodb_read_only_compressed=OFF
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- ../../volumes/tools/${INFRASTRUCTURE_LABEL:-default}_cloud/database:/var/lib/mysql
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=headpiece-constant1-denim-mindboost #SQL root Passwort eingeben
|
||||
- MYSQL_PASSWORD=idealist9-frayed-murkiness-mindboost #SQL Benutzer Passwort eingeben
|
||||
- MYSQL_DATABASE=nextcloud-mindboost #Datenbank Name
|
||||
- MYSQL_USER=mindboostcloud #SQL Nutzername
|
||||
- MYSQL_INITDB_SKIP_TZINFO=1
|
||||
- MARIADB_AUTO_UPGRADE=1
|
||||
nextcloud-redis:
|
||||
image: redis:alpine
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-nextcloud-redis-${ENVIRONMENT:-development}
|
||||
profiles: ["all", "tools", "nextcloud"]
|
||||
hostname: nextcloud-redis
|
||||
restart: unless-stopped
|
||||
command: redis-server --requirepass redis-mindboost-passwort # Redis Passwort eingeben
|
||||
cloud:
|
||||
image: nextcloud
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-nextcloud-app-${ENVIRONMENT:-development}
|
||||
profiles: ["all", "tools", "nextcloud"]
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- nextcloud-db
|
||||
- nextcloud-redis
|
||||
environment:
|
||||
TRUSTED_PROXIES: 172.16.255.254/16
|
||||
OVERWRITEPROTOCOL: https
|
||||
OVERWRITECLIURL: https://${CLOUD_DOMAIN:-cloud}
|
||||
OVERWRITEHOST: ${CLOUD_DOMAIN:-cloud}
|
||||
REDIS_HOST: nextcloud-redis
|
||||
REDIS_HOST_PASSWORD: redis-mindboost-passwort # Redis Passwort von oben wieder eingeben
|
||||
volumes:
|
||||
- ./app:/var/www/html
|
||||
- ../../volumes/tools/${INFRASTRUCTURE_LABEL:-default}_cloudapp/:/var/www/html/data
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_cloud.entrypoints=websecure"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_cloud.rule=Host(`${CLOUD_DOMAIN}`)"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_cloud.tls=true"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_cloud.tls.certresolver=http_resolver"
|
||||
- 'traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_cloud.service=cloud'
|
||||
- "traefik.http.services.cloud.loadbalancer.server.port=80"
|
||||
- "traefik.docker.network=${TRAEFIK_NETWORK:-default}"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_cloud.middlewares=nextcloud-dav,default@file"
|
||||
- "traefik.http.middlewares.nextcloud-dav.replacepathregex.regex=^/.well-known/ca(l|rd)dav"
|
||||
- "traefik.http.middlewares.nextcloud-dav.replacepathregex.replacement=/remote.php/dav/"
|
||||
networks:
|
||||
- ${TRAEFIK_NETWORK}
|
||||
networks:
|
||||
nextcloud:
|
||||
name: ${INFRASTRUCTURE_LABEL:-default}_nextcloud
|
||||
include:
|
||||
- path: ./nextcloud/docker-compose.yml
|
||||
- path: ./limesurvey/docker-compose.yml
|
||||
- path: ./invoiceninja/dockerfiles/debian/docker-compose.yml
|
||||
|
0
apps/tools/limesurvey/docker-compose.yml
Normal file
0
apps/tools/limesurvey/docker-compose.yml
Normal file
59
apps/tools/nextcloud/docker-compose.yml
Normal file
59
apps/tools/nextcloud/docker-compose.yml
Normal file
@@ -0,0 +1,59 @@
|
||||
services:
|
||||
nextcloud-db:
|
||||
image: mariadb:10.6
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-nextcloud-db-${ENVIRONMENT:-development}
|
||||
profiles: ["all", "tools", "nextcloud"]
|
||||
command: --transaction-isolation=READ-COMMITTED --innodb_read_only_compressed=OFF
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- ../../volumes/tools/${INFRASTRUCTURE_LABEL:-default}_cloud/database:/var/lib/mysql
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=headpiece-constant1-denim-mindboost #SQL root Passwort eingeben
|
||||
- MYSQL_PASSWORD=idealist9-frayed-murkiness-mindboost #SQL Benutzer Passwort eingeben
|
||||
- MYSQL_DATABASE=nextcloud-mindboost #Datenbank Name
|
||||
- MYSQL_USER=mindboostcloud #SQL Nutzername
|
||||
- MYSQL_INITDB_SKIP_TZINFO=1
|
||||
- MARIADB_AUTO_UPGRADE=1
|
||||
nextcloud-redis:
|
||||
image: redis:alpine
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-nextcloud-redis-${ENVIRONMENT:-development}
|
||||
profiles: ["all", "tools", "nextcloud"]
|
||||
hostname: nextcloud-redis
|
||||
restart: unless-stopped
|
||||
command: redis-server --requirepass redis-mindboost-passwort # Redis Passwort eingeben
|
||||
cloud:
|
||||
image: nextcloud
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-nextcloud-app-${ENVIRONMENT:-development}
|
||||
profiles: ["all", "tools", "nextcloud"]
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- nextcloud-db
|
||||
- nextcloud-redis
|
||||
environment:
|
||||
TRUSTED_PROXIES: 172.16.255.254/16
|
||||
OVERWRITEPROTOCOL: https
|
||||
OVERWRITECLIURL: https://${CLOUD_DOMAIN:-cloud}
|
||||
OVERWRITEHOST: ${CLOUD_DOMAIN:-cloud}
|
||||
REDIS_HOST: nextcloud-redis
|
||||
REDIS_HOST_PASSWORD: redis-mindboost-passwort # Redis Passwort von oben wieder eingeben
|
||||
volumes:
|
||||
- ../../volumes/tools/${INFRASTRUCTURE_LABEL:-default}_cloudapp/:/var/www/html/data
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_cloud.entrypoints=websecure"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_cloud.rule=Host(`${CLOUD_DOMAIN}`)"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_cloud.tls=true"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_cloud.tls.certresolver=http_resolver"
|
||||
- 'traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_cloud.service=cloud'
|
||||
- "traefik.http.services.cloud.loadbalancer.server.port=80"
|
||||
- "traefik.docker.network=${TRAEFIK_NETWORK:-default}"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_cloud.middlewares=nextcloud-dav,default@file"
|
||||
- "traefik.http.middlewares.nextcloud-dav.replacepathregex.regex=^/.well-known/ca(l|rd)dav"
|
||||
- "traefik.http.middlewares.nextcloud-dav.replacepathregex.replacement=/remote.php/dav/"
|
||||
networks:
|
||||
- ${TRAEFIK_NETWORK}
|
||||
networks:
|
||||
nextcloud:
|
||||
name: ${INFRASTRUCTURE_LABEL:-default}_nextcloud
|
@@ -7,17 +7,26 @@ services:
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-kirbycms-${ENVIRONMENT:-development}
|
||||
profiles: ["website","kirbycms","all"]
|
||||
volumes:
|
||||
- ../../volumes/website/kirbycms:/var/www/html:rw # Persistente Daten
|
||||
- kirbycms_data:/var/www/html:rw # Persistente Daten
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 0:80
|
||||
networks:
|
||||
- ${TRAEFIK_NETWORK}
|
||||
- ${TRAEFIK_NETWORK:-default}
|
||||
labels:
|
||||
- "traefik.enable=${TRAEFIK_ENABLE}"
|
||||
- "traefik.docker.network=${TRAEFIK_NETWORK}"
|
||||
- "traefik.enable=${TRAEFIK_ENABLE:-false}"
|
||||
- "traefik.docker.network=${TRAEFIK_NETWORK:-default}"
|
||||
- "traefik.http.routers.kirbycms.service=kirbycms"
|
||||
- "traefik.http.routers.kirbycms.tls.certresolver=${TRAEFIK_CERT_RESOLVER}"
|
||||
- "traefik.http.routers.kirbycms.tls.domains[0].main=`${WEBSITE_DOMAIN}`"
|
||||
- "traefik.http.routers.kirbycms.rule=Host(`${WEBSITE_DOMAIN}`)"
|
||||
- "traefik.http.routers.kirbycms.entrypoints=${TRAEFIK_ENTRYPOINT}"
|
||||
- "traefik.http.routers.kirbycms.tls.certresolver=${TRAEFIK_CERT_RESOLVER:-default}"
|
||||
- "traefik.http.routers.kirbycms.tls.domains[0].main=`${WEBSITE_DOMAIN:-kirby.local}`"
|
||||
- "traefik.http.routers.kirbycms.rule=Host(`${WEBSITE_DOMAIN:-kirby.local}`)"
|
||||
- "traefik.http.routers.kirbycms.entrypoints=${TRAEFIK_ENTRYPOINT:-default}"
|
||||
- "traefik.http.routers.kirbycms.tls=true"
|
||||
- "traefik.http.services.kirbycms.loadbalancer.server.port=80"
|
||||
volumes:
|
||||
kirbycms_data:
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: none
|
||||
o: bind
|
||||
device: /mnt/docker-volumes/website/kirbycms # Neuer fester Speicherort
|
||||
|
49
env/.env.backend
vendored
49
env/.env.backend
vendored
@@ -1,49 +0,0 @@
|
||||
# ----------------------------------
|
||||
# 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
env/.env.db
vendored
8
env/.env.db
vendored
@@ -1,8 +0,0 @@
|
||||
# ----------------------------------
|
||||
# Datenbank (MariaDB)
|
||||
# ----------------------------------
|
||||
MARIADB_USER=mindboost
|
||||
MARIADB_DATABASE=mindboost
|
||||
MARIADB_PASSWORD=1stronges-mindboostdb-passwort
|
||||
MARIADB_ROOT_PASSWORD=1stronges-passwort-fuer-diedb
|
||||
ADMINER_PORT=8000
|
1
env/.env.frontend
vendored
1
env/.env.frontend
vendored
@@ -1 +0,0 @@
|
||||
DB_HOST= BLALBLAB
|
1
env/.env.shared
vendored
1
env/.env.shared
vendored
@@ -1 +0,0 @@
|
||||
DB_HOST= BLALBLAB
|
24
env/.env.traefik
vendored
24
env/.env.traefik
vendored
@@ -1,24 +0,0 @@
|
||||
# ----------------------------------
|
||||
# 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`)
|
||||
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
|
17
env/development/.env.backend
vendored
17
env/development/.env.backend
vendored
@@ -11,16 +11,21 @@ SERVER_IP=${SERVER_IP:-localhost}
|
||||
# Laravel Backend
|
||||
# ----------------------------------
|
||||
BACKEND_NETWORK=backend
|
||||
APP_ENV=${ENVIRONMENT-local}
|
||||
APP_NAME="mindboost backend - Compose Deployment"
|
||||
APP_URL=https://backend.local
|
||||
LARAVEL_PORT=8000
|
||||
LARAVEL_VITE_PORT=5173
|
||||
DB_HOST=${MARIADB_HOST:-database}
|
||||
DB_PORT=${MARIADB_PORT:-3306}
|
||||
DB_PASSWORD=${MARIADB_PASSWORD:-default}
|
||||
DB_USERNAME=${MARIADB_USER:-default}
|
||||
DB_DATABASE=${MARIADB_DATABASE:-default}
|
||||
|
||||
JWT_SECRET=zMtO8sgsnc4UixWSsYWE1pK9EdpNLzxNSoIPlUpTe6dDlarM3bu4cwM80tH3jA0F
|
||||
|
||||
# ----------------------------------
|
||||
# Datenbank Zugriff - ! MUSS MIT .env.database übereinstimmen
|
||||
# ----------------------------------
|
||||
DB_HOST=database
|
||||
DB_PORT=3306
|
||||
DB_PASSWORD=1stronges-mindboostdb-passwort
|
||||
DB_USERNAME=${INFRASTRUCTURE_LABEL:-default}_${ENVIRONMENT:-development}
|
||||
DB_DATABASE=${INFRASTRUCTURE_LABEL:-default}_${ENVIRONMENT:-development}
|
||||
|
||||
|
||||
|
||||
|
7
env/development/.env.database
vendored
7
env/development/.env.database
vendored
@@ -3,12 +3,7 @@
|
||||
# ----------------------------------
|
||||
MARIADB_USER=${INFRASTRUCTURE_LABEL:-default}_${ENVIRONMENT:-development}
|
||||
MARIADB_DATABASE=${INFRASTRUCTURE_LABEL:-default}_${ENVIRONMENT:-development}
|
||||
MARIADB_ROOT_PASSWORD_FILE=/run/secrets/mariadb_root
|
||||
MARIADB_PASSWORD=1stronges-mindboostdb-passwort
|
||||
MARIADB_RANDOM_ROOT_PASSWORD=1
|
||||
MARIADB_PORT=3306
|
||||
MARIADB_HOST=database
|
||||
|
||||
# ----------------------------------
|
||||
# Adminer
|
||||
# ----------------------------------
|
||||
ADMINER_PORT=8082
|
||||
|
3
env/development/.env.frontend
vendored
3
env/development/.env.frontend
vendored
@@ -1,5 +1,4 @@
|
||||
# ----------------------------------
|
||||
# VUE APP
|
||||
# ----------------------------------
|
||||
|
||||
BACKEND_URL="backend.local"
|
||||
BACKEND_URL="backend.local"
|
||||
|
5
env/development/.env.proxy
vendored
5
env/development/.env.proxy
vendored
@@ -1,8 +1,8 @@
|
||||
# ----------------------------------
|
||||
# TRAEFIK
|
||||
# ----------------------------------
|
||||
|
||||
TRAEFIK_ENABLE=false
|
||||
|
||||
TRAEFIK_ENABLE=true
|
||||
TRAEFIK_NETWORK=proxy
|
||||
TRAEFIK_BASIC_AUTH_USERS=${ADMIN_USER}:${ADMIN_PASSWORD_HASH}
|
||||
TRAEFIK_CERT_RESOLVER=
|
||||
@@ -14,6 +14,7 @@ FRONTEND_DOMAIN=frontend.local
|
||||
FRONTEND_DOMAIN_2=app.frontend.local
|
||||
BACKEND_DOMAIN=backend.local
|
||||
WEBSITE_DOMAIN=web.local
|
||||
ADMINER_DOMAIN=adminer.local
|
||||
GITEA_DOMAIN=gitea.local
|
||||
LIMESURVEY_DOMAIN=survey.local
|
||||
LINKSTACK_DOMAIN=linkstack.local
|
||||
|
3
scripts/debug/deploy-frontend.sh
Executable file
3
scripts/debug/deploy-frontend.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
source ./../setup/set-global-env.sh
|
||||
source ./../setup/set-frontend-env.sh
|
||||
docker compose -f ./../../apps/frontend/docker-compose.overwrite.yml --env-file ./../../env/${ENVIRONMENT}/.env.frontend --profile frontend up
|
@@ -3,7 +3,13 @@
|
||||
# 🚀 Script to Generate Secure Secrets for Deployment
|
||||
|
||||
# Define root directory relative to the script location
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
|
||||
# Stelle sicher, dass ROOT_DIR gesetzt ist
|
||||
if [ -z "$ROOT_DIR" ]; then
|
||||
echo "❌ WARN: ROOT_DIR ist nicht gesetzt! Setze ROOT_DIR..."
|
||||
source ./set-project-root.sh
|
||||
fi
|
||||
|
||||
SECRET_FILE="$ROOT_DIR/env/secrets.env"
|
||||
GITIGNORE_FILE="$ROOT_DIR/.gitignore"
|
||||
|
59
scripts/setup/set-frontend-env.sh
Normal file
59
scripts/setup/set-frontend-env.sh
Normal file
@@ -0,0 +1,59 @@
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Stelle sicher, dass ROOT_DIR gesetzt ist
|
||||
if [ -z "$ROOT_DIR" ]; then
|
||||
echo "❌ WARN: ROOT_DIR ist nicht gesetzt! Setze ROOT_DIR..."
|
||||
# Bestimme das Root-Verzeichnis des Git-Repos
|
||||
ROOT_DIR=$(git rev-parse --show-toplevel 2>/dev/null)
|
||||
|
||||
# Falls das Repository nicht gefunden wurde, abbrechen
|
||||
if [ -z "$ROOT_DIR" ]; then
|
||||
echo "❌ Fehler: Kein Git-Repository gefunden!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Setze die Variable für die aktuelle Shell-Sitzung
|
||||
export ROOT_DIR
|
||||
echo "✅ ROOT_DIR gesetzt auf: $ROOT_DIR"
|
||||
fi
|
||||
|
||||
# Setze den Pfad zur .env.all Datei relativ zum Projekt-Root
|
||||
ENV_FILE="$ROOT_DIR/env/development/.env.frontend"
|
||||
|
||||
# Prüfen, ob die Datei existiert
|
||||
if [ ! -f "$ENV_FILE" ]; then
|
||||
echo "❌ Fehler: Die Datei $ENV_FILE existiert nicht!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ ENV-Datei vorhanden: $ENV_FILE"
|
||||
|
||||
# Funktion: Alle Variablen exportieren
|
||||
export_env_vars() {
|
||||
while IFS='=' read -r key value; do
|
||||
# Entferne führende und nachfolgende Leerzeichen
|
||||
key=$(echo "$key" | xargs)
|
||||
value=$(echo "$value" | xargs)
|
||||
|
||||
# Falls die Zeile ein Kommentar oder leer ist, überspringen
|
||||
if [[ -z "$key" || "$key" =~ ^# || -z "$value" ]]; then
|
||||
continue
|
||||
fi
|
||||
# Exportiere die Variable
|
||||
export "$key=$value"
|
||||
done < "$ENV_FILE"
|
||||
}
|
||||
|
||||
# Alle Variablen exportieren
|
||||
export_env_vars
|
||||
|
||||
echo "🔹 Geladene Variablen:"
|
||||
grep -o '^[^#]*' "$ENV_FILE" | cut -d '=' -f1 | while read -r var; do
|
||||
echo "$var=${!var}" # Gibt die gesetzten Variablen mit ihrem Wert aus
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
54
scripts/setup/set-global-env.sh
Normal file
54
scripts/setup/set-global-env.sh
Normal file
@@ -0,0 +1,54 @@
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Stelle sicher, dass ROOT_DIR gesetzt ist
|
||||
if [ -z "$ROOT_DIR" ]; then
|
||||
echo "❌ WARN: ROOT_DIR ist nicht gesetzt! Setze ROOT_DIR..."
|
||||
source ./set-project-root.sh
|
||||
fi
|
||||
|
||||
# Setze den Pfad zur .env.all Datei relativ zum Projekt-Root
|
||||
ENV_FILE="$ROOT_DIR/env/.env.all"
|
||||
|
||||
# Prüfen, ob die Datei existiert
|
||||
if [ ! -f "$ENV_FILE" ]; then
|
||||
echo "❌ Fehler: Die Datei $ENV_FILE existiert nicht!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ ENV-Datei vorhanden: $ENV_FILE"
|
||||
|
||||
# Funktion: Alle Variablen exportieren
|
||||
export_env_vars() {
|
||||
while IFS='=' read -r key value; do
|
||||
# Entferne führende und nachfolgende Leerzeichen
|
||||
key=$(echo "$key" | xargs)
|
||||
value=$(echo "$value" | xargs)
|
||||
|
||||
# Falls die Zeile ein Kommentar oder leer ist, überspringen
|
||||
if [[ -z "$key" || "$key" =~ ^# || -z "$value" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Entferne umschließende Anführungszeichen, falls vorhanden
|
||||
value=$(echo "$value" | sed -E 's/^"(.*)"$/\1/')
|
||||
|
||||
# Exportiere die Variable
|
||||
export "$key=$value"
|
||||
done < "$ENV_FILE"
|
||||
}
|
||||
|
||||
# Alle Variablen exportieren
|
||||
export_env_vars
|
||||
|
||||
export SERVER_IP=$(curl -s https://api.ipify.org)
|
||||
|
||||
echo "🔹 Geladene Variablen:"
|
||||
grep -o '^[^#]*' "$ENV_FILE" | cut -d '=' -f1 | while read -r var; do
|
||||
echo "$var=${!var}" # Gibt die gesetzten Variablen mit ihrem Wert aus
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
14
scripts/setup/set-project-root.sh
Normal file
14
scripts/setup/set-project-root.sh
Normal file
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Bestimme das Root-Verzeichnis des Git-Repos
|
||||
ROOT_DIR=$(git rev-parse --show-toplevel 2>/dev/null)
|
||||
|
||||
# Falls das Repository nicht gefunden wurde, abbrechen
|
||||
if [ -z "$ROOT_DIR" ]; then
|
||||
echo "❌ Fehler: Kein Git-Repository gefunden!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Setze die Variable für die aktuelle Shell-Sitzung
|
||||
export ROOT_DIR
|
||||
echo "✅ ROOT_DIR gesetzt auf: $ROOT_DIR"
|
60
scripts/setup/set-proxy-env.sh
Normal file
60
scripts/setup/set-proxy-env.sh
Normal file
@@ -0,0 +1,60 @@
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Stelle sicher, dass ROOT_DIR gesetzt ist
|
||||
if [ -z "$ROOT_DIR" ]; then
|
||||
echo "❌ WARN: ROOT_DIR ist nicht gesetzt! Setze ROOT_DIR..."
|
||||
source ./set-project-root.sh
|
||||
fi
|
||||
|
||||
# Stelle sicher, dass ENVIRONMENT gesetzt ist
|
||||
if [ -z "$ENVIRONMENT" ]; then
|
||||
echo "❌ WARN: ENVIRONMENT ist nicht gesetzt! Setze ENVIRONMENT..."
|
||||
source ./set-global-env.sh
|
||||
fi
|
||||
|
||||
# Setze den Pfad zur .env.all Datei relativ zum Projekt-Root
|
||||
ENV_FILE="$ROOT_DIR/env/${ENVIRONMENT}/.env.proxy"
|
||||
|
||||
# Prüfen, ob die Datei existiert
|
||||
if [ ! -f "$ENV_FILE" ]; then
|
||||
echo "❌ Fehler: Die Datei $ENV_FILE existiert nicht!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ ENV-Datei vorhanden: $ENV_FILE"
|
||||
|
||||
# Funktion: Alle Variablen exportieren
|
||||
export_env_vars() {
|
||||
while IFS='=' read -r key value; do
|
||||
# Entferne führende und nachfolgende Leerzeichen
|
||||
key=$(echo "$key" | xargs)
|
||||
value=$(echo "$value" | xargs)
|
||||
|
||||
# Falls die Zeile ein Kommentar oder leer ist, überspringen
|
||||
if [[ -z "$key" || "$key" =~ ^# || -z "$value" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Entferne umschließende Anführungszeichen, falls vorhanden
|
||||
value=$(echo "$value" | sed -E 's/^"(.*)"$/\1/')
|
||||
|
||||
# Exportiere die Variable
|
||||
export "$key=$value"
|
||||
done < "$ENV_FILE"
|
||||
}
|
||||
|
||||
# Alle Variablen exportieren
|
||||
export_env_vars
|
||||
|
||||
export SERVER_IP=$(curl -s https://api.ipify.org)
|
||||
|
||||
echo "🔹 Geladene Variablen:"
|
||||
grep -o '^[^#]*' "$ENV_FILE" | cut -d '=' -f1 | while read -r var; do
|
||||
echo "$var=${!var}" # Gibt die gesetzten Variablen mit ihrem Wert aus
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user