Skip to content

Commit

Permalink
Add experimental Docker support
Browse files Browse the repository at this point in the history
  • Loading branch information
marcw committed Mar 29, 2018
1 parent 135c04d commit 71b0d68
Show file tree
Hide file tree
Showing 22 changed files with 3,379 additions and 832 deletions.
18 changes: 18 additions & 0 deletions .env.dist
@@ -0,0 +1,18 @@
APP_ENV=dev
APP_SECRET=foo
LOCALE=en
DATABASE_URL=pgsql://audiencehero:audiencehero@db/audiencehero
MAILER_URL=smtp://smtp.mailgun.com?login=postmaster@foo&password=foo
RABBITMQ_URL=amqp://guest:guest@localhost:5672/audiencehero
AWS_ID=foo
AWS_SECRET=foo
AWS_UPLOAD_BUCKET=foo
GOOGLE_API_KEY=foo
MAILGUN_KEY=foo
RECAPTCHA_PUBLIC_KEY=foo
RECAPTCHA_PRIVATE_KEY=foo
CORS_ALLOW_ORIGIN=*
JWT_PRIVATE_KEY_PATH=%kernel.root_dir%/../var/jwt/dev_private.pem
JWT_PUBLIC_KEY_PATH=%kernel.root_dir%/../var/jwt/dev_public.pem
JWT_KEY_PASS_PHRASE=passphrase
JWT_TOKEN_TTL=86400
1 change: 1 addition & 0 deletions .gitignore
@@ -1,3 +1,4 @@
/.env
app/config/parameters.yml
docs/build
build/
Expand Down
124 changes: 71 additions & 53 deletions Dockerfile
@@ -1,53 +1,71 @@
FROM php:7.1

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update -yqq && apt-get install -yqq apt-transport-https
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -

RUN apt-get update -y && \
apt-get install -y apt-transport-https && \
apt-get install -y apt-utils && \
apt-get install -y awscli && \
apt-get install -y sudo wget yarn nodejs git libmagickwand-dev libmagickcore-dev libcurl4-gnutls-dev libicu-dev \
libmcrypt-dev libvpx-dev libjpeg-dev libpng-dev libxpm-dev zlib1g-dev libfreetype6-dev \
libxml2-dev libexpat1-dev libbz2-dev libgmp3-dev libldap2-dev unixodbc-dev libpq-dev \
libsqlite3-dev libaspell-dev libsnmp-dev libpcre3-dev libtidy-dev librabbitmq-dev librabbitmq1 \
unzip


RUN pecl install redis-3.1.1 && \
pecl install imagick-3.4.3 && \
pecl install xdebug-2.5.1 && \
pecl install amqp-1.9.0 && \
docker-php-ext-enable redis && \
docker-php-ext-enable imagick && \
docker-php-ext-enable xdebug && \
docker-php-ext-enable amqp && \
docker-php-ext-install bcmath mbstring mcrypt pdo pdo_pgsql curl json intl gd xml zip bz2 opcache soap pcntl

##
# Install composer
#
RUN wget https://composer.github.io/installer.sig -O - -q | tr -d '\n' > installer.sig && \
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
php -r "if (hash_file('SHA384', 'composer-setup.php') === file_get_contents('installer.sig')) { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" && \
php composer-setup.php --install-dir=/usr/local/bin --filename=composer && \
php -r "unlink('composer-setup.php'); unlink('installer.sig');"

##
# At this point Google Chrome Beta is 59 - first version with headless support
#
RUN wget -q https://dl.google.com/linux/direct/google-chrome-beta_current_amd64.deb
RUN dpkg -i google-chrome-beta_current_amd64.deb; apt-get -fy install

##
# Install chromedriver to make it work with Selenium
#
RUN wget -q https://chromedriver.storage.googleapis.com/2.29/chromedriver_linux64.zip
RUN unzip chromedriver_linux64.zip -d /usr/local/bin

RUN apt-get clean
FROM composer:1.6
FROM php:7.2-fpm-alpine3.7

RUN apk add --no-cache \
git

ENV APCU_VERSION 5.1.9
RUN set -xe \
&& apk add --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
icu-dev \
postgresql-dev \
zlib-dev \
libpng-dev \
libxml2-dev \
imagemagick-dev \
imagemagick \
imagemagick-libs \
&& docker-php-ext-install \
intl \
pdo \
pdo_mysql \
pdo_pgsql \
zip \
gd \
soap \
bcmath \
&& pecl install \
apcu-${APCU_VERSION} \
imagick \
&& docker-php-ext-enable pdo \
&& docker-php-ext-enable pdo_mysql \
&& docker-php-ext-enable pdo_pgsql \
&& docker-php-ext-enable imagick \
&& docker-php-ext-enable gd \
&& docker-php-ext-enable soap \
&& docker-php-ext-enable bcmath \
&& docker-php-ext-enable --ini-name 20-apcu.ini apcu \
&& docker-php-ext-enable --ini-name 05-opcache.ini 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 .php-phpexts-rundeps $runDeps \
&& apk del .build-deps

