Local Drupal Development
This setup is exclusively for local development only.
This setup has been tested with :
- Apple Silicon M1
- macOS Monterey
- Local clone
- Git
- Docker for Mac
- Composer
- Brew
composer create-project dpi/drupal-localcp .env.dist .envand add values.composer install- Install Certificates, see Local TLS section below.
- Optionally copy and remove
dist.prefix from settings files. docker-compose up -d
Drupal is accessible at https://localhost/
docker-compose exec php-cli bash
drush si standard -y# Set Claro as admin theme:
drush theme:enable claro && drush config:set system.theme admin claro -y && drush crWant to use a hostname other than localhost, such as DOMAIN.localhost? (automat- ically works with Firefox / Chrome) Or any others with editing host file?
- Update URLs and hostnames in
.envfile. - Generate certificates for new hostname (See Local TLS).
docker-compose up -d
# Enable Redis before copying files because new services depend on Redis.module.
drush en redis
cp ./app/sites/default/dist.settings.redis.php ./app/sites/default/settings.redis.php
cp ./app/sites/default/dist.services.redis.yml ./app/sites/default/services.redis.php
drush crConfig YAML will be exported to ./config/, alternatively use MySQL dump and
auto restoration per below.
drush config:export
drush config:importWhy local HTTPS? Just because! Also Secure Cookies! And other things probably.
brew install mkcert nss
# Replace 'localhost' with alternative hostname, if desired.
mkcert -cert-file=certificates/primary.pem -key-file=certificates/primary-key.pem localhost
mkcert -installMore certificates can be defined in traefik/config/certificates.yaml.
Dump the MySQL database from the PHPCLI container so the setup can be restarted.
drush sql-dump --result-file=../sql/init/dump.sqlThe dump will be automatically imported if you docker-compose down then
restart the application. The app will take a few extra seconds to be ready. Tail
the database log with docker-compose logs -f db to track progress.
Mailhog will capture emails sent by Drupal. There is no need to configure Drupal
as sendmail_path is configured.
Mailhog is accessible at https://localhost/mailhog/
Dashboard is accessible at https://localhost/traefik/
Optionally customise PHPStan configuration with
cp phpstan.neon.dist phpstan.neon. The .dist file will be used by default.
phpstan analyseOptionally customise PHPCS configuration with
cp phpcs.xml.dist phpcs.xml. The .dist file will be used by default.
phpcsOptionally customise PHPUnit configuration with
cp phpunit.xml.dist phpunit.xml. The .dist file will be used by default.
phpunitDefine client and server ID and tokens in .env.
Enable the browser extension as normal.
Navigate to the page you wish to profile, and click 'Profile!' button.
Note: does not work properly if you're using Firefox container tabs. Use a container-less tab when profiling in Firefox.
docker-compose exec blackfire blackfire curl http://nginx:8080/
Blackfire client (blackfire) is built into the PHP CLI container
(Dockerfile-php-cli):
docker-compose exec php-cli bash
blackfire curl http://nginx:8080/
docker-compose exec php-cli bash
blackfire run drush foo