11# hadolint global ignore=DL3008
22
3- FROM debian:12.8-slim AS php-base
3+ FROM dunglas/frankenphp:1.4.4-php8.4-bookworm as php-base
44
5- SHELL ["/bin/bash" , "-o" , "pipefail" , "-c" ]
5+ RUN install-php-extensions \
6+ intl \
7+ opcache \
8+ pdo_pgsql \
9+ uuid
610
7- RUN apt-get update \
8- && apt-get install -y --no-install-recommends \
9- curl \
10- ca-certificates \
11- gnupg \
12- && curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb \
13- && dpkg -i /tmp/debsuryorg-archive-keyring.deb \
14- && echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php bookworm main" > /etc/apt/sources.list.d/sury.list \
15- && apt-get clean \
16- && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
17-
18- RUN apt-get update \
19- && apt-get install -y --no-install-recommends \
20- bash-completion \
21- procps \
22- && apt-get clean \
23- && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
24-
25- ARG PHP_VERSION
26-
27- RUN apt-get update \
28- && apt-get install -y --no-install-recommends \
29- "php${PHP_VERSION}-apcu" \
30- "php${PHP_VERSION}-bcmath" \
31- "php${PHP_VERSION}-cli" \
32- "php${PHP_VERSION}-common" \
33- "php${PHP_VERSION}-curl" \
34- "php${PHP_VERSION}-iconv" \
35- "php${PHP_VERSION}-intl" \
36- "php${PHP_VERSION}-mbstring" \
37- "php${PHP_VERSION}-pgsql" \
38- "php${PHP_VERSION}-uuid" \
39- "php${PHP_VERSION}-xml" \
40- "php${PHP_VERSION}-zip" \
41- && apt-get clean \
42- && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
11+ COPY ./base/php.ini $PHP_INI_DIR/conf.d/app-base.ini
4312
4413# Fake user to maps with the one on the host
4514ARG USER_ID
46- COPY entrypoint /
4715RUN addgroup --gid $USER_ID app && \
4816 adduser --system --uid $USER_ID --home /home/app --shell /bin/bash app && \
4917 curl -Ls https://github.com/tianon/gosu/releases/download/1.17/gosu-amd64 | \
50- install /dev/stdin /usr/local/bin/gosu && \
51- sed "s/{{ application_user }}/app/g" -i /entrypoint
52-
53- # Configuration
54- COPY base/php-configuration /etc/php/${PHP_VERSION}
55-
56- ENV PHP_VERSION=${PHP_VERSION}
18+ install /dev/stdin /usr/local/bin/gosu
5719
58- WORKDIR /var/www
20+ COPY entrypoint /
5921
60- ENTRYPOINT [ "/entrypoint" ]
22+ ENTRYPOINT ["/entrypoint" ]
6123
6224FROM php-base AS frontend
6325
64- RUN apt-get update \
65- && apt-get install -y --no-install-recommends \
66- nginx \
67- "php${PHP_VERSION}-fpm" \
68- runit \
69- && apt-get clean \
70- && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* \
71- && rm -r "/etc/php/${PHP_VERSION}/fpm/pool.d/"
26+ RUN setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp && \
27+ chown -R ${USER_ID}:${USER_ID} /data/caddy && \
28+ chown -R ${USER_ID}:${USER_ID} /config/caddy
7229
73- RUN useradd -s /bin/false nginx
30+ COPY ./frontend/etc/. /etc/
31+ COPY ./frontend/php.ini $PHP_INI_DIR/conf.d/app-frontend.ini
7432
75- COPY frontend/php-configuration /etc/php/${PHP_VERSION}
76- COPY frontend/etc/nginx/. /etc/nginx/
77- COPY frontend/etc/service/. /etc/service/
33+ WORKDIR /var/www
7834
79- RUN phpenmod app-default \
80- && phpenmod app-fpm
35+ CMD [ "frankenphp" , "run" , "--config" , "/etc/caddy/Caddyfile" , "--adapter" , "caddyfile" ]
8136
8237EXPOSE 80
8338
84- CMD ["runsvdir" , "-P" , "/etc/service" ]
85-
8639FROM php-base AS worker
8740
8841FROM php-base AS builder
8942
9043SHELL ["/bin/bash" , "-o" , "pipefail" , "-c" ]
9144
45+ # Default toys
46+ RUN apt-get update \
47+ && apt-get install -y --no-install-recommends \
48+ ca-certificates \
49+ gnupg \
50+ && apt-get clean \
51+ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
52+
9253ARG NODEJS_VERSION=20.x
9354RUN curl -s https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg \
9455 && echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODEJS_VERSION} nodistro main" > /etc/apt/sources.list.d/nodesource.list
9556
9657# Default toys
9758RUN apt-get update \
9859 && apt-get install -y --no-install-recommends \
60+ bash-completion \
61+ ca-certificates \
62+ curl \
9963 git \
10064 make \
10165 nodejs \
66+ procps \
10267 sudo \
10368 unzip \
10469 && apt-get clean \
10570 && npm install -g yarn@1.22 \
10671 && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
10772
108- # Config
109- COPY builder/etc/. /etc/
110- COPY builder/php-configuration /etc/php/${PHP_VERSION}
111- RUN adduser app sudo \
112- && mkdir /var/log/php \
113- && chmod 777 /var/log/php \
114- && phpenmod app-default \
115- && phpenmod app-builder
116-
11773# Composer
11874COPY --from=composer/composer:2.8.4 /usr/bin/composer /usr/bin/composer
119- RUN mkdir -p "/home/app/.composer/cache" \
120- && chown app: /home/app/.composer -R
12175
12276ADD https://raw.githubusercontent.com/symfony/symfony/refs/heads/7.2/src/Symfony/Component/Console/Resources/completion.bash /tmp/completion.bash
12377
@@ -133,6 +87,13 @@ RUN sed /tmp/completion.bash \
13387 -e "s/{{ VERSION }}/1/g" \
13488 > /etc/bash_completion.d/console
13589
90+ # Config
91+ COPY ./builder/php.ini $PHP_INI_DIR/conf.d/app-builder.ini
92+ COPY builder/etc/. /etc/
93+ RUN adduser app sudo \
94+ && mkdir /var/log/php \
95+ && chmod 777 /var/log/php
96+
13697# Third party tools
13798ENV PATH="$PATH:/var/www/tools/bin"
13899
0 commit comments