- Key saved to storage/app/.app_key (persistent volume) - On redeploy: restored automatically from volume - On first deploy: generated and saved - No manual Dokploy env var needed
143 lines
4.5 KiB
Bash
Executable File
143 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
echo "========================================="
|
|
echo " TerManager2 - Entrypoint"
|
|
echo "========================================="
|
|
|
|
# -----------------------------------------------
|
|
# 0. Sync application code from image to volume
|
|
# -----------------------------------------------
|
|
if [ ! -f /var/www/html/artisan ]; then
|
|
echo "[*] Syncing application code to volume..."
|
|
cp -a /app-src/. /var/www/html/
|
|
else
|
|
echo "[✓] Application code already in volume."
|
|
fi
|
|
|
|
# -----------------------------------------------
|
|
# 0b. Create required directories
|
|
# -----------------------------------------------
|
|
mkdir -p storage/framework/{cache,sessions,views}
|
|
mkdir -p storage/logs
|
|
mkdir -p bootstrap/cache
|
|
|
|
# -----------------------------------------------
|
|
# 1. .env file (must exist before composer/artisan)
|
|
# -----------------------------------------------
|
|
if [ ! -f .env ]; then
|
|
echo "[*] Creating .env from .env.example..."
|
|
cp .env.example .env
|
|
fi
|
|
|
|
# Override .env values with Docker environment variables (if set)
|
|
# This ensures Dokploy env vars take precedence
|
|
if [ -n "$APP_KEY" ]; then
|
|
sed -i "s|^APP_KEY=.*|APP_KEY=${APP_KEY}|" .env
|
|
fi
|
|
if [ -n "$APP_URL" ]; then
|
|
sed -i "s|^APP_URL=.*|APP_URL=${APP_URL}|" .env
|
|
fi
|
|
if [ -n "$DB_HOST" ]; then
|
|
sed -i "s|^DB_HOST=.*|DB_HOST=${DB_HOST}|" .env
|
|
fi
|
|
if [ -n "$DB_DATABASE" ]; then
|
|
sed -i "s|^DB_DATABASE=.*|DB_DATABASE=${DB_DATABASE}|" .env
|
|
fi
|
|
if [ -n "$DB_USERNAME" ]; then
|
|
sed -i "s|^DB_USERNAME=.*|DB_USERNAME=${DB_USERNAME}|" .env
|
|
fi
|
|
if [ -n "$DB_PASSWORD" ]; then
|
|
sed -i "s|^DB_PASSWORD=.*|DB_PASSWORD=${DB_PASSWORD}|" .env
|
|
fi
|
|
if [ -n "$REDIS_HOST" ]; then
|
|
sed -i "s|^REDIS_HOST=.*|REDIS_HOST=${REDIS_HOST}|" .env
|
|
fi
|
|
if [ -n "$REDIS_PASSWORD" ]; then
|
|
sed -i "s|^REDIS_PASSWORD=.*|REDIS_PASSWORD=${REDIS_PASSWORD}|" .env
|
|
fi
|
|
echo "[✓] .env file ready."
|
|
|
|
# -----------------------------------------------
|
|
# 2. Application key (persisted in storage volume)
|
|
# -----------------------------------------------
|
|
KEY_FILE="/var/www/html/storage/app/.app_key"
|
|
|
|
if [ -f "$KEY_FILE" ]; then
|
|
# Restore key from persistent volume
|
|
STORED_KEY=$(cat "$KEY_FILE")
|
|
sed -i "s|^APP_KEY=.*|APP_KEY=${STORED_KEY}|" .env
|
|
echo "[✓] Application key restored from storage."
|
|
elif grep -q "^APP_KEY=$" .env; then
|
|
# No stored key and .env has empty key: generate new one
|
|
echo "[*] Generating application key..."
|
|
php artisan key:generate --ansi
|
|
# Save to persistent volume
|
|
grep '^APP_KEY=' .env | cut -d= -f2- > "$KEY_FILE"
|
|
echo "[✓] Application key saved to persistent storage."
|
|
else
|
|
# .env already has a key (from env var override or .env.example), persist it
|
|
grep '^APP_KEY=' .env | cut -d= -f2- > "$KEY_FILE"
|
|
echo "[✓] Application key already set, saved to persistent storage."
|
|
fi
|
|
|
|
# -----------------------------------------------
|
|
# 3. Composer install
|
|
# -----------------------------------------------
|
|
if [ ! -f vendor/autoload.php ]; then
|
|
echo "[*] Installing Composer dependencies..."
|
|
composer install --no-interaction --optimize-autoloader
|
|
else
|
|
echo "[✓] Composer dependencies already installed."
|
|
fi
|
|
|
|
# -----------------------------------------------
|
|
# 4. NPM install & build assets
|
|
# -----------------------------------------------
|
|
if [ ! -d node_modules ]; then
|
|
echo "[*] Installing NPM dependencies..."
|
|
npm ci
|
|
else
|
|
echo "[✓] NPM dependencies already installed."
|
|
fi
|
|
|
|
if [ ! -d public/build ]; then
|
|
echo "[*] Building frontend assets..."
|
|
npm run build
|
|
else
|
|
echo "[✓] Frontend assets already built."
|
|
fi
|
|
|
|
# -----------------------------------------------
|
|
# 5. Storage link
|
|
# -----------------------------------------------
|
|
if [ ! -L public/storage ]; then
|
|
echo "[*] Creating storage symlink..."
|
|
php artisan storage:link
|
|
else
|
|
echo "[✓] Storage symlink already exists."
|
|
fi
|
|
|
|
# -----------------------------------------------
|
|
# 7. Run migrations
|
|
# -----------------------------------------------
|
|
echo "[*] Running database migrations..."
|
|
php artisan migrate --force
|
|
|
|
# -----------------------------------------------
|
|
# 8. Cache config/routes/views
|
|
# -----------------------------------------------
|
|
echo "[*] Caching configuration..."
|
|
php artisan config:cache
|
|
php artisan route:cache
|
|
php artisan view:cache
|
|
|
|
echo "========================================="
|
|
echo " TerManager2 - Ready!"
|
|
echo "========================================="
|
|
|
|
# -----------------------------------------------
|
|
# Execute CMD (default: php-fpm)
|
|
# -----------------------------------------------
|
|
exec "$@"
|