dockerfiles/entrypoint.sh
Rama main · réplica de lectura del repositorio original.
#!/bin/bash
set -euo pipefail
# --- Dependency check (for bind-mount dev scenario) ---
HASH_DIR="/var/www/html/storage/.dep-hashes"
mkdir -p "$HASH_DIR"
# Composer – ohne Dev-Pakete: Entwicklungswerkzeuge (z. B. laravel/dusk) registrieren eigene Routen
# und Login-Hintertüren, sobald APP_ENV nicht "production" ist. Nur COMPOSER_INSTALL_DEV=1 installiert sie.
COMPOSER_FLAGS="--no-interaction"
if [ "${COMPOSER_INSTALL_DEV:-0}" != "1" ]; then
COMPOSER_FLAGS="$COMPOSER_FLAGS --no-dev --optimize-autoloader"
fi
if [ ! -d "vendor" ] || [ -z "$(ls -A vendor 2>/dev/null)" ] || \
([ -f composer.lock ] && ! md5sum -c "$HASH_DIR/composer.lock.md5" &>/dev/null); then
echo "Installing Composer dependencies..."
if [ -f composer.phar ]; then
php composer.phar install $COMPOSER_FLAGS
elif command -v composer &>/dev/null; then
composer install $COMPOSER_FLAGS
else
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
composer install $COMPOSER_FLAGS
fi
md5sum composer.lock > "$HASH_DIR/composer.lock.md5" 2>/dev/null || true
fi
# NPM
if [ ! -d "node_modules" ] || [ -z "$(ls -A node_modules 2>/dev/null)" ] || \
([ -f package-lock.json ] && ! md5sum -c "$HASH_DIR/package-lock.json.md5" &>/dev/null); then
echo "Installing Node dependencies..."
npm install
md5sum package-lock.json > "$HASH_DIR/package-lock.json.md5" 2>/dev/null || true
fi
if [ "${RUN_INIT:-0}" = "1" ]; then
if [ -n "${DB_HOST:-}" ]; then
echo "Warte auf DB ${DB_HOST}:${DB_PORT:-3306}..."
until nc -z "${DB_HOST}" "${DB_PORT:-3306}"; do sleep 1; done
fi
echo "Init..."
php artisan storage:link || true
php artisan artwork:container-update || true
# Solange kein Admin angelegt ist, steht die Setup-URL mit Einmal-Token im Container-Log
# (`docker compose logs artwork`); ohne Token ist /setup gesperrt.
php artisan artwork:setup-token || true
php artisan optimize || true
rm bootstrap/cache/config.php || true
npm run build
fi
chown -R www-data:www-data /var/www/html/storage/
chown -R www-data:www-data /var/www/html/bootstrap/cache
# Passport/league-oauth2 verlangt 600/660 für die OAuth-Keys; bei 644 bricht jeder API-Request mit 500 ab.
# Fehlen die Keys (z. B. per PASSPORT_*_KEY aus der .env), schlägt chmod fehl – das ist gewollt egal.
chmod 600 /var/www/html/storage/oauth-private.key /var/www/html/storage/oauth-public.key 2>/dev/null || true
touch /tmp/init_ready
exec "$@"