# TEMPLATE — image de production de l'API d'une coquille.
#
# Dépendances installées depuis le registre Composer public de Forgejo
# (clauzier/cms-core) : AUCUN token requis ni embarqué. Copier dans
# <coquille>/api/Dockerfile tel quel.

FROM php:8.5-cli-alpine

RUN apk add --no-cache git unzip bash sqlite-dev pkgconfig fcgi

# pdo_sqlite pour la base embarquée.
RUN docker-php-ext-install pdo_sqlite

COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

WORKDIR /app

# Dépendances d'abord (cache layer). Retry ×3 : les dists pointent
# api.github.com, parfois capricieux depuis les petits VPS.
COPY composer.json composer.lock ./
RUN COMPOSER_ALLOW_SUPERUSER=1 composer install \
    --prefer-dist --no-dev --no-interaction --no-progress --no-scripts \
 || { sleep 8; COMPOSER_ALLOW_SUPERUSER=1 composer install \
    --prefer-dist --no-dev --no-interaction --no-progress --no-scripts; } \
 || { sleep 20; COMPOSER_ALLOW_SUPERUSER=1 composer install \
    --prefer-dist --no-dev --no-interaction --no-progress --no-scripts; }

# Code applicatif. .dockerignore DOIT contenir vendor/ (sinon il écrase
# l'install --no-dev), node_modules, .git, .env.
COPY . .

ENV COMPOSER_ALLOW_SUPERUSER=1

# Sans .env le boot API Platform casse (métadonnées corrompues) et
# package:discover exige une base existante : fichier sqlite créé ici,
# valeurs réelles fournies par l'environnement Coolify au run.
RUN cp -n .env.example .env \
    && mkdir -p database storage/framework/cache/data storage/framework/sessions \
       storage/framework/views storage/logs bootstrap/cache \
    && touch database/database.sqlite \
    && php artisan key:generate --force \
    && chown -R www-data:www-data storage database bootstrap/cache

VOLUME ["/app/database"]

# Purger TOUS les stores au boot (le cache métadonnées API Platform vit
# sur le store 'file'), migrations idempotentes, serveur.
EXPOSE 8000
CMD ["sh", "-c", "php artisan optimize:clear >/dev/null 2>&1 || true; php artisan cache:clear --store=file >/dev/null 2>&1 || true; php artisan migrate --force && exec php artisan serve --host=0.0.0.0 --port=8000"]
