Skip to content

Instantly share code, notes, and snippets.

@jmolivas
Last active January 2, 2018 15:57
Show Gist options
  • Save jmolivas/6db2f540b0d61f70a4c0284015babc3e to your computer and use it in GitHub Desktop.
Save jmolivas/6db2f540b0d61f70a4c0284015babc3e to your computer and use it in GitHub Desktop.
Basic docker configuration for drupal projects

Basic docker configuration for drupal projects

Extra steps

  1. If not using DrupalConsole you will need to add the vlucas/phpdotenv dependency to load the .env file. You can do that using composer:
composer require vlucas/phpdotenv
  1. Add the TRAEFIK_HOST value to /etc/hosts
127.0.0.1     site.local

Commands

# Start containers using detached mode flag to run in background.
docker-compose up -d

# Stop containers. You can destroy the internal volumes using the -v flag.
docker-compose down

# Execute composer on the container
docker-compose exec --user=82 php composer COMMAND_NAME

To execute DrupalConsole on the container you can create a site alias at path/to/site/console/sites/site.yml

local:
  root: /var/www/html
  extra-options: docker-compose exec --user=82 php
  type: container

And execute using

drupal @site.local COMMAND_NAME

More info at https://docs.drupalconsole.com/en/alias/using-site-alias.html https://docs.drupalconsole.com/en/alias/connecting-to-a-virtual-environment.html

# ENV
ENVIRONMENT=local
# Database
DATABASE_NAME=drupal
DATABASE_USER=drupal
DATABASE_PASSWORD=drupal
DATABASE_HOST=mariadb
DATABASE_PORT=3306
# Traefik host
TRAEFIK_HOST=site.local
version: "2"
services:
mariadb:
image: wodby/mariadb:10.1-2.3.3
env_file: .env
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: ${DATABASE_NAME}
MYSQL_USER: ${DATABASE_USER}
MYSQL_PASSWORD: ${DATABASE_PASSWORD}
ports:
- '3306:3306'
volumes:
- mysqldata:/var/lib/mysql
# - ./mariadb-init:/docker-entrypoint-initdb.d
php:
image: wodby/drupal-php:7.0-2.4.3
env_file: .env
environment:
PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
DB_HOST: ${DATABASE_HOST}
DB_USER: ${DATABASE_USER}
DB_PASSWORD: ${DATABASE_PASSWORD}
DB_NAME: ${DATABASE_NAME}
DB_DRIVER: mysql
volumes:
- ./:/var/www/html:cached
nginx:
image: wodby/drupal-nginx:8-1.13-2.4.2
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/docroot
volumes:
- ./:/var/www/html:cached
labels:
- 'traefik.backend=nginx'
- 'traefik.port=80'
- 'traefik.frontend.rule=Host:${TRAEFIK_HOST}'
mailhog:
image: mailhog/mailhog
labels:
- 'traefik.backend=mailhog'
- 'traefik.port=8025'
- 'traefik.frontend.rule=Host:mailhog.${TRAEFIK_HOST}'
traefik:
image: traefik
command: -c /dev/null --web --docker --logLevel=INFO
ports:
- '80:80'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
volumes:
mysqldata:
driver: "local"
<?php
/**
* @file
* Local development override configuration feature.
*/
/**
* Database configuration.
*/
# Load .env file if exists
if (file_exists(dirname(DRUPAL_ROOT) . '/.env')) {
// Load environment
$dotenv = new \Dotenv\Dotenv(dirname(DRUPAL_ROOT));
$dotenv->load();
}
$databases['default']['default'] = array (
'database' => getenv('DATABASE_NAME'),
'username' => getenv('DATABASE_USER'),
'password' => getenv('DATABASE_PASSWORD'),
'prefix' => '',
'host' => getenv('DATABASE_HOST'),
'port' => getenv('DATABASE_PORT'),
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
'driver' => 'mysql',
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment