@@ -11,7 +11,7 @@ ARG COMPOSER_VERSION=latest
11
11
12
12
ARG NODE_VERSION=20-alpine
13
13
14
- FROM node:${NODE_VERSION} as build
14
+ FROM node:${NODE_VERSION} AS build
15
15
16
16
ENV ROOT=/var/www/html
17
17
@@ -38,9 +38,13 @@ FROM composer:${COMPOSER_VERSION} AS vendor
38
38
39
39
FROM dunglas/frankenphp:${FRANKENPHP_VERSION} AS server
40
40
41
- FROM php:${PHP_VERSION}-zts-bookworm
41
+ FROM php:${PHP_VERSION}-zts-bookworm AS base
42
42
43
43
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
44
48
45
49
ARG WWWUSER=1000
46
50
ARG WWWGROUP=1000
@@ -51,8 +55,10 @@ ENV DEBIAN_FRONTEND=noninteractive \
51
55
WITH_HORIZON=false \
52
56
WITH_SCHEDULER=false \
53
57
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
56
62
57
63
WORKDIR ${ROOT}
58
64
@@ -61,59 +67,21 @@ SHELL ["/bin/bash", "-eou", "pipefail", "-c"]
61
67
RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime \
62
68
&& echo ${TZ} > /etc/timezone
63
69
70
+ ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
71
+
64
72
RUN apt-get update; \
65
73
apt-get upgrade -yqq; \
66
- pecl -q channel-update pecl.php.net; \
67
74
apt-get install -yqq --no-install-recommends --show-progress \
68
75
apt-utils \
69
- gnupg \
70
- git \
71
76
curl \
72
77
wget \
73
78
nano \
74
- rsync \
75
79
ncdu \
76
- sqlite3 \
77
- libcurl4-openssl-dev \
78
80
ca-certificates \
79
81
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 \
94
82
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++ \
115
83
# Install PHP extensions
116
- && docker -php-ext-install \
84
+ && install -php-extensions \
117
85
bz2 \
118
86
pcntl \
119
87
mbstring \
@@ -123,24 +91,18 @@ RUN apt-get update; \
123
91
pdo_pgsql \
124
92
opcache \
125
93
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 \
139
103
&& apt-get -y autoremove \
140
104
&& apt-get clean \
141
105
&& docker-php-source delete \
142
- && pecl clear-cache \
143
- && rm -R /tmp/pear \
144
106
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
145
107
&& rm /var/log/lastlog /var/log/faillog
146
108
@@ -151,17 +113,18 @@ RUN wget -q "https://github.com/aptible/supercronic/releases/download/v0.2.29/su
151
113
&& echo "*/1 * * * * php ${ROOT}/artisan schedule:run --verbose --no-interaction" > /etc/supercronic/laravel
152
114
153
115
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 }
156
118
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}
158
121
159
- RUN chmod -R a+rw /var/{log,run}
122
+ RUN cp ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini
160
123
161
- USER ${NON_ROOT_USER }
124
+ USER ${USER }
162
125
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 ./
165
128
166
129
RUN composer install \
167
130
--no-dev \
@@ -171,18 +134,18 @@ RUN composer install \
171
134
--no-scripts \
172
135
--audit
173
136
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
176
139
177
140
RUN mkdir -p \
178
141
storage/framework/{sessions,views,cache,testing} \
179
142
storage/logs \
180
- bootstrap/cache
143
+ bootstrap/cache && chmod -R a+rw storage
181
144
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
186
149
187
150
RUN composer install \
188
151
--classmap-authoritative \
@@ -192,7 +155,7 @@ RUN composer install \
192
155
&& composer clear-cache \
193
156
&& php artisan storage:link
194
157
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
196
159
197
160
RUN chmod +x /usr/local/bin/start-container frankenphp
198
161
0 commit comments