Skip to content

Commit 251f4a6

Browse files
README.md
1 parent 7fd939d commit 251f4a6

File tree

10 files changed

+130
-194
lines changed

10 files changed

+130
-194
lines changed

Dockerfile

Lines changed: 37 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ LABEL maintainer="sherifabdlnaby@gmail.com"
2323

2424
RUN apt-get update && apt-get -y --no-install-recommends install \
2525
# Needed for Image
26-
libfcgi-bin=2.4.0-10 \
27-
tini=0.18.0-1 \
28-
# Needed for PHP
26+
tini=0.18.0-1 \
27+
libfcgi-bin=2.4.0-10 \
28+
libicu-dev=63.1-6+deb10u1 \
29+
# Needed for Application Runtime
2930

3031
# Clean metadata and clear caches
3132
&& apt-get autoremove --purge -y && apt-get clean \
@@ -38,42 +39,47 @@ RUN apt-get update && apt-get -y --no-install-recommends install \
3839
# head to: https://github.com/docker-library/docs/tree/master/php#how-to-install-more-php-extensions
3940
# EX: RUN docker-php-ext-install curl pdo pdo_mysql mysqli
4041
# EX: RUN pecl install memcached && docker-php-ext-enable memcached
41-
RUN docker-php-ext-install \
42+
RUN docker-php-ext-install -j$(nproc) \
4243
opcache \
44+
intl \
4345
pdo_mysql
4446
# Pecl Extentions
47+
RUN pecl install apcu-5.1.20 && docker-php-ext-enable apcu
4548
# EX: RUN pecl install memcached && docker-php-ext-enable memcached
4649

4750
# ------------------------------------------------ PHP Configuration ---------------------------------------------------
4851

49-
# Add Base Config
52+
# Add Default Config
5053
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
5154

52-
# Add in Custom Config
55+
# Add in Base PHP Config
5356
COPY docker/php/base-* $PHP_INI_DIR/conf.d
5457

5558
# ---------------------------------------------- PHP FPM Configuration -------------------------------------------------
5659

