PHPackages                             teamdeeson/d8-quickstart - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. teamdeeson/d8-quickstart

ActiveProject[Framework](/categories/framework)

teamdeeson/d8-quickstart
========================

Quick start template for Drupal 8 projects.

1516616[3 issues](https://github.com/teamdeeson/d8-quickstart/issues)[28 PRs](https://github.com/teamdeeson/d8-quickstart/pulls)PHP

Since Jan 27Pushed 3y ago14 watchersCompare

[ Source](https://github.com/teamdeeson/d8-quickstart)[ Packagist](https://packagist.org/packages/teamdeeson/d8-quickstart)[ RSS](/packages/teamdeeson-d8-quickstart/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (60)Used By (0)

Drupal 8
========

[](#drupal-8)

The preferred way to manage Drupal 8 sites is to use composer, and the Drupal Composer project helps integrate Drupal core with composer.

This repository provides a quick start wrapper around Drupal Composer and includes common configuration and recommended modules for Deeson Drupal 8 projects.

Quick-start projects use composer for dependency management, including Drupal core, contrib and 3rd party libraries. The contents of docroot/ should be considered expendable during development and can be recompiled from the contents of the repository.

We use [Docker](https://docs.docker.com/engine/installation/) and [Docker compose](https://docs.docker.com/compose/install/) for managing local development and this repository comes with some default configuration for working with Docker. You are of course free to use alternatives, but additional configuration may be required.

For drush to work with Docker, you'll need to add the following line to your `/etc/hosts` file: 127.0.0.1 docker.local

Creating a new Drupal site
--------------------------

[](#creating-a-new-drupal-site)

You do not need to clone this repo, our quick start is checked out using composer.

First you need to [install composer](https://getcomposer.org/doc/00-intro.md#installation-linux-unix-osx).

Then you can create a new project using composer, keep the project name short and without punctuation (e.g. myproject)

```
composer create-project teamdeeson/d8-quickstart  --stability dev --no-interaction
```

You should now create a new git repository, and commit all files not excluded by the .gitignore file.

```
git init
git add .
git commit -m "Created the project."
```

### Required configuration

[](#required-configuration)

You should check through all of the services and settings files and make any required amendments. The following amendments need to be made at a minimum:

`.env:` Add your project name in here, use the same one as used with composer (e.g. myproject)

`src/settings/environment.inc:` Configure your domain names

`src/settings/01-core.settings.inc:` Configure a hash salt.

`src/settings/02-shield.settings.inc:` Configure basic-auth access details to protect your dev sites.

Build and install
-----------------

[](#build-and-install)

At Deeson we use Makefiles to orchestrate any additional tasks such as building dependencies and running tests.

This ensures we have a universal mechanism for task running across all of our projects.

The project can be built using the included Makefile.

```
make
```

will build the project based on the assumed environment. This will create the `docroot/` folder and build your website.

You can specify the environment explicitly with the ENVIRONMENT variable which will add or remove dev dependencies:

```
make build ENVIRONMENT=dev
```

```
make build ENVIRONMENT=prod
```

You can also safely remove your docroot at any point if you need to:

```
make clean
```

Once you have run the build for the first time, you can setup and run your Docker environment using the following command.

```
make start

```

You should now have several running docker containers, including nginx, php, mariadb. Run the following command to check this.

```
$ docker container ls
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                                      NAMES
01b7db232917        wodby/drupal-nginx:8-1.13-2.4.2   "/docker-entrypoint.…"   3 minutes ago       Up 3 minutes        80/tcp                                     d8-quickstart_nginx
b463d169feeb        deeson/fe-node                    "bash -c 'yarn insta…"   3 minutes ago       Up 3 minutes                                                   d8-quickstart_fe-node
f487f9c5ae93        wodby/drupal-php:7.1-2.4.3        "/docker-entrypoint.…"   3 minutes ago       Up 3 minutes        9000/tcp                                   d8-quickstart_php
fd56e451e51d        wodby/mariadb:10.1-2.3.3          "/docker-entrypoint.…"   3 minutes ago       Up 3 minutes        3306/tcp                                   d8-quickstart_mariadb
53d6dcb35ee1        mailhog/mailhog                   "MailHog"                3 minutes ago       Up 3 minutes        1025/tcp, 8025/tcp                         d8-quickstart_mailhog
fb0ebe6aae0e        wodby/redis:3.2-2.1.0             "/docker-entrypoint.…"   3 minutes ago       Up 3 minutes        6379/tcp                                   d8-quickstart_redis
834f7edc1c46        wodby/drupal-solr:8-6.4-2.0.0     "docker-entrypoint-s…"   3 minutes ago       Up 3 minutes        8983/tcp                                   d8-quickstart_solr
c18f97249a71        deeson/fe-php                     "docker-php-entrypoi…"   3 minutes ago       Up 3 minutes                                                   d8-quickstart_fe-php
2ffcf9dcf72d        traefik:1.6.6-alpine              "/entrypoint.sh --do…"   23 hours ago        Up 20 hours         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   traefik

```

The output should contain a line like this:

```
2ffcf9dcf72d        traefik:1.6.6-alpine            "/entrypoint.sh --do…"   21 hours ago        Up 18 hours         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   traefik

```

This is the docker-proxy container. It must be running for you to view the site in browser. See [dependencies](#dependencies) section for setup instructions.

```
cd docker-proxy
make start

```

You should now be able to access a vanilla Drupal site at  in Google Chrome. You will need to add a security exemption as Chrome will complain about the SSL certificate being unsigned.

If you want to use other browsers you have to add an entry to your `/etc/hosts` file:

```
127.0.0.1 d8-quickstart.localhost

```

You can now run the Drupal installation, either through the interface or from the command line using:

```
make install
```

will install the site and associated configuration. You will be prompted to optionally perform a site install. If you proceed this will erase your existing site database.

You can stop the docker environment at any time using the command below:

```
make stop

```

Your site files and database will be stored outside of docker in the `.persist` hidden directory.

Managing dependencies with composer
-----------------------------------

[](#managing-dependencies-with-composer)

All of your dependencies should be managed through composer. This includes any off-the-shelf code such as Drupal core, contrib modules and themes, and any 3rd party libraries.

### To add a module (e.g. redirect):

[](#to-add-a-module-eg-redirect)

```
composer require drupal/redirect
```

### To update a module (e.g. redirect):

[](#to-update-a-module-eg-redirect)

```
composer update drupal/redirect
```

### To update Drupal core:

[](#to-update-drupal-core)

```
composer update drupal/core --with-dependencies
```

**You should commit your composer.lock file to the repository as this will guarantee that any subsequent builds will use the same exact version of all your dependencies.**

For further details, see the Drupal Composer project documentation:

Composer project usage guide:

Xdebug
------

[](#xdebug)

You need to run `sudo ifconfig lo0 alias 10.254.254.254` before Xdebug connections will work. This is usually required each time you log-in to your development machine, but is safe to run periodically.

Running tests
-------------

[](#running-tests)

This repository contains the starting point for running both Behat and PHPUnit test suites as well as Drupal coding standards checks with PHPCS.

PHPUnit tests should be defined within you custom modules, in the tests/ sub-directory.

Behat tests should be defined in the behat-tests directory in the project root.

```
make test
```

will run all of the Project's automated tests.

Project structure
-----------------

[](#project-structure)

### behat-tests/

[](#behat-tests)

This contains all of the Behat tests for your project.

### config/

[](#config)

This contains Drupal's CMI configuration files.

### docroot/

[](#docroot)

This directory contains compiled content and should not normally be committed to your repository.

### drush/

[](#drush)

This contains your drush site aliases file(s).

### src/

[](#src)

This contains all of your project source code. As follows:

#### src/frontend/

[](#srcfrontend)

For all your front end needs. This makes use of our front end setup, you can find out how here :

#### src/modules/

[](#srcmodules)

This is where you place your custom modules.

Anything within `src/modules/` will be made available in `docroot/modules/custom/`

#### src/services/

[](#srcservices)

You can define your services YAML files here.

#### src/settings/

[](#srcsettings)

This contains the Drupal site settings, extracted from settings.php as per:

This has been moved from either sites/default/settings/ or sites/conf/ mentioned in the blog post.

settings.php will be made available in `docroot/sites/default/`. All other files will be included in-place by settings.php.

#### src/themes/

[](#srcthemes)

This is where you place your custom theme(s).

Anything within `src/themes/` will be made available in `docroot/themes/custom/`

##### src/themes/deeson\_frontend\_framework

[](#srcthemesdeeson_frontend_framework)

The default hook up between drupal and src/frontend. Your theme can either inherit from this or follow the instructions from  to do it yourself (its not tricky).

### scripts/

[](#scripts)

This is for any compilation or deployment scripts you may want to add.

These need to be included in your settings file in the usual way:

```
$settings['container_yamls'][] = dirname(DRUPAL_ROOT) . '/src/services/development.services.yml';
```

### vendor/

[](#vendor)

This is the composer vendor directory, which contains project dependencies, tools and libraries. This should be excluded from your repository.

### web/

[](#web)

This and `docroot/` are symlinked to the same location for wider compatibility and should also be excluded from your repository.

Helpful Docker commands
=======================

[](#helpful-docker-commands)

You can use the docker-compose tool as a shortcut for common docker commands. To run a command within one of the containers you can use:

```
docker-compose exec
```

For example to start a mysql client on the database container (mariadb) run:

```
docker-compose exec mariadb mysql
```

You can also use the more standard docker commands.

To list the active Docker instances run the following in the project root directory:

```
docker-compose ps
```

To get a bash terminal inside the PHP container you can use the following:

```
docker-compose exec php
```

To import an exported site database into the database container (if you don't have pv installed you can do so with `brew install pv`):

```
pv database_export_filename.sql | docker-compose exec -T mariadb mysql -udrupal -pdrupal drupal
```

Note that this method is up to 33% faster than the drush method `pv database_export_filename.sql | drush @docker sql-cli`

Dependencies
============

[](#dependencies)

Our Docker proxy should be installed and running. See here for installation notes:

Known issues
============

[](#known-issues)

`ERROR: Network proxy declared as external, but could not be found. Please create the network manually using 'docker network create proxy' and try again.`

The Docker proxy needs to be running. See dependencies above.

Managing Configuration
======================

[](#managing-configuration)

The D8 Quickstart uses [Config Split](https://www.drupal.org/project/config_split) to separate local development configuration from the default configuration.

Exporting configuration
-----------------------

[](#exporting-configuration)

The default configuration will be exported to `./config/default` by `drush @docker cex`.

The local development configuration will be exported to `./config/local` automatically when `drush @docker cex` is ran.

You can control what is considered local configuration in the Drupal 8 admin area.

Importing configuration
-----------------------

[](#importing-configuration)

You can import the site configuration using `drush @docker cim`

The default configuration will always be imported.

If the environment is the local development environment then the local configuration is also imported.

Using Drush with Acquia
-----------------------

[](#using-drush-with-acquia)

You may need to add the following to your ~/.ssh/config when working with Drush and Acquia remote hosts:

```
Host *.acquia-sites.com
   LogLevel QUIET

```

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance16

Infrequent updates — may be unmaintained

Popularity22

Limited adoption so far

Community24

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 73.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/21c7794030a56f2bdf7b6119fbcf13bcdc27ee240b6d705c4b9163a6272fa826?d=identicon)[johnennew](/maintainers/johnennew)

![](https://www.gravatar.com/avatar/db69bee93d186240a8d35cbecda3be948ee13bb19eacd8f336b59efb5ac0c8de?d=identicon)[markpdeeson](/maintainers/markpdeeson)

---

Top Contributors

[![markpdeeson](https://avatars.githubusercontent.com/u/23450722?v=4)](https://github.com/markpdeeson "markpdeeson (127 commits)")[![johnennewdeeson](https://avatars.githubusercontent.com/u/1913439?v=4)](https://github.com/johnennewdeeson "johnennewdeeson (35 commits)")[![angry-dan](https://avatars.githubusercontent.com/u/2488771?v=4)](https://github.com/angry-dan "angry-dan (3 commits)")[![mikeddeeson](https://avatars.githubusercontent.com/u/5821740?v=4)](https://github.com/mikeddeeson "mikeddeeson (2 commits)")[![kristiaanvandeneynde](https://avatars.githubusercontent.com/u/1107241?v=4)](https://github.com/kristiaanvandeneynde "kristiaanvandeneynde (1 commits)")[![legolasbo](https://avatars.githubusercontent.com/u/8048544?v=4)](https://github.com/legolasbo "legolasbo (1 commits)")[![jordanclaguedeeson](https://avatars.githubusercontent.com/u/33672595?v=4)](https://github.com/jordanclaguedeeson "jordanclaguedeeson (1 commits)")[![MartinDeeson](https://avatars.githubusercontent.com/u/32061884?v=4)](https://github.com/MartinDeeson "MartinDeeson (1 commits)")[![ben-tpximpact](https://avatars.githubusercontent.com/u/47318829?v=4)](https://github.com/ben-tpximpact "ben-tpximpact (1 commits)")

### Embed Badge

![Health badge](/badges/teamdeeson-d8-quickstart/health.svg)

```
[![Health](https://phpackages.com/badges/teamdeeson-d8-quickstart/health.svg)](https://phpackages.com/packages/teamdeeson-d8-quickstart)
```

###  Alternatives

[laravel/telescope

An elegant debug assistant for the Laravel framework.

5.2k67.8M190](/packages/laravel-telescope)[spiral/roadrunner

RoadRunner: High-performance PHP application server and process manager written in Go and powered with plugins

8.4k12.2M84](/packages/spiral-roadrunner)[nolimits4web/swiper

Most modern mobile touch slider and framework with hardware accelerated transitions

41.8k177.2k1](/packages/nolimits4web-swiper)[laravel/dusk

Laravel Dusk provides simple end-to-end testing and browser automation.

1.9k36.7M255](/packages/laravel-dusk)[laravel/prompts

Add beautiful and user-friendly forms to your command-line applications.

708181.8M591](/packages/laravel-prompts)[cakephp/chronos

A simple API extension for DateTime.

1.4k47.7M119](/packages/cakephp-chronos)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
