Skip to content

Commit ca1fa38

Browse files
authored
Overhaul (#172)
1 parent b17829b commit ca1fa38

11 files changed

+259
-510
lines changed

.env.production

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ PGADMIN_DEFAULT_PASSWORD="123456"
2929

3030
BROADCAST_CONNECTION=reverb
3131

32-
CACHE_STORE=redis
32+
CACHE_STORE=failover
3333
CACHE_PREFIX="${APP_NAME}_"
3434

35-
QUEUE_CONNECTION=redis
35+
QUEUE_CONNECTION=failover
3636

3737
SESSION_DRIVER=redis
3838
SESSION_LIFETIME=180

FrankenPHP.Alpine.Dockerfile

Lines changed: 36 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
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
33
ARG COMPOSER_VERSION=2.8
4-
ARG BUN_VERSION="latest"
5-
ARG ROOT="/var/www/html"
64

75
FROM 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

2624
COPY --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
3230
LABEL org.opencontainers.image.licenses=MIT
3331

3432
ARG USER_ID=1000
3533
ARG GROUP_ID=1000
3634
ARG TZ=UTC
37-
ARG ROOT
38-
ARG APP_ENV
3935

4036
ENV 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

5150
WORKDIR ${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

107108
RUN 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

111111
RUN 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

115115
RUN 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

138126
RUN 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-
156135
COPY --link package.json bun.lock* ./
157136

158137
RUN 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

176141
RUN 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

186151
RUN composer dump-autoload \
187152
--optimize \
188153
--apcu \
189154
--no-dev
190155

156+
RUN bun run build
157+
158+
USER ${USER}
159+
191160
EXPOSE 8000
192-
EXPOSE 443
193-
EXPOSE 443/udp
194161
EXPOSE 2019
195162
EXPOSE 8080
196163

197164
ENTRYPOINT ["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

Comments
 (0)