Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Docker setup #232

Closed
wants to merge 11 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
**/*.log
**/*.md
**/*.php~
**/._*
**/.dockerignore
**/.DS_Store
**/.git/
**/.gitattributes
**/.gitignore
**/.gitkeep
**/.gitmodules
**/Dockerfile
**/Thumbs.db
.editorconfig
.env*
.php_cs.cache
.travis.yml
app/config/parameters.yml
app/config/*.local.yml
bin/*
!bin/console
!bin/symfony_requirements
composer.phar
docker-compose.override.yaml
docker-compose.override.yml
docker-compose.yaml
docker-compose.yml
docker/mysql/data/
etc/build/*
node_modules/
var/*
vendor/
web/assets/
web/bundles/
web/css/
web/js/
web/media/
86 changes: 86 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org

root = true

[*]
# Change these settings to your own preference
indent_style = space
indent_size = 4

# We recommend you to keep these unchanged
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.feature]
indent_style = space
indent_size = 2

[*.js]
indent_style = space
indent_size = 2

[*.json]
indent_style = space
indent_size = 2

[*.md]
indent_style = space
indent_size = 4
trim_trailing_whitespace = false

[*.neon]
indent_style = tab
indent_size = 4

[*.php]
indent_style = space
indent_size = 4

[*.sh]
indent_style = tab
indent_size = 4

[*.{yaml,yml}]
indent_style = space
indent_size = 4
trim_trailing_whitespace = false

[.gitmodules]
indent_style = tab
indent_size = 4

[.php_cs{,.dist}]
indent_style = space
indent_size = 4

[composer.json]
indent_style = space
indent_size = 4

[docker-compose{,.override}.{yaml,yml}]
indent_style = space
indent_size = 2

[Dockerfile]
indent_style = tab
indent_size = 4

[package.json]
indent_style = space
indent_size = 2

[phpspec.yml{,.dist}]
indent_style = space
indent_size = 4

[phpstan.neon]
indent_style = tab
indent_size = 4

[phpunit.xml{,.dist}]
indent_style = space
indent_size = 4
8 changes: 8 additions & 0 deletions .env.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
MYSQL_PASSWORD=!ChangeMe!
MYSQL_ROOT_PASSWORD=!ChangeMe!
PHP_DATE_TIMEZONE=UTC
SYLIUS_MAILER_HOST=mailhog
SYLIUS_MAILER_PASSWORD=
SYLIUS_MAILER_PORT=1025
SYLIUS_MAILER_USER=
SYLIUS_SECRET=!ChangeMe!
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,16 @@

/vendor
/node_modules
/yarn-error.log

/etc/build/*
!/etc/build/.gitkeep

/behat.yml
/phpunit.xml
/phpspec.yml

/.env
/docker-compose.override.yaml
/docker-compose.override.yml
/docker/mysql/data/
151 changes: 151 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
ARG PHP_VERSION=7.2
ARG NODE_VERSION=10
ARG NGINX_VERSION=1.14

FROM php:${PHP_VERSION}-fpm-alpine AS sylius_php

# persistent / runtime deps
RUN apk add --no-cache \
acl \
file \
gettext \
git \
mariadb-client \
;

ARG APCU_VERSION=5.1.11
RUN set -eux; \
apk add --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
freetype-dev \
icu-dev \
libjpeg-turbo-dev \
libpng-dev \
libtool \
libwebp-dev \
libzip-dev \
mariadb-dev \
zlib-dev \
; \
\
docker-php-ext-configure gd --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include --with-webp-dir=/usr/include --with-freetype-dir=/usr/include/; \
docker-php-ext-configure zip --with-libzip; \
docker-php-ext-install -j$(nproc) \
exif \
gd \
intl \
pdo_mysql \
zip \
; \
pecl install \
apcu-${APCU_VERSION} \
; \
pecl clear-cache; \
docker-php-ext-enable \
apcu \
opcache \
; \
\
runDeps="$( \
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
| tr ',' '\n' \
| sort -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)"; \
apk add --no-cache --virtual .sylius-phpexts-rundeps $runDeps; \
\
apk del .build-deps

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY docker/php/php.ini /usr/local/etc/php/php.ini

ARG COMPOSER_AUTH=
# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
ENV COMPOSER_ALLOW_SUPERUSER=1
RUN set -eux; \
composer global require "hirak/prestissimo:^0.3" --prefer-dist --no-progress --no-suggest --classmap-authoritative; \
composer clear-cache
ENV PATH="${PATH}:/root/.composer/vendor/bin"

WORKDIR /srv/sylius

# Build for production
ARG SYMFONY_ENV=prod

# Prevent the reinstallation of vendors at every changes in the source code
COPY composer.json composer.lock ./
RUN set -eux; \
composer install --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress --no-suggest; \
composer clear-cache

COPY . ./

RUN set -eux; \
mkdir -p var/cache var/logs; \
composer dump-autoload --classmap-authoritative --no-dev; \
composer run-script --no-dev post-install-cmd; \
chmod +x bin/console; sync; \
bin/console sylius:install:assets; \
bin/console sylius:theme:assets:install
VOLUME /srv/sylius/var

VOLUME /srv/sylius/web/media

COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint

ENTRYPOINT ["docker-entrypoint"]
CMD ["php-fpm"]

FROM node:${NODE_VERSION}-alpine AS sylius_nodejs

WORKDIR /srv/sylius

# Build for production
ARG NODE_ENV=production
ARG GULP_ENV=prod

RUN set -eux; \
apk add --no-cache --virtual .build-deps \
g++ \
gcc \
make \
python \
;

# Prevent the reinstallation of vendors at every changes in the source code
COPY package.json yarn.lock ./
RUN set -eux; \
yarn install; \
yarn cache clean

COPY --from=sylius_php /srv/sylius/vendor/sylius/sylius/src/Sylius/Bundle/UiBundle/Resources/private vendor/sylius/sylius/src/Sylius/Bundle/UiBundle/Resources/private/
COPY --from=sylius_php /srv/sylius/vendor/sylius/sylius/src/Sylius/Bundle/AdminBundle/Resources/private vendor/sylius/sylius/src/Sylius/Bundle/AdminBundle/Resources/private/
COPY --from=sylius_php /srv/sylius/vendor/sylius/sylius/src/Sylius/Bundle/ShopBundle/Resources/private vendor/sylius/sylius/src/Sylius/Bundle/ShopBundle/Resources/private/

COPY --from=sylius_php /srv/sylius/vendor/sylius/sylius/src/Sylius/Bundle/AdminBundle/gulpfile.babel.js vendor/sylius/sylius/src/Sylius/Bundle/AdminBundle/gulpfile.babel.js
COPY --from=sylius_php /srv/sylius/vendor/sylius/sylius/src/Sylius/Bundle/ShopBundle/gulpfile.babel.js vendor/sylius/sylius/src/Sylius/Bundle/ShopBundle/gulpfile.babel.js

COPY gulpfile.babel.js .babelrc ./
RUN set -eux; \
if [ "${NODE_ENV}" = 'production' ]; then \
NODE_ENV=development yarn install; \
yarn build; \
yarn install; \
yarn cache clean; \
fi

COPY docker/nodejs/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint

ENTRYPOINT ["docker-entrypoint"]
CMD ["node"]

FROM nginx:${NGINX_VERSION}-alpine AS sylius_nginx

COPY docker/nginx/conf.d/default.conf /etc/nginx/conf.d/

WORKDIR /srv/sylius

COPY --from=sylius_php /srv/sylius/web web/
COPY --from=sylius_nodejs /srv/sylius/web web/
3 changes: 2 additions & 1 deletion app/config/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,12 @@ framework:

doctrine:
dbal:
driver: '%database_driver%'
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
driver: pdo_mysql
Copy link
Contributor Author

@teohhanhui teohhanhui Jun 1, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's pointless to have database driver configurable via environment variable when the server_version is fixed here. It's also something that does not change across deployments in an application, so following Symfony Best Practices:

Application-Related Configuration

Define the application behavior related configuration options in the app/config/config.yml file.

Defining these values in parameters.yml file would add an extra layer of configuration that's not needed because you don't need or want these configuration values to change on each server.

server_version: '5.5'
charset: UTF8

Expand All @@ -49,6 +49,7 @@ doctrine_migrations:
swiftmailer:
transport: '%mailer_transport%'
host: '%mailer_host%'
port: '%mailer_port%'
username: '%mailer_user%'
password: '%mailer_password%'

Expand Down
4 changes: 2 additions & 2 deletions app/config/parameters.yml.dist
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
parameters:
database_driver: '%env(SYLIUS_DATABASE_DRIVER)%'
database_host: '%env(SYLIUS_DATABASE_HOST)%'
database_port: '%env(SYLIUS_DATABASE_PORT)%'
database_name: '%env(SYLIUS_DATABASE_NAME)%'
Expand All @@ -10,13 +9,13 @@ parameters:

mailer_transport: '%env(SYLIUS_MAILER_TRANSPORT)%'
mailer_host: '%env(SYLIUS_MAILER_HOST)%'
mailer_port: '%env(SYLIUS_MAILER_PORT)%'
mailer_user: '%env(SYLIUS_MAILER_USER)%'
mailer_password: '%env(SYLIUS_MAILER_PASSWORD)%'

secret: '%env(SYLIUS_SECRET)%'

# Fallback values (used if environmental variables are not set)
env(SYLIUS_DATABASE_DRIVER): pdo_mysql
env(SYLIUS_DATABASE_HOST): 127.0.0.1
env(SYLIUS_DATABASE_PORT): ~
env(SYLIUS_DATABASE_NAME): sylius
Expand All @@ -25,6 +24,7 @@ parameters:

env(SYLIUS_MAILER_TRANSPORT): smtp
env(SYLIUS_MAILER_HOST): 127.0.0.1
env(SYLIUS_MAILER_PORT): ~
env(SYLIUS_MAILER_USER): ~
env(SYLIUS_MAILER_PASSWORD): ~

Expand Down
6 changes: 3 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"require": {
"php": "^7.1",

"sylius/sylius": "1.2.*",
"sylius/sylius": "1.3.*@dev",
"symfony/symfony": "^3.4|^4.1"
},
"require-dev": {
Expand Down Expand Up @@ -80,12 +80,12 @@
"symfony-var-dir": "var",
"symfony-web-dir": "web",
"symfony-tests-dir": "tests",
"symfony-assets-install": "relative",
"symfony-assets-install": "copy",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is necessary as symlinks don't work across containers.

"incenteev-parameters": {
"file": "app/config/parameters.yml"
},
"branch-alias": {
"dev-master": "1.2-dev"
"dev-master": "1.3-dev"
}
}
}
Loading