homeos/docker/app/Dockerfile

53 lines
2.4 KiB
Docker

# HomeOS application image — php-fpm 8.4 + nginx + node/vite + supervisor.
# Reused by: app, horizon, scheduler, reverb, mqtt-listener (each overrides `command`).
FROM php:8.4-fpm-bookworm
# --- system packages -------------------------------------------------------
RUN apt-get update && apt-get install -y --no-install-recommends \
git curl unzip zip ca-certificates gnupg procps \
libpq-dev libzip-dev libicu-dev libonig-dev \
nginx supervisor \
&& rm -rf /var/lib/apt/lists/*
# --- PHP extensions --------------------------------------------------------
RUN docker-php-ext-configure intl \
&& docker-php-ext-install -j"$(nproc)" \
pdo_pgsql pgsql bcmath zip intl opcache pcntl sockets \
&& pecl install redis \
&& docker-php-ext-enable redis
# --- Composer --------------------------------------------------------------
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# --- Node 20 (Vite build + dev) -------------------------------------------
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y --no-install-recommends nodejs \
&& rm -rf /var/lib/apt/lists/*
# --- non-root user matching the host uid/gid (clean volume permissions) ----
ARG HOST_UID=1000
ARG HOST_GID=1000
RUN if getent group "${HOST_GID}" >/dev/null; then \
groupmod -n app "$(getent group ${HOST_GID} | cut -d: -f1)"; \
else groupadd -g "${HOST_GID}" app; fi \
&& if getent passwd "${HOST_UID}" >/dev/null; then \
usermod -l app -g "${HOST_GID}" -d /home/app -m "$(getent passwd ${HOST_UID} | cut -d: -f1)"; \
else useradd -u "${HOST_UID}" -g "${HOST_GID}" -m -s /bin/bash app; fi
# --- config ----------------------------------------------------------------
COPY docker/app/php.ini /usr/local/etc/php/conf.d/zz-homeos.ini
COPY docker/app/php-fpm-pool.conf /usr/local/etc/php-fpm.d/zz-homeos.conf
COPY docker/nginx/default.conf /etc/nginx/sites-available/default
COPY docker/app/supervisord.conf /etc/supervisor/conf.d/homeos.conf
# nginx needs writable runtime dirs owned by app
RUN mkdir -p /var/lib/nginx/body /var/log/nginx /run \
&& chown -R app:app /var/lib/nginx /var/log/nginx
WORKDIR /var/www/html
EXPOSE 80 5173 8080
# Default: app service (php-fpm + nginx via supervisor). Other services override command.
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/homeos.conf"]