Compare commits
5 Commits
rapp/creat
...
master
Author | SHA1 | Date |
---|---|---|
|
3be5f08ffd | |
|
4b39cd884b | |
|
f682150557 | |
|
da67cbd46e | |
|
eb7b1cf7dd |
|
@ -3,7 +3,4 @@
|
|||
url = https://gitea.mindboost.team/Mindboost/mindboost-backend.git
|
||||
[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
|
||||
url = https://gitea.mindboost.team/Mindboost/mindboost-webapp.git
|
|
@ -1,32 +1,11 @@
|
|||
|
||||
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
stages {
|
||||
stage('Checkout Code & Submodules') {
|
||||
stage('Trigger Submodule Pipelines') {
|
||||
steps {
|
||||
git branch: 'main', url: 'git@github.com:your-org/my-main-repo.git', credentialsId: 'git-credentials'
|
||||
sh 'git submodule update --init --recursive'
|
||||
}
|
||||
}
|
||||
|
||||
stage('Run Backend Pipeline') {
|
||||
steps {
|
||||
build job: 'backend-pipeline', wait: true
|
||||
}
|
||||
}
|
||||
|
||||
stage('Run Frontend Pipeline') {
|
||||
steps {
|
||||
build job: 'frontend-pipeline', wait: true
|
||||
}
|
||||
}
|
||||
|
||||
stage('Deploy Infrastructure') {
|
||||
steps {
|
||||
sshagent(['jenkins-ssh-key']) {
|
||||
sh "ssh user@server 'cd /opt/myapp && git pull origin main && docker compose up -d'"
|
||||
script {
|
||||
build job: 'frontend-pipeline', wait: false
|
||||
build job: 'backend-pipeline', wait: false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,6 +43,6 @@ services:
|
|||
volumes:
|
||||
backend_redis_data:
|
||||
driver: local
|
||||
name: "${INFRASTRUCTURE_LABEL:-default}_backend_redis_data"
|
||||
name: "${INFRASTRUCTURE_LABEL}_backend_redis_data"
|
||||
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 8dcadaec5ca119884d7cc3295a970d15e0e87625
|
||||
Subproject commit 9ec88bb4faddc8474d660269bc80efcefa18e183
|
|
@ -1,8 +0,0 @@
|
|||
services:
|
||||
adminer:
|
||||
profiles: ["all", "database", "backend", "adminer", "app"]
|
||||
image: adminer
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-adminer-${ENVIRONMENT:-development}
|
||||
restart: always
|
||||
ports:
|
||||
- ${ADMINER_PORT:-0}:8080
|
|
@ -1,20 +0,0 @@
|
|||
services:
|
||||
adminer:
|
||||
profiles: ["all", "database", "backend", "adminer", "app"]
|
||||
image: adminer
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-adminer-${ENVIRONMENT:-development}
|
||||
restart: always
|
||||
ports:
|
||||
- ${ADMINER_PORT:-0}:8080
|
||||
networks:
|
||||
- database
|
||||
- proxy
|
||||
labels:
|
||||
- "traefik.enable=${TRAEFIK_ENABLE:-false}"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_adminer.entrypoints=${TRAEFIK_ENTRYPOINT:-websecure}"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_adminer.rule=Host(`${ADMINER_DOMAIN:-adminer.local}`)"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_adminer.tls=true"
|
||||
- "traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_adminer.tls.certresolver=${TRAEFIK_CERT_RESOLVER:-http_resolver}"
|
||||
- 'traefik.http.routers.${INFRASTRUCTURE_LABEL:-default}_adminer.service=adminer'
|
||||
- "traefik.http.adminer.cloud.loadbalancer.server.port=8080"
|
||||
- "traefik.docker.network=${TRAEFIK_NETWORK:-default}"
|
|
@ -1,9 +0,0 @@
|
|||
### Develop (./apps/develop/docker-compose.yml)
|
||||
# - [ ] Create services for Gitea, Jenkins, and Adminer
|
||||
# - [ ] Configure volumes for persistent storage of Git repositories, Jenkins data, and Adminer settings
|
||||
# - [ ] Set up environment variables using the new structure (../../env/${ENVIRONMENT:-development}/develop.env)
|
||||
# - [ ] Configure networking to allow these services to communicate with each other and the necessary application services
|
||||
# - [ ] Set up access controls and security measures for development tools
|
||||
|
||||
include:
|
||||
- ./gitea/docker-compose.yml
|
|
@ -1,44 +0,0 @@
|
|||
services:
|
||||
gitea:
|
||||
image: gitea/gitea:latest
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-mindboost}-gitea
|
||||
profiles: ["all", "gitea","develop"]
|
||||
restart: always
|
||||
volumes:
|
||||
- ${GITEA_VOLUME_PATH}:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
depends_on:
|
||||
- gitea_db
|
||||
labels:
|
||||
- "traefik.enable=${TRAEFIK_ENABLE:-false}"
|
||||
- "traefik.http.routers.gitea.entrypoints=${TRAEFIK_ENTRYPOINT}"
|
||||
- "traefik.http.routers.gitea.rule=(Host(`${GITEA_DOMAIN})`)"
|
||||
- "traefik.http.routers.gitea.tls=true"
|
||||
- "traefik.http.routers.gitea.tls.certresolver=${TRAEFIK_CERT_RESOLVER}"
|
||||
- "traefik.http.routers.gitea.service=gitea"
|
||||
- 'traefik.http.services.gitea.loadbalancer.gitea.port=3000'
|
||||
- "traefik.http.routers.gitea.tls.domains[0].main=`${GITEA_TLS_DOMAIN_MAIN}`"
|
||||
|
||||
# SSH routing, can't route based on host so anything to port 222 will come to this container
|
||||
- "traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`)"
|
||||
- "traefik.tcp.routers.gitea-ssh.entrypoints=ssh"
|
||||
- "traefik.tcp.routers.gitea-ssh.service=gitea-ssh-svc"
|
||||
- "traefik.tcp.services.gitea-ssh-svc.loadbalancer.gitea.port=22"
|
||||
|
||||
gitea_db:
|
||||
image: mysql:latest
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-mindboost}-gitea_db
|
||||
profiles: ["all", "gitea","develop"]
|
||||
restart: always
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=${GITEA_MYSQL_ROOT_PASSWORD}
|
||||
- MYSQL_DATABASE=${GITEA_MYSQL_DATABASE}
|
||||
- MYSQL_USER=${GITEA_MYSQL_USER}
|
||||
- MYSQL_PASSWORD=${GITEA_MYSQL_PASSWORD}
|
||||
volumes:
|
||||
- ${GITEA_DATABASE_VOLUME_PATH}:/var/lib/mysql
|
||||
|
||||
networks:
|
||||
gitea:
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
### Jenkins (./apps/frontend/docker-compose.yml)
|
||||
services:
|
||||
jenkins:
|
||||
image: jenkins/jenkins:lts
|
||||
container_name: jenkins
|
||||
ports:
|
||||
- "50000:50000" # Jenkins Agent Port
|
||||
volumes:
|
||||
- ../../../volumes/develop/jenkins:/var/jenkins_home
|
||||
- ./plugins.yml:/usr/share/jenkins/ref/plugins.yml
|
||||
depends_on:
|
||||
- jenkins-plugins
|
||||
environment:
|
||||
- JAVA_OPTS=-Djenkins.install.runSetupWizard=false
|
||||
networks:
|
||||
- proxy
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.jenkins.rule=Host(`j.haslach2025.de`)"
|
||||
- "traefik.http.routers.jenkins.entrypoints=websecure"
|
||||
- "traefik.http.routers.jenkins.tls=true"
|
||||
- "traefik.http.routers.jenkins.tls.certresolver=http_resolver"
|
||||
- "traefik.http.services.jenkins.loadbalancer.server.port=8080" # interner Port von Jenkins
|
||||
- "traefik.docker.network=proxy"
|
||||
|
||||
jenkins-plugins:
|
||||
image: jenkins/jenkins:lts-jdk17
|
||||
command: >
|
||||
jenkins-plugin-cli -f /usr/share/jenkins/ref/plugins.yml --available-updates --output txt > /usr/share/jenkins/ref/plugins.yml
|
||||
volumes:
|
||||
- ./plugins.yml:/usr/share/jenkins/ref/plugins.yml
|
||||
restart: "no"
|
||||
|
||||
volumes:
|
||||
jenkins_home:
|
||||
driver: local
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
|
@ -1,50 +0,0 @@
|
|||
##
|
||||
## ONE SCRIPT TO RULE THEM ALL
|
||||
##
|
||||
## Dieses Compose-File startet alle verfügbaren Services, abhängig von dem angegebenen ENVIRONMENT.
|
||||
|
||||
## Um diese Konfiguration zu verwenden, kannst du folgende Befehle nutzen:
|
||||
## Um alle Services zu starten:
|
||||
## docker compose -f docker-compose.all.yml --env-file ../env/.env.all --profile all up -d
|
||||
|
||||
## Um nur bestimmte Services zu starten (z.B. frontend und backend):
|
||||
## docker compose -f docker-compose.all.yml --env-file ../env/.env.all --profile frontend --profile backend up -d
|
||||
|
||||
##
|
||||
## 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:
|
||||
- ../env/.env.all
|
||||
- ../env/${ENVIRONMENT:-development}/.env.proxy
|
||||
- path: ./frontend/docker-compose.yml
|
||||
env_file:
|
||||
- ../env/.env.all
|
||||
- ../env/${ENVIRONMENT:-development}/.env.frontend
|
||||
- path: ./backend/docker-compose.yml
|
||||
- path: ./database/docker-compose.yml
|
||||
- path: ./website/docker-compose.yml
|
||||
env_file:
|
||||
- ../env/.env.all
|
||||
- ../env/${ENVIRONMENT:-development}/.env.website
|
||||
- ../env/${ENVIRONMENT:-development}/.env.proxy
|
||||
- path: ./administration/docker-compose.yml
|
||||
env_file:
|
||||
- ../env/.env.all
|
||||
- ../env/${ENVIRONMENT:-development}/.env.administration
|
||||
- ../env/${ENVIRONMENT:-development}/.env.proxy
|
||||
- path: ./develop/docker-compose.yml
|
||||
env_file:
|
||||
- ../env/.env.all
|
||||
- ../env/${ENVIRONMENT:-development}/.env.develop
|
||||
- ../env/${ENVIRONMENT:-development}/.env.proxy
|
||||
- path: ./tools/docker-compose.yml
|
||||
env_file:
|
||||
- ../env/.env.all
|
||||
- ../env/${ENVIRONMENT:-development}/.env.tools
|
||||
- ../env/${ENVIRONMENT:-development}/.env.proxy
|
|
@ -1 +1 @@
|
|||
Subproject commit 078571bc57efbe503bf9af4d4d053d2288ac567d
|
||||
Subproject commit 03a625f7acc74adf10270ba1abe1cf6c33a5063b
|
|
@ -1,30 +0,0 @@
|
|||
services:
|
||||
wireguard:
|
||||
image: linuxserver/wireguard
|
||||
container_name: wireguard
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
- SYS_MODULE
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Berlin
|
||||
- SERVERURL=${SERVER_IP:?"❌ ERROR = SERVERURL is not set. Run set-server-ip.sh first."}
|
||||
- SERVERPORT=51820
|
||||
- PEERS=3 # Number of VPN clients to generate
|
||||
- PEERDNS=auto
|
||||
- INTERNAL_SUBNET=22.22.22.0
|
||||
volumes:
|
||||
- ../../volumes/security/wireguard/config:/config
|
||||
- /lib/modules:/lib/modules
|
||||
ports:
|
||||
- "51820:51820/udp"
|
||||
sysctls:
|
||||
- net.ipv4.conf.all.src_valid_mark=1
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- wireguard_network
|
||||
|
||||
networks:
|
||||
wireguard_network:
|
||||
driver: bridge
|
|
@ -1,50 +0,0 @@
|
|||
volumes:
|
||||
etc_wireguard:
|
||||
|
||||
services:
|
||||
wg-easy:
|
||||
environment:
|
||||
# Change Language:
|
||||
# (Supports: en, ua, ru, tr, no, pl, fr, de, ca, es, ko, vi, nl, is, pt, chs, cht, it, th, hi, ja, si)
|
||||
- LANG=${WG_LANG:-de}
|
||||
# ⚠️ Required:
|
||||
# Change this to your host's public address
|
||||
- WG_HOST=${SERVER_IP:-localhost}
|
||||
|
||||
# Optional:
|
||||
# - PASSWORD_HASH=$$2y$$10$$hBCoykrB95WSzuV4fafBzOHWKu9sbyVa34GJr8VV5R/pIelfEMYyG # (needs double $$, hash of 'foobar123'; see "How_to_generate_an_bcrypt_hash.md" for generate the hash)
|
||||
# - PORT=51821
|
||||
# - WG_PORT=51820
|
||||
# - WG_CONFIG_PORT=92820
|
||||
- WG_DEFAULT_ADDRESS=${WG_DEFAULT_ADDRESS:-22.22.22.0}
|
||||
# - WG_DEFAULT_DNS=1.1.1.1
|
||||
# - WG_MTU=1420
|
||||
# - WG_ALLOWED_IPS=192.168.15.0/24, 10.0.1.0/24
|
||||
# - WG_PERSISTENT_KEEPALIVE=25
|
||||
# - WG_PRE_UP=echo "Pre Up" > /etc/wireguard/pre-up.txt
|
||||
# - WG_POST_UP=echo "Post Up" > /etc/wireguard/post-up.txt
|
||||
# - WG_PRE_DOWN=echo "Pre Down" > /etc/wireguard/pre-down.txt
|
||||
# - WG_POST_DOWN=echo "Post Down" > /etc/wireguard/post-down.txt
|
||||
# - UI_TRAFFIC_STATS=true
|
||||
# - UI_CHART_TYPE=0 # (0 Charts disabled, 1 # Line chart, 2 # Area chart, 3 # Bar chart)
|
||||
# - WG_ENABLE_ONE_TIME_LINKS=true
|
||||
# - UI_ENABLE_SORT_CLIENTS=true
|
||||
# - WG_ENABLE_EXPIRES_TIME=true
|
||||
# - ENABLE_PROMETHEUS_METRICS=false
|
||||
# - PROMETHEUS_METRICS_PASSWORD=$$2a$$12$$vkvKpeEAHD78gasyawIod.1leBMKg8sBwKW.pQyNsq78bXV3INf2G # (needs double $$, hash of 'prometheus_password'; see "How_to_generate_an_bcrypt_hash.md" for generate the hash)
|
||||
|
||||
image: ghcr.io/wg-easy/wg-easy
|
||||
container_name: wg-easy
|
||||
volumes:
|
||||
- ../../volumes/wireguardeasy/:/etc/wireguard
|
||||
ports:
|
||||
- "51820:51820/udp"
|
||||
- "51821:51821/tcp"
|
||||
restart: unless-stopped
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
- SYS_MODULE
|
||||
# - NET_RAW # ⚠️ Uncomment if using Podman
|
||||
sysctls:
|
||||
- net.ipv4.ip_forward=1
|
||||
- net.ipv4.conf.all.src_valid_mark=1
|
|
@ -1,2 +0,0 @@
|
|||
#!/bin/bash
|
||||
export SERVER_IP=$(curl -s https://api.ipify.org)
|
|
@ -1,11 +0,0 @@
|
|||
### Tools (./apps/tools/docker-compose.yml)
|
||||
# - [ ] Create services for Nextcloud, LimeSurvey, and LinkStack
|
||||
# - [ ] Configure volumes for persistent storage of files, survey data, and link management data
|
||||
# - [ ] Set up environment variables using the new structure (../../env/${ENVIRONMENT:-development}/tools.env)
|
||||
# - [ ] Configure networking to expose these services to the internet via the proxy
|
||||
# - [ ] Set up regular backup jobs for critical data in these services
|
||||
|
||||
include:
|
||||
- path: ./nextcloud/docker-compose.yml
|
||||
- path: ./limesurvey/docker-compose.yml
|
||||
- path: ./invoiceninja/dockerfiles/debian/docker-compose.yml
|
|
@ -1,59 +0,0 @@
|
|||
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
|
|
@ -1,29 +0,0 @@
|
|||
services:
|
||||
kirbycms:
|
||||
build:
|
||||
context: ./kirby
|
||||
dockerfile: Dockerfile
|
||||
image: kirbycms
|
||||
container_name: ${INFRASTRUCTURE_LABEL:-default}-kirbycms-${ENVIRONMENT:-development}
|
||||
profiles: ["website","kirbycms","all"]
|
||||
volumes:
|
||||
- kirbycms_data:/var/www/html:rw # Persistente Daten
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 0:80
|
||||
networks:
|
||||
- ${TRAEFIK_NETWORK:-default}
|
||||
labels:
|
||||
- "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:-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
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
# Use latest offical ubuntu image
|
||||
FROM ubuntu:latest
|
||||
|
||||
# Set timezone
|
||||
ENV TZ=Europe/Berlin
|
||||
|
||||
# Set geographic area using above variable
|
||||
# This is necessary, otherwise building the image doesn't work
|
||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||
|
||||
# Remove annoying messages during package installation
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Install packages: web server & PHP plus extensions
|
||||
RUN apt-get update && apt-get install -y \
|
||||
apache2 \
|
||||
apache2-utils \
|
||||
ca-certificates \
|
||||
php \
|
||||
libapache2-mod-php \
|
||||
php-curl \
|
||||
php-dom \
|
||||
php-gd \
|
||||
php-intl \
|
||||
php-json \
|
||||
php-mbstring \
|
||||
php-xml \
|
||||
php-zip && \
|
||||
apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Copy virtual host configuration from current path onto existing 000-default.conf
|
||||
COPY default.conf /etc/apache2/sites-available/000-default.conf
|
||||
|
||||
# Remove default content (existing index.html)
|
||||
RUN rm /var/www/html/*
|
||||
|
||||
# Activate Apache modules headers & rewrite
|
||||
RUN a2enmod headers rewrite
|
||||
|
||||
# Ensure Group Ownership for www-data every member of kirbygroup should edit files
|
||||
RUN groupadd -g 1003 kirbygroup && usermod -aG kirbygroup www-data
|
||||
RUN chown -R www-data:kirbygroup /var/www/html
|
||||
RUN chmod -R g+rw /var/www/html && find /var/www/html -type d -exec chmod g+xs {} \;
|
||||
|
||||
# Tell container to listen to port 80 at runtime
|
||||
EXPOSE 80
|
||||
|
||||
# Start Apache web server
|
||||
CMD [ "/usr/sbin/apache2ctl", "-DFOREGROUND" ]
|
|
@ -1,9 +0,0 @@
|
|||
<VirtualHost *:80>
|
||||
ServerName localhost
|
||||
# Set the document root
|
||||
DocumentRoot "/var/www/html"
|
||||
<Directory "/var/www/html">
|
||||
# Allow overriding the default configuration via `.htaccess`
|
||||
AllowOverride All
|
||||
</Directory>
|
||||
</VirtualHost>
|
|
@ -1,7 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e -u
|
||||
|
||||
[[ $USERID ]] && usermod --uid "${USERID}" www-data
|
||||
|
||||
exec "$@"
|
|
@ -1 +0,0 @@
|
|||
USERID=${USERID:-0}
|
|
@ -1,39 +0,0 @@
|
|||
##
|
||||
## Einstellung die für das gesamte Projekt gelten. Also der Name und der Admin
|
||||
## Das Environment muss "production","staging" oder "development" heißen
|
||||
|
||||
INFRASTRUCTURE_LABEL=mindboost
|
||||
ENVIRONMENT=development
|
||||
|
||||
ADMIN_USER=${INFRASTRUCTURE_LABEL:-default}_${ENVIRONMENT:-development}
|
||||
ADMIN_PASSWORD_HASH='$2y$05$U7noO29Ru/4VB5x8TpZo3.b4VjH6AAnhufJJUG2Vs7qHCM2Cd8yIK' # for development = admin
|
||||
|
||||
SERVER_IP=127.0.0.1
|
||||
|
||||
|
||||
#################################################################################################
|
||||
# 🔧 ENVIRONMENT VARIABLES 🔧 #
|
||||
#################################################################################################
|
||||
#
|
||||
# This file contains **default (fallback) values** for environment variables.
|
||||
# These values ensure that services run with sane defaults if no other configuration is provided.
|
||||
#
|
||||
# 📌 **ENVIRONMENT VARIABLE PRIORITY ORDER (Lowest to Highest)**
|
||||
# 1️⃣ **Fallback Values in the File** (Used only if no other source provides a value)
|
||||
# 2️⃣ **Global Defaults in `.env.all`** (Shared settings across all services)
|
||||
# 3️⃣ **Service-Specific `.env` Files** (Overrides per service group, e.g., `.env.backend`, `.env.proxy`)
|
||||
# 4️⃣ **Preloaded Shell Environment** (`export VAR=value` before running `docker compose`)
|
||||
# 5️⃣ **CLI Overrides** (`docker compose --env-file` or `-e VAR=value` → Highest Priority)
|
||||
#
|
||||
# 🔄 **Overwriting Behavior**
|
||||
# - Variables defined in **`.env.all`** override values in this file.
|
||||
# - Variables defined in **`.env.<service>`** (e.g., `.env.backend`) override `.env.all`.
|
||||
# - Variables explicitly **exported in the shell** take priority over all `.env` files.
|
||||
# - Variables passed via **CLI (`--env-file` or `-e VAR=value`)** have the **highest priority**.
|
||||
#
|
||||
# 🚀 **Key Takeaways**
|
||||
# ✅ Use `.env.all` for common values across environments.
|
||||
# ✅ Use `.env.<service>` for service-specific configurations.
|
||||
# ✅ If needed, manually override variables in the shell or CLI.
|
||||
#
|
||||
#################################################################################################
|
|
@ -1,50 +0,0 @@
|
|||
# 🔧 Environment Configuration Guide
|
||||
|
||||
## 🌍 Overview
|
||||
This project uses **environment variables** to manage configuration across different environments (development, staging, production, etc.). These variables are loaded from `.env` files and can be overridden at multiple levels.
|
||||
|
||||
---
|
||||
|
||||
## 📌 **Environment Variable Priority (Lowest to Highest)**
|
||||
|
||||
| 🔢 Priority | 📄 Source | 🔍 Description |
|
||||
|------------|-----------------------------|------------------------------------------------|
|
||||
| 1️⃣ **Fallback Values** | hardcoded defaults | Used only if no other configuration is provided |
|
||||
| 2️⃣ **Global Defaults** | `.env.all` | Shared settings for all services |
|
||||
| 3️⃣ **Service-Specific Overrides** | `.env.backend`, `.env.proxy`, etc. | Overrides `.env.all` with service-specific values |
|
||||
| 4️⃣ **Shell Environment Variables** | `export VAR=value` before running | Takes precedence over `.env` files |
|
||||
| 5️⃣ **CLI Overrides** | `docker compose --env-file` or `-e VAR=value` | **Highest priority** (for temporary overrides) |
|
||||
|
||||
---
|
||||
|
||||
## 🔄 **Overwriting Behavior**
|
||||
- 🏗 **Variables defined in `.env.all`** override fallback values.
|
||||
- 🏗 **Variables defined in `.env.<service>`** (e.g., `.env.backend`) override `.env.all`.
|
||||
- 🔧 **Manually exported environment variables** in the shell take priority over `.env` files.
|
||||
- 🚀 **Variables passed via CLI (`--env-file` or `-e VAR=value`)** override everything.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 **Best Practices**
|
||||
✔️ **Use `.env.all` for global configurations** (e.g., `ENVIRONMENT=development`, `INFRASTRUCTURE_LABEL=myinfra`).
|
||||
✔️ **Use `.env.<service>` for service-specific configurations** (e.g., `.env.backend` for Laravel, `.env.database` for MariaDB).
|
||||
✔️ **If needed, manually override variables in the shell** using `export VAR=value`.
|
||||
✔️ **Use CLI `--env-file` for temporary overrides** in testing/debugging scenarios.
|
||||
|
||||
---
|
||||
|
||||
## 🏗 **Example File Structure**
|
||||
```sh
|
||||
/env/
|
||||
├── .env.all # Global default variables
|
||||
├── development/
|
||||
│ ├── .env.backend # Backend service config for development
|
||||
│ ├── .env.database # Database config for development
|
||||
│ ├── .env.proxy # Proxy config for development
|
||||
├── staging/
|
||||
│ ├── .env.backend # Backend service config for staging
|
||||
│ ├── .env.database # Database config for staging
|
||||
├── production/
|
||||
│ ├── .env.backend # Backend service config for production
|
||||
│ ├── .env.database # Database config for production
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
# ----------------------------------
|
||||
# Portainer
|
||||
# ----------------------------------
|
||||
|
||||
PORTAINER_IMAGE=portainer/portainer-ce:latest
|
||||
PORTAINER_DATA_PATH=../../../volumes/administration/portainer/data
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
|
||||
|
||||
# ----------------------------------
|
||||
# Redis
|
||||
# ----------------------------------
|
||||
REDIS_PASSWORD=laravel-redis-passwort
|
||||
REDIS_PORT=6379
|
||||
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
|
||||
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}
|
||||
|
||||
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
# ----------------------------------
|
||||
# Datenbank (MariaDB)
|
||||
# ----------------------------------
|
||||
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_PORT=3306
|
||||
MARIADB_HOST=database
|
|
@ -1,25 +0,0 @@
|
|||
# ----------------------------------
|
||||
# GITEA
|
||||
# ----------------------------------
|
||||
|
||||
USER_UID=1000
|
||||
USER_GID=1000
|
||||
|
||||
GITEA_VOLUME_PATH=../../../volumes/develop/gitea/gitea
|
||||
GITEA_DATABASE_VOLUME_PATH=../../../volumes/develop/gitea/gitea_db
|
||||
|
||||
GITEA_MYSQL_ROOT_PASSWORD=very-difficult-passwort-gitea
|
||||
GITEA_MYSQL_USER=gitea
|
||||
GITEA_MYSQL_PASSWORD=very-difficult-gitea
|
||||
GITEA_MYSQL_DATABASE=gitea
|
||||
GITEA_MYSQL_ALLOW_EMPTY_PASSWORD=true
|
||||
|
||||
# ----------------------------------
|
||||
# GITEA DB
|
||||
# ----------------------------------
|
||||
|
||||
DB_HOST=gitea_db:3306
|
||||
DB_NAME=gitea
|
||||
DB_PASSWD=very-difficult-gitea
|
||||
DB_TYPE=mysql
|
||||
DB_USER=gitea
|
|
@ -1,4 +0,0 @@
|
|||
# ----------------------------------
|
||||
# VUE APP
|
||||
# ----------------------------------
|
||||
BACKEND_URL="backend.local"
|
|
@ -1,51 +0,0 @@
|
|||
# ----------------------------------
|
||||
# TRAEFIK
|
||||
# ----------------------------------
|
||||
|
||||
TRAEFIK_ENABLE=true
|
||||
TRAEFIK_NETWORK=proxy
|
||||
TRAEFIK_BASIC_AUTH_USERS=${ADMIN_USER}:${ADMIN_PASSWORD_HASH}
|
||||
TRAEFIK_CERT_RESOLVER=
|
||||
|
||||
## Domains when TRAEFIK is ENABLED
|
||||
|
||||
PORTAINER_DOMAIN=portainer.local
|
||||
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
|
||||
TRAEFIK_DOMAIN=traefik.local
|
||||
CLOUD_DOMAIN=cloud.local
|
||||
KILLBILL_DOMAIN=killbill.local
|
||||
|
||||
### TLS for Domains
|
||||
|
||||
PORTAINER_TLS_DOMAIN_MAIN=${PORTAINER_DOMAIN}
|
||||
FRONTEND_TLS_DOMAIN_MAIN=${FRONTEND_DOMAIN}
|
||||
FRONTEND_TLS_DOMAIN_SANS=${FRONTEND_DOMAIN_2}
|
||||
BACKEND_TLS_DOMAIN_MAIN=${BACKEND_DOMAIN}
|
||||
WEBSITE_TLS_DOMAIN_MAIN=${WEBSITE_DOMAIN}
|
||||
GITEA_TLS_DOMAIN_MAIN=${GITEA_DOMAIN}
|
||||
LIMESURVEY_TLS_DOMAIN_MAIN=${LIMESURVEY_DOMAIN}
|
||||
LINKSTACK_TLS_DOMAIN_MAIN=${LINKSTACK_DOMAIN}
|
||||
TRAEFIK_TLS_DOMAIN_MAIN=${TRAEFIK_DOMAIN}
|
||||
CLOUD_TLS_DOMAIN_MAIN=${CLOUD_DOMAIN}
|
||||
KILLBILL_TLS_DOMAIN_MAIN=${KILLBILL_DOMAIN}
|
||||
|
||||
|
||||
## MIDDLEWARES
|
||||
|
||||
TRAEFIK_HTTPS_REDIRECT_MIDDLEWARE=${INFRASTRUCTURE_LABEL:-default}-https-redirect
|
||||
TRAEFIK_BASIC_AUTH_MIDDLEWARE=${INFRASTRUCTURE_LABEL:-default}-basic-auth
|
||||
|
||||
|
||||
## ENTRYPOINTS
|
||||
|
||||
TRAEFIK_ENTRYPOINT=websecure
|
||||
TRAEFIK_ENTRYPOINT_HTTP=web
|
||||
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
# ----------------------------------
|
||||
# NEXTCLOUD DB
|
||||
# ----------------------------------
|
||||
|
||||
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 CLOUD
|
||||
# ----------------------------------
|
||||
|
||||
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
|
||||
|
||||
# ----------------------------------
|
||||
# KILLBILL PAYMENT
|
||||
# ----------------------------------
|
||||
|
||||
KILLBILL_DAO_URL=jdbc:mysql://db:3306/killbill
|
||||
KILLBILL_DAO_USER=${ADMIN_USER:-root}
|
||||
KILLBILL_DAO_PASSWORD=${ADMIN_PASSWORD_HASH}
|
|
@ -1,5 +0,0 @@
|
|||
# ----------------------------------
|
||||
# KIRBY CMS
|
||||
# ----------------------------------
|
||||
|
||||
USER_ID=0
|
|
@ -1,31 +0,0 @@
|
|||
|
||||
|
||||
# ----------------------------------
|
||||
# Redis
|
||||
# ----------------------------------
|
||||
REDIS_PASSWORD=laravel-redis-passwort
|
||||
REDIS_PORT=6379
|
||||
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
|
||||
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}
|
||||
|
||||
|
||||
|
|
@ -1 +0,0 @@
|
|||
${REDIS_PASSWORD}
|
|
@ -1,7 +0,0 @@
|
|||
# ----------------------------------
|
||||
# Datenbank (MariaDB)
|
||||
# ----------------------------------
|
||||
MARIADB_USER=${INFRASTRUCTURE_LABEL:-default}_${ENVIRONMENT:-development}
|
||||
MARIADB_DATABASE=${INFRASTRUCTURE_LABEL:-default}_${ENVIRONMENT:-development}
|
||||
MARIADB_PASSWORD=1stronges-mindboostdb-passwort
|
||||
MARIADB_ROOT_PASSWORD=1stronges-passwort-fuer-diedb
|
|
@ -1 +0,0 @@
|
|||
ADMINER_PORT=8000
|
|
@ -1,3 +0,0 @@
|
|||
PORTAINER_IMAGE=portainer/portainer-ce:latest
|
||||
PORTAINER_DATA_PATH=/opt/containers/portainer/data
|
||||
PORTAINER_DOMAIN=portainer.yourdomain.com
|
|
@ -1,32 +0,0 @@
|
|||
TRAEFIK_HTTPS_REDIRECT_MIDDLEWARE=${INFRASTRUCTURE_LABEL:-default}-https-redirect
|
||||
TRAEFIK_BASIC_AUTH_MIDDLEWARE=${INFRASTRUCTURE_LABEL:-default}-basic-auth
|
||||
TRAEFIK_BASIC_AUTH_USERS=${ADMIN_USER}:${ADMIN_PASSWORD_HASH}
|
||||
|
||||
# Service Crowdsec
|
||||
SERVICES_CROWDSEC_CONTAINER_NAME=crowdsec
|
||||
SERVICES_CROWDSEC_HOSTNAME=crowdsec
|
||||
SERVICES_CROWDSEC_IMAGE=crowdsecurity/crowdsec
|
||||
SERVICES_CROWDSEC_IMAGE_VERSION=latest
|
||||
SERVICES_CROWDSEC_NETWORKS_CROWDSEC_IPV4=172.31.254.254
|
||||
|
||||
# Service Traefik
|
||||
SERVICES_TRAEFIK_CONTAINER_NAME=${INFRASTRUCTURE_LABEL:-default}-traefik
|
||||
SERVICES_TRAEFIK_HOSTNAME=${INFRASTRUCTURE_LABEL:-default}-traefik
|
||||
SERVICES_TRAEFIK_IMAGE=traefik
|
||||
SERVICES_TRAEFIK_IMAGE_VERSION=2.11
|
||||
SERVICES_TRAEFIK_LABELS_TRAEFIK_HOST=`traefik.haslach2025.de`
|
||||
SERVICES_TRAEFIK_NETWORKS_CROWDSEC_IPV4=172.31.254.253
|
||||
SERVICES_TRAEFIK_NETWORKS_PROXY_IPV4=172.30.255.254
|
||||
|
||||
# Service Traefik Crowdsec Bouncer
|
||||
SERVICES_TRAEFIK_CROWDSEC_BOUNCER_CONTAINER_NAME=traefik_crowdsec_bouncer
|
||||
SERVICES_TRAEFIK_CROWDSEC_BOUNCER_HOSTNAME=traefik-crowdsec-bouncer
|
||||
SERVICES_TRAEFIK_CROWDSEC_BOUNCER_IMAGE=fbonalair/traefik-crowdsec-bouncer
|
||||
SERVICES_TRAEFIK_CROWDSEC_BOUNCER_IMAGE_VERSION=latest
|
||||
SERVICES_TRAEFIK_CROWDSEC_BOUNCER_NETWORKS_CROWDSEC_IPV4=172.31.254.252
|
||||
|
||||
# Netzwerkeinstellungen
|
||||
NETWORKS_PROXY_NAME=proxy
|
||||
NETWORKS_PROXY_SUBNET_IPV4=172.30.0.0/16
|
||||
NETWORKS_CROWDSEC_NAME=crowdsec
|
||||
NETWORKS_CROWDSEC_SUBNET_IPV4=172.31.0.0/16
|
|
@ -1,6 +0,0 @@
|
|||
|
||||
|
||||
# ----------------------------------
|
||||
# Portainer
|
||||
# ----------------------------------
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
|
||||
|
||||
# ----------------------------------
|
||||
# Redis
|
||||
# ----------------------------------
|
||||
|
||||
|
||||
# ----------------------------------
|
||||
# Laravel Backend
|
||||
# ----------------------------------
|
||||
|
||||
|
||||
# ----------------------------------
|
||||
# Adminer
|
||||
# ----------------------------------
|
|
@ -1,3 +0,0 @@
|
|||
# ----------------------------------
|
||||
# Datenbank (MariaDB)
|
||||
# ----------------------------------
|
|
@ -1,9 +0,0 @@
|
|||
# ----------------------------------
|
||||
# GITEA
|
||||
# ----------------------------------
|
||||
|
||||
|
||||
|
||||
# ----------------------------------
|
||||
# GITEA DB
|
||||
# ----------------------------------
|
|
@ -1,3 +0,0 @@
|
|||
# ----------------------------------
|
||||
# VUE APP
|
||||
# ----------------------------------
|
|
@ -1,4 +0,0 @@
|
|||
# ----------------------------------
|
||||
# TRAEFIK
|
||||
# ----------------------------------
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
# ----------------------------------
|
||||
# NEXTCLOUD DB
|
||||
# ----------------------------------
|
||||
|
||||
|
||||
|
||||
# ----------------------------------
|
||||
# NEXTCLOUD CLOUD
|
||||
# ----------------------------------
|
|
@ -1,4 +0,0 @@
|
|||
# ----------------------------------
|
||||
# KIRBY CMS
|
||||
# ----------------------------------
|
||||
|
Loading…
Reference in New Issue