Skip to content

Commit 6b509de

Browse files
authored
Minor Improvements (#60)
1 parent 8c6570d commit 6b509de

10 files changed

+136
-261
lines changed

FrankenPHP.Dockerfile

Lines changed: 38 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ ARG COMPOSER_VERSION=latest
1111

1212
ARG NODE_VERSION=20-alpine
1313

14-
FROM node:${NODE_VERSION} as build
14+
FROM node:${NODE_VERSION} AS build
1515

1616
ENV ROOT=/var/www/html
1717

@@ -38,9 +38,13 @@ FROM composer:${COMPOSER_VERSION} AS vendor
3838

3939
FROM dunglas/frankenphp:${FRANKENPHP_VERSION} AS server
4040

41-
FROM php:${PHP_VERSION}-zts-bookworm
41+
FROM php:${PHP_VERSION}-zts-bookworm AS base
4242

4343
LABEL maintainer="SMortexa <[email protected]>"
44+
LABEL org.opencontainers.image.title="Laravel Octane Dockerfile"
45+
LABEL org.opencontainers.image.description="Production-ready Dockerfile for Laravel Octane"
46+
LABEL org.opencontainers.image.source=https://github.com/exaco/laravel-octane-dockerfile
47+
LABEL org.opencontainers.image.licenses=MIT
4448

4549
ARG WWWUSER=1000
4650
ARG WWWGROUP=1000
@@ -51,8 +55,10 @@ ENV DEBIAN_FRONTEND=noninteractive \
5155
WITH_HORIZON=false \
5256
WITH_SCHEDULER=false \
5357
OCTANE_SERVER=frankenphp \
54-
NON_ROOT_USER=octane \
55-
ROOT=/var/www/html
58+
USER=octane \
59+
ROOT=/var/www/html \
60+
COMPOSER_FUND=0 \
61+
COMPOSER_MAX_PARALLEL_HTTP=24
5662

5763
WORKDIR ${ROOT}
5864

@@ -61,59 +67,21 @@ SHELL ["/bin/bash", "-eou", "pipefail", "-c"]
6167
RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime \
6268
&& echo ${TZ} > /etc/timezone
6369

70+
ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
71+
6472
RUN apt-get update; \
6573
apt-get upgrade -yqq; \
66-
pecl -q channel-update pecl.php.net; \
6774
apt-get install -yqq --no-install-recommends --show-progress \
6875
apt-utils \
69-
gnupg \
70-
git \
7176
curl \
7277
wget \
7378
nano \
74-
rsync \
7579
ncdu \
76-
sqlite3 \
77-
libcurl4-openssl-dev \
7880
ca-certificates \
7981
supervisor \
80-
libmemcached-dev \
81-
libz-dev \
82-
libbrotli-dev \
83-
libpq-dev \
84-
libjpeg-dev \
85-
libpng-dev \
86-
librsvg2-bin \
87-
libfreetype6-dev \
88-
libssl-dev \
89-
libwebp-dev \
90-
libmcrypt-dev \
91-
libldap2-dev \
92-
libonig-dev \
93-
libreadline-dev \
9482
libsodium-dev \
95-
libsqlite3-dev \
96-
libmagickwand-dev \
97-
libzip-dev zip unzip \
98-
libargon2-1 \
99-
libidn2-0 \
100-
libpcre2-8-0 \
101-
librdkafka-dev \
102-
libpcre3 \
103-
libxml2 \
104-
libxslt-dev \
105-
libzstd1 \
106-
libc-ares-dev \
107-
procps \
108-
postgresql-client \
109-
postgis \
110-
default-mysql-client \
111-
libbz2-dev \
112-
zlib1g-dev \
113-
libicu-dev \
114-
g++ \
11583
# Install PHP extensions
116-
&& docker-php-ext-install \
84+
&& install-php-extensions \
11785
bz2 \
11886
pcntl \
11987
mbstring \
@@ -123,24 +91,18 @@ RUN apt-get update; \
12391
pdo_pgsql \
12492
opcache \
12593
exif \
126-
&& docker-php-ext-configure pdo_mysql && docker-php-ext-install pdo_mysql \
127-
&& docker-php-ext-configure zip && docker-php-ext-install zip \
128-
&& docker-php-ext-configure intl && docker-php-ext-install intl \
129-
&& docker-php-ext-configure gd \
130-
--prefix=/usr \
131-
--with-jpeg \
132-
--with-webp \
133-
--with-freetype && docker-php-ext-install gd \
134-
&& pecl -q install -o -f redis && docker-php-ext-enable redis \
135-
&& pecl -q install -o -f rdkafka && docker-php-ext-enable rdkafka \
136-
&& pecl -q install -o -f memcached && docker-php-ext-enable memcached \
137-
&& pecl -q install -o -f igbinary && docker-php-ext-enable igbinary \
138-
&& docker-php-ext-configure ldap --with-libdir=lib/$(gcc -dumpmachine) && docker-php-ext-install ldap \
94+
pdo_mysql \
95+
zip \
96+
intl \
97+
gd \
98+
redis \
99+
rdkafka \
100+
memcached \
101+
igbinary \
102+
ldap \
139103
&& apt-get -y autoremove \
140104
&& apt-get clean \
141105
&& docker-php-source delete \
142-
&& pecl clear-cache \
143-
&& rm -R /tmp/pear \
144106
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
145107
&& rm /var/log/lastlog /var/log/faillog
146108

@@ -151,17 +113,18 @@ RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/su
151113
&& echo "*/1 * * * * php ${ROOT}/artisan schedule:run --verbose --no-interaction" > /etc/supercronic/laravel
152114

153115
RUN userdel --remove --force www-data \
154-
&& groupadd --force -g ${WWWGROUP} ${NON_ROOT_USER} \
155-
&& useradd -ms /bin/bash --no-log-init --no-user-group -g ${WWWGROUP} -u ${WWWUSER} ${NON_ROOT_USER}
116+
&& groupadd --force -g ${WWWGROUP} ${USER} \
117+
&& useradd -ms /bin/bash --no-log-init --no-user-group -g ${WWWGROUP} -u ${WWWUSER} ${USER}
156118

157-
RUN chown -R ${NON_ROOT_USER}:${NON_ROOT_USER} ${ROOT} /var/{log,run}
119+
RUN chown -R ${USER}:${USER} ${ROOT} /var/{log,run} \
120+
&& chmod -R a+rw /var/{log,run}
158121

159-
RUN chmod -R a+rw /var/{log,run}
122+
RUN cp ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini
160123

161-
USER ${NON_ROOT_USER}
124+
USER ${USER}
162125

163-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} --from=vendor /usr/bin/composer /usr/bin/composer
164-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} composer* ./
126+
COPY --chown=${USER}:${USER} --from=vendor /usr/bin/composer /usr/bin/composer
127+
COPY --chown=${USER}:${USER} composer.json composer.lock ./
165128

