80 lines
2.4 KiB
Docker
80 lines
2.4 KiB
Docker
FROM php:8.4-fpm-alpine AS base
|
|
|
|
LABEL maintainer="Giuseppe Naponiello"
|
|
LABEL version="3.0.0"
|
|
LABEL description="Dynamic Collections Plus is a web platform for building and curating digital collections of archaeological artefacts. Backend container."
|
|
|
|
RUN apk add --no-cache \
|
|
mysql-dev mysql-client \
|
|
libpq libpng-dev libzip-dev \
|
|
zip unzip \
|
|
git \
|
|
oniguruma-dev \
|
|
icu-dev \
|
|
linux-headers \
|
|
nginx supervisor \
|
|
$PHPIZE_DEPS && \
|
|
docker-php-ext-install pdo_mysql gd zip intl bcmath pcntl && \
|
|
pecl install redis pcov && \
|
|
docker-php-ext-enable redis pcov && \
|
|
apk del $PHPIZE_DEPS
|
|
|
|
WORKDIR /var/www/html
|
|
|
|
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
|
|
|
# composer.lock è opzionale finché non viene generato (il glob `*` non fallisce se assente)
|
|
COPY composer.json composer.lock* ./
|
|
|
|
ARG APP_ENV=production
|
|
RUN if [ "$APP_ENV" = "production" ]; then \
|
|
composer install --no-dev --no-scripts --no-autoloader; \
|
|
else \
|
|
composer install --no-scripts --no-autoloader; \
|
|
fi
|
|
|
|
# Copie esplicite (no `COPY . .` — docker:S6470): solo l'app Laravel, così non
|
|
# finiscono nell'immagine .env (segreti), vendor host (dev-deps) o file locali.
|
|
# Il .dockerignore è una rete di sicurezza ulteriore.
|
|
COPY app/ ./app/
|
|
COPY bootstrap/ ./bootstrap/
|
|
COPY config/ ./config/
|
|
COPY database/ ./database/
|
|
COPY public/ ./public/
|
|
COPY resources/ ./resources/
|
|
COPY routes/ ./routes/
|
|
COPY storage/ ./storage/
|
|
COPY artisan ./
|
|
|
|
# Ottimizzazione autoloader + permessi storage
|
|
RUN composer dump-autoload --optimize && \
|
|
chown -R www-data:www-data storage bootstrap/cache && \
|
|
chmod -R 775 storage bootstrap/cache
|
|
|
|
# Entrypoint per migrations e bootstrap
|
|
COPY entrypoint.sh /usr/local/bin/
|
|
RUN chmod +x /usr/local/bin/entrypoint.sh
|
|
|
|
EXPOSE 8000
|
|
|
|
ENTRYPOINT ["entrypoint.sh"]
|
|
|
|
# ----------------------------
|
|
# STAGE: development
|
|
# Override del CMD tramite docker-compose.override.yml:
|
|
# command: ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]
|
|
# ----------------------------
|
|
FROM base AS development
|
|
CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]
|
|
|
|
# ----------------------------
|
|
# STAGE: production
|
|
# Nginx + php-fpm gestiti da supervisord
|
|
# ----------------------------
|
|
FROM base AS production
|
|
|
|
COPY docker/nginx-backend.conf /etc/nginx/http.d/default.conf
|
|
COPY docker/supervisord.conf /etc/supervisord.conf
|
|
|
|
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]
|