5760
# Clean bundled config & create composer directories (since we run as non-root later)
58-
RUN rm -rf /var/www /usr/local/etc/php-fpm.d/* && \
59-
mkdir -p /var/www/.composer /var/www/app && chown -R www-data:www-data /var/www/ /var/www/app && \
60-
usermod -u 1000 www-data
61+
RUN usermod -u 1000 www-data && rm -rf /var/www /usr/local/etc/php-fpm.d/* && \
62+
mkdir -p /var/www/.composer /var/www/app && chown -R www-data:www-data /var/www/app /var/www/.composer
6163

6264
# Copy scripts and PHP-FPM config
6365
COPY docker/fpm/*.conf /usr/local/etc/php-fpm.d/
6466

6567
# --------------------------------------------------- Scripts ----------------------------------------------------------
6668

67-
COPY docker/fpm/fpm-healthcheck /usr/local/bin/
68-
COPY docker/entrypoints/base-* /usr/local/bin/
69-
COPY docker/healthcheck /usr/local/bin/
70-
COPY docker/post-install /usr/local/bin/
71-
RUN chmod +x /usr/local/bin/base-* /usr/local/bin/*healthcheck /usr/local/bin/post-install
69+
COPY docker/entrypoints /usr/local/bin/
70+
COPY docker/healthcheck /usr/local/bin/
71+
COPY docker/post-* /usr/local/bin/
72+
COPY docker/fpm/fpm-healthcheck /usr/local/bin/
73+
RUN chmod +x /usr/local/bin/entrypoint-* /usr/local/bin/post-* /usr/local/bin/healthcheck
7274

7375
# ---------------------------------------------------- Composer --------------------------------------------------------
7476

7577
COPY --from=composer /usr/bin/composer /usr/bin/composer
7678

79+
# ----------------------------------------------- NON-ROOT SWITCH ------------------------------------------------------
80+
81+
USER www-data
82+
7783
# ----------------------------------------------------- MISC -----------------------------------------------------------
7884

7985
WORKDIR /var/www/app
@@ -92,7 +98,7 @@ HEALTHCHECK CMD ["healthcheck"]
9298

9399
# -------------------------------------------------- ENTRYPOINT --------------------------------------------------------
94100

95-
ENTRYPOINT ["base-entrypoint"]
101+
ENTRYPOINT ["entrypoint-base"]
96102
CMD ["php-fpm"]
97103

98104
# ======================================================================================================================
@@ -104,7 +110,7 @@ FROM composer as vendor
104110

105111
ARG PHP_VERSION
106112
ARG COMPOSER_AUTH
107-
# A Json Object with Bitbucket or Github token to clone private Repos with composer
113+
# A Json Object with remote repository token to clone private Repos with composer
108114
# Reference: https://getcomposer.org/doc/03-cli.md#composer-auth
109115
ENV COMPOSER_AUTH $COMPOSER_AUTH
110116

@@ -116,27 +122,18 @@ COPY composer.lock composer.lock
116122
RUN composer config platform.php ${PHP_VERSION}
117123

118124
# Install Dependeinces
119-
## * Platform requirments are checked at the next image steps.
120-
## * Scripts and Autoload are run at the next image steps.
125+
## * Platform requirments are checked at the later steps.
126+
## * Scripts and Autoload are run at later steps.
121127
RUN composer install -n --no-progress --ignore-platform-reqs --no-plugins --no-scripts --no-autoloader --prefer-dist
122128

123129
# ======================================================================================================================
124-
# =========================================== PRODUCTION FINAL STAGES ================================================
130+
# ============================================== PRODUCTION IMAGE ====================================================
125131
# --- PROD ---
126132
# ======================================================================================================================
127133

128134
FROM base AS app
129135

130-
# Switch to root to add stuff
131-
USER root
132-
133-
# Copy Prod Entrypoint && PHP Config
134-
COPY docker/entrypoints/prod-* /usr/local/bin/
135136
COPY docker/php/prod-* $PHP_INI_DIR/conf.d/
136-
RUN chmod +x /usr/local/bin/prod-*
137-
138-
# Run as non-root
139-
USER www-data
140137

141138
# Copy Vendor
142139
COPY --chown=www-data:www-data --from=vendor /app/vendor /var/www/app/vendor
@@ -147,10 +144,11 @@ COPY --chown=www-data:www-data . .
147144
# 1. Dump optimzed autoload for vendor and app classes.
148145
# 2. --no-scripts as scripts are run on runtime via entrypoint.
149146
# 3. checks that PHP and extensions versions match the platform requirements of the installed packages.
150-
RUN composer dump-autoload -n --optimize --no-scripts --no-dev --classmap-authoritative && composer check-platform-reqs
151-
147+
RUN composer dump-autoload -n --optimize --no-scripts --no-dev --classmap-authoritative && \
148+
composer check-platform-reqs && \
149+
post-build
152150

153-
ENTRYPOINT ["prod-entrypoint"]
151+
ENTRYPOINT ["entrypoint-prod"]
154152
CMD ["php-fpm"]
155153

156154
# ======================================================================================================================
@@ -187,21 +185,19 @@ COPY docker/php/dev-* $PHP_INI_DIR/conf.d/
187185

188186
# ------------------------------------------------- Entry Point --------------------------------------------------------
189187

190-
# Copy Entrypoint
191-
COPY docker/entrypoints/dev-* /usr/local/bin/
192-
RUN chmod +x /usr/local/bin/dev-*
193-
194188
# Run as non-root
195189
USER www-data
196190

197-
# Copy Vendor And Generate Autoload
198-
COPY --chown=www-data:www-data --from=vendor /app/vendor /var/www/app/vendor
191+
# Copy Vendor And Generate Autoload ( Needs Composer.* to check reqs and generate autoload)
199192
COPY --chown=www-data:www-data composer.json composer.json
200193
COPY --chown=www-data:www-data composer.lock composer.lock
201-
RUN composer dump-autoload -n --no-scripts && composer check-platform-reqs
202-
203-
ENTRYPOINT ["dev-entrypoint"]
194+
COPY --chown=www-data:www-data --from=vendor /app/vendor /var/www/app/vendor
195+
RUN composer install --no-scripts && composer dump-autoload -n --no-scripts && \
196+
composer check-platform-reqs && \
197+
post-build
204198

199+
# Entrypoints
200+
ENTRYPOINT ["entrypoint-dev"]
205201
CMD ["php-fpm"]
206202

207203

@@ -212,8 +208,7 @@ CMD ["php-fpm"]
212208
# ======================================================================================================================
213209
FROM nginx:${NGINX_VERSION}-alpine AS nginx
214210

215-
RUN rm -rf /var/www/* /etc/nginx/conf.d/* /usr/local/etc/php-fpm.d/* && \
216-
adduser -u 1000 -D -S -G www-data www-data
211+
RUN rm -rf /var/www/* /etc/nginx/conf.d/* && adduser -u 1000 -D -S -G www-data www-data
217212

218213
COPY docker/nginx/nginx-* /usr/local/bin/
219214
COPY docker/nginx/ /etc/nginx/

0 commit comments

Comments
 (0)