In this tutorial, we are going to check how to install Drupal 8 with the help of drupal-composer and docker4drupal projects. As you know from the 8th version of Drupal it is highly recommended to use composer for your setup and the drupal-composer project is the recommended structure. My personal structure is slightly improved but is also inspired by the drupal-composer project ( I will present that in a different article ).
So let's start with some words about the two projects - first drupal-composer is a perfect kickstart that will help you to easily maintain your module dependencies in Drupal 8 with the help of composer. We will not get into too many details about it, as the project Github page covers it pretty well.
Regarding the docker4drupal project - it is a docker compose oriented setup that presets definitions of several Docker containers that are needed in order to build and have a functional development environment literally in minutes.
Let's start with creating our drupal-composer setup. In order to do that you may just change from the terminal to the folder where you have your Drupal projects and execute the following:
composer create-project drupal-composer/drupal-project:8.x-dev drupaltuto --stability dev --no-interaction
this will create a folder, called drupaltuto with the content of the drupal-composer boilerplate. As a folder structure it should look something like this:
This means we have our Drupal codebase prepared and built. Let's now go ahead and take care of building a server where we could install, test and further develop our Drupal 8 project. As we said we will use the docker4drupal. If we go to the GitHub page of the project and get the GitHub link to it we can just clone it in another folder like this:
git clone firstname.lastname@example.org:wodby/docker4drupal.git drupal_docker_server
Then we could just remove the .git file and then copy the content of the drupal_docker_server into the drupaltuto folder like this:
rm -R drupal_docker_server/.git cp -R drupal_docker_server drupaltuto
It is time to change a bit the docker_compose.yml file in order to have it ready for our project structure. Basically, we have declared all the containers that we will create and they will be connected internally and will be part of an environment on which we will run our Drupal 8 projects.
If we start with the PHP container - there is a possibility to have directly Drupal installed but I like more the idea of having a PHP, let's say 7.x there and that we have our Drupal codebase handled by our neat drupal composer project setup. So in the lines of the PHP container - we would comment out the image with the Drupal and we will uncomment a PHP image. Also, we will change the volumes path so that it starts from the current folder. It will look like this:
php: # 1. Images with vanilla Drupal – wodby/drupal:[DRUPAL_VERSION]-[PHP_VERSION]-[STABILITY_TAG]. # image: wodby/drupal:8-7.1-3.0.0 # image: wodby/drupal:8-7.0-3.0.0 # image: wodby/drupal:7-7.1-3.0.0 # image: wodby/drupal:7-7.0-3.0.0 # image: wodby/drupal:7-5.6-3.0.0 # image: wodby/drupal:6-5.6-3.0.0 # image: wodby/drupal:6-5.3-3.0.0 # 2. Images without Drupal – wodby/drupal-php:[PHP_VERSION]-[STABILITY_TAG]. image: wodby/drupal-php:7.1-3.0.0 # image: wodby/drupal-php:7.0-3.0.0 # image: wodby/drupal-php:5.6-3.0.0 # image: wodby/drupal-php:5.3-3.0.0 environment: PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025 PHP_FPM_CLEAR_ENV: "no" DB_HOST: mariadb DB_USER: drupal DB_PASSWORD: drupal DB_NAME: drupal DB_DRIVER: mysql # PHP_XDEBUG: 1 # PHP_XDEBUG_DEFAULT_ENABLE: 1 # PHP_XDEBUG_REMOTE_CONNECT_BACK: 0 # PHP_XDEBUG_REMOTE_HOST: "10.254.254.254" # PHP_XDEBUG_PROFILER_OUTPUT_DIR: /mnt/files/xdebug/profiler # PHP_XDEBUG_TRACE_OUTPUT_DIR: /mnt/files/xdebug/traces # PHP_BLACKFIRE: 1 volumes: - ./:/var/www/html
Also for the nginx volumes, we could change the volumes as well:
volumes: - ./:/var/www/html
And for accessing the built containers I like to change the ports to 8888 like this:
traefik: image: traefik command: -c /dev/null --web --docker --logLevel=INFO ports: - '8888:80' # - '8080:8080' # Dashboard volumes: - /var/run/docker.sock:/var/run/docker.sock
and we are ready to build. We would start Docker and then open the terminal.
In the terminal, we would have to make sure we are in the drupaltuto folder and we could build all the containers like this:
docker-compose up -d
After it is ready we could check which containers are built with
Afterwards, we could access our Drupal install screen by going to http://drupal.docker.localhost:8888
How it worked so smooth you would ask... Well, the drupal composer project is creating a folder structure where there is a web folder, containing the whole Drupal codebase and the PHP and Nginx containers are expecting the web folder in the root folder too. As we merged the two projects - it is there and you are able to access it directly under http://drupal.docker.localhost:8888
And the last important bit that you have to know when installing is that when you are on the screen where you input the database cridentials - you would have to use the ones specified in the docker_compose.yml :
DB_HOST: mariadb DB_USER: drupal DB_PASSWORD: drupal DB_NAME: drupal DB_DRIVER: mysql
as for inputting the host - you would have to click on advanced when you are on the screen with the database credentials.