166129
RUN composer install \
167130
--no-dev \
@@ -171,18 +134,18 @@ RUN composer install \
171134
--no-scripts \
172135
--audit
173136

174-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} . .
175-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} --from=build ${ROOT}/public public
137+
COPY --chown=${USER}:${USER} . .
138+
COPY --chown=${USER}:${USER} --from=build ${ROOT}/public public
176139

177140
RUN mkdir -p \
178141
storage/framework/{sessions,views,cache,testing} \
179142
storage/logs \
180-
bootstrap/cache
143+
bootstrap/cache && chmod -R a+rw storage
181144

182-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/FrankenPHP/supervisord.frankenphp.conf /etc/supervisor/conf.d/
183-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.*.conf /etc/supervisor/conf.d/
184-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/start-container /usr/local/bin/start-container
185-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/php.ini /usr/local/etc/php/conf.d/99-octane.ini
145+
COPY --chown=${USER}:${USER} deployment/octane/FrankenPHP/supervisord.frankenphp.conf /etc/supervisor/conf.d/
146+
COPY --chown=${USER}:${USER} deployment/supervisord.*.conf /etc/supervisor/conf.d/
147+
COPY --chown=${USER}:${USER} deployment/start-container /usr/local/bin/start-container
148+
COPY --chown=${USER}:${USER} deployment/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini
186149

187150
RUN composer install \
188151
--classmap-authoritative \
@@ -192,7 +155,7 @@ RUN composer install \
192155
&& composer clear-cache \
193156
&& php artisan storage:link
194157

195-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} --from=server /usr/local/bin/frankenphp ./frankenphp
158+
COPY --chown=${USER}:${USER} --from=server /usr/local/bin/frankenphp ./frankenphp
196159

