├── .gitignore ├── LICENSE ├── README.md ├── base-image ├── Dockerfile ├── Dockerfile-base └── docker-compose.yml ├── ci-env ├── Dockerfile ├── Makefile ├── build.sh ├── cleanup.sh ├── docker-compose.base.yml ├── docker-compose.ci.yml ├── docker-compose.profile.yml ├── docker-compose.qa.yml ├── docker-compose.test.yml ├── docker-compose.yml ├── opt │ ├── deployment │ │ └── ci │ │ │ └── start.sh │ ├── fpm │ │ └── php-fpm.conf │ └── nginx │ │ └── prod │ │ ├── default.conf │ │ └── nginx.conf ├── publish-image.sh ├── run-integration-tests.sh ├── run-unit-tests.sh └── save-artifacts.sh ├── php-env ├── Dockerfile ├── Dockerfile-from-base ├── Dockerfile-full ├── Dockerfile7 ├── Makefile ├── docker-compose.base.yml ├── docker-compose.multi.yml ├── docker-compose.profile.yml ├── docker-compose.rand.ports.yml ├── docker-compose.test.yml ├── docker-compose.yml ├── opt │ ├── build │ │ ├── php55-Dockerfile │ │ ├── php56-Dockerfile │ │ └── php7-Dockerfile │ └── nginx │ │ ├── dev │ │ └── default.conf │ │ └── prod │ │ └── default.conf ├── public │ └── index.php └── run-test-suite.sh ├── profiling-env ├── Dockerfile ├── docker-compose.base.yml ├── docker-compose.profile.yml ├── docker-compose.yml └── opt │ └── build │ ├── php55-Dockerfile │ ├── php56-Dockerfile │ └── php7-Dockerfile └── qa-env └── nginx ├── deploy.sh ├── docker-compose.yml ├── gen-index-page.php ├── gen-staging-vhost.php ├── get-tag-to-ports-map.php ├── multi-site-vhost-gen.conf ├── multi-site-vhost-template.conf └── post-deploy.sh /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012-2016 Paul Dragoonis 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 7 | the Software, and to permit persons to whom the Software is furnished to do so, 8 | subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 15 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 16 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 17 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 18 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Docker CI Scripts 2 | 3 | These scripts are the joint work of [David McKay](http://github.com/rawkode "David McKay") ([@rawkode](http://twitter.com/rawkode "David McKay")) and 4 | [Paul Dragoonis](http://github.com/dragoonis "Paul Dragoonis") ([@dr4goonis](http://twitter.com/dr4goonis "Paul Dragoonis")) 5 | 6 | License: MIT 7 | -------------------------------------------------------------------------------- /base-image/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM my-registry.com/php-webserver-base:latest 2 | 3 | # Install composer 4 | RUN wget -qO /usr/local/bin/composer https://getcomposer.org/download/1.2.0/composer.phar && chmod +x /usr/local/bin/composer 5 | 6 | # Install SSH keys 7 | RUN chown -R build:build /home/build/ && chmod 0600 /home/build/.ssh/id_rsa 8 | 9 | # Copy all app code 10 | COPY . /var/www 11 | 12 | USER build 13 | RUN composer global require "hirak/prestissimo:^0.3" --no-interaction --no-ansi --quiet --no-progress --prefer-dist && \ 14 | composer clear-cache --no-ansi --quiet && \ 15 | chmod -R go-w ~/.composer/vendor && \ 16 | 17 | # Run composer install as user 'build' and clean up the cache 18 | composer install --no-interaction --no-ansi --no-progress --prefer-dist && \ 19 | composer clear-cache --no-ansi --quiet && \ 20 | 21 | # Fix permissions 22 | chown -R root:root /app/vendor/ && \ 23 | chmod -R go-w /app/vendor/ && \ 24 | chown -R www:www /app/app/cache/ 25 | 26 | # Framework specific setup commands 27 | php app/console assets:install web --env=prod --symlink --verbose && \ 28 | chown www-data -R /var/www 29 | 30 | # Now we begin to prep the boot process 31 | USER www 32 | 33 | # Run a healthcheck as user 'www' 34 | RUN php artisan infra:healthcheck 35 | 36 | # Accessible ports by other containers 37 | EXPOSE 80 443 38 | 39 | # Startup command, to keep the container running and alive 40 | ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' && /usr/local/sbin/php-fpm -D 41 | -------------------------------------------------------------------------------- /base-image/Dockerfile-base: -------------------------------------------------------------------------------- 1 | FROM php:7.0-fpm 2 | 3 | WORKDIR /var/www 4 | 5 | ENV PHPREDIS_VERSION 2.2.7 6 | ENV NGINX_VERSION 1.9.9-1~jessie 7 | 8 | # Install System Dependencies 9 | RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \ 10 | && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \ 11 | && apt-get update \ 12 | && apt-get install -y ca-certificates nginx=${NGINX_VERSION} nano wget git \ 13 | && apt-get clean && apt-get purge \ 14 | && rm -rf /var/lib/apt/lists/* /var/cache/apt/* 15 | 16 | # Install PHP extensions 17 | RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz \ 18 | && tar xfz /tmp/redis.tar.gz \ 19 | && rm -r /tmp/redis.tar.gz \ 20 | && mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \ 21 | && docker-php-ext-install redis pdo_pgsql pgsql soap gd zip mbstring sockets \ 22 | && docker-php-ext-enable redis pdo_pgsql pgsql soap gd zip mbstring sockets \ 23 | && pecl install xdebug && echo ";zend_extension=xdebug.so" > /usr/local/etc/php/conf.d/xdebug.ini \ 24 | && pecl install apcu-4.0.10 && echo extension=apcu.so > /usr/local/etc/php/conf.d/apcu.ini 25 | 26 | 27 | -------------------------------------------------------------------------------- /base-image/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | application: 3 | image: mybaseimage:latest 4 | ports: 5 | - 80:80 6 | volumes: 7 | - ./opt/php/dev/conf.d:/usr/local/etc/php/conf.d 8 | - ./opt/php/dev/php.ini:/usr/local/etc/php/php.ini 9 | - ./opt/nginx/dev/default.conf:/etc/nginx/conf.d/default.conf 10 | - .:/var/www 11 | -------------------------------------------------------------------------------- /ci-env/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.0-fpm 2 | 3 | WORKDIR /var/www 4 | 5 | ENV PHPREDIS_VERSION 2.2.7 6 | ENV NGINX_VERSION 1.9.9-1~jessie 7 | 8 | # Install System Dependencies 9 | RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \ 10 | && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \ 11 | && apt-get update \ 12 | && apt-get install -y ca-certificates nginx=${NGINX_VERSION} nano wget git \ 13 | && apt-get clean && apt-get purge \ 14 | && rm -rf /var/lib/apt/lists/* /var/cache/apt/* 15 | 16 | # Install PHP extensions 17 | RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz \ 18 | && tar xfz /tmp/redis.tar.gz \ 19 | && rm -r /tmp/redis.tar.gz \ 20 | && mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \ 21 | && docker-php-ext-install redis pdo_pgsql pgsql soap gd zip mbstring sockets \ 22 | && docker-php-ext-enable redis pdo_pgsql pgsql soap gd zip mbstring sockets \ 23 | && pecl install xdebug && echo ";zend_extension=xdebug.so" > /usr/local/etc/php/conf.d/xdebug.ini \ 24 | && pecl install apcu-4.0.10 && echo extension=apcu.so > /usr/local/etc/php/conf.d/apcu.ini 25 | 26 | # nginx vhost and php ini settings 27 | COPY opt/nginx/prod/default.conf /etc/nginx/conf.d/default.conf # nginx conf 28 | COPY opt/php/prod/conf.d /usr/local/etc/php/conf.d # php ext dir 29 | COPY opt/php/prod/php.ini /usr/local/etc/php/php.ini # php ini file 30 | 31 | # Install composer 32 | RUN wget -qO /usr/local/bin/composer https://getcomposer.org/download/1.2.0/composer.phar && chmod +x /usr/local/bin/composer 33 | 34 | # Install SSH keys 35 | RUN chown -R build:build /home/build/ && chmod 0600 /home/build/.ssh/id_rsa 36 | 37 | # Copy all app code 38 | COPY . /var/www 39 | 40 | USER build 41 | RUN composer global require "hirak/prestissimo:^0.3" --no-interaction --no-ansi --quiet --no-progress --prefer-dist && \ 42 | composer clear-cache --no-ansi --quiet && \ 43 | chmod -R go-w ~/.composer/vendor && \ 44 | 45 | # Run composer install as user 'build' and clean up the cache 46 | composer install --no-interaction --no-ansi --no-progress --prefer-dist && \ 47 | composer clear-cache --no-ansi --quiet && \ 48 | 49 | # Fix permissions 50 | chown -R root:root /app/vendor/ && \ 51 | chmod -R go-w /app/vendor/ && \ 52 | chown -R www:www /app/app/cache/ 53 | 54 | # Framework specific setup commands 55 | php app/console assets:install web --env=prod --symlink --verbose && \ 56 | chown www-data -R /var/www 57 | 58 | # Now we begin to prep the boot process 59 | USER www 60 | 61 | # Run a healthcheck as user 'www' 62 | RUN php artisan infra:healthcheck 63 | 64 | # Accessible ports by other containers 65 | EXPOSE 80 443 66 | 67 | # Startup command, to keep the container running and alive 68 | ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' && /usr/local/sbin/php-fpm -D 69 | -------------------------------------------------------------------------------- /ci-env/Makefile: -------------------------------------------------------------------------------- 1 | BASE = my-registry.com/myorg 2 | NAME = myapp 3 | TAG = $(TAG) 4 | 5 | .PHONY: all build test shell run clean 6 | 7 | all: build test 8 | 9 | build: 10 | docker build --pull --force-rm -t ${BASE}/${NAME}:${TAG} . 11 | 12 | shell: 13 | docker run -P --rm -it --name ${NAME} ${BASE}/${NAME}:$(TAG) /bin/sh 14 | 15 | run: 16 | docker run -P --rm --name ${NAME} ${BASE}/${NAME}:$(TAG) 17 | 18 | clean: 19 | docker rmi ${BASE}/${NAME}:$(TAG) 20 | -------------------------------------------------------------------------------- /ci-env/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # cleanup prev failed builds 5 | docker images | grep ${BUILD_NUMBER} | awk '{ value=$1":"$2; print value }' | xargs docker rmi -f || true 6 | 7 | # spin up node by itself 8 | /bin/docker run --volume ${WORKSPACE}:/var/www --workdir /var/www --rm -e USERID=`id -u jenkins` node:5.6 /var/www/run-node.sh 9 | 10 | # bake in the build number to the preview yml file 11 | sed -i 's/%BUILD_TAG%/${BUILD_NUMBER}/g' docker-compose.qa.yml 12 | 13 | # pull the latest base image 14 | docker pull my-registry.com/php-webserver-base:latest || true 15 | 16 | # build the image for this jenkins build 17 | docker build --force-rm=true --pull --tag="my-registry.com/myapp:${BUILD_NUMBER}" . 18 | -------------------------------------------------------------------------------- /ci-env/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | docker rmi -f my-registry.com/myapp:${BUILD_NUMBER} || exit 0 5 | -------------------------------------------------------------------------------- /ci-env/docker-compose.base.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | 5 | application: 6 | build: . 7 | working_dir: /var/www 8 | ports: 9 | - 80:80 10 | volumes: 11 | - ./opt/php/dev/conf.d:/usr/local/etc/php/conf.d 12 | - ./opt/php/dev/php.ini:/usr/local/etc/php/php.ini 13 | - ./opt/nginx/dev/default.conf:/etc/nginx/conf.d/default.conf 14 | - .:/var/www 15 | depends_on: 16 | - database 17 | - redis 18 | 19 | cache_and_logs: 20 | image: busybox 21 | volumes: 22 | - /var/www/build 23 | - /var/www/app/cache 24 | - /var/www/app/logs 25 | - /var/www/web/assets 26 | - /var/www/web/bundles 27 | - /var/www/web/static 28 | - /var/www/web/uploads 29 | - /var/www/web/screenshots 30 | 31 | blackfire: 32 | image: blackfire/blackfire:latest 33 | environment: 34 | - BLACKFIRE_SERVER_ID 35 | - BLACKFIRE_SERVER_TOKEN 36 | - BLACKFIRE_LOG_LEVEL=4 37 | 38 | node: 39 | image: node:5.6 40 | command: ./opt/node/run.sh 41 | working_dir: /var/www 42 | volumes: 43 | - .:/var/www 44 | 45 | database: 46 | image: postgres 47 | environment: 48 | - POSTGRES_DB=ppl 49 | - POSTGRES_PASSWORD=ppl 50 | - POSTGRES_USER=ppl 51 | 52 | elasticsearch: 53 | image: willdurand/elk 54 | volumes: 55 | - ./opt/elk/logstash:/etc/logstash 56 | - ./opt/elk/logstash/patterns:/opt/logstash/patterns 57 | 58 | redis: 59 | image: redis 60 | 61 | beanstalkd: 62 | image: schickling/beanstalkd 63 | 64 | varnish: 65 | image: million12/varnish:latest 66 | volumes: 67 | - ./opt/varnish/dev/default.vcl:/etc/varnish/default.vcl 68 | -------------------------------------------------------------------------------- /ci-env/docker-compose.ci.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | volumes: 4 | screenshots: 5 | driver: local 6 | build: 7 | driver: local 8 | 9 | services: 10 | application: 11 | image: my-registry.com/myapp:%BUILD_TAG% 12 | environment: 13 | SYMFONY_ENVIRONMENT: test 14 | entrypoint: ./opt/deployment/test/start.sh 15 | ports: 16 | - 80 17 | volumes: 18 | - ./opt/php/dev/conf.d:/usr/local/etc/php/conf.d 19 | - ./opt/php/dev/php.ini:/usr/local/etc/php/php.ini 20 | - ./opt/nginx/dev/default.conf:/etc/nginx/conf.d/default.conf 21 | - ./build:/var/www/build 22 | - ./web/screenshots:/var/www/web/screenshots 23 | depends_on: 24 | - database 25 | - elasticsearch 26 | - redis 27 | - beanstalkd 28 | - cache_and_logs 29 | - phantomjs 30 | 31 | cache_and_logs: 32 | extends: 33 | file: docker-compose.base.yml 34 | service: cache_and_logs 35 | 36 | database: 37 | extends: 38 | file: docker-compose.base.yml 39 | service: database 40 | ports: 41 | - 5432 42 | 43 | elasticsearch: 44 | extends: 45 | file: docker-compose.base.yml 46 | service: elasticsearch 47 | ports: 48 | - 80 49 | - 9200 50 | 51 | redis: 52 | extends: 53 | file: docker-compose.base.yml 54 | service: redis 55 | 56 | beanstalkd: 57 | extends: 58 | file: docker-compose.base.yml 59 | service: beanstalkd 60 | ports: 61 | - 11300 62 | 63 | varnish: 64 | extends: 65 | file: docker-compose.base.yml 66 | service: varnish 67 | ports: 68 | - 80 69 | depends_on: 70 | - application 71 | 72 | selenium: 73 | image: selenium/standalone-firefox-debug:2.52.0 74 | environment: 75 | - SCREEN_WIDTH=1920 76 | - SCREEN_HEIGHT=1480 77 | 78 | phantomjs: 79 | image: cmfatih/phantomjs 80 | ports: 81 | - 8910 82 | entrypoint: phantomjs 83 | command: "--webdriver=8910" 84 | -------------------------------------------------------------------------------- /ci-env/docker-compose.profile.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | application: 5 | environment: 6 | - SYMFONY_ENVIRONMENT=test 7 | - BLACKFIRE_CLIENT_ID 8 | - BLACKFIRE_CLIENT_TOKEN 9 | 10 | blackfire: 11 | extends: 12 | file: docker-compose.base.yml 13 | service: blackfire 14 | -------------------------------------------------------------------------------- /ci-env/docker-compose.qa.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | application: 5 | image: my-registry.com/pplweb:%BUILD_TAG% 6 | environment: 7 | SYMFONY_ENVIRONMENT: test 8 | working_dir: /var/www 9 | entrypoint: ./opt/deployment/test/start.sh 10 | ports: 11 | - 80 12 | depends_on: 13 | - database 14 | - elasticsearch 15 | - redis 16 | - cache_and_logs 17 | 18 | database: 19 | extends: 20 | file: docker-compose.base.yml 21 | service: database 22 | 23 | elasticsearch: 24 | extends: 25 | file: docker-compose.base.yml 26 | service: elasticsearch 27 | volumes_from: 28 | - cache_and_logs 29 | 30 | redis: 31 | extends: 32 | file: docker-compose.base.yml 33 | service: redis 34 | 35 | beanstalkd: 36 | extends: 37 | file: docker-compose.base.yml 38 | service: beanstalkd 39 | 40 | varnish: 41 | extends: 42 | file: docker-compose.base.yml 43 | service: varnish 44 | depends_on: 45 | - application 46 | -------------------------------------------------------------------------------- /ci-env/docker-compose.test.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | application: 5 | environment: 6 | SYMFONY_ENVIRONMENT: test 7 | volumes: 8 | - ./opt/php/test/conf.d/enable_ext_opcache.ini:/usr/local/etc/php/conf.d/enable_ext_opcache.ini 9 | volumes_from: 10 | - screenshots 11 | 12 | screenshots: 13 | image: busybox 14 | command: chown www-data:www-data -R /var/www/web/screenshots 15 | volumes: 16 | - /var/www/web/screenshots 17 | 18 | # selenium: 19 | # image: selenium/standalone-firefox-debug:2.52.0 20 | # environment: 21 | # - SCREEN_WIDTH=1920 22 | # - SCREEN_HEIGHT=1480 23 | # ports: 24 | # - "4444:4444" 25 | # - "5900:5900" 26 | 27 | phantomjs: 28 | image: cmfatih/phantomjs 29 | ports: 30 | - 8910 31 | entrypoint: phantomjs 32 | command: "--webdriver=8910" 33 | -------------------------------------------------------------------------------- /ci-env/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | 5 | application: 6 | build: . 7 | ports: 8 | - 80:80 9 | volumes: 10 | - ./opt/php/dev/conf.d:/usr/local/etc/php/conf.d 11 | - ./opt/php/dev/php.ini:/usr/local/etc/php/php.ini 12 | - ./opt/nginx/dev/default.conf:/etc/nginx/conf.d/default.conf 13 | - .:/var/www 14 | 15 | cache_and_logs: 16 | extends: 17 | file: docker-compose.base.yml 18 | service: cache_and_logs 19 | 20 | database: 21 | extends: 22 | file: docker-compose.base.yml 23 | service: database 24 | 25 | elasticsearch: 26 | extends: 27 | file: docker-compose.base.yml 28 | service: elasticsearch 29 | 30 | redis: 31 | extends: 32 | file: docker-compose.base.yml 33 | service: redis 34 | 35 | beanstalkd: 36 | extends: 37 | file: docker-compose.base.yml 38 | service: beanstalkd 39 | 40 | varnish: 41 | extends: 42 | file: docker-compose.base.yml 43 | service: varnish 44 | depends_on: 45 | - application 46 | -------------------------------------------------------------------------------- /ci-env/opt/deployment/ci/start.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | app/console doctrine:schema:update --force 5 | app/console doctrine:fixtures:load -n 6 | 7 | app/console fos:js-routing:dump 8 | app/console assets:install --symlink 9 | app/console assetic:dump --env=test 10 | 11 | rm -rf app/cache/* 12 | 13 | chown www-data:www-data -R /var/www/app/{logs,cache} /var/www/web/{bundles,js,assets,screenshots,uploads} 14 | 15 | /usr/local/sbin/php-fpm -D && /usr/sbin/nginx -g 'daemon off;' 16 | -------------------------------------------------------------------------------- /ci-env/opt/fpm/php-fpm.conf: -------------------------------------------------------------------------------- 1 | [global] 2 | pid = /var/run/php-fpm.pid 3 | error_log = /proc/self/fd/2 4 | log_level = warning 5 | daemonize = no 6 | 7 | [www] 8 | user = www 9 | group = www 10 | 11 | listen = /var/run/php-fpm.sock 12 | listen.mode = 0777 13 | 14 | clear_env = no 15 | 16 | php_admin_value[log_errors] = on 17 | php_admin_value[log_errors_max_len] = 8192 18 | 19 | php_admin_value[max_execution_time] = 180 20 | php_admin_value[memory_limit] = 256M 21 | php_admin_value[post_max_size] = 32M 22 | 23 | pm = dynamic 24 | pm.max_children = 20 25 | pm.start_servers = 2 26 | pm.min_spare_servers = 1 27 | pm.max_spare_servers = 3 28 | pm.max_requests = 1000 29 | -------------------------------------------------------------------------------- /ci-env/opt/nginx/prod/default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | 4 | root /var/www 5 | index index.php index.html index.htm; 6 | 7 | location / { 8 | try_files $uri $uri/ =404; 9 | } 10 | 11 | location ~ \.php$ { 12 | try_files $uri =404; 13 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 14 | fastcgi_pass unix:/var/run/php5-fpm-site1.sock; 15 | fastcgi_index index.php; 16 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 17 | include fastcgi_params; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ci-env/opt/nginx/prod/nginx.conf: -------------------------------------------------------------------------------- 1 | worker_processes 1; 2 | user www www; 3 | daemon off; 4 | 5 | error_log /proc/self/fd/2 warn; 6 | pid /var/run/nginx.pid; 7 | 8 | events { 9 | worker_connections 1024; 10 | } 11 | 12 | http { 13 | include /etc/nginx/mime.types; 14 | default_type application/octet-stream; 15 | 16 | # Move temp files to /tmp 17 | client_body_temp_path /tmp/nginx_client_body; 18 | proxy_temp_path /tmp/nginx_proxy; 19 | fastcgi_temp_path /tmp/nginx_fastcgi; 20 | uwsgi_temp_path /tmp/nginx_uwsgi; 21 | scgi_temp_path /tmp/nginx_scgi; 22 | 23 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 24 | '$status $body_bytes_sent "$http_referer" ' 25 | '"$http_user_agent" "$http_x_forwarded_for"'; 26 | 27 | access_log /proc/self/fd/1 main; 28 | 29 | sendfile on; 30 | 31 | keepalive_timeout 65; 32 | 33 | # Add map for full path info for PHP 34 | map $uri $script_url { 35 | ~^(?.+\.(php|html))(?.+)$ $path_info; 36 | ~^(?.+\.(php|html))$ $script_filename; 37 | } 38 | 39 | server { 40 | listen 80; 41 | server_tokens off; 42 | 43 | root "/app/public"; 44 | 45 | charset utf-8; 46 | 47 | index index.php index.html; 48 | 49 | location / { 50 | try_files $uri $uri/ /index.php?$query_string; 51 | } 52 | 53 | # pass the PHP scripts to FastCGI server over a unix socket 54 | location ~ \.php$ { 55 | # getting swagger app-docs to work with any FQDN 56 | if ($request_uri ~ ^/docs) { 57 | add_header 'Access-Control-Allow-Origin' '*'; 58 | } 59 | 60 | # don't log access to healtcheck probes 61 | if ($request_uri ~ ^/healthcheck-) { 62 | access_log off; 63 | } 64 | 65 | include /etc/nginx/fastcgi_params; 66 | 67 | fastcgi_pass unix:/var/run/php-fpm.sock; 68 | fastcgi_index index.php; 69 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 70 | 71 | fastcgi_intercept_errors on; 72 | fastcgi_buffer_size 16k; 73 | fastcgi_buffers 4 16k; 74 | fastcgi_connect_timeout 300; 75 | fastcgi_send_timeout 300; 76 | fastcgi_read_timeout 300; 77 | } 78 | 79 | # do not serve hidden files 80 | location ~ /\. { 81 | deny all; 82 | } 83 | 84 | # don't log access and errors to some files 85 | location = /favicon.ico { access_log off; log_not_found off; } 86 | location = /robots.txt { access_log off; log_not_found off; } 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /ci-env/publish-image.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | docker push my-registry.com/myapp:${BUILD_NUMBER} 5 | -------------------------------------------------------------------------------- /ci-env/run-integration-tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # Update Docker compose yaml with build key and number, of image built in build.sh 5 | sed -i 's/%BUILD_TAG%/${BUILD_NUMBER}/g' docker-compose.ci.yml 6 | 7 | # Boot up our stack in the background 8 | echo "Creating containers ..." 9 | /usr/local/bin/docker-compose -f docker-compose.ci.yml up -d 10 | 11 | echo "Waiting for containers to be ready for test-suite ... this will take around one minute" 12 | 13 | # wait until we see "fpm is running" then we're ready to begin our test suite 14 | bash -c '/usr/local/bin/docker-compose -f docker-compose.ci.yml logs application | { sed "/fpm is running/ q" && kill -PIPE $$ ; }' > /dev/null 2>&1 15 | 16 | # execute integration tests 17 | docker-compose -f docker-compose.ci.yml run --rm --entrypoint="bash -c " application "bin/behat --profile=ci -f pretty -f html -f junit --suite=endtoend" 18 | 19 | # clean up old volumes too 20 | docker-compose -f docker-compose.ci.yml down -v 21 | -------------------------------------------------------------------------------- /ci-env/run-unit-tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # Update Docker compose yaml with build key and number, of image built in build.sh 5 | sed -i 's/%BUILD_TAG%/${BUILD_NUMBER}/g' docker-compose.ci.yml 6 | 7 | echo "Unit Tests ..." 8 | /usr/local/bin/docker-compose -f docker-compose.ci.yml run --rm --entrypoint="bash -c " application "bin/phpunit" 9 | -------------------------------------------------------------------------------- /ci-env/save-artifacts.sh: -------------------------------------------------------------------------------- 1 | docker cp %%containerId%%:/var/www/public/screenshots ./build/screenshots 2 | docker cp %%containerId%%:/var/www/build/phpunit/junit.xml ./build/phpunit/junit.xml 3 | docker cp %%containerId%%:/var/www/build/phpunit/coverage-html/ ./build/phpunit-coverage 4 | -------------------------------------------------------------------------------- /php-env/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.0-fpm 2 | 3 | WORKDIR /var/www 4 | 5 | ENV PHPREDIS_VERSION 2.2.7 6 | ENV NGINX_VERSION 1.9.9-1~jessie 7 | 8 | # Install System Dependencies 9 | RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \ 10 | && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \ 11 | && apt-get update \ 12 | && apt-get install -y ca-certificates nginx=${NGINX_VERSION} nano wget git \ 13 | && apt-get clean && apt-get purge \ 14 | && rm -rf /var/lib/apt/lists/* /var/cache/apt/* 15 | 16 | # Install PHP extensions 17 | RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz \ 18 | && tar xfz /tmp/redis.tar.gz \ 19 | && rm -r /tmp/redis.tar.gz \ 20 | && mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \ 21 | && docker-php-ext-install redis pdo_pgsql pgsql soap gd zip mbstring sockets \ 22 | && docker-php-ext-enable redis pdo_pgsql pgsql soap gd zip mbstring sockets \ 23 | && pecl install xdebug && echo ";zend_extension=xdebug.so" > /usr/local/etc/php/conf.d/xdebug.ini \ 24 | && pecl install apcu-4.0.10 && echo extension=apcu.so > /usr/local/etc/php/conf.d/apcu.ini 25 | 26 | # nginx vhost and php ini settings 27 | COPY opt/nginx/prod/default.conf /etc/nginx/conf.d/default.conf # nginx conf 28 | COPY opt/php/prod/conf.d /usr/local/etc/php/conf.d # php ext dir 29 | COPY opt/php/prod/php.ini /usr/local/etc/php/php.ini # php ini file 30 | 31 | # Install composer 32 | RUN wget -qO /usr/local/bin/composer https://getcomposer.org/download/1.2.0/composer.phar && chmod +x /usr/local/bin/composer 33 | 34 | # Install SSH keys 35 | RUN chown -R build:build /home/build/ && chmod 0600 /home/build/.ssh/id_rsa 36 | 37 | # Copy all app code 38 | COPY . /var/www 39 | 40 | USER build 41 | RUN composer global require "hirak/prestissimo:^0.3" --no-interaction --no-ansi --quiet --no-progress --prefer-dist && \ 42 | composer clear-cache --no-ansi --quiet && \ 43 | chmod -R go-w ~/.composer/vendor && \ 44 | 45 | # Run composer install as user 'build' and clean up the cache 46 | composer install --no-interaction --no-ansi --no-progress --prefer-dist && \ 47 | composer clear-cache --no-ansi --quiet && \ 48 | 49 | # Fix permissions 50 | chown -R root:root /app/vendor/ && \ 51 | chmod -R go-w /app/vendor/ && \ 52 | chown -R www:www /app/app/cache/ 53 | 54 | # Framework specific setup commands 55 | php app/console assets:install web --env=prod --symlink --verbose && \ 56 | chown www-data -R /var/www 57 | 58 | # Now we begin to prep the boot process 59 | USER www 60 | 61 | # Run a healthcheck as user 'www' 62 | RUN php artisan infra:healthcheck 63 | 64 | # Accessible ports by other containers 65 | EXPOSE 80 443 66 | 67 | # Startup command, to keep the container running and alive 68 | ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' && /usr/local/sbin/php-fpm -D 69 | -------------------------------------------------------------------------------- /php-env/Dockerfile-from-base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dragoonis/docker-ci-scripts/fb0ac975edda39ff9bc0698d3542933ebfb87369/php-env/Dockerfile-from-base -------------------------------------------------------------------------------- /php-env/Dockerfile-full: -------------------------------------------------------------------------------- 1 | FROM php:7.0-fpm 2 | 3 | WORKDIR /var/www 4 | 5 | ENV PHPREDIS_VERSION 2.2.7 6 | ENV NGINX_VERSION 1.9.9-1~jessie 7 | 8 | # Install System Dependencies 9 | RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \ 10 | && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \ 11 | && apt-get update \ 12 | && apt-get install -y ca-certificates nginx=${NGINX_VERSION} nano wget git \ 13 | && apt-get clean && apt-get purge \ 14 | && rm -rf /var/lib/apt/lists/* /var/cache/apt/* 15 | 16 | # Install PHP extensions 17 | RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz \ 18 | && tar xfz /tmp/redis.tar.gz \ 19 | && rm -r /tmp/redis.tar.gz \ 20 | && mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \ 21 | && docker-php-ext-install redis pdo_pgsql pgsql soap gd zip mbstring sockets \ 22 | && docker-php-ext-enable redis pdo_pgsql pgsql soap gd zip mbstring sockets \ 23 | && pecl install xdebug && echo ";zend_extension=xdebug.so" > /usr/local/etc/php/conf.d/xdebug.ini \ 24 | && pecl install apcu-4.0.10 && echo extension=apcu.so > /usr/local/etc/php/conf.d/apcu.ini 25 | 26 | # nginx vhost and php ini settings 27 | COPY opt/nginx/prod/default.conf /etc/nginx/conf.d/default.conf 28 | COPY opt/php/prod/conf.d /usr/local/etc/php/conf.d 29 | COPY opt/php/prod/php.ini /usr/local/etc/php/php.ini 30 | 31 | COPY . /var/www 32 | 33 | RUN php app/console assets:install web --env=prod --symlink --verbose 34 | RUN chown www-data -R /var/www 35 | 36 | # daemon start 37 | EXPOSE 80 443 38 | ENTRYPOINT /usr/local/sbin/php-fpm -D && /usr/sbin/nginx -g 'daemon off;' 39 | -------------------------------------------------------------------------------- /php-env/Dockerfile7: -------------------------------------------------------------------------------- 1 | FROM php:7.0-fpm 2 | 3 | WORKDIR /var/www 4 | 5 | ENV PHPREDIS_VERSION 2.2.7 6 | ENV NGINX_VERSION 1.9.9-1~jessie 7 | 8 | # Install System Dependencies 9 | RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \ 10 | && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \ 11 | && apt-get update \ 12 | && apt-get install -y ca-certificates nginx=${NGINX_VERSION} nano wget git \ 13 | && apt-get clean && apt-get purge \ 14 | && rm -rf /var/lib/apt/lists/* /var/cache/apt/* 15 | 16 | # nginx vhost and php ini settings 17 | COPY opt/nginx/prod/default.conf /etc/nginx/conf.d/default.conf 18 | 19 | COPY . /var/www 20 | 21 | # daemon start 22 | EXPOSE 80 443 23 | ENTRYPOINT /usr/local/sbin/php-fpm -D && /usr/sbin/nginx -g 'daemon off;' 24 | -------------------------------------------------------------------------------- /php-env/Makefile: -------------------------------------------------------------------------------- 1 | BASE = my-registry.com/myorg 2 | NAME = myapp 3 | 4 | .PHONY: all build test shell run clean 5 | 6 | all: build test 7 | 8 | build: 9 | docker build --pull --force-rm -t ${BASE}/${NAME}:local . 10 | 11 | php56: 12 | docker build --pull --force-rm -t ${BASE}/${NAME}:5.6 . 13 | 14 | php70: 15 | docker build --pull --force-rm -t ${BASE}/${NAME}:7.0 -f Dockerfile7 . 16 | 17 | shell: 18 | docker run -P --rm -it --name ${NAME} ${BASE}/${NAME}:local /bin/sh 19 | 20 | run: 21 | docker run -P --rm --name ${NAME} ${BASE}/${NAME}:local 22 | 23 | clean: 24 | docker rmi ${BASE}/${NAME}:local 25 | -------------------------------------------------------------------------------- /php-env/docker-compose.base.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | 5 | application: 6 | build: . 7 | working_dir: /var/www 8 | ports: 9 | - 80:80 10 | volumes: 11 | - ./opt/php/dev/conf.d:/usr/local/etc/php/conf.d 12 | - ./opt/php/dev/php.ini:/usr/local/etc/php/php.ini 13 | - ./opt/nginx/dev/default.conf:/etc/nginx/conf.d/default.conf 14 | - .:/var/www 15 | 16 | blackfire: 17 | image: blackfire/blackfire:latest 18 | environment: 19 | - BLACKFIRE_SERVER_ID 20 | - BLACKFIRE_SERVER_TOKEN 21 | - BLACKFIRE_LOG_LEVEL=4 22 | -------------------------------------------------------------------------------- /php-env/docker-compose.multi.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | 5 | application_7: 6 | build: 7 | context: . 8 | dockerfile: Dockerfile7 9 | ports: 10 | - 8888:80 11 | volumes: 12 | - ./opt/php/dev/conf.d:/usr/local/etc/php/conf.d 13 | - ./opt/php/dev/php.ini:/usr/local/etc/php/php.ini 14 | - ./opt/nginx/dev/default.conf:/etc/nginx/conf.d/default.conf 15 | - .:/var/www 16 | depends_on: 17 | - redis 18 | 19 | application_56: 20 | build: . 21 | ports: 22 | - 80:80 23 | volumes: 24 | - ./opt/php/dev/conf.d:/usr/local/etc/php/conf.d 25 | - ./opt/php/dev/php.ini:/usr/local/etc/php/php.ini 26 | - ./opt/nginx/dev/default.conf:/etc/nginx/conf.d/default.conf 27 | - .:/var/www 28 | depends_on: 29 | - redis_7 30 | 31 | redis: 32 | image: redis 33 | 34 | redis_7: 35 | image: redis 36 | -------------------------------------------------------------------------------- /php-env/docker-compose.profile.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | application: 5 | environment: 6 | - SYMFONY_ENVIRONMENT=test 7 | - BLACKFIRE_CLIENT_ID 8 | - BLACKFIRE_CLIENT_TOKEN 9 | 10 | blackfire: 11 | extends: 12 | file: docker-compose.base.yml 13 | service: blackfire 14 | -------------------------------------------------------------------------------- /php-env/docker-compose.rand.ports.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | 5 | application_rand: 6 | build: . 7 | ports: 8 | - 80 9 | volumes: 10 | - ./opt/php/dev/conf.d:/usr/local/etc/php/conf.d 11 | - ./opt/php/dev/php.ini:/usr/local/etc/php/php.ini 12 | - ./opt/nginx/dev/default.conf:/etc/nginx/conf.d/default.conf 13 | - .:/var/www 14 | -------------------------------------------------------------------------------- /php-env/docker-compose.test.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | application: 5 | environment: 6 | SYMFONY_ENVIRONMENT: test 7 | command: chown www-data:www-data -R /var/www/web/screenshots 8 | volumes: 9 | - ./opt/php/test/conf.d/enable_ext_opcache.ini:/usr/local/etc/php/conf.d/enable_ext_opcache.ini 10 | 11 | selenium: 12 | image: selenium/standalone-firefox-debug:2.52.0 13 | environment: 14 | - SCREEN_WIDTH=1920 15 | - SCREEN_HEIGHT=1480 16 | ports: 17 | - "4444:4444" 18 | - "5900:5900" 19 | 20 | phantomjs: 21 | image: cmfatih/phantomjs 22 | ports: 23 | - 8910 24 | entrypoint: phantomjs 25 | command: "--webdriver=8910" 26 | -------------------------------------------------------------------------------- /php-env/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | 5 | application: 6 | image: sdifhdsiuh:local 7 | ports: 8 | - 80:80 9 | volumes: 10 | - ./opt/php/dev/conf.d:/usr/local/etc/php/conf.d 11 | - ./opt/php/dev/php.ini:/usr/local/etc/php/php.ini 12 | - ./opt/nginx/dev/default.conf:/etc/nginx/conf.d/default.conf 13 | - .:/var/www 14 | -------------------------------------------------------------------------------- /php-env/opt/build/php55-Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:5.5-cli 2 | 3 | WORKDIR /var/www 4 | 5 | ADD opt/php/prod/conf.d /usr/local/etc/php/conf.d 6 | ADD opt/php/prod/php.ini /usr/local/etc/php/php.ini 7 | 8 | ADD . /var/www 9 | 10 | ENTRYPOINT /usr/local/sbin/php 11 | -------------------------------------------------------------------------------- /php-env/opt/build/php56-Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:5.6-cli 2 | 3 | WORKDIR /var/www 4 | 5 | ADD opt/php/prod/conf.d /usr/local/etc/php/conf.d 6 | ADD opt/php/prod/php.ini /usr/local/etc/php/php.ini 7 | 8 | ADD . /var/www 9 | 10 | ENTRYPOINT /usr/local/sbin/php 11 | -------------------------------------------------------------------------------- /php-env/opt/build/php7-Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.0-cli 2 | 3 | WORKDIR /var/www 4 | 5 | ADD opt/php/prod/conf.d /usr/local/etc/php/conf.d 6 | ADD opt/php/prod/php.ini /usr/local/etc/php/php.ini 7 | 8 | ADD . /var/www 9 | 10 | ENTRYPOINT /usr/local/sbin/php 11 | -------------------------------------------------------------------------------- /php-env/opt/nginx/dev/default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | 4 | root /var/www/public; 5 | index index.php index.html index.htm; 6 | 7 | location / { 8 | try_files $uri $uri/ =404; 9 | } 10 | 11 | location ~ \.php$ { 12 | try_files $uri =404; 13 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 14 | fastcgi_pass 127.0.0.1:9000; 15 | 16 | fastcgi_index index.php; 17 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 18 | include fastcgi_params; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /php-env/opt/nginx/prod/default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | 4 | root /var/www/public 5 | index index.php index.html index.htm; 6 | 7 | location / { 8 | try_files $uri $uri/ =404; 9 | } 10 | 11 | location ~ \.php$ { 12 | try_files $uri =404; 13 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 14 | fastcgi_pass unix:/var/run/php5-fpm-site1.sock; 15 | fastcgi_index index.php; 16 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 17 | include fastcgi_params; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /php-env/public/index.php: -------------------------------------------------------------------------------- 1 | /dev/null 2>&1 15 | bash -c 'docker-compose -f docker-compose.yml -f docker-compose.test.yml logs application | { sed "/fpm is running/ q" && kill -PIPE $$ ; }' > /dev/null 2>&1 16 | 17 | echo "Running test suites ..." 18 | 19 | $DIR/run-command-in-container bin/phpunit 20 | 21 | $DIR/run-command-in-container "bin/behat $@" 22 | -------------------------------------------------------------------------------- /profiling-env/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.0-fpm 2 | 3 | WORKDIR /var/www 4 | 5 | # Install System Dependencies 6 | RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \ 7 | && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \ 8 | && apt-get update \ 9 | && apt-get install -y ca-certificates nginx=${NGINX_VERSION} nano wget git \ 10 | && apt-get clean && apt-get purge \ 11 | && rm -rf /var/lib/apt/lists/* /var/cache/apt/* 12 | 13 | RUN export VERSION=`php -r "echo PHP_MAJOR_VERSION.PHP_MINOR_VERSION;"` \ 14 | && curl -A "Docker" -o /tmp/blackfire-probe.tar.gz -D - -L -s https://blackfire.io/api/v1/releases/probe/php/linux/amd64/${VERSION} \ 15 | && tar zxpf /tmp/blackfire-probe.tar.gz -C /tmp \ 16 | && mv /tmp/blackfire-*.so `php -r "echo ini_get('extension_dir');"`/blackfire.so 17 | 18 | # Install PHP extensions 19 | RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz \ 20 | && tar xfz /tmp/redis.tar.gz \ 21 | && rm -r /tmp/redis.tar.gz \ 22 | && mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \ 23 | && docker-php-ext-install redis pdo_pgsql pgsql soap gd zip mbstring sockets \ 24 | && docker-php-ext-enable redis pdo_pgsql pgsql soap gd zip mbstring sockets \ 25 | && pecl install xdebug && echo ";zend_extension=xdebug.so" > /usr/local/etc/php/conf.d/xdebug.ini \ 26 | && pecl install apcu-4.0.10 && echo extension=apcu.so > /usr/local/etc/php/conf.d/apcu.ini 27 | 28 | # nginx vhost and php ini settings 29 | COPY opt/nginx/prod/default.conf /etc/nginx/conf.d/default.conf 30 | COPY opt/php/prod/conf.d /usr/local/etc/php/conf.d 31 | COPY opt/php/prod/php.ini /usr/local/etc/php/php.ini 32 | 33 | ADD . /var/www 34 | 35 | RUN php app/console assets:install web --env=prod --symlink --verbose 36 | RUN chown www-data -R /var/www 37 | 38 | # daemon start 39 | EXPOSE 80 443 40 | ENTRYPOINT /usr/local/sbin/php-fpm -D && /usr/sbin/nginx -g 'daemon off;' 41 | -------------------------------------------------------------------------------- /profiling-env/docker-compose.base.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | 5 | application: 6 | build: . 7 | working_dir: /var/www 8 | ports: 9 | - 80:80 10 | volumes: 11 | - ./opt/php/dev/conf.d:/usr/local/etc/php/conf.d 12 | - ./opt/php/dev/php.ini:/usr/local/etc/php/php.ini 13 | - ./opt/nginx/dev/default.conf:/etc/nginx/conf.d/default.conf 14 | - .:/var/www 15 | 16 | blackfire: 17 | image: blackfire/blackfire:latest 18 | environment: 19 | - BLACKFIRE_SERVER_ID 20 | - BLACKFIRE_SERVER_TOKEN 21 | - BLACKFIRE_LOG_LEVEL=4 22 | -------------------------------------------------------------------------------- /profiling-env/docker-compose.profile.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | app_php7: 5 | environment: 6 | - SYMFONY_ENVIRONMENT=test 7 | - BLACKFIRE_CLIENT_ID 8 | - BLACKFIRE_CLIENT_TOKEN 9 | 10 | blackfire: 11 | extends: 12 | file: docker-compose.base.yml 13 | service: blackfire 14 | -------------------------------------------------------------------------------- /profiling-env/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | 5 | application: 6 | build: . 7 | working_dir: /var/www 8 | ports: 9 | - 80:80 10 | volumes: 11 | - ./opt/php/dev/conf.d:/usr/local/etc/php/conf.d 12 | - ./opt/php/dev/php.ini:/usr/local/etc/php/php.ini 13 | - ./opt/nginx/dev/default.conf:/etc/nginx/conf.d/default.conf 14 | - .:/var/www 15 | -------------------------------------------------------------------------------- /profiling-env/opt/build/php55-Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:5.5-cli 2 | 3 | WORKDIR /var/www 4 | 5 | ADD opt/php/prod/conf.d /usr/local/etc/php/conf.d 6 | ADD opt/php/prod/php.ini /usr/local/etc/php/php.ini 7 | 8 | ADD . /var/www 9 | 10 | ENTRYPOINT /usr/local/sbin/php 11 | -------------------------------------------------------------------------------- /profiling-env/opt/build/php56-Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:5.6-cli 2 | 3 | WORKDIR /var/www 4 | 5 | ADD opt/php/prod/conf.d /usr/local/etc/php/conf.d 6 | ADD opt/php/prod/php.ini /usr/local/etc/php/php.ini 7 | 8 | ADD . /var/www 9 | 10 | ENTRYPOINT /usr/local/sbin/php 11 | -------------------------------------------------------------------------------- /profiling-env/opt/build/php7-Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.0-cli 2 | 3 | WORKDIR /var/www 4 | 5 | ADD opt/php/prod/conf.d /usr/local/etc/php/conf.d 6 | ADD opt/php/prod/php.ini /usr/local/etc/php/php.ini 7 | 8 | ADD . /var/www 9 | 10 | ENTRYPOINT /usr/local/sbin/php 11 | -------------------------------------------------------------------------------- /qa-env/nginx/deploy.sh: -------------------------------------------------------------------------------- 1 | docker pull my-registry.com/myapp:${BUILD_NUMBER} 2 | 3 | mkdir -p /var/deploys/${BUILD_NUMBER} 4 | cd /var/deploys/${BUILD_NUMBER} 5 | 6 | # get ID of container 7 | id=$(docker create my-registry.com/myapp:${BUILD_NUMBER}) 8 | 9 | # copy pre-baked files out of container to disk 10 | docker cp $id:/var/www/docker-compose.preview.yml ./docker-compose.preview.yml 11 | docker cp $id:/var/www/docker-compose.base.yml ./docker-compose.base.yml 12 | docker cp $id:/var/www/opt ./opt 13 | 14 | docker rm -v $id 15 | 16 | docker-compose -f docker-compose.preview.yml up -d 17 | 18 | # Wait for application to be ready 19 | bash -c 'docker-compose -f docker-compose.preview.yml logs application | { sed "/fpm is running/ q" && kill -PIPE $$ ; }' > /dev/null 2>&1 20 | 21 | # generate the new vhost and spin up the containers 22 | (cd ~/pplwebsite-preview-scripts; bin/gen-staging-vhost.php; docker-compose down; docker-compose up -d) 23 | 24 | # get port number for this container 25 | port=`/usr/local/bin/docker-compose -f docker-compose.preview.yml ps | grep application | grep -Po ':\d+-' | sed 's/://' | sed 's/-//'` 26 | 27 | # hipchat notiication 28 | curl -k -H "Content-Type: application/json" -X POST -d "{\"color\": \"green\", \"message_format\": \"text\", \"message\": \"Release: ${bamboo.planKey}-${bamboo.buildNumber} now available on preview: http://cs-testing-st.uk.company.com:${port} \" }" "https://hipchat.uk.company.com/v2/room/7/notification?auth_token=Pu0eDVH37327340p0mmsWxFrUkJSLm2ALKqsYfjZ" 29 | -------------------------------------------------------------------------------- /qa-env/nginx/docker-compose.yml: -------------------------------------------------------------------------------- 1 | nginx_router: 2 | image: nginx:latest 3 | container_name: nginx_router 4 | ports: 5 | - 80:80 6 | volumes: 7 | - ./opt/nginx/staging/multi-site-vhost-gen.conf:/etc/nginx/conf.d/default.conf 8 | -------------------------------------------------------------------------------- /qa-env/nginx/gen-index-page.php: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | Error: no deployment dir found'); 9 | } 10 | 11 | $dirs = new DirectoryIterator($deploymentsDir); 12 | 13 | $html = ''; 14 | foreach($dirs as $fileInfo) { 15 | 16 | if($fileInfo->isFile() || $fileInfo->isDot()) { 17 | continue; 18 | } 19 | 20 | $hostName = sprintf($hostFormat, strtolower($fileInfo->getFilename())); 21 | $linkFormat = '

%s

'; 22 | $html .= sprintf($linkFormat, $hostName, $fileInfo->getFilename()); 23 | } 24 | 25 | if(empty($html)) { 26 | die('

Error: no deployments found in deployment dir

'); 27 | } 28 | 29 | echo $html; -------------------------------------------------------------------------------- /qa-env/nginx/gen-staging-vhost.php: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | $portNum) { 7 | $host = sprintf($stagingHostFormat, $branch); 8 | $hostsPortMap .= << ${DIR}/../index.html 13 | 14 | echo -e "Restarting nginx container" 15 | docker-compose restart --------------------------------------------------------------------------------