Skip to content

Instantly share code, notes, and snippets.

@victor-shelepen
Created April 30, 2018 14:19
Show Gist options
  • Save victor-shelepen/9e94a459ddedce41969094271455a768 to your computer and use it in GitHub Desktop.
Save victor-shelepen/9e94a459ddedce41969094271455a768 to your computer and use it in GitHub Desktop.
This files are for the article - http://vlikin.blogspot.com/2018/04/drupal-development-docker-compose.html This provides the modified version of the project https://github.com/wodby/docker4drupal
### Full documentation available at https://wodby.com/stacks/drupal/docs/local
###
### IMAGES TAGS CONSIST OF [VERSION]-[STABILITY_TAG]
###
### [VERSION] is usually a version of application running in a container
### [VERSION] sometimes additionally includes major drupal version (see nginx)
### [STABILITY_TAG] is a version of image (not application)
### [STABILITY_TAG] correspond to git tag of corresponding image repository
###
### EXAMPLE: wodby/mariadb:10.2-3.1.2 has MariaDB 10.2 and stability tag 3.0.2
### New stability tags include patch updates for applications and other fixes/improvements
### Changelog for stability tag can be found at https://github.com/wodby/mariadb/releases
###
### !!! For better reliability NEVER USE image without stability tag
### PROJECT SETTINGS
PROJECT_PATH=/home/viktor/dorg/drupal
PROJECT_NAME=my_drupal8_project
PROJECT_BASE_URL=drupal.docker.localhost
DB_NAME=drupal
DB_USER=drupal
DB_PASSWORD=drupal
DB_ROOT_PASSWORD=password
DB_HOST=mariadb
DB_DRIVER=mysql
### --- MARIADB ----
MARIADB_TAG=10.2-3.1.3
#MARIADB_TAG=10.1-3.1.3
### --- VANILLA DRUPAL ----
### [DRUPAL_VERSION]-[PHP_VERSION]-[STABILITY_TAG]
DRUPAL_TAG=8-7.1-4.4.1
#DRUPAL_TAG=8-7.0-4.4.1
#DRUPAL_TAG=7-7.1-4.4.1
#DRUPAL_TAG=7-7.0-4.4.1
#DRUPAL_TAG=7-5.6-4.4.1
#DRUPAL_TAG=6-5.6-4.4.1
#DRUPAL_TAG=6-5.3-4.4.1
### --- PHP ----
PHP_TAG=7.1-dev-4.4.1
#PHP_TAG=7.0-dev-4.4.1
#PHP_TAG=5.6-dev-4.4.1
#PHP_TAG=5.3-dev-4.4.1
#PHP_TAG=7.1-dev-macos-4.4.1
#PHP_TAG=7.0-dev-macos-4.4.1
#PHP_TAG=5.6-dev-macos-4.4.1
#PHP_TAG=5.3-dev-macos-4.4.1
### --- NGINX ----
### [DRUPAL_VERSION]-[NGINX_VERSION]-[STABILITY_TAG]
NGINX_TAG=8-1.13-4.0.3
#NGINX_TAG=7-1.13-4.0.3
#NGINX_TAG=6-1.13-4.0.3
#NGINX_TAG=8-1.12-4.0.3
#NGINX_TAG=7-1.12-4.0.3
#NGINX_TAG=6-1.12-4.0.3
### --- SOLR ---
### [DRUPAL_VERSION]-[SOLR_VERSION]-[STABILITY_TAG]
SOLR_TAG=8-6.6-2.4.0
#SOLR_TAG=8-6.5-2.4.0
#SOLR_TAG=8-6.4-2.4.0
#SOLR_TAG=8-6.3-2.4.0
#SOLR_TAG=8-5.5-2.4.0
#SOLR_TAG=8-7.0-2.4.0
#SOLR_TAG=8-7.1-2.4.0
#SOLR_TAG=8-7.2-2.4.0
#SOLR_TAG=7-5.4-2.4.0
### --- REDIS ---
REDIS_TAG=4.0-2.1.5
#REDIS_TAG=3.2-2.1.5
### --- POSTGRESQL ----
POSTGRES_TAG=10.1-1.3.0
#POSTGRES_TAG=9.6-1.3.0
#POSTGRES_TAG=9.5-1.3.0
#POSTGRES_TAG=9.4-1.3.0
#POSTGRES_TAG=9.3-1.3.0
### OTHERS
ADMINER_TAG=4.3-1.1.0
APACHE_TAG=2.4-3.0.5
ATHENAPDF_TAG=2.10.0
DRUPAL_NODE_TAG=1.0-1.0.0
MEMCACHED_TAG=1.4-2.0.0
RSYSLOG_TAG=latest
VARNISH_TAG=4.1-2.3.0
WEBGRIND_TAG=1.5-1.3.0
version: "2.3"
services:
mariadb:
image: wodby/mariadb:$MARIADB_TAG
container_name: "${PROJECT_NAME}_mariadb"
# stop_grace_period: 30s
environment:
MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
MYSQL_DATABASE: $DB_NAME
MYSQL_USER: $DB_USER
MYSQL_PASSWORD: $DB_PASSWORD
# volumes:
# - ./mariadb-init:/docker-entrypoint-initdb.d # Place init .sql file(s) here.
# - /path/to/mariadb/data/on/host:/var/lib/mysql # I want to manage volumes manually.
php:
image: wodby/drupal-php:$PHP_TAG
container_name: "${PROJECT_NAME}_php"
environment:
PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
DB_HOST: $DB_HOST
DB_USER: $DB_USER
DB_PASSWORD: $DB_PASSWORD
DB_NAME: $DB_NAME
DB_DRIVER: $DB_DRIVER
## Read instructions at https://wodby.com/stacks/drupal/docs/local/xdebug/
# PHP_XDEBUG: 1
# PHP_XDEBUG_DEFAULT_ENABLE: 1
# PHP_XDEBUG_REMOTE_CONNECT_BACK: 0
# PHP_IDE_CONFIG: serverName=my-ide
# PHP_XDEBUG_REMOTE_HOST: 172.17.0.1 # Linux
# PHP_XDEBUG_REMOTE_HOST: 10.254.254.254 # macOS
# PHP_XDEBUG_REMOTE_HOST: 10.0.75.1 # Windows
volumes:
- type: bind
source: "${PROJECT_PATH}"
target: /var/www/html
bind:
propagation: shared
## For macOS users (https://wodby.com/stacks/drupal/docs/local/docker-for-mac/)
# - "${PROJECT_PATH}:/var/www/html":cached # User-guided caching
# - docker-sync:/var/www/html # Docker-sync
## For Xdebug profiler files
# - files:/mnt/files
nginx:
image: wodby/drupal-nginx:$NGINX_TAG
container_name: "${PROJECT_NAME}_nginx"
depends_on:
- php
environment:
NGINX_STATIC_CONTENT_OPEN_FILE_CACHE: "off"
NGINX_ERROR_LOG_LEVEL: debug
NGINX_BACKEND_HOST: php
NGINX_SERVER_ROOT: /var/www/html/web
# NGINX_DRUPAL_FILE_PROXY_URL: http://example.com
volumes:
- type: bind
source: "${PROJECT_PATH}"
target: /var/www/html
bind:
propagation: shared
# For macOS users (https://wodby.com/stacks/drupal/docs/local/docker-for-mac/)
# - "${PROJECT_PATH}:/var/www/html":cached # User-guided caching
# - docker-sync:/var/www/html # Docker-sync
labels:
- 'traefik.backend=nginx'
- 'traefik.port=80'
- 'traefik.frontend.rule=Host:${PROJECT_BASE_URL}'
mailhog:
image: mailhog/mailhog
container_name: "${PROJECT_NAME}_mailhog"
labels:
- 'traefik.backend=mailhog'
- 'traefik.port=8025'
- 'traefik.frontend.rule=Host:mailhog.${PROJECT_BASE_URL}'
# postgres:
# image: wodby/postgres:$POSTGRES_TAG
# container_name: "${PROJECT_NAME}_postgres"
# stop_grace_period: 30s
# environment:
# POSTGRES_PASSWORD: $DB_PASSWORD
# POSTGRES_DB: $DB_NAME
# POSTGRES_USER: $DB_USER
# volumes:
# - ./postgres-init:/docker-entrypoint-initdb.d # Place init file(s) here.
# - /path/to/postgres/data/on/host:/var/lib/postgresql/data # I want to manage volumes manually.
# apache:
# image: wodby/php-apache:$APACHE_TAG
# container_name: "${PROJECT_NAME}_apache"
# depends_on:
# - php
# environment:
# APACHE_LOG_LEVEL: debug
# APACHE_BACKEND_HOST: php
# APACHE_SERVER_ROOT: /var/www/html/web
# volumes:
# - "${PROJECT_PATH}:/var/www/html"
## For macOS users (https://wodby.com/stacks/drupal/docs/local/docker-for-mac/)
## - "${PROJECT_PATH}:/var/www/html":cached # User-guided caching
## - docker-sync:/var/www/html # Docker-sync
# labels:
# - 'traefik.backend=apache'
# - 'traefik.port=80'
# - 'traefik.frontend.rule=Host:${PROJECT_BASE_URL}'
# varnish:
# image: wodby/drupal-varnish:$VARNISH_TAG
# container_name: "${PROJECT_NAME}_varnish"
# depends_on:
# - nginx
# environment:
# VARNISH_SECRET: secret
# VARNISH_BACKEND_HOST: nginx
# VARNISH_BACKEND_PORT: 80
# labels:
# - 'traefik.backend=varnish'
# - 'traefik.port=6081'
# - 'traefik.frontend.rule=Host:varnish.${PROJECT_BASE_URL}'
# redis:
# container_name: "${PROJECT_NAME}_redis"
# image: wodby/redis:$REDIS_TAG
# adminer:
# container_name: "${PROJECT_NAME}_adminer"
# image: wodby/adminer:$ADMINER_TAG
# environment:
# ADMINER_SALT: adminer-salt
# labels:
# - 'traefik.backend=adminer'
# - 'traefik.port=9000'
# - 'traefik.frontend.rule=Host:adminer.${PROJECT_BASE_URL}'
# pma:
# image: phpmyadmin/phpmyadmin
# container_name: "${PROJECT_NAME}_pma"
# environment:
# PMA_HOST: $DB_HOST
# PMA_USER: $DB_USER
# PMA_PASSWORD: $DB_PASSWORD
# PHP_UPLOAD_MAX_FILESIZE: 1G
# PHP_MAX_INPUT_VARS: 1G
# labels:
# - 'traefik.backend=pma'
# - 'traefik.port=80'
# - 'traefik.frontend.rule=Host:pma.${PROJECT_BASE_URL}'
# solr:
# image: wodby/drupal-solr:$SOLR_TAG
# container_name: "${PROJECT_NAME}_solr"
# environment:
# SOLR_HEAP: 1024m
# labels:
# - 'traefik.backend=solr'
# - 'traefik.port=8983'
# - 'traefik.frontend.rule=Host:solr.${PROJECT_BASE_URL}'
# nodejs:
# image: wodby/drupal-node:$DRUPAL_NODE_TAG
# container_name: "${PROJECT_NAME}_drupal_nodejs"
# environment:
# NODE_SERVICE_KEY: node-service-key
# labels:
# - 'traefik.backend=nodejs'
# - 'traefik.port=8080'
# - 'traefik.frontend.rule=Host:nodejs.${PROJECT_BASE_URL}'
# volumes:
# - ./path/to/your/single-page-app:/app
# command: sh -c 'npm install && npm run start'
# memcached:
# container_name: "${PROJECT_NAME}_memcached"
# image: wodby/memcached:$MEMCACHED_TAG
# rsyslog:
# container_name: "${PROJECT_NAME}_rsyslog"
# image: wodby/rsyslog:$RSYSLOG_TAG
# athenapdf:
# image: arachnysdocker/athenapdf-service:$ATHENAPDF_TAG
# container_name: "${PROJECT_NAME}_athenapdf"
# environment:
# WEAVER_AUTH_KEY: weaver-auth-key
# WEAVER_ATHENA_CMD: "athenapdf -S"
# WEAVER_MAX_WORKERS: 10
# WEAVER_MAX_CONVERSION_QUEUE: 50
# WEAVER_WORKER_TIMEOUT: 90
# WEAVER_CONVERSION_FALLBACK: "false"
# node:
# image: node:alpine
# container_name: "${PROJECT_NAME}_node"
# working_dir: /app
# labels:
# - 'traefik.backend=node'
# - 'traefik.port=3000'
# - 'traefik.frontend.rule=Host:front.${PROJECT_BASE_URL}'
# expose:
# - "3000"
# volumes:
# - ./path/to/your/single-page-app:/app
# command: sh -c 'npm install && npm run start'
# blackfire:
# image: blackfire/blackfire
# container_name: "${PROJECT_NAME}_blackfire"
# environment:
# BLACKFIRE_SERVER_ID: XXXXX
# BLACKFIRE_SERVER_TOKEN: YYYYY
# webgrind:
# image: wodby/webgrind:$WEBGRIND_TAG
# container_name: "${PROJECT_NAME}_webgrind"
# environment:
# WEBGRIND_PROFILER_DIR: /mnt/files/xdebug/profiler
# labels:
# - 'traefik.backend=webgrind'
# - 'traefik.port=8080'
# - 'traefik.frontend.rule=Host:webgrind.${PROJECT_BASE_URL}'
# volumes:
# - files:/mnt/files
portainer:
image: portainer/portainer
container_name: "${PROJECT_NAME}_portainer"
command: --no-auth -H unix:///var/run/docker.sock
volumes:
- /var/run/docker.sock:/var/run/docker.sock
labels:
- 'traefik.backend=portainer'
- 'traefik.port=9000'
- 'traefik.frontend.rule=Host:portainer.${PROJECT_BASE_URL}'
traefik:
image: traefik
container_name: "${PROJECT_NAME}_traefik"
command: -c /dev/null --web --docker --logLevel=INFO
ports:
- '8000:80'
# - '8080:8080' # Dashboard
volumes:
- /var/run/docker.sock:/var/run/docker.sock
#volumes:
# source_code:
# external: true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment