commit 2c6eda0db9ae994bb5c97be471e2a2565cd41e39
Author: Thomas Günther
Date: Thu Jul 2 15:08:55 2026 +0200
docker setup
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..30cf57e
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..0ce3859
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/nexus.iml b/.idea/nexus.iml
new file mode 100644
index 0000000..c956989
--- /dev/null
+++ b/.idea/nexus.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/php.xml b/.idea/php.xml
new file mode 100644
index 0000000..f324872
--- /dev/null
+++ b/.idea/php.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docker-compose.dev b/docker-compose.dev
new file mode 100644
index 0000000..d09d117
--- /dev/null
+++ b/docker-compose.dev
@@ -0,0 +1,61 @@
+services:
+ nexus-app:
+ build:
+ context: .
+ dockerfile: docker/Dockerfile
+ args:
+ UID: 1000
+ GID: 1000
+ networks:
+ - dev-local
+ volumes:
+ - ./:/var/www/html # Dein Code
+
+ nexus-nginx:
+ build:
+ context: .
+ dockerfile: docker/Dockerfile.nginx
+
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.nexus.rule=Host(`nexus.local`)"
+ - "traefik.http.routers.nexus.entrypoints=websecure"
+ - "traefik.http.routers.nexus.tls=true"
+ - "traefik.http.services.nexus.loadbalancer.server.port=80"
+
+ - "traefik.http.routers.nexus-http.rule=Host(`nexus.local`)"
+ - "traefik.http.routers.nexus-http.entrypoints=web"
+ - "traefik.http.routers.nexus-http.middlewares=redirect-to-https"
+
+ # Middleware definieren
+ - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
+ networks:
+ - dev-local
+ depends_on:
+ - nexus-app
+ volumes:
+ - ./:/var/www/html # Dein Code
+ - ./docker/ssl/:/etc/nginx/certs
+ - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
+
+ nexus-frontend:
+ image: node:latest
+ container_name: nexus-frontend
+ working_dir: /var/www/html
+ volumes:
+ - ./:/var/www/html
+ command: >
+ sh -c "
+ while true; do
+ npm run build
+ echo 'Vite Dev-Server beendet. Neustart in 3 Sekunden...'
+ sleep 10
+ done
+ "
+
+ networks:
+ - dev-local
+
+networks:
+ dev-local:
+ external: true
diff --git a/docker-compose.yaml b/docker-compose.yaml
new file mode 100644
index 0000000..3e3fff3
--- /dev/null
+++ b/docker-compose.yaml
@@ -0,0 +1,61 @@
+services:
+ nexus-app:
+ build:
+ context: .
+ dockerfile: docker/Dockerfile
+ args:
+ UID: 1000
+ GID: 1000
+ networks:
+ - dev-local
+ volumes:
+ - ./:/var/www/html # Dein Code
+
+ nexus-nginx:
+ build:
+ context: .
+ dockerfile: docker/Dockerfile.nginx
+
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.nexus.rule=Host(`nexus.local`)"
+ - "traefik.http.routers.nexus.entrypoints=websecure"
+ - "traefik.http.routers.nexus.tls=true"
+ - "traefik.http.services.nexus.loadbalancer.server.port=80"
+
+ - "traefik.http.routers.nexus-http.rule=Host(`nexus.local`)"
+ - "traefik.http.routers.nexus-http.entrypoints=web"
+ - "traefik.http.routers.nexus-http.middlewares=redirect-to-https"
+
+ # Middleware definieren
+ - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
+ networks:
+ - dev-local
+ depends_on:
+ - nexus-app
+ volumes:
+ - ./:/var/www/html # Dein Code
+ - ./docker/ssl/:/etc/nginx/certs
+ - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
+
+ nexus-frontend:
+ image: node:latest
+ container_name: nexus-frontend
+ working_dir: /var/www/html
+ volumes:
+ - ./:/var/www/html
+ command: >
+ sh -c "
+ while true; do
+ npm run build
+ echo 'Vite Dev-Server beendet. Neustart in 3 Sekunden...'
+ sleep 10
+ done
+ "
+
+ networks:
+ - dev-local
+
+networks:
+ dev-local:
+ external: true
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 0000000..8ce4ac6
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,56 @@
+FROM php:8.5-fpm-trixie
+
+ARG UID=1000
+ARG GID=1000
+ENV USER=development
+ENV GROUPNAME=$USER
+
+RUN groupadd -g ${GID} development \
+ && useradd -u ${UID} -g development -m development
+
+# Nginx + Supervisor installieren
+RUN apt-get update
+RUN apt-get install -y nginx \
+ supervisor \
+ bash \
+ mc \
+ git \
+ unzip \
+ libzip-dev \
+ libpng-dev \
+ libonig-dev \
+ libxml2-dev \
+ libmagickwand-dev \
+ imagemagick \
+ && pecl install imagick \
+ && docker-php-ext-enable imagick
+
+ #&& rm -rf /var/lib/apt/lists/* \
+ RUN mkdir -p /run/nginx
+
+RUN docker-php-ext-install mysqli pdo pdo_mysql mbstring zip exif pcntl gd
+
+RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
+ && apt-get install -y nodejs
+
+COPY /docker/php/composer.phar /usr/bin/composer
+
+# Arbeitsverzeichnis
+WORKDIR /var/www/html
+
+# Volumes für persistente Daten
+VOLUME ["/var/www/html"]
+
+# Ports
+EXPOSE 9000
+
+# Start PHP-FPM + Nginx
+CMD ["sh", "-c", "php-fpm -D && nginx -g 'daemon off;'"]
+
+RUN chown -R development:development /var/www
+
+USER development
+
+# PHP-FPM läuft automatisch auf Port 9000
+EXPOSE 9000
+CMD ["php-fpm"]
diff --git a/docker/Dockerfile.nginx b/docker/Dockerfile.nginx
new file mode 100644
index 0000000..4b616c4
--- /dev/null
+++ b/docker/Dockerfile.nginx
@@ -0,0 +1,8 @@
+FROM nginx:latest
+
+WORKDIR /etc/nginx
+
+COPY /docker/nginx/default.conf /etc/nginx/conf.d/default.conf
+
+EXPOSE 80 443
+CMD ["nginx", "-g", "daemon off;"]
\ No newline at end of file
diff --git a/docker/logs/access.log b/docker/logs/access.log
new file mode 100644
index 0000000..e69de29
diff --git a/docker/logs/error.log b/docker/logs/error.log
new file mode 100644
index 0000000..e69de29
diff --git a/docker/logs/mareike.access.log b/docker/logs/mareike.access.log
new file mode 100644
index 0000000..e69de29
diff --git a/docker/logs/mareike.error.log b/docker/logs/mareike.error.log
new file mode 100644
index 0000000..e69de29
diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf
new file mode 100644
index 0000000..67e7acd
--- /dev/null
+++ b/docker/nginx/default.conf
@@ -0,0 +1,45 @@
+# docker/nginx/default.conf
+
+# HTTP → HTTPS
+
+
+server {
+ listen 80;
+ server_name nexus.local;
+
+ ssl_certificate /etc/nginx/certs/nexus.local.pem;
+ ssl_certificate_key /etc/nginx/certs/nexus.local-key.pem;
+
+ ssl_protocols TLSv1.2 TLSv1.3;
+ ssl_prefer_server_ciphers off;
+
+ root /var/www/html/public;
+ index index.php;
+
+ # Logging
+ access_log /var/log/nginx/nexus.access.log combined;
+ error_log /var/log/nginx/nexus.error.log warn;
+
+ location / {
+ try_files $uri $uri/ /index.php?$query_string;
+ }
+
+ location ~ \.php$ {
+ include fastcgi_params;
+ fastcgi_pass nexus-app:9000; # Containername vom PHP-FPM
+ fastcgi_index index.php;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ }
+
+ # In der Nginx-Konfiguration von nexus.local
+ location /build/assets/ {
+ # Erlaubt explizit deine Subdomain
+ add_header 'Access-Control-Allow-Origin' "$http_origin" always;
+ add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always;
+ add_header 'Access-Control-Allow-Headers' 'Content-Type, X-Inertia' always;
+
+ # Falls du alle Subdomains von nexus.local erlauben willst:
+ #
+ }
+}
+
diff --git a/docker/php/composer.phar b/docker/php/composer.phar
new file mode 100644
index 0000000..608b895
Binary files /dev/null and b/docker/php/composer.phar differ
diff --git a/docker/ssl/mareike.local-key.pem b/docker/ssl/mareike.local-key.pem
new file mode 100644
index 0000000..4a0e36f
--- /dev/null
+++ b/docker/ssl/mareike.local-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDAyn8x7h6RGgSF
+aa+mGj+yUK1obpKf9wRwYJ1uy3chK/hT///v3kNvfEOOKC1iUqGw3I493JQGvDzE
+D9jI0XfA/F8EEUghCqfTi+9HU7/6xPZkh6irHCVD2WD8GSUbW0ecxMtDSaMiQRIT
+H/a/4o6g4IlzsY2KQMaId2SpLSJhhLv96dg44PWRSu4PHWBevC8Xdl/6XAKDftV9
+fZBJR2HLIFiKfd8pPa/Ho/5kWeSNkRa9FWUB7B+draraIuwVfVGbG1UutAsKRZXH
+VXo7ffSXPtx2+jmMVm3kIkQMpbJ2Yaw8xqSWotDBoIyV4xZBUWc2TDvgtIEaX+k7
+jqITO9w5AgMBAAECggEAHU7rdUC43uAwrcN6U2sMIeSH6CdfHPhlcVwOsug1jRJt
+Jv/0/Zcxc0JV1see1qKvN/7flOHyku+M4VVzZFwLs4fqPekOqQ9AojVUw+gkeE/3
+ESNabeDSfXUPfGOqM3V19owoRmtsZGm2ALhMP7GGc0iPPMpSNSFRzS8xW1KkNmS+
+MmpBGrRNRu1FAUWxZI51o3mbcI7YKld7+yREjKFNpQrZq9ADAHVk+9oFXvheELJ+
+picQlQKMWAYxazRKryfWf9tkw3dvY//nalYSDo0EQsvEzkvQJHo8Db/c/VAhgSEg
+gdEfh/wrk0YKdpA8EuWNCgQ4Otw9761ifzRLEsKK/QKBgQDCKCdc4sPsMjBAUIKc
+cncFtMMgFUpWOkg7mq8rHKxt6GpdIx8SQKgzV/C1ty9RsrzANb77Eh+wa4i98LeV
+NSU99YEsCxd7whCkPxxhwM4fyXh08pnv+XDbjt5rbewtlxXAuDwWJDIuzib8XYDX
+qmTDLVkYzI70OS0sB5FjlkAybwKBgQD+MvhGH3mq9kEYNgRum9/DjsLMG8rQJsp3
+zFej+cIulwayl7X9Ex/yCU4rBkiVp2YzNP4A/wG3g0aF8QG8SIYuvMGWMU1LSB9F
+mahRyfrdnz2QCVugFOd1mzweYKsBib3PVOl9o8GpFTjr2+o7bPlV9XDHk5UFUIbV
+pk/fT/MP1wKBgBReF/sDguAVR8CHcZwt2dSMaOfFs/2lsYwnJvcT0/bXqcjJdWn5
+xGtWb1bwt5MPeAOF39oAxbhBH6AlT2zknVqJlZpkM3t1GT/Rqw2KJ1VoUi2agZGO
+DkvKCgUlC+Cgd9S2vv7nnygP0kEpIen94wIikLUsSFbQZK+4v4S971AbAoGAN2tF
+VYRnMi6d4nlkXfj9v9TQA0/L17WdTqDuOoGpJB8pBqastpAE1u/QavDjwjzMuz1C
+Y1U1Op0UMv9oMXReTLI6QlRdVZxTtQja+Xnfh5HACjcAEtZ739gIM1c/8QXmq90H
+Sqz4+7P0xPcdCfeoJGVuQRSb2JzFyK6Jm1YC1+ECgYBZ1AktAbPFaLFgtgjDSJfk
+JmAhJt7UIFXBXEyLyJon5tGfc+pwYmWnNTZZfdPgBTr3dVQai7MLg3N10bWrCOeg
+oVd5Qj3/Qf4Dv+TdbY0pWE4+x9Rm5ObFNxccSlvVPMCcWPZ5CVjYBn8UEJA7QOeZ
+nsXmlx5DvodqqmMap9IQuA==
+-----END PRIVATE KEY-----
diff --git a/docker/ssl/mareike.local.pem b/docker/ssl/mareike.local.pem
new file mode 100644
index 0000000..9e1fb6b
--- /dev/null
+++ b/docker/ssl/mareike.local.pem
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEhjCCAu6gAwIBAgIQcVbsFG8e6ruDC2fyvPs8xTANBgkqhkiG9w0BAQsFADCB
+rTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMUEwPwYDVQQLDDhUSE9N
+QVMtVUxUUkFCT09cdGhndWVAVGhvbWFzLVVsdHJhYm9vayAoVGhvbWFzIEfDvG50
+aGVyKTFIMEYGA1UEAww/bWtjZXJ0IFRIT01BUy1VTFRSQUJPT1x0aGd1ZUBUaG9t
+YXMtVWx0cmFib29rIChUaG9tYXMgR8O8bnRoZXIpMB4XDTI2MDEyNzIyMTQzNFoX
+DTI4MDQyNzIxMTQzNFowbDEnMCUGA1UEChMebWtjZXJ0IGRldmVsb3BtZW50IGNl
+cnRpZmljYXRlMUEwPwYDVQQLDDhUSE9NQVMtVUxUUkFCT09cdGhndWVAVGhvbWFz
+LVVsdHJhYm9vayAoVGhvbWFzIEfDvG50aGVyKTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAMDKfzHuHpEaBIVpr6YaP7JQrWhukp/3BHBgnW7LdyEr+FP/
+/+/eQ298Q44oLWJSobDcjj3clAa8PMQP2MjRd8D8XwQRSCEKp9OL70dTv/rE9mSH
+qKscJUPZYPwZJRtbR5zEy0NJoyJBEhMf9r/ijqDgiXOxjYpAxoh3ZKktImGEu/3p
+2Djg9ZFK7g8dYF68Lxd2X/pcAoN+1X19kElHYcsgWIp93yk9r8ej/mRZ5I2RFr0V
+ZQHsH52tqtoi7BV9UZsbVS60CwpFlcdVejt99Jc+3Hb6OYxWbeQiRAylsnZhrDzG
+pJai0MGgjJXjFkFRZzZMO+C0gRpf6TuOohM73DkCAwEAAaNiMGAwDgYDVR0PAQH/
+BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFCZPBarci/Ki
+jTIGa/Of97sbdowJMBgGA1UdEQQRMA+CDW1hcmVpa2UubG9jYWwwDQYJKoZIhvcN
+AQELBQADggGBAFQk4wK4Ui/8j6Qd3mBxbEXCTErNByzmM6FGoo3dNbFe1IVputNC
+izcqHkjWUe1xUYKSPx59O5XwX7MVtvLHvS/ydjuQW7FPdbXv6PQfY81UFtzkGTSX
+mPrP/yXR/OB2BcOXcVAAeOs7s2hM6EEP++0tgdpXGJN1OKG2dt8XyNzFFCrK8HdD
+72dnVBXLPKBnptDKaamFdmRlkvu8n+3Xn4V28nFzfMW5qYY6mzTz64+RZu+i2z2A
+HYP/AkJlr3EdstSsv8eKt6/ByHm3KKwVtkzouPiBiiytjq4qp9vPVsRgL7HKtC4O
+n1eh0rwcjOstwcHqPMmVRaLOLW1FWJG6UOHL8g5p3N1G/aqv4mlUpxmooNohdio+
+zGAgqa7o57MVw4RIGWaKjJ7DNU4VJToV2IQqCoBwLO1UYUuR01qQMAOa4zsHruJt
+2kDGc2GoTyWOEwgDEkgXrhKe1B/MN8LXERvHTYk9rLRicVAo6oazue+O4cGnQC8a
+gjXe0zdvgwd5rQ==
+-----END CERTIFICATE-----