diff --git a/.env b/.env new file mode 100644 index 0000000..51a6fea --- /dev/null +++ b/.env @@ -0,0 +1,8 @@ +# Domeny +DOMAIN=helpdesk.local.example.com + +# Baza danych +MYSQL_ROOT_PASSWORD=rootpass123 +MYSQL_DATABASE=helpdesk +MYSQL_USER=helpdesk +MYSQL_PASSWORD=helpdesk123 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..97a7671 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,55 @@ +FROM php:8.4-fpm-alpine + +LABEL maintainer="Kacper Żbikowski " + +# Ustawienia środowiska +ENV DEBIAN_FRONTEND=noninteractive + +# Aktualizacja systemu i instalacja zależności systemowych +RUN apt-get update && apt-get install -y \ + libldap2-dev \ + libpq-dev \ + libzip-dev \ + libpng-dev \ + libjpeg-dev \ + libfreetype6-dev \ + libicu-dev \ + libonig-dev \ + sendmail \ + git \ + unzip \ + && rm -rf /var/lib/apt/lists/* + +# Konfiguracja i instalacja rozszerzeń PHP +RUN docker-php-ext-configure ldap --with-ldap=/usr \ + && docker-php-ext-install ldap pdo pdo_mysql pdo_pgsql intl mbstring zip gd + +# Instalacja Composer’a (globalnie) +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer + +# Instalacja PHPMailer (lub innego mailera) – globalnie +RUN composer global require phpmailer/phpmailer + +# Dodanie ścieżki do Composer bin do PATH +ENV PATH="/root/.composer/vendor/bin:${PATH}" + +# Skopiowanie plików aplikacji +WORKDIR /var/www/html +COPY . /var/www/html + +# Uprawnienia (dla PHP-FPM) +RUN chown -R www-data:www-data /var/www/html + +# Opcjonalne ustawienia PHP (uploady, timezone itd.) +RUN { \ + echo "upload_max_filesize=20M"; \ + echo "post_max_size=25M"; \ + echo "memory_limit=512M"; \ + echo "date.timezone=Europe/Warsaw"; \ + } > /usr/local/etc/php/conf.d/custom.ini + +# Ekspozycja portu PHP-FPM +EXPOSE 9000 + +# Uruchomienie procesu PHP-FPM +CMD ["php-fpm"] \ No newline at end of file diff --git a/README.md b/README.md index 9102bbc..cb7c312 100644 --- a/README.md +++ b/README.md @@ -201,8 +201,4 @@ Route::prefix('api/v1')->group(function(){ * Wygenerować gotowy plik routingu `routes/web.php` dla Laravel/Lumen. * Przygotować specyfikację API (OpenAPI/Swagger) dla `api/v1`. -* Wygenerować przykładowe kontrolery i middleware skeletony. - ---- - -Jeżeli chcesz, w następnym kroku wygeneruję konkretną implementację routingu dla wybranego frameworka (np. Laravel, Slim, Symfony). +* Wygenerować przykładowe kontrolery i middleware skeletony. \ No newline at end of file diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..94a09e3 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,55 @@ +version: "3.9" + +services: + mariadb: + image: mariadb + container_name: helpdesk-db + env_file: + - .env + volumes: + - ./mariadb:/var/lib/mysql + - ./initdb:/docker-entrypoint-initdb.d + networks: + - internal + restart: unless-stopped + labels: + - com.centurylinklabs.watchtower.enable=true + + nginx: + image: nginx:stable-alpine + container_name: helpdesk-nginx + depends_on: + - php + volumes: + - ./nginx/conf.d:/etc/nginx/conf.d + - ./src:/var/www/html + networks: + - internal + - traefik_proxy + labels: + - traefik.enable=true + - traefik.docker.network=traefik_public + - traefik.http.routers.helpdesk.rule=Host(`${DOMAIN}`) + - traefik.http.routers.helpdesk.entrypoints=websecure + - traefik.http.routers.helpdesk.tls=true + - traefik.http.routers.helpdesk.tls.certresolver=tls-resolver + - com.centurylinklabs.watchtower.enable=true + restart: unless-stopped + + php: + build: + context: . + dockerfile: Dockerfile + container_name: helpdesk-php + env_file: + - .env + volumes: + - ./src:/var/www/html + networks: + - internal + restart: unless-stopped + +networks: + internal: + traefik_proxy: + external: true diff --git a/initdb/001_create_tables.sql b/initdb/001_create_tables.sql new file mode 100644 index 0000000..e69de29 diff --git a/initdb/002_insert_defaults.sql b/initdb/002_insert_defaults.sql new file mode 100644 index 0000000..e69de29 diff --git a/initdb/003_custom_init.sh b/initdb/003_custom_init.sh new file mode 100644 index 0000000..0b1c996 --- /dev/null +++ b/initdb/003_custom_init.sh @@ -0,0 +1,2 @@ +#!/bin/bash +echo ">>> Wykonuję dodatkową inicjalizację..." \ No newline at end of file diff --git a/nginx/conf.d b/nginx/conf.d new file mode 100644 index 0000000..0cf1c0a --- /dev/null +++ b/nginx/conf.d @@ -0,0 +1,22 @@ +server { + listen 80; + server_name _; + + root /var/www/html/public; + index index.php index.html; + + location / { + try_files $uri /index.php?$query_string; + } + + location ~ \\.php$ { + include fastcgi_params; + fastcgi_pass php:9000; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_index index.php; + } + + location ~ /\\.ht { + deny all; + } +}