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-----