197160
RUN chmod +x /usr/local/bin/start-container frankenphp
198161

RoadRunner.Dockerfile

Lines changed: 38 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ ARG COMPOSER_VERSION=latest
99

1010
ARG NODE_VERSION=20-alpine
1111

12-
FROM node:${NODE_VERSION} as build
12+
FROM node:${NODE_VERSION} AS build
1313

1414
ENV ROOT=/var/www/html
1515

@@ -34,9 +34,13 @@ RUN npm run build
3434

3535
FROM composer:${COMPOSER_VERSION} AS vendor
3636

37-
FROM php:${PHP_VERSION}-cli-bookworm
37+
FROM php:${PHP_VERSION}-cli-bookworm AS base
3838

3939
LABEL maintainer="SMortexa <[email protected]>"
40+
LABEL org.opencontainers.image.title="Laravel Octane Dockerfile"
41+
LABEL org.opencontainers.image.description="Production-ready Dockerfile for Laravel Octane"
42+
LABEL org.opencontainers.image.source=https://github.com/exaco/laravel-octane-dockerfile
43+
LABEL org.opencontainers.image.licenses=MIT
4044

4145
ARG WWWUSER=1000
4246
ARG WWWGROUP=1000
@@ -47,8 +51,10 @@ ENV DEBIAN_FRONTEND=noninteractive \
4751
WITH_HORIZON=false \
4852
WITH_SCHEDULER=false \
4953
OCTANE_SERVER=roadrunner \
50-
NON_ROOT_USER=octane \
51-
ROOT=/var/www/html
54+
USER=octane \
55+
ROOT=/var/www/html \
56+
COMPOSER_FUND=0 \
57+
COMPOSER_MAX_PARALLEL_HTTP=24
5258

5359
WORKDIR ${ROOT}
5460

@@ -57,59 +63,21 @@ SHELL ["/bin/bash", "-eou", "pipefail", "-c"]
5763
RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime \
5864
&& echo ${TZ} > /etc/timezone
5965

66+
ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
67+
6068
RUN apt-get update; \
6169
apt-get upgrade -yqq; \
62-
pecl -q channel-update pecl.php.net; \
6370
apt-get install -yqq --no-install-recommends --show-progress \
6471
apt-utils \
65-
gnupg \
66-
git \
6772
curl \
6873
wget \
6974
nano \
70-
rsync \
7175
ncdu \
72-
sqlite3 \
73-
libcurl4-openssl-dev \
7476
ca-certificates \
7577
supervisor \
76-
libmemcached-dev \
77-
libz-dev \
78-
libbrotli-dev \
79-
libpq-dev \
80-
libjpeg-dev \
81-
libpng-dev \
82-
librsvg2-bin \
83-
libfreetype6-dev \
84-
libssl-dev \
85-
libwebp-dev \
86-
libmcrypt-dev \
87-
libldap2-dev \
88-
libonig-dev \
89-
libreadline-dev \
9078
libsodium-dev \
91-
libsqlite3-dev \
92-
libmagickwand-dev \
93-
libzip-dev zip unzip \
94-
libargon2-1 \
95-
libidn2-0 \
96-
libpcre2-8-0 \
97-
librdkafka-dev \
98-
libpcre3 \
99-
libxml2 \
100-
libxslt-dev \
101-
libzstd1 \
102-
libc-ares-dev \
103-
procps \
104-
postgresql-client \
105-
postgis \
106-
default-mysql-client \
107-
libbz2-dev \
108-
zlib1g-dev \
109-
libicu-dev \
110-
g++ \
11179
# Install PHP extensions
112-
&& docker-php-ext-install \
80+
&& install-php-extensions \
11381
bz2 \
11482
pcntl \
11583
mbstring \
@@ -119,24 +87,18 @@ RUN apt-get update; \
11987
pdo_pgsql \
12088
opcache \
12189
exif \
122-
&& docker-php-ext-configure pdo_mysql && docker-php-ext-install pdo_mysql \
123-
&& docker-php-ext-configure zip && docker-php-ext-install zip \
124-
&& docker-php-ext-configure intl && docker-php-ext-install intl \
125-
&& docker-php-ext-configure gd \
126-
--prefix=/usr \
127-
--with-jpeg \
128-
--with-webp \
129-
--with-freetype && docker-php-ext-install gd \
130-
&& pecl -q install -o -f redis && docker-php-ext-enable redis \
131-
&& pecl -q install -o -f rdkafka && docker-php-ext-enable rdkafka \
132-
&& pecl -q install -o -f memcached && docker-php-ext-enable memcached \
133-
&& pecl -q install -o -f igbinary && docker-php-ext-enable igbinary \
134-
&& docker-php-ext-configure ldap --with-libdir=lib/$(gcc -dumpmachine) && docker-php-ext-install ldap \
90+
pdo_mysql \
91+
zip \
92+
intl \
93+
gd \
94+
redis \
95+
rdkafka \
96+
memcached \
97+
igbinary \
98+
ldap \
13599
&& apt-get -y autoremove \
136100
&& apt-get clean \
137101
&& docker-php-source delete \
138-
&& pecl clear-cache \
139-
&& rm -R /tmp/pear \
140102
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
141103
&& rm /var/log/lastlog /var/log/faillog
142104

