This commit is contained in:
Alfin Afif 2025-07-29 23:58:50 +07:00
parent cf3bb6e470
commit 4c8a47210e
5 changed files with 229 additions and 0 deletions

36
.gitlab-ci.yml Normal file
View File

@ -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

34
Dockerfile Normal file
View File

@ -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"]

22
docker-compose.yml Normal file
View File

@ -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

68
entrypoint.sh Normal file
View File

@ -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

69
slack.env Normal file
View File

@ -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