Dockerfile
Rama main · réplica de lectura del repositorio original.
###################################################
FROM node:24.9.0 AS node
FROM composer:2.8.8 AS composer
FROM dunglas/frankenphp:1.13.1-php8.4 AS frankenphp
FROM golang:1.25.4 AS golang
###################################################
################ FRONTEND STAGES ################
###################################################
###################################################
FROM node AS frontend-base
WORKDIR /app/frontend
COPY frontend/package.json frontend/package-lock.json frontend/svelte.config.js frontend/vite.config.ts frontend/tsconfig.json /app/frontend/
RUN npm install
###################################################
FROM frontend-base AS frontend-dev
COPY frontend/package.json frontend/package-lock.json \
frontend/svelte.config.js \
frontend/vite.config.ts \
frontend/.prettier* \
frontend/tsconfig.json /app/frontend/
COPY frontend/src /app/frontend/src
COPY frontend/static /app/frontend/static
CMD ["npm", "run", "dev"]
###################################################
FROM frontend-base AS frontend-prod
COPY frontend/src /app/frontend/src
COPY frontend/static /app/frontend/static
RUN npm run build \
&& find . -maxdepth 1 -not -name build -not -name . -exec rm -rf {} \;
###################################################
################ WORKER STAGES ################
###################################################
###################################################
FROM golang AS worker-dev
WORKDIR /worker
COPY worker/go.mod worker/go.sum /worker/
RUN go mod download
COPY worker/ /worker/
CMD [ "/worker/worker.dev.run" ]
###################################################
FROM golang AS worker
WORKDIR /app/worker
COPY worker/go.mod worker/go.sum /app/worker/
RUN go mod download
COPY worker/ /app/worker/
RUN go build -o ./worker .
###################################################
################ BACKEND STAGES #################
###################################################
###################################################
FROM frankenphp AS backend-base
ARG APP_VERSION=0.0.0
ENV APP_VERSION=${APP_VERSION}
WORKDIR /app/backend
COPY --from=composer /usr/bin/composer /usr/local/bin/composer
RUN install-php-extensions zip intl pdo_pgsql opcache apcu mailparse \
&& apt-get update && apt-get install -y --no-install-recommends supervisor \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
###################################################
FROM backend-base AS backend-dev
RUN install-php-extensions pcov
COPY backend/composer.json backend/composer.lock /app/backend/
RUN composer install
COPY backend /app/backend/
COPY meta/image/dev/Caddyfile.dev /etc/caddy/Caddyfile
COPY meta/image/dev/run.dev /app/run
COPY meta/image/dev/supervisord.conf.dev /etc/supervisor/conf.d/supervisord.conf
CMD ["sh", "/app/run"]
###################################################
FROM backend-base AS final
COPY backend /app/backend
RUN composer install --no-interaction --no-dev --optimize-autoloader --classmap-authoritative
COPY --from=frontend-prod /app/frontend/build /app/static
COPY --from=worker /app/worker/worker /app/worker
COPY meta/image/prod/Caddyfile.prod /etc/caddy/Caddyfile
COPY meta/image/prod/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY meta/image/prod/run.prod /app/run
RUN useradd -m -s /bin/sh chef \
&& apt-get install -y --no-install-recommends libcap2-bin \
&& chown -R chef:chef /app \
&& mkdir -p /data/caddy && chown -R chef:chef /data/caddy \
&& mkdir -p /config/caddy && chown -R chef:chef /config/caddy \
&& setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \
&& setcap CAP_NET_BIND_SERVICE=+eip /app/worker \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
USER chef
EXPOSE 80
EXPOSE 443
EXPOSE 25
EXPOSE 587
EXPOSE 53/udp
CMD ["sh", "/app/run"]