# 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"]