diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..bb72ff1 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +node_modules +vendor +.env +Dockerfile +docker-compose.yml +.git +.gitignore diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d65ea2d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,29 @@ +# Stage 1: Build Vue +FROM node:20 as node_builder +WORKDIR /app +COPY package*.json ./ +RUN npm install +COPY . . +RUN npm run build + +# Stage 2: Laravel +FROM php:8.3-fpm + +RUN apt-get update && apt-get install -y \ + git unzip libzip-dev libpng-dev libonig-dev libxml2-dev curl \ + && docker-php-ext-install pdo_mysql zip gd mbstring exif pcntl bcmath + +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer + +WORKDIR /var/www/html + +# Copy source code KECUALI public (biar ga ketiban build Vue) +COPY . . +# Copy hasil build Vue dari stage 1 +COPY --from=node_builder /app/dist /var/www/html/public + +RUN composer install --no-dev --optimize-autoloader +RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache + +EXPOSE 9000 +CMD ["php-fpm"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0acbbfb --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,39 @@ +services: + laravel: + build: + context: . + dockerfile: Dockerfile + container_name: laravel_app + volumes: + - .:/var/www/html + command: php artisan serve --host=0.0.0.0 --port=8000 + ports: + - "8000:8000" + depends_on: + - mysql + environment: + APP_ENV: local + APP_KEY: ${APP_KEY} + DB_CONNECTION: mysql + DB_HOST: mysql + DB_PORT: 3306 + DB_DATABASE: ${DB_DATABASE} + DB_USERNAME: ${DB_USERNAME} + DB_PASSWORD: ${DB_PASSWORD} + + mysql: + image: mysql:8 + container_name: mysql_db + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: laravel + MYSQL_USER: laravel + MYSQL_PASSWORD: laravel + ports: + - "3306:3306" + volumes: + - mysql_data:/var/lib/mysql + +volumes: + mysql_data: