From 4c8a47210e6c7c10232a17cb359eadd75ef8ac4d Mon Sep 17 00:00:00 2001 From: Alfin Afif Date: Tue, 29 Jul 2025 23:58:50 +0700 Subject: [PATCH] All In --- .gitlab-ci.yml | 36 ++++++++++++++++++++++++ Dockerfile | 34 +++++++++++++++++++++++ docker-compose.yml | 22 +++++++++++++++ entrypoint.sh | 68 +++++++++++++++++++++++++++++++++++++++++++++ slack.env | 69 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 229 insertions(+) create mode 100644 .gitlab-ci.yml create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 entrypoint.sh create mode 100644 slack.env diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..06d95b9 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,36 @@ +stages: + - build + - deploy + +variables: + IMAGE_NAME: pratama-test + IMAGE_TAG: v1.0.0 + CONTAINER_NAME: pratama-test + DOCKER_REGISTRY: registry.mango.local + DOCKER_IMAGE_FULL_PATH: $DOCKER_REGISTRY/pratama/$IMAGE_NAME:$IMAGE_TAG + DOCKER_DRIVER: overlay2 + +build: + stage: build + image: docker:latest + tags: + - docker + services: + - docker:dind + script: + # - docker login -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_PASSWORD $DOCKER_REGISTRY + - docker build -t $IMAGE_NAME:$IMAGE_TAG . + - docker tag $IMAGE_NAME:$IMAGE_TAG $DOCKER_IMAGE_FULL_PATH + - docker push $DOCKER_IMAGE_FULL_PATH + +deploy: + stage: deploy + image: docker:latest + tags: + - docker + services: + - docker:dind + script: + - docker compose down || true + - docker compose build + - docker compose up -d --build diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f41d2c9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,34 @@ +FROM dunglas/frankenphp:1.1-php8.2 + +ENV SERVER_NAME=:80 + +WORKDIR /app + +# Install extension yang dibutuhkan Laravel +RUN apt-get update && apt-get install -y \ + git \ + unzip \ + zip \ + curl \ + libzip-dev \ + libpng-dev \ + libjpeg-dev \ + libfreetype6-dev \ + pkg-config \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install zip pdo pdo_mysql gd bcmath \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + + +# Install composer +RUN curl -sS https://getcomposer.org/installer | php && \ + mv composer.phar /usr/local/bin/composer + +COPY . /app + +COPY entrypoint.sh /entrypoint.sh + +RUN chmod +x /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..2458049 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,22 @@ +services: + app: + container_name: test + image: ${DOCKER_REGISTRY}/pratama/${IMAGE_NAME}:${IMAGE_TAG} + # build: . + ports: + - "8991:80" + env_file: + - slack.env + networks: + - gitlab-repo + + healthcheck: + test: ["CMD", "curl", "--fail", "http://localhost/"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 5s + +networks: + gitlab-repo: + external: true diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..8963e6d --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,68 @@ +#!/bin/sh + +cd /app + +# Install dependency jika belum ada vendor/ +if [ ! -d vendor ]; then + echo "Installing dependencies..." + composer install --no-interaction --prefer-dist --optimize-autoloader +fi + +# Jika file .env tidak ada, copy dari slack.env +if [ ! -f .env ]; then + echo "Copying slack.env to .env" + cp slack.env .env +fi + +# Generate app key jika belum ada +if ! grep -q "APP_KEY=" .env || [ -z "$(php artisan key:generate --show 2>/dev/null)" ]; then + echo "Generating app key..." + php artisan key:generate +fi +# echo "Generating app key..." +# php artisan key:generate + +# Cek apakah database sudah terhubung +if ! php artisan migrate:status > /dev/null 2>&1; then + echo "Database connection failed. Please check your .env file." + exit 1 +fi + +# Cek apakah optimize sudah bersih +if ! php artisan optimize:clear > /dev/null 2>&1; then + echo "Clearing optimize..." + php artisan optimize:clear || { + echo "Optimize clear failed. Please check your Laravel setup." + exit 1 + } +fi + +# Cek apakah config sudah bersih +# if ! php artisan config:clear > /dev/null 2>&1; then +# echo "Clearing config cache..." +# php artisan config:clear || { +# echo "Config clear failed. Please check your Laravel setup." +# exit 1 +# } +# fi + +# Cek apakah route sudah bersih +# if ! php artisan route:clear > /dev/null 2>&1; then +# echo "Clearing route cache..." +# php artisan route:clear || { +# echo "Route clear failed. Please check your Laravel setup." +# exit 1 +# } +# fi + +# Jalankan migrasi +echo "Running migrations..." +#php artisan migrate --force || true +php artisan migrate:fresh --seed --force || true + +echo "Seeding database..." +php artisan db:seed --force || true + +# Start server +echo "Starting Laravel server..." +exec frankenphp php-server --root public diff --git a/slack.env b/slack.env new file mode 100644 index 0000000..7e2b1ce --- /dev/null +++ b/slack.env @@ -0,0 +1,69 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY=base64:PfCPtSPUU+C+slwgUm0TeUzy4sOcDslf0QEYtMt56bs= +APP_DEBUG=true +APP_URL=http://localhost + +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +# APP_MAINTENANCE_STORE=database + +PHP_CLI_SERVER_WORKERS=4 + +BCRYPT_ROUNDS=12 + +LOG_CHANNEL=stack +LOG_STACK=single +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=10.10.30.253 +DB_PORT=3306 +DB_DATABASE=simedkom +DB_USERNAME=simedkom +DB_PASSWORD=l2d7YsJm1EdWT4GvDk6B1URpLAm0Bu9h + +SESSION_DRIVER=database +SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null + +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +CACHE_STORE=database +# CACHE_PREFIX= + +MEMCACHED_HOST=127.0.0.1 + +REDIS_CLIENT=phpredis +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=log +MAIL_SCHEME=null +MAIL_HOST=127.0.0.1 +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +S3_ACCESS_KEY=GCLSD4PCBWV9JJ09X6KB +S3_SECRET_KEY=+ABULfHK6uJ2nUQnymfQtxyssrZmCpGp6uSz7o3b +S3_REGION=pratama-live +S3_BUCKET_NAME=purwakarta-diskominfo-simedkom +S3_ENDPOINT_URL=http://s3.pratama.live +AWS_USE_PATH_STYLE_ENDPOINT=true + +VITE_APP_NAME="${APP_NAME}" + +RECAPTCHA_SITE_KEY=6Lcy9uEoAAAAALWxQu-0kuS_YAjGpDVpdk1FxPL8 +RECAPTCHA_SECRET_KEY=6Lcy9uEoAAAAAIc54Fi8fPEbbJ9kYi9odkmUfdNy