PHPackages                             teamdeeson/d9-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. teamdeeson/d9-quickstart

ActiveProject

teamdeeson/d9-quickstart
========================

Quick start template for Drupal 9 projects.

0691[2 PRs](https://github.com/teamdeeson/d9-quickstart/pulls)PHP

Since Sep 27Pushed 3y agoCompare

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

READMEChangelogDependenciesVersions (4)Used By (0)

Drupal 9
========

[](#drupal-9)

This project is a tool for quickly bootstrapping a Drupal 9 website using the standards and best practice of the [Deeson](https://www.deeson.co.uk) web development agency.

This project works with MacOSX and Linux but it is not tested on other operating systems. It probably does not work on Windows.

Dependencies
------------

[](#dependencies)

- [Docker](https://docs.docker.com/engine/installation/)
- [Docker compose](https://docs.docker.com/compose/install/)
- [Composer](https://getcomposer.org/doc/00-intro.md#installation-linux-unix-osx)
- [Deeson Docker proxy](https://github.com/teamdeeson/docker-proxy)

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

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

Use the following command to create a new Drupal 9 project. Replace `` with your own name. Keep the project name short and without punctuation (e.g. myproject)

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

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

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

```

### Required configuration

[](#required-configuration)

You should configure the project for your needs now. The following amendments need to be made at a minimum:

`.env:` Change the PROJECT\_NAME and PROJECT\_BASE\_URL for your project (the url must end in .localhost). Make up a new HASH\_SALT string.

`src/settings/environment.inc:` Configure your domain names here if you know what the remote ones are going to be.

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

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

[](#build-and-install)

The project can now be built for the first time using the included Makefile

```
make
```

This will create the `docroot/` folder and build your website.

It should finish with a one time login URL which you can copy into the Chrome web browser to access your new Drupal site.

Starting and stopping the project.
----------------------------------

[](#starting-and-stopping-the-project)

Once you have run the build for the first time, you can stop the project any time with:

```
make stop

```

The project starts again using:

```
make start

```

Browser access
--------------

[](#browser-access)

You can access localhost domains in Chrome without making any changes. If you want to use other browsers you have to add an entry to your `/etc/hosts` file for this project (replace project url with your url):

```
127.0.0.1 project.localhost

```

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)

### 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/config/

[](#srcconfig)

This contains Drupal's CMI configuration files.

#### 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/settings/

[](#srcsettings)

This contains the Drupal site settings, extracted from 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).

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.

Docker commands
===============

[](#docker-commands)

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

```
docker-compose ps

```

You can access the realtime logs from these with:

```
make logs

```

or the logs from a specific container with:

```
docker-compose logs php -f

```

If you want to delete the site and rerun the installation process you can use:

```
make clean && make install
```

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

```

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

```
docker-compose exec php /bin/bash
```

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`

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

[](#known-issues)

Deeson Docker Proxy not running.
--------------------------------

[](#deeson-docker-proxy-not-running)

`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.

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

20

—

LowBetter than 14% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity36

Early-stage or recently created project

 Bus Factor1

Top contributor holds 82.6% 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)

---

Top Contributors

[![johnennewdeeson](https://avatars.githubusercontent.com/u/1913439?v=4)](https://github.com/johnennewdeeson "johnennewdeeson (19 commits)")[![ben-tpximpact](https://avatars.githubusercontent.com/u/47318829?v=4)](https://github.com/ben-tpximpact "ben-tpximpact (4 commits)")

### Embed Badge

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

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

PHPackages © 2026

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