53 lines
2.4 KiB
Docker
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"]
|