# The chat server in a container: docker compose up -d --build (compose.yaml next to this file).
FROM composer:2 AS vendor
WORKDIR /app
COPY composer.json ./
RUN composer install --no-dev --no-interaction --no-progress --optimize-autoloader --no-scripts --ignore-platform-reqs

FROM php:8.4-cli-alpine
RUN docker-php-ext-install pcntl \
 && addgroup -S chat && adduser -S -G chat chat \
 && mkdir -p /data && chown chat:chat /data
WORKDIR /app
COPY --from=vendor /app/vendor ./vendor
COPY app.php composer.json ./
COPY config ./config
COPY src ./src
ENV CARAMAIL_DATA=/data \
    CARAMAIL_HOST=0.0.0.0 \
    CARAMAIL_PORT=4500 \
    CARAMAIL_WS_PORT=8080
USER chat
VOLUME ["/data"]
EXPOSE 4500 8080
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s \
  CMD php -r '$s=@fsockopen("127.0.0.1",(int)getenv("CARAMAIL_PORT"),$e,$m,2); exit($s && str_starts_with((string)fgets($s),"100\t") ? 0 : 1);'
STOPSIGNAL SIGTERM
ENTRYPOINT ["php", "app.php"]
CMD ["serve"]
