92 lines
2.0 KiB
Docker
92 lines
2.0 KiB
Docker
# ========================================
|
|
# Stage 1: Build Frontend Assets (Vue.js)
|
|
# ========================================
|
|
FROM node:20-alpine as node_builder
|
|
|
|
WORKDIR /app
|
|
|
|
# Copy package files untuk caching layer
|
|
COPY package*.json ./
|
|
|
|
# Install dependencies
|
|
RUN npm ci --legacy-peer-deps
|
|
|
|
# Copy seluruh source code
|
|
COPY . .
|
|
|
|
# Build production assets
|
|
RUN npm run build
|
|
|
|
# ========================================
|
|
# Stage 2: Laravel Application
|
|
# ========================================
|
|
FROM php:8.3-fpm-alpine
|
|
|
|
# Install system dependencies dan PHP extensions
|
|
RUN apk update && apk add --no-cache \
|
|
git \
|
|
unzip \
|
|
libzip-dev \
|
|
libpng-dev \
|
|
oniguruma-dev \
|
|
libxml2-dev \
|
|
curl \
|
|
mysql-client \
|
|
autoconf \
|
|
g++ \
|
|
make \
|
|
&& docker-php-ext-install \
|
|
pdo_mysql \
|
|
zip \
|
|
gd \
|
|
mbstring \
|
|
exif \
|
|
pcntl \
|
|
bcmath \
|
|
&& pecl install redis \
|
|
&& docker-php-ext-enable redis \
|
|
&& apk del autoconf g++ make \
|
|
&& rm -rf /var/cache/apk/* /tmp/*
|
|
|
|
# Install Composer
|
|
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
|
|
|
|
# Set working directory
|
|
WORKDIR /var/www/html
|
|
|
|
# Copy composer files untuk caching layer
|
|
COPY composer.json composer.lock ./
|
|
|
|
# Install PHP dependencies
|
|
RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist
|
|
|
|
# Copy application source code
|
|
COPY . .
|
|
|
|
# Copy hasil build Vue dari stage 1
|
|
COPY --from=node_builder /app/public/build /var/www/html/public/build
|
|
|
|
# Generate autoload files dengan optimasi
|
|
RUN composer dump-autoload --optimize --classmap-authoritative
|
|
|
|
# Create required directories dan set permissions
|
|
RUN mkdir -p \
|
|
storage/framework/cache \
|
|
storage/framework/sessions \
|
|
storage/framework/views \
|
|
storage/logs \
|
|
bootstrap/cache \
|
|
&& chown -R www-data:www-data \
|
|
/var/www/html/storage \
|
|
/var/www/html/bootstrap/cache \
|
|
&& chmod -R 775 \
|
|
/var/www/html/storage \
|
|
/var/www/html/bootstrap/cache
|
|
|
|
# Switch ke user non-root untuk keamanan
|
|
USER www-data
|
|
|
|
EXPOSE 9000
|
|
|
|
CMD ["php-fpm"]
|