Skip to content

Commit f32818d

Browse files
authored
Add docker/container setup (#72)
* Committing .env file (https://symfony.com/doc/4.4/configuration.html) * Add container setup * Use modern Symfony style configuration * Copying build artifacts from nodejs image to nginx image * Making PHP-FPM port configurable * Add php entrypoint script * Update dependencies * Update grumphp configuration * Update symfony lock file * Add reference to source of script * Pass environmental variables to php-fpm * Use composer version 2 * Keep configuration backwards compatible
1 parent 3a9d7c2 commit f32818d

17 files changed

+3383
-963
lines changed

Diff for: .env.dist renamed to .env

+7-5
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
APP_ENV=prod
66
APP_SECRET=a98fc86a53d3f16f797545ff6b2a092d
77

8-
98
###> Flex server configuration ###
109

1110
FLEX_RECIPE_REPO_PRIVATE=https://github.com/moay/demo-recipes
12-
13-
# FLEX_OFFICIAL_ENDPOINT=https://symfony.sh/
14-
# FLEX_RECIPE_REPO_OFFICIAL=https://github.com/symfony/recipes
15-
# FLEX_RECIPE_REPO_CONTRIB=https://github.com/symfony/recipes-contrib
11+
FLEX_OFFICIAL_ENDPOINT=https://symfony.sh/
12+
FLEX_RECIPE_REPO_OFFICIAL=https://github.com/symfony/recipes
13+
FLEX_RECIPE_REPO_CONTRIB=https://github.com/symfony/recipes-contrib
14+
PROXY_OFFICIAL_ENDPOINT=true
15+
CACHE_OFFICIAL_ENDPOINT=true
16+
MIRROR_OFFICIAL_ENDPOINT=true
17+
MIRROR_CONTRIB_RECIPES=false
1618

1719
###< Flex server configuration ###

Diff for: .gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
###> symfony/framework-bundle ###
2-
.env
2+
.env.local
33
/public/bundles/
44
/var/
55
!/var/repo

Diff for: Dockerfile

+167
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
#############################################################
2+
# PHP-FPM #
3+
#############################################################
4+
ARG PHP_VERSION=7.4
5+
ARG NODE_VERSION=14
6+
ARG NGINX_VERSION=1.21
7+
8+
FROM php:${PHP_VERSION}-fpm-alpine AS server-for-symfony-flex-php
9+
10+
WORKDIR /srv/server-for-symfony-flex
11+
12+
# persistent / runtime deps
13+
RUN apk add --no-cache \
14+
acl \
15+
bash \
16+
file \
17+
gettext \
18+
git \
19+
mariadb-client \
20+
openssh-client \
21+
libxml2 \
22+
libuuid \
23+
bind-tools \
24+
;
25+
26+
ARG XDEBUG_VERSION=3.0.4
27+
28+
RUN set -eux; \
29+
apk add --no-cache --virtual .build-deps \
30+
$PHPIZE_DEPS \
31+
coreutils \
32+
freetype-dev \
33+
icu-dev \
34+
libjpeg-turbo-dev \
35+
libpng-dev \
36+
libtool \
37+
libwebp-dev \
38+
libzip-dev \
39+
mariadb-dev \
40+
zlib-dev \
41+
libxml2-dev \
42+
util-linux-dev \
43+
; \
44+
\
45+
docker-php-ext-configure gd --with-jpeg --with-webp --with-freetype; \
46+
docker-php-ext-configure zip --with-zip; \
47+
docker-php-ext-install -j$(nproc) \
48+
exif \
49+
gd \
50+
intl \
51+
pdo_mysql \
52+
zip \
53+
bcmath \
54+
sockets \
55+
soap \
56+
; \
57+
pecl install xdebug-${XDEBUG_VERSION}; \
58+
pecl clear-cache; \
59+
docker-php-ext-enable \
60+
xdebug \
61+
; \
62+
runDeps="$( \
63+
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
64+
| tr ',' '\n' \
65+
| sort -u \
66+
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
67+
)"; \
68+
apk add --no-cache --virtual .sylius-phpexts-rundeps $runDeps; \
69+
\
70+
apk del .build-deps
71+
72+
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
73+
74+
COPY docker/php/php.ini /usr/local/etc/php/php.ini
75+
76+
ARG FPM_PORT=9000
77+
COPY docker/php/www.conf.template /usr/local/etc/php-fpm.d/www.conf.template
78+
RUN envsubst '${FPM_PORT}' < /usr/local/etc/php-fpm.d/www.conf.template > /usr/local/etc/php-fpm.d/www.conf
79+
RUN sed -i s/9000/$FPM_PORT/g /usr/local/etc/php-fpm.d/zz-docker.conf
80+
81+
# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
82+
ENV COMPOSER_ALLOW_SUPERUSER=1
83+
ENV PATH="${PATH}:/root/.composer/vendor/bin"
84+
85+
COPY composer.json composer.lock symfony.lock ./
86+
87+
RUN set -eux; \
88+
composer install --prefer-dist --no-autoloader --no-scripts --no-progress --no-dev; \
89+
composer clear-cache
90+
91+
COPY .env ./
92+
COPY assets assets/
93+
COPY bin bin/
94+
COPY config config/
95+
COPY public public/
96+
COPY src src/
97+
COPY templates templates/
98+
99+
RUN set -eux; \
100+
mkdir -p var/cache var/log; \
101+
chown -R www-data:www-data var/log; \
102+
composer dump-autoload --classmap-authoritative; \
103+
composer run-script post-install-cmd; \
104+
chmod +x bin/console; \
105+
sync
106+
107+
COPY docker/php/php-entrypoint.sh /usr/local/bin/docker-entrypoint
108+
RUN chmod +x /usr/local/bin/docker-entrypoint
109+
110+
ENTRYPOINT ["docker-entrypoint"]
111+
CMD ["php-fpm"]
112+
113+
#############################################################
114+
# NODEJS #
115+
#############################################################
116+
FROM node:${NODE_VERSION}-alpine AS server-for-symfony-flex-nodejs
117+
118+
WORKDIR /srv/server-for-symfony-flex
119+
120+
RUN set -eux; \
121+
apk add --no-cache \
122+
g++ \
123+
gcc \
124+
git \
125+
make \
126+
python2 \
127+
;
128+
129+
COPY package.json package-lock.json webpack.config.js ./
130+
COPY assets ./assets
131+
132+
RUN set -eux; \
133+
npm install ; \
134+
npm cache clean --force
135+
136+
RUN npm run build
137+
138+
COPY docker/nodejs/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
139+
RUN chmod +x /usr/local/bin/docker-entrypoint
140+
141+
ENTRYPOINT ["docker-entrypoint"]
142+
CMD ["npm", "run", "watch"]
143+
144+
#############################################################
145+
# NGINX #
146+
#############################################################
147+
FROM nginx:${NGINX_VERSION}-alpine AS server-for-symfony-flex-nginx
148+
149+
WORKDIR /srv/server-for-symfony-flex
150+
151+
COPY docker/nginx/nginx.conf /etc/nginx/nginx.conf
152+
153+
ARG NGINX_PORT=8080
154+
ARG FPM_PORT=9000
155+
COPY docker/nginx/conf.d/default.conf.template /etc/nginx/conf.d/default.conf.template
156+
RUN envsubst '${NGINX_PORT} ${FPM_PORT}' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf
157+
158+
COPY --from=server-for-symfony-flex-php /srv/server-for-symfony-flex/public public/
159+
COPY --from=server-for-symfony-flex-nodejs /srv/server-for-symfony-flex/public public/
160+
161+
RUN apk add --no-cache bash
162+
163+
COPY docker/nginx/wait-for-it.sh /
164+
RUN chmod +x /wait-for-it.sh
165+
166+
ENV FPM_PORT=$FPM_PORT
167+
CMD /wait-for-it.sh -t 0 localhost:$FPM_PORT -- nginx -g "daemon off;"

Diff for: composer.json

+9-9
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,31 @@
22
"type": "project",
33
"license": "proprietary",
44
"require": {
5-
"php": "^7.2",
5+
"php": "^7.3",
66
"ext-iconv": "*",
77
"ext-json": "*",
8-
"czproject/git-php": "^3.12",
9-
"friendsofphp/php-cs-fixer": "^2.15",
10-
"php-http/httplug-pack": "^1.1",
8+
"czproject/git-php": "^3.18",
9+
"friendsofphp/php-cs-fixer": "^2.16",
10+
"php-http/httplug-pack": "^1.2",
1111
"psr/simple-cache": "^1.0",
1212
"robinvdvleuten/ulid": "^3.0",
13-
"sensio/framework-extra-bundle": "^5.1",
13+
"sensio/framework-extra-bundle": "^5.5",
1414
"symfony/apache-pack": "^1.0",
1515
"symfony/asset": "^4",
1616
"symfony/cache": "^4",
1717
"symfony/console": "^4",
1818
"symfony/dotenv": "^4",
1919
"symfony/filesystem": "^4",
2020
"symfony/finder": "^4",
21-
"symfony/flex": "^1.0",
21+
"symfony/flex": "^1.13",
2222
"symfony/framework-bundle": "^4",
23-
"symfony/monolog-bundle": "^3.3",
23+
"symfony/monolog-bundle": "^3.5",
2424
"symfony/twig-bundle": "^4",
25-
"symfony/webpack-encore-bundle": "^1.6",
25+
"symfony/webpack-encore-bundle": "^1.7",
2626
"symfony/yaml": "^4"
2727
},
2828
"require-dev": {
29-
"phpro/grumphp": "^0.15.2",
29+
"phpro/grumphp": "^1.3",
3030
"symfony/browser-kit": "^4",
3131
"symfony/debug-pack": "^1.0",
3232
"symfony/phpunit-bridge": "^4",

0 commit comments

Comments
 (0)