93 lines
3.8 KiB
Bash
93 lines
3.8 KiB
Bash
#!/bin/sh
|
|
# ──────────────────────────────────────────────────────────────────────────────
|
|
# eCert MBIP — Container Entrypoint
|
|
# Jalankan sebelum php-fpm bermula:
|
|
# 1. Tunggu MySQL
|
|
# 2. Install Composer deps (dev sahaja)
|
|
# 3. Generate APP_KEY jika tiada
|
|
# 4. Migrate + seed AdminSeeder
|
|
# 5. Storage link
|
|
# 6. Cache (prod sahaja)
|
|
# ──────────────────────────────────────────────────────────────────────────────
|
|
set -e
|
|
|
|
echo ""
|
|
echo "╔══════════════════════════════════════╗"
|
|
echo "║ eCert MBIP — Container Start ║"
|
|
echo "╚══════════════════════════════════════╝"
|
|
echo ""
|
|
|
|
# ── 1. Tunggu MySQL bersedia ──────────────────────────────────────────────────
|
|
DB_HOST="${DB_HOST:-host.docker.internal}"
|
|
DB_PORT="${DB_PORT:-3306}"
|
|
DB_DATABASE="${DB_DATABASE:-ecert_mbip}"
|
|
DB_USERNAME="${DB_USERNAME:-root}"
|
|
DB_PASSWORD="${DB_PASSWORD:-secret}"
|
|
|
|
echo "⏳ Menunggu MySQL di ${DB_HOST}:${DB_PORT}..."
|
|
|
|
until php -r "
|
|
try {
|
|
new PDO(
|
|
'mysql:host=${DB_HOST};port=${DB_PORT};dbname=${DB_DATABASE}',
|
|
'${DB_USERNAME}',
|
|
'${DB_PASSWORD}'
|
|
);
|
|
exit(0);
|
|
} catch (Exception \$e) {
|
|
exit(1);
|
|
}
|
|
" 2>/dev/null; do
|
|
printf "."
|
|
sleep 2
|
|
done
|
|
echo ""
|
|
echo "✓ MySQL bersedia."
|
|
|
|
# ── 2. Pasang Composer dependencies (development sahaja) ─────────────────────
|
|
if [ "${APP_ENV}" != "production" ] && [ ! -d /var/www/vendor ]; then
|
|
echo "📦 Memasang Composer dependencies (dev)..."
|
|
composer install \
|
|
--no-interaction \
|
|
--no-progress \
|
|
--prefer-dist
|
|
fi
|
|
|
|
# ── 2b. Fix storage permissions (penting untuk named volume di production) ────
|
|
chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache 2>/dev/null || true
|
|
chmod -R 775 /var/www/storage /var/www/bootstrap/cache 2>/dev/null || true
|
|
|
|
# ── 3. Generate APP_KEY jika kosong ───────────────────────────────────────────
|
|
if [ -z "${APP_KEY}" ] || [ "${APP_KEY}" = "" ]; then
|
|
echo "🔑 Menjana APP_KEY..."
|
|
php artisan key:generate --force
|
|
fi
|
|
|
|
# ── 4. Database migration ─────────────────────────────────────────────────────
|
|
echo "🗄 Menjalankan migration..."
|
|
php artisan migrate --force
|
|
|
|
# Seed admin account (idempotent — guna firstOrCreate)
|
|
echo "👤 Seeding AdminSeeder..."
|
|
php artisan db:seed --class=AdminSeeder --force
|
|
|
|
# ── 5. Storage symbolic link ──────────────────────────────────────────────────
|
|
php artisan storage:link 2>/dev/null || true
|
|
|
|
# ── 6. Cache (production sahaja) ──────────────────────────────────────────────
|
|
if [ "${APP_ENV}" = "production" ]; then
|
|
echo "⚡ Caching config, routes, views..."
|
|
php artisan config:cache
|
|
php artisan route:cache
|
|
php artisan view:cache
|
|
php artisan event:cache
|
|
# Opcache: matikan validate_timestamps untuk prestasi
|
|
# (sudah dikonfigur dalam php.ini prod)
|
|
fi
|
|
|
|
echo ""
|
|
echo "✅ Aplikasi bersedia."
|
|
echo ""
|
|
|
|
exec "$@"
|