From 75d046228b4ea71a97d469ffde792bfc9743ea47 Mon Sep 17 00:00:00 2001 From: Saufi Date: Wed, 3 Jun 2026 09:11:52 +0800 Subject: [PATCH] docker --- .claude/settings.json | 4 +++- .env.docker | 15 +++++++++++++ docker-compose.yml | 42 ++++++++++++++++++++++++++++++++++++ docker/php-apache/Dockerfile | 35 ++++++++++++++++++++++++++++++ docker/php-apache/vhost.conf | 13 +++++++++++ docker/php/custom.ini | 8 +++++++ 6 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 .env.docker create mode 100644 docker-compose.yml create mode 100644 docker/php-apache/Dockerfile create mode 100644 docker/php-apache/vhost.conf create mode 100644 docker/php/custom.ini diff --git a/.claude/settings.json b/.claude/settings.json index 36ed4a2..b04d423 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -10,7 +10,9 @@ "Bash(del \"c:\\\\Users\\\\User\\\\Aplikasi\\\\prn2026\\\\app\\\\Http\\\\Requests\\\\Admin\\\\Setup\\\\UpdateElectionSettingsRequest.php\")", "Bash(Get-ChildItem -Path \"c:\\\\Users\\\\User\\\\Aplikasi\\\\prn2026\\\\app\\\\Http\\\\Controllers\" -Recurse -Filter \"*Application*\")", "Bash(Select-Object -ExpandProperty FullName)", - "PowerShell(cd c:\\\\Users\\\\User\\\\Aplikasi\\\\prn2026; git add . 2>&1 | Select-Object -First 5; Write-Host \"Exit: $LASTEXITCODE\")" + "PowerShell(cd c:\\\\Users\\\\User\\\\Aplikasi\\\\prn2026; git add . 2>&1 | Select-Object -First 5; Write-Host \"Exit: $LASTEXITCODE\")", + "PowerShell(New-Item -ItemType Directory -Force \"c:\\\\Users\\\\User\\\\Aplikasi\\\\prn2026\\\\docker\\\\php-apache\")", + "PowerShell(New-Item -ItemType Directory -Force \"c:\\\\Users\\\\User\\\\Aplikasi\\\\prn2026\\\\docker\\\\php\")" ], "additionalDirectories": [ "c:\\Users\\User\\.claude\\projects\\c--Users-User-Aplikasi-prn2026\\memory" diff --git a/.env.docker b/.env.docker new file mode 100644 index 0000000..86ad9cf --- /dev/null +++ b/.env.docker @@ -0,0 +1,15 @@ +APP_URL=http://localhost:8000 + +DB_CONNECTION=mysql +DB_HOST=172.17.20.16 +DB_PORT=3306 +DB_DATABASE=prn2026 +DB_USERNAME=root +DB_PASSWORD=1234 + +REDIS_HOST=redis +REDIS_PORT=6379 + +SESSION_DRIVER=database +QUEUE_CONNECTION=database +CACHE_STORE=redis diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..6202f9a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,42 @@ +services: + app: + build: + context: . + dockerfile: docker/php-apache/Dockerfile + container_name: prn2026-app + ports: + - "8000:80" + volumes: + - .:/var/www/html + - ./docker/php/custom.ini:/usr/local/etc/php/conf.d/99-custom.ini + - vendor_cache:/var/www/html/vendor + - node_modules_cache:/var/www/html/node_modules + environment: + APACHE_DOCUMENT_ROOT: /var/www/html/public + APP_ENV: local + APP_DEBUG: "true" + DB_HOST: 172.17.20.16 + DB_PORT: 3306 + DB_DATABASE: prn2026 + DB_USERNAME: root + DB_PASSWORD: "1234" + REDIS_HOST: redis + REDIS_PORT: 6379 + depends_on: + - redis + extra_hosts: + - "host.docker.internal:host-gateway" + + redis: + image: redis:7-alpine + container_name: prn2026-redis + ports: + - "6379:6379" + volumes: + - redis_data:/data + command: redis-server --appendonly yes + +volumes: + redis_data: + vendor_cache: + node_modules_cache: diff --git a/docker/php-apache/Dockerfile b/docker/php-apache/Dockerfile new file mode 100644 index 0000000..300489b --- /dev/null +++ b/docker/php-apache/Dockerfile @@ -0,0 +1,35 @@ +FROM php:8.3-apache + +ENV APACHE_DOCUMENT_ROOT=/var/www/html/public + +# System dependencies +RUN apt-get update && apt-get install -y \ + git \ + curl \ + unzip \ + libzip-dev \ + libpng-dev \ + libjpeg62-turbo-dev \ + libfreetype6-dev \ + libicu-dev \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install pdo_mysql gd intl zip pcntl \ + && pecl install redis \ + && docker-php-ext-enable redis \ + && a2enmod rewrite headers \ + && rm -rf /var/lib/apt/lists/* + +# Node.js 22 LTS (for npm / vite) +RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ + && apt-get install -y nodejs \ + && rm -rf /var/lib/apt/lists/* + +# Composer +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer + +# Apache vhost +COPY docker/php-apache/vhost.conf /etc/apache2/sites-available/000-default.conf + +WORKDIR /var/www/html + +RUN chown -R www-data:www-data /var/www/html diff --git a/docker/php-apache/vhost.conf b/docker/php-apache/vhost.conf new file mode 100644 index 0000000..aec7291 --- /dev/null +++ b/docker/php-apache/vhost.conf @@ -0,0 +1,13 @@ + + ServerAdmin webmaster@localhost + DocumentRoot /var/www/html/public + + + AllowOverride All + Require all granted + Options -Indexes + + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + diff --git a/docker/php/custom.ini b/docker/php/custom.ini new file mode 100644 index 0000000..94aff13 --- /dev/null +++ b/docker/php/custom.ini @@ -0,0 +1,8 @@ +display_errors = On +display_startup_errors = Off +log_errors = On +error_reporting = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED +upload_max_filesize = 20M +post_max_size = 25M +max_execution_time = 120 +memory_limit = 256M