@@ -147,17 +109,18 @@ RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/su
147109
&& echo "*/1 * * * * php ${ROOT}/artisan schedule:run --verbose --no-interaction" > /etc/supercronic/laravel
148110

149111
RUN userdel --remove --force www-data \
150-
&& groupadd --force -g ${WWWGROUP} ${NON_ROOT_USER} \
151-
&& useradd -ms /bin/bash --no-log-init --no-user-group -g ${WWWGROUP} -u ${WWWUSER} ${NON_ROOT_USER}
112+
&& groupadd --force -g ${WWWGROUP} ${USER} \
113+
&& useradd -ms /bin/bash --no-log-init --no-user-group -g ${WWWGROUP} -u ${WWWUSER} ${USER}
152114

153-
RUN chown -R ${NON_ROOT_USER}:${NON_ROOT_USER} ${ROOT} /var/{log,run}
115+
RUN chown -R ${USER}:${USER} ${ROOT} /var/{log,run} \
116+
&& chmod -R a+rw /var/{log,run}
154117

155-
RUN chmod -R a+rw /var/{log,run}
118+
RUN cp ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini
156119

157-
USER ${NON_ROOT_USER}
120+
USER ${USER}
158121

159-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} --from=vendor /usr/bin/composer /usr/bin/composer
160-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} composer* ./
122+
COPY --chown=${USER}:${USER} --from=vendor /usr/bin/composer /usr/bin/composer
123+
COPY --chown=${USER}:${USER} composer.json composer.lock ./
161124

162125
RUN composer install \
163126
--no-dev \
@@ -167,19 +130,19 @@ RUN composer install \
167130
--no-scripts \
168131
--audit
169132

170-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} . .
171-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} --from=build ${ROOT}/public public
133+
COPY --chown=${USER}:${USER} . .
134+
COPY --chown=${USER}:${USER} --from=build ${ROOT}/public public
172135

173136
RUN mkdir -p \
174137
storage/framework/{sessions,views,cache,testing} \
175138
storage/logs \
176-
bootstrap/cache
139+
bootstrap/cache && chmod -R a+rw storage
177140

178-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/RoadRunner/supervisord.roadrunner.conf /etc/supervisor/conf.d
179-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/supervisord.*.conf /etc/supervisor/conf.d/
180-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/php.ini /usr/local/etc/php/conf.d/99-octane.ini
181-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/octane/RoadRunner/.rr.prod.yaml ./.rr.yaml
182-
COPY --chown=${NON_ROOT_USER}:${NON_ROOT_USER} deployment/start-container /usr/local/bin/start-container
141+
COPY --chown=${USER}:${USER} deployment/octane/RoadRunner/supervisord.roadrunner.conf /etc/supervisor/conf.d
142+
COPY --chown=${USER}:${USER} deployment/supervisord.*.conf /etc/supervisor/conf.d/
143+
COPY --chown=${USER}:${USER} deployment/php.ini ${PHP_INI_DIR}/conf.d/99-octane.ini
144+
COPY --chown=${USER}:${USER} deployment/octane/RoadRunner/.rr.prod.yaml ./.rr.yaml
145+
COPY --chown=${USER}:${USER} deployment/start-container /usr/local/bin/start-container
183146

184147
RUN composer install \
185148
--classmap-authoritative \

0 commit comments

Comments
 (0)