COPY --from=0 /usr/bin/composer /usr/bin/composer
COPY docker/php/php.ini /usr/local/etc/php/php.ini
COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint

WORKDIR /srv/audiencehero
ENTRYPOINT ["docker-entrypoint"]
CMD ["php-fpm"]

# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
ENV COMPOSER_ALLOW_SUPERUSER 1
RUN composer global require "hirak/prestissimo:^0.3" --prefer-dist --no-progress --no-suggest --classmap-authoritative

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

COPY . ./

RUN mkdir -p var/cache var/logs var/sessions \
&& composer dump-autoload --classmap-authoritative --no-dev \
&& chown -R www-data var
1 change: 1 addition & 0 deletions Dockerfile.nginx
@@ -0,0 +1 @@
FROM nginx:1.13-alpine
11 changes: 11 additions & 0 deletions Dockerfile.node
@@ -0,0 +1,11 @@
FROM node:9-alpine

RUN apk add --no-cache \
git \
yarn

COPY docker/node/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint
WORKDIR /srv/audiencehero

ENTRYPOINT ["docker-entrypoint"]
9 changes: 9 additions & 0 deletions README.md
Expand Up @@ -20,13 +20,22 @@ The project is organized around a core, with extensions providing several differ
- PromoBundle: Send unreleased media to people, and gather feedback.
- SitemapBundle: Generate sitemaps.


## Warning

AudienceHero is **alpha software**. Things can be broken, and might change.

## Installation

1. `composer install`
2. `yarn`
3. `./bin/console audiencehero:generate:configuration`
4. `NODE_ENV=development yarn run encore dev`

Experimental:

1. docker-compose up

At this point, you have all the necessary files to run the projet. You will still need to configure your virtualhost.

## Documentation
Expand Down
34 changes: 13 additions & 21 deletions app/config/config.yml
@@ -1,15 +1,14 @@
imports:
- { resource: parameters.yml }
- { resource: parameters_assets.yml }
- { resource: security.yml }
- { resource: services.yml }

parameters:
locale: en
env(DATABASE_URL): ''

enqueue:
transport:
default: 'amqp://'
default: '%env(RABBITMQ_URL)%'
client:
app_name: 'audience_hero'
async_events: false
Expand All @@ -28,8 +27,8 @@ bazinga_geocoder:
database_filename: '%kernel.root_dir%/../vendor/geocoder-php/geoip2-provider/Tests/fixtures/GeoLite2-City.mmdb'

framework:
translator: { fallback: "%locale%" }
secret: "%secret%"
translator: { fallback: "%env(LOCALE)%" }
secret: "%env(APP_SECRET)%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
Expand All @@ -39,7 +38,7 @@ framework:
json_manifest_path: '%kernel.project_dir%/web/assets/manifest.json'
templating:
engines: ['twig']
default_locale: "%locale%"
default_locale: "%env(LOCALE)%"
trusted_hosts: ~
session:
metadata_update_threshold: 86400
Expand All @@ -61,11 +60,7 @@ twig:
doctrine:
dbal:
driver: pdo_pgsql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
url: "%env(resolve:DATABASE_URL)%"
charset: UTF8
server_version: 9.4
types:
Expand Down Expand Up @@ -112,11 +107,8 @@ doctrine:

# Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
spool: { type: memory }
url: "%env(MAILER_URL)%"
spool: { type: memory }

stof_doctrine_extensions:
default_locale: en_US
Expand Down Expand Up @@ -195,7 +187,7 @@ ewz_recaptcha:

nelmio_cors:
defaults:
allow_origin: ['%cors_allow_origin%']
allow_origin: ['%env(CORS_ALLOW_ORIGIN)%']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE', 'OPTIONS']
allow_headers: ['content-type', 'authorization']
expose_headers: ['link']
Expand All @@ -214,8 +206,8 @@ nelmio_cors:
# public: true

lexik_jwt_authentication:
private_key_path: '%jwt_private_key_path%'
public_key_path: '%jwt_public_key_path%'
pass_phrase: '%jwt_key_pass_phrase%'
token_ttl: '%jwt_token_ttl%'
private_key_path: '%env(JWT_PRIVATE_KEY_PATH)%'
public_key_path: '%env(JWT_PUBLIC_KEY_PATH)%'
pass_phrase: '%env(JWT_KEY_PASS_PHRASE)%'
token_ttl: '%env(JWT_TOKEN_TTL)%'

47 changes: 0 additions & 47 deletions app/config/parameters.yml.dist

This file was deleted.

40 changes: 0 additions & 40 deletions app/config/parameters.yml.test

This file was deleted.

0 comments on commit 71b0d68

Please sign in to comment.