1
1
# hadolint global ignore=DL3008
2
2
3
- FROM debian:12.8-slim AS php-base
3
+ FROM dunglas/frankenphp:1.4.4-php8.4-bookworm as php-base
4
4
5
- SHELL ["/bin/bash" , "-o" , "pipefail" , "-c" ]
5
+ RUN install-php-extensions \
6
+ intl \
7
+ opcache \
8
+ pdo_pgsql \
9
+ uuid
6
10
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
43
12
44
13
# Fake user to maps with the one on the host
45
14
ARG USER_ID
46
- COPY entrypoint /
47
15
RUN addgroup --gid $USER_ID app && \
48
16
adduser --system --uid $USER_ID --home /home/app --shell /bin/bash app && \
49
17
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
57
19
58
- WORKDIR /var/www
20
+ COPY entrypoint /
59
21
60
- ENTRYPOINT [ "/entrypoint" ]
22
+ ENTRYPOINT ["/entrypoint" ]
61
23
62
24
FROM php-base AS frontend
63
25
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
72
29
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
74
32
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
78
34
79
- RUN phpenmod app-default \
80
- && phpenmod app-fpm
35
+ CMD [ "frankenphp" , "run" , "--config" , "/etc/caddy/Caddyfile" , "--adapter" , "caddyfile" ]
81
36
82
37
EXPOSE 80
83
38
84
- CMD ["runsvdir" , "-P" , "/etc/service" ]
85
-
86
39
FROM php-base AS worker
87
40
88
41
FROM php-base AS builder
89
42
90
43
SHELL ["/bin/bash" , "-o" , "pipefail" , "-c" ]
91
44
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
+
92
53
ARG NODEJS_VERSION=20.x
93
54
RUN curl -s https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg \
94
55
&& 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
95
56
96
57
# Default toys
97
58
RUN apt-get update \
98
59
&& apt-get install -y --no-install-recommends \
60
+ bash-completion \
61
+ ca-certificates \
62
+ curl \
99
63
git \
100
64
make \
101
65
nodejs \
66
+ procps \
102
67
sudo \
103
68
unzip \
104
69
&& apt-get clean \
105
70
&& npm install -g
[email protected] \
106
71
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
107
72
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
-
117
73
# Composer
118
74
COPY --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
121
75
122
76
ADD https://raw.githubusercontent.com/symfony/symfony/refs/heads/7.2/src/Symfony/Component/Console/Resources/completion.bash /tmp/completion.bash
123
77
@@ -133,6 +87,13 @@ RUN sed /tmp/completion.bash \
133
87
-e "s/{{ VERSION }}/1/g" \
134
88
> /etc/bash_completion.d/console
135
89
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
+
136
97
# Third party tools
137
98
ENV PATH="$PATH:/var/www/tools/bin"
138
99
0 commit comments