en en en en en en en en en en en pl en en en en en en en fr ca en en en en en en en en pt en uk en pl en en en en it en en en de en de en de en de en war de en en fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr fr pt fr pt hu fr fr fr pt fr fr fr fr fr fr fr es fr fr fr fr fr en pt pt pt pt pt fr fr pt uk en en fr fr es fr fr fr fr fr fr sv en fr en en en ca en en en en en en pt en en en en it en de de de de de de de de de de de de de de de en en ru pt ja en en es pt pt fr fi en pt de pt fi es pt ar de pt es ja ja ja en en fr es fr fr fr sv en en ru uk fr uk uk uk uk uk de fr fr fr uk zh uk fr uk uk uk uk uk uk uk uk uk uk uk fr uk uk fr fr fr sv en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en en de en en en fr fr en en en en en en en en en fr la en de en nl ca en en en en en en en en en en en en en en en en en en en en en it en en en en en en en en en en en en en en en bar en en en en en en en en en en en en en en en fr en en fr en en fr pl en en en en id en en en
This composer plugin prepares your local development environment for Docker using the framework from Docker4Drupal by Wodby.
This plugin is best used inside of L3D where no further requirements need to be met.
Installation in your Drupal project
This is a composer plugin. It can be used both in composer based Drupal installations and also vanilla Drupal without composer.
If you're using the latest version of either D8 Project Template or D9 Project Template, this docker4drupal plugin will be installed automatically as a dependency of the Drupal Development Environment.
In all other cases, simply install it by typing
This will install and configure all required files so that you can launch your Docker environment straight away without any additional settings. The actions being taken:
Create and configure docker-compose.yml in your project root
Create and configure settings.docker.php in your settings directory
Modify your settings.php to load settings.docker.php if available
Create Drush settings, aliases and shell-aliases in a drush subdirectory of the current directory
Add those new files to .gitignore as you usually don't want them to be committed
Installation in a vanilla Drupal project
Before you get started you should create (or add to an existing) .lakedrops.yml in your projects root like this:
After that you can call
and everything will be configured for you.
All the commands need to be called from the root of your main Drupal project.
# With Ahoy ahoy update # Directly composer lakedrops:docker4drupal
Starting the Docker containers
# With Ahoy ahoy up # Directly docker-compose up -d
Stopping the Docker containers
# With Ahoy ahoy stop # Directly docker-compose stop
The following services are available in your browser while the Docker containers are up and running:
Note that Solr, Node and Varnish are not enabled by default. See the customization chapter below to learn how you can enable them.
By default, PHP is configured with XDebug being enabled and you should check the instructions for your IDE on how to get started with a debugging session.
Each service (nginx, php, db, etc.) provides their own logs and it is very easy to access them:
docker-compose logs -f [SERVICENAME]
Each service has their own name:
Configure SSH access to your live site
By default, you do not have to configure SSH access to your live site. However, if you want to pull the database and/or files from the live site, SSH access comes in pretty handy and the next chapter about Drush will show you how to make use of it.
For the configuration of the access, you need to do two things:
Configure your Drush alias
In your project root on your host you'll find a drush subdirectory with a file called aliases.drushrc.php with a dev and a live alias. THe first one is configured automatically and the second is empty by default. You have to provide the details manually:
root: the full path to the Drupal root directory on the remote host
uri: the domain and optional base path of the live website
remote-host: a valid host name or IP address of that remote host - if you're in doubt, use the domain name from the uri above
remote-user: the username under which you can access the remote host over SSH
There are potentially more options possible, for details please refer to the Drush documentation on this.
Configure SSH access from the PHP container
This feature is only available if SSH agent forwarding is enabled on your host. There is a good tutorial available if you need any help.
Your host SSH configuration is automatically forwarded to the PHP docker container using sockets and you don't have to do anything to make it work, as long as your host is configured correctly to access your live site via SSH - in this case the PHP container can too. This works by mounting and forwarding your SSH_AUTH_SOCK environment variable to /ssh-agent inside the PHP container, so that the user inside that container can utilize your SSH settings like your user outside the contain who built them.
Typical issues that may cause trouble in this context are:
Permission: the user inside the container has to have the permission to access your SSH auth socket. The best way to ensure that is to run services inside the container as root. This should be OK in a development environment.
SSH key should be added to the socket: Very often, that has already been done at some point during setup of your environment but if not, you should remember to add your key by calling ssh-add /path/to/your/key from the host.
This plugin configures Drush with several settings, aliases and shell-aliases that make your developer life much easier. You can either enter the PHP container and execute Drush there, or you can call every Drush command from your host. When you're using the L3D framework, simply call drush in your L3D container and everything else happens magically in the background.
# Entering PHP Container docker-compose exec php sh # Call Drush command drush site-aliases # ...or, call that command from your host: docker-compose exec php drush site-aliases
Even better, you can create shell aliases (see below) for your host's shell which will make that even easier:
If you have configured SSH access to your live site (see above) then you can easily pull the database and/or the files from your live site into your development environment easily:
# Pull the database drush pull-sql # Pull the files drush pull-files # Pull both drush pull-all
What else can be done with the Docker environment is best described in the Docker4Drupal Documentation.
To overwrite the default settings for the Docker environment, add the relevant parts from this array to your .lakedrops.yml file in the root of your project:
docker4drupal: projectname: [NAME OF CURRENT DIRECTORY] ci_home: /home/gitlab-runner docker0: ip: [IP OF YOUR DOCKER HOST] proxy: [IP OF TRAEFIK PROXY] traefik: domain: docker.localhost usessl: 0 port: 8000 ports: 8443 cert: fullchain.pem key: privkey.pem live: root: '' uri: '' host: '' user: '' drush: sql: tables: structure: - cache - cache_* - history - search_* - sessions - watchdog skip: - migration_* drupal: version: 9 php: version: '7.4' xdebug: 1 webserver: type: apache varnish: enable: 0 redis: version: '6' dbbrowser: type: pma solr: enable: 0 version: '4.8.0' node: enable: 0 key: '' path: '' memcached: enable: 0 rsyslog: enable: 0 athenapdf: enable: 0 key: '' blackfire: enable: 0 id: '' token: '' webgrind: enable: 0 wkhtmltox: enable: 0
Once you've changed those values, run ahoy update (or composer lakedrops:docker4drupal) and the environment will be re-configured. The next time you start your Docker environment those new values will be used.
Adding new Docker services or enhancing existing ones
You can add more details to you .lakedrops.yml configuration to create additional Docker services or enhance existing ones:
docker4drupal: docker-compose.yml: services: php: environment: MY_VAR: value mariadbd6: image: wodby/mariadb:10.5 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: drupal MYSQL_USER: drupal MYSQL_PASSWORD: drupal mycustomservice: image: mydomain/myimage
This will add another environment variable to the php container, define a second mariadb container named mariadbd6 which may be used e.g. for a migration from a separate database and also a custom service with your own image and configuration.
Please remember to update docker compose with ahoy update and then recreate your containers with ahoy up after changing these settings.
Customizing the apache config
docker4drupal: webserver: overwriteconfig: 1
With this setting you get the apache container to include the file ./apache/vhost.conf relative to your project root when loading up.
Adding more domain names to be routed to your apache container
docker4drupal: extradomains: - domain1.example.com - domain2.example.com
Some notes about localhost subdomains
The domain localhost is always defined to be resolved by the IP address 127.0.0.1 which is exactly what we need to work with local installations like this. Using subdomains of localhost to tell Docker and Traefik which of the containers to route the requests to, is what makes this environment really powerful. So, you can use http://project1.docker.localhost:8000 for the development website and http://pma.project1.docker.localhost:8000 for the PhpMyAdmin portal of that site which is served by a different service in a different container.
There is some debate whether such subdomains are legitimate or not and Chrome/Google is of the opinion that it is perfectly OK and according to the RFA which defines that stuff. That means, all this works just fine in Chrome. Unfortunately, Firefox/Mozilla has not implemented that standard (yet) and hence it won't work in that browser without tweaking your local hosts file. Should you want to use Firefox, add a line 127.0.0.1 project1.docker.localhost pma.project1.docker.localhost ... to your /etc/hosts file on your host with a space limited list of all possible domains you're going to use.
Running multiple sites in parallel
This plugin configures the Docker containers such that any number of them can be launched in parallel. And as each of them get individual project names which will then be part of the domain name(s), you can use them all at the same time. To make this possible, a separat Docker service container will be created and launched, which operates as a proxy to route your local traffic to the always correct docker container with the correct development website.
When using the Drupal module print then go to admin/config/user-interface/print/pdf/wkhtmltopdf and remove the options --footer-font-size 7 --footer-right '[page]' because they don't work in the unpatched QT version.