Skip to content

Commit 315267f

Browse files
authored
Merge pull request #283 from brefphp/optimize-external-extensions
Optimize layers by externalizing only large extensions
2 parents 87eefb3 + 19f6f7f commit 315267f

File tree

10 files changed

+39
-48
lines changed

10 files changed

+39
-48
lines changed

php-82/Dockerfile

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -150,19 +150,18 @@ RUN CFLAGS="-fstack-protector-strong -fpic -fpie -Os -I${INSTALL_DIR}/include -I
150150
--enable-exif \
151151
--enable-ftp \
152152
--with-gettext \
153-
--enable-mbstring \
153+
--enable-mbstring=shared \
154154
--with-pdo-mysql=mysqlnd \
155155
--with-mysqli \
156156
--enable-pcntl \
157157
--with-zip \
158158
--enable-bcmath \
159-
--with-pdo-pgsql=shared \
159+
--with-pdo-pgsql \
160160
# Separate .so extension so that it is not loaded by default
161161
--enable-intl=shared \
162162
# Separate .so extension so that it is not loaded by default
163163
--enable-soap=shared \
164-
# Separate .so extension so that it is not loaded by default
165-
--with-xsl=${INSTALL_DIR} \
164+
--with-xsl \
166165
--with-ffi \
167166
# necessary for `pecl` to work (to install PHP extensions)
168167
--with-pear \
@@ -203,13 +202,8 @@ RUN cp $(php -r 'echo ini_get("extension_dir");')/* /bref-layer/bref/extensions/
203202
# - /opt/bin | /opt/lib | /opt/lib64 (libraries compiled from source)
204203
# into `/bref-layer` (the temp directory for the future Lambda layer)
205204
COPY --link utils/lib-copy /bref/lib-copy
206-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bin/php /bref-layer/lib
207-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bin/php-fpm /bref-layer/lib
208-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/apcu.so /bref-layer/lib
209-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/intl.so /bref-layer/lib
210-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/opcache.so /bref-layer/lib
211-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/pdo_mysql.so /bref-layer/lib
212-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/pdo_pgsql.so /bref-layer/lib
205+
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bin /bref-layer/lib
206+
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions /bref-layer/lib
213207

214208
# Create a symbolic link to the OpenSSL certificates file for BC purposes
215209
RUN ln -s /etc/ssl/cert.pem /bref-layer/bref/ssl/cert.pem

php-83/Dockerfile

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -150,19 +150,18 @@ RUN CFLAGS="-fstack-protector-strong -fpic -fpie -Os -I${INSTALL_DIR}/include -I
150150
--enable-exif \
151151
--enable-ftp \
152152
--with-gettext \
153-
--enable-mbstring \
153+
--enable-mbstring=shared \
154154
--with-pdo-mysql=mysqlnd \
155155
--with-mysqli \
156156
--enable-pcntl \
157157
--with-zip \
158158
--enable-bcmath \
159-
--with-pdo-pgsql=shared \
159+
--with-pdo-pgsql \
160160
# Separate .so extension so that it is not loaded by default
161161
--enable-intl=shared \
162162
# Separate .so extension so that it is not loaded by default
163163
--enable-soap=shared \
164-
# Separate .so extension so that it is not loaded by default
165-
--with-xsl=${INSTALL_DIR} \
164+
--with-xsl \
166165
--with-ffi \
167166
# necessary for `pecl` to work (to install PHP extensions)
168167
--with-pear \
@@ -203,13 +202,8 @@ RUN cp $(php -r 'echo ini_get("extension_dir");')/* /bref-layer/bref/extensions/
203202
# - /opt/bin | /opt/lib | /opt/lib64 (libraries compiled from source)
204203
# into `/bref-layer` (the temp directory for the future Lambda layer)
205204
COPY --link utils/lib-copy /bref/lib-copy
206-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bin/php /bref-layer/lib
207-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bin/php-fpm /bref-layer/lib
208-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/apcu.so /bref-layer/lib
209-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/intl.so /bref-layer/lib
210-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/opcache.so /bref-layer/lib
211-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/pdo_mysql.so /bref-layer/lib
212-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/pdo_pgsql.so /bref-layer/lib
205+
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bin /bref-layer/lib
206+
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions /bref-layer/lib
213207

214208
# Create a symbolic link to the OpenSSL certificates file for BC purposes
215209
RUN ln -s /etc/ssl/cert.pem /bref-layer/bref/ssl/cert.pem

php-84/Dockerfile

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -149,19 +149,18 @@ RUN CFLAGS="-fstack-protector-strong -fpic -fpie -Os -I${INSTALL_DIR}/include -I
149149
--enable-exif \
150150
--enable-ftp \
151151
--with-gettext \
152-
--enable-mbstring \
152+
--enable-mbstring=shared \
153153
--with-pdo-mysql=mysqlnd \
154154
--with-mysqli \
155155
--enable-pcntl \
156156
--with-zip \
157157
--enable-bcmath \
158-
--with-pdo-pgsql=shared \
158+
--with-pdo-pgsql \
159159
# Separate .so extension so that it is not loaded by default
160160
--enable-intl=shared \
161161
# Separate .so extension so that it is not loaded by default
162162
--enable-soap=shared \
163-
# Separate .so extension so that it is not loaded by default
164-
--with-xsl=${INSTALL_DIR} \
163+
--with-xsl \
165164
--with-ffi \
166165
# necessary for `pecl` to work (to install PHP extensions)
167166
--with-pear \
@@ -202,13 +201,8 @@ RUN cp $(php -r 'echo ini_get("extension_dir");')/* /bref-layer/bref/extensions/
202201
# - /opt/bin | /opt/lib | /opt/lib64 (libraries compiled from source)
203202
# into `/bref-layer` (the temp directory for the future Lambda layer)
204203
COPY --link utils/lib-copy /bref/lib-copy
205-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bin/php /bref-layer/lib
206-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bin/php-fpm /bref-layer/lib
207-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/apcu.so /bref-layer/lib
208-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/intl.so /bref-layer/lib
209-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/opcache.so /bref-layer/lib
210-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/pdo_mysql.so /bref-layer/lib
211-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/pdo_pgsql.so /bref-layer/lib
204+
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bin /bref-layer/lib
205+
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions /bref-layer/lib
212206

213207
# Create a symbolic link to the OpenSSL certificates file for BC purposes
214208
RUN ln -s /etc/ssl/cert.pem /bref-layer/bref/ssl/cert.pem

php-85/Dockerfile

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -149,19 +149,18 @@ RUN CFLAGS="-fstack-protector-strong -fpic -fpie -Os -I${INSTALL_DIR}/include -I
149149
--enable-exif \
150150
--enable-ftp \
151151
--with-gettext \
152-
--enable-mbstring \
152+
--enable-mbstring=shared \
153153
--with-pdo-mysql=mysqlnd \
154154
--with-mysqli \
155155
--enable-pcntl \
156156
--with-zip \
157157
--enable-bcmath \
158-
--with-pdo-pgsql=shared \
158+
--with-pdo-pgsql \
159159
# Separate .so extension so that it is not loaded by default
160160
--enable-intl=shared \
161161
# Separate .so extension so that it is not loaded by default
162162
--enable-soap=shared \
163-
# Separate .so extension so that it is not loaded by default
164-
--with-xsl=${INSTALL_DIR} \
163+
--with-xsl \
165164
--with-ffi \
166165
# necessary for `pecl` to work (to install PHP extensions)
167166
--with-pear \
@@ -202,13 +201,8 @@ RUN cp $(php -r 'echo ini_get("extension_dir");')/* /bref-layer/bref/extensions/
202201
# - /opt/bin | /opt/lib | /opt/lib64 (libraries compiled from source)
203202
# into `/bref-layer` (the temp directory for the future Lambda layer)
204203
COPY --link utils/lib-copy /bref/lib-copy
205-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bin/php /bref-layer/lib
206-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bin/php-fpm /bref-layer/lib
207-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/apcu.so /bref-layer/lib
208-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/intl.so /bref-layer/lib
209-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/opcache.so /bref-layer/lib
210-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/pdo_mysql.so /bref-layer/lib
211-
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions/pdo_pgsql.so /bref-layer/lib
204+
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bin /bref-layer/lib
205+
RUN php /bref/lib-copy/copy-dependencies.php /bref-layer/bref/extensions /bref-layer/lib
212206

213207
# Create a symbolic link to the OpenSSL certificates file for BC purposes
214208
RUN ln -s /etc/ssl/cert.pem /bref-layer/bref/ssl/cert.pem

src/php-85.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,5 @@ post_max_size=6M
5151
upload_max_filesize=6M
5252

5353
extension_dir=/opt/bref/extensions
54+
; Extensions enabled by default
55+
extension=mbstring

src/php.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,5 @@ upload_max_filesize=6M
5252

5353
extension_dir=/opt/bref/extensions
5454
; Extensions enabled by default
55+
extension=mbstring
5556
zend_extension=opcache.so

tests/test_2_extensions.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@
113113
'opcache' => ini_get('opcache.enable') == 1,
114114
'pdo' => class_exists(\PDO::class),
115115
'pdo_mysql' => extension_loaded('pdo_mysql'),
116+
'pdo_pgsql' => extension_loaded('pdo_pgsql'),
116117
'pdo_sqlite' => extension_loaded('pdo_sqlite'),
117118
'phar' => extension_loaded('phar'),
118119
'posix' => function_exists('posix_getpgid'),
@@ -144,7 +145,7 @@
144145
$extensionsDisabledByDefault = [
145146
'intl' => class_exists(\Collator::class),
146147
'apcu' => function_exists('apcu_add'),
147-
'pdo_pgsql' => extension_loaded('pdo_pgsql'),
148+
'soap' => class_exists(\SoapClient::class),
148149
];
149150
foreach ($extensionsDisabledByDefault as $extension => $test) {
150151
if ($test) {

tests/test_3_manual_enabling_extensions.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
$extensions = [
66
'intl' => class_exists(\Collator::class),
77
'apcu' => function_exists('apcu_add'),
8-
'pdo_pgsql' => extension_loaded('pdo_pgsql'),
98
'soap' => class_exists(\SoapClient::class),
109
];
1110

tests/test_3_manual_extensions.ini

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
extension=intl
22
extension=apcu
3-
extension=pdo_pgsql
43
extension=soap

utils/lib-copy/copy-dependencies.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*
77
* Usage:
88
* php copy-dependencies.php <file-to-analyze> <target-directory>
9+
* It also works with directories:
10+
* php copy-dependencies.php <directory-to-analyze> <target-directory>
911
*
1012
* For example:
1113
* php copy-dependencies.php /opt/bin/php /opt/lib
@@ -45,7 +47,18 @@
4547
;
4648
});
4749

48-
$requiredLibraries = listDependencies($pathToCheck);
50+
if (is_file($pathToCheck)) {
51+
$requiredLibraries = listDependencies($pathToCheck);
52+
} elseif (is_dir($pathToCheck)) {
53+
$requiredLibraries = [];
54+
foreach (glob($pathToCheck . '/*') as $file) {
55+
if (is_file($file)) {
56+
$requiredLibraries = array_merge($requiredLibraries, listDependencies($file));
57+
}
58+
}
59+
} else {
60+
throw new RuntimeException("The path to check is neither a file nor a directory: $pathToCheck");
61+
}
4962
// Exclude existing system libraries
5063
$requiredLibraries = array_filter($requiredLibraries, function (string $lib) use ($librariesThatExistOnLambda) {
5164
// Libraries that we compiled are in /opt/lib or /opt/lib64, we compiled them because they are more

0 commit comments

Comments
 (0)