- docker/php/Dockerfile: PHP 8.4-FPM + GD + imagick (PECL) + semua extension Laravel - docker/php/php.ini: upload 20MB, memory 512MB, opcache, Asia/Kuala_Lumpur - docker/php/php-dev.ini: validate_timestamps=1, display_errors=On (dev) - docker/nginx/default.conf: gzip, security headers, static asset caching - docker/entrypoint.sh: tunggu MySQL → migrate → seed AdminSeeder → cache (prod) - docker-compose.yml: dev stack — port 8003, DB host 33060, queue worker - docker-compose.prod.yml: production overrides — storage volume, no DB port exposed - .env.docker: template env untuk Docker (DB_HOST=db) - .dockerignore: exclude node_modules, vendor, .env, logs fix: testGenerate try/catch kembalikan JSON error (bukan HTML 500) fix: loadPreview() semak r.ok, tunjuk error alert, loading spinner Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
71 lines
2.9 KiB
Docker
71 lines
2.9 KiB
Docker
###############################################################################
|
|
# eCert MBIP — PHP-FPM Runtime Image
|
|
# PHP 8.4 + GD + imagick + semua extension Laravel
|
|
###############################################################################
|
|
FROM php:8.4-fpm
|
|
|
|
LABEL org.opencontainers.image.title="eCert MBIP" \
|
|
org.opencontainers.image.description="Sistem Pengurusan Sijil Digital MBIP"
|
|
|
|
# ── System libraries ──────────────────────────────────────────────────────────
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
git \
|
|
curl \
|
|
zip \
|
|
unzip \
|
|
# zip extension
|
|
libzip-dev \
|
|
# GD: PNG, JPEG, WebP, FreeType
|
|
libpng-dev \
|
|
libjpeg62-turbo-dev \
|
|
libfreetype6-dev \
|
|
libwebp-dev \
|
|
# mbstring
|
|
libonig-dev \
|
|
# xml / intl
|
|
libxml2-dev \
|
|
libicu-dev \
|
|
# imagick
|
|
libmagickwand-dev \
|
|
# mysql client (wait-for-db in entrypoint)
|
|
default-mysql-client \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# ── GD (untuk Intervention Image — GD driver) ─────────────────────────────────
|
|
RUN docker-php-ext-configure gd \
|
|
--with-freetype \
|
|
--with-jpeg \
|
|
--with-webp \
|
|
&& docker-php-ext-install -j$(nproc) gd
|
|
|
|
# ── Core PHP extensions ───────────────────────────────────────────────────────
|
|
RUN docker-php-ext-install -j$(nproc) \
|
|
pdo_mysql \
|
|
mbstring \
|
|
exif \
|
|
pcntl \
|
|
bcmath \
|
|
zip \
|
|
intl \
|
|
opcache
|
|
|
|
# ── imagick (PECL) — tersedia sebagai driver alternatif ───────────────────────
|
|
RUN pecl install imagick \
|
|
&& docker-php-ext-enable imagick \
|
|
&& rm -rf /tmp/pear
|
|
|
|
# ── Composer ──────────────────────────────────────────────────────────────────
|
|
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
|
|
|
|
# ── Working directory ─────────────────────────────────────────────────────────
|
|
WORKDIR /var/www
|
|
|
|
# ── Entrypoint ────────────────────────────────────────────────────────────────
|
|
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
|
|
RUN chmod +x /usr/local/bin/entrypoint.sh
|
|
|
|
EXPOSE 9000
|
|
|
|
ENTRYPOINT ["entrypoint.sh"]
|
|
CMD ["php-fpm"]
|