1- ARG PHP_VERSION=8.4.12
2- ARG FRANKENPHP_VERSION=1.9.1
1+ ARG PHP_VERSION=8.4
2+ ARG FRANKENPHP_VERSION=1.9
33ARG COMPOSER_VERSION=2.8
4- ARG BUN_VERSION="latest"
5- ARG ROOT="/var/www/html"
64
75FROM composer:${COMPOSER_VERSION} AS vendor
86
@@ -21,32 +19,33 @@ RUN CGO_ENABLED=1 \
2119 --with github.com/dunglas/frankenphp/caddy=./caddy/ \
2220 --with github.com/dunglas/caddy-cbrotli
2321
24- FROM dunglas/frankenphp:${FRANKENPHP_VERSION}-php${PHP_VERSION}-alpine AS base
22+ FROM dunglas/frankenphp:${FRANKENPHP_VERSION}-php${PHP_VERSION}-alpine
2523
2624COPY --from=upstream /usr/local/bin/frankenphp /usr/local/bin/frankenphp
2725
28- LABEL maintainer=
"SMortexa <[email protected] >" 29- LABEL org.opencontainers.image.title="Laravel Octane Dockerfile "
30- LABEL org.opencontainers.image.description="Production-ready Dockerfile for Laravel Octane "
31- LABEL org.opencontainers.image.source=https://github.com/exaco/laravel-octane-dockerfile
26+ LABEL maintainer=
"Mortexa <[email protected] >" 27+ LABEL org.opencontainers.image.title="Laravel Docker Setup "
28+ LABEL org.opencontainers.image.description="Production-ready Docker Setup for Laravel"
29+ LABEL org.opencontainers.image.source=https://github.com/exaco/laravel-docktane
3230LABEL org.opencontainers.image.licenses=MIT
3331
3432ARG USER_ID=1000
3533ARG GROUP_ID=1000
3634ARG TZ=UTC
37- ARG ROOT
38- ARG APP_ENV
3935
4036ENV TERM=xterm-color \
4137 OCTANE_SERVER=frankenphp \
4238 TZ=${TZ} \
43- USER=octane \
44- ROOT=${ROOT} \
45- APP_ENV=${APP_ENV} \
39+ USER=laravel \
40+ ROOT=/var/www/html \
41+ APP_ENV=production \
4642 COMPOSER_FUND=0 \
4743 COMPOSER_MAX_PARALLEL_HTTP=48 \
48- XDG_CONFIG_HOME=${ROOT}/.config \
49- XDG_DATA_HOME=${ROOT}/.data
44+ WITH_HORIZON=false \
45+ WITH_SCHEDULER=false \
46+ WITH_REVERB=false
47+
48+ ENV XDG_CONFIG_HOME=${ROOT}/.config XDG_DATA_HOME=${ROOT}/.data
5049
5150WORKDIR ${ROOT}
5251
@@ -66,8 +65,10 @@ RUN apk update; \
6665 procps \
6766 unzip \
6867 ca-certificates \
68+ bash \
6969 supervisor \
7070 libsodium-dev \
71+ && curl -fsSL https://bun.sh/install | BUN_INSTALL=/usr bash \
7172 && install-php-extensions \
7273 apcu \
7374 bz2 \
@@ -85,7 +86,7 @@ RUN apk update; \
8586 gd \
8687 redis \
8788 rdkafka \
88- memcached \
89+ ffi \
8990 ldap \
9091 && docker-php-source delete \
9192 && rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
@@ -98,80 +99,44 @@ RUN arch="$(apk --print-arch)" \
9899 x86) _cronic_fname='supercronic-linux-386' ;; \
99100 *) echo >&2 "error: unsupported architecture: $arch" ; exit 1 ;; \
100101 esac \
101- && wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29 /${_cronic_fname}" \
102+ && wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.38 /${_cronic_fname}" \
102103 -O /usr/bin/supercronic \
103104 && chmod +x /usr/bin/supercronic \
104105 && mkdir -p /etc/supercronic \
105106 && echo "*/1 * * * * php ${ROOT}/artisan schedule:run --no-interaction" > /etc/supercronic/laravel
106107
107108RUN addgroup -g ${GROUP_ID} ${USER} \
108- && adduser -D -G ${USER} -u ${USER_ID} -s /bin/sh ${USER} \
109- && setcap -r /usr/local/bin/frankenphp
109+ && adduser -D -G ${USER} -u ${USER_ID} -s /bin/sh ${USER}
110110
111111RUN mkdir -p /var/log/supervisor /var/run/supervisor \
112112 && chown -R ${USER_ID}:${GROUP_ID} ${ROOT} /var/log /var/run \
113113 && chmod -R a+rw ${ROOT} /var/log /var/run
114114
115115RUN cp ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini
116116
117- USER ${USER}
118-
119- COPY --link --chown=${USER_ID}:${GROUP_ID} --from=vendor /usr/bin/composer /usr/bin/composer
120-
121- COPY --link --chown=${USER_ID}:${GROUP_ID} deployment/supervisord.conf /etc/
122- COPY --link --chown=${USER_ID}:${GROUP_ID} deployment/octane/FrankenPHP/supervisord.frankenphp.conf /etc/supervisor/conf.d/
123- COPY --link --chown=${USER_ID}:${GROUP_ID} deployment/supervisord.*.conf /etc/supervisor/conf.d/
124- COPY --link --chown=${USER_ID}:${GROUP_ID} deployment/start-container /usr/local/bin/start-container
125- COPY --link --chown=${USER_ID}:${GROUP_ID} deployment/healthcheck /usr/local/bin/healthcheck
126- COPY --link --chown=${USER_ID}:${GROUP_ID} deployment/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini
127-
128- RUN chmod +x /usr/local/bin/start-container /usr/local/bin/healthcheck
129-
130- # ##########################################
131-
132- FROM base AS common
133-
134- USER ${USER}
135-
136- COPY --link --chown=${USER_ID}:${GROUP_ID} . .
117+ COPY --link --from=vendor /usr/bin/composer /usr/bin/composer
118+ COPY --link deployment/supervisord.conf /etc/
119+ COPY --link deployment/octane/FrankenPHP/supervisord.frankenphp.conf /etc/supervisor/conf.d/
120+ COPY --link deployment/supervisord.*.conf /etc/supervisor/conf.d/
121+ COPY --link deployment/start-container /usr/local/bin/start-container
122+ COPY --link deployment/healthcheck /usr/local/bin/healthcheck
123+ COPY --link deployment/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini
124+ COPY --link composer.* ./
137125
138126RUN composer install \
139127 --no-dev \
140128 --no-interaction \
141129 --no-autoloader \
142130 --no-ansi \
143131 --no-scripts \
132+ --no-progress \
144133 --audit
145134
146- # ##########################################
147- # Build frontend assets with Bun
148- # ##########################################
149-
150- FROM oven/bun:${BUN_VERSION} AS build
151-
152- ARG ROOT
153-
154- WORKDIR ${ROOT}
155-
156135COPY --link package.json bun.lock* ./
157136
158137RUN bun install --frozen-lockfile
159138
160- COPY --link --from=common ${ROOT} .
161-
162- RUN bun run build
163-
164- # ##########################################
165-
166- FROM common AS runner
167-
168- USER ${USER}
169-
170- ENV WITH_HORIZON=false \
171- WITH_SCHEDULER=false \
172- WITH_REVERB=false
173-
174- COPY --link --chown=${USER_ID}:${GROUP_ID} --from=build ${ROOT}/public public
139+ COPY --link . .
175140
176141RUN mkdir -p \
177142 storage/framework/sessions \
@@ -181,19 +146,21 @@ RUN mkdir -p \
181146 storage/logs \
182147 bootstrap/cache \
183148 && chown -R ${USER_ID}:${GROUP_ID} ${ROOT} \
184- && chmod -R a+rw ${ROOT}
149+ && chmod +x /usr/local/bin/start-container /usr/local/bin/healthcheck
185150
186151RUN composer dump-autoload \
187152 --optimize \
188153 --apcu \
189154 --no-dev
190155
156+ RUN bun run build
157+
158+ USER ${USER}
159+
191160EXPOSE 8000
192- EXPOSE 443
193- EXPOSE 443/udp
194161EXPOSE 2019
195162EXPOSE 8080
196163
197164ENTRYPOINT ["start-container" ]
198165
199- HEALTHCHECK --start-period=5s --interval=2s --timeout=5s --retries=8 CMD healthcheck || exit 1
166+ HEALTHCHECK --start-period=5s --interval=1s --timeout=3s --retries=10 CMD healthcheck || exit 1
0 commit comments