2 min read

Easy PHP (Laravel, Symfony) Development with Docker using DDEV

DDEV is an open source tool that makes it simple to get local PHP development environments up and running in minutes. Extend and share per-project environment configurations.

Contents

Installing DDEV

Windows using Chocolatey:

choco install ddev

Mac/Linux using Brew

brew tap drud/ddev && brew install ddev

Mac/Linux install script

curl -L https://raw.githubusercontent.com/drud/ddev/master/scripts/install_ddev.sh | bash

Using DDEV in your project

Inside your PHP project’s root directory, run ddev config to setup the configuration of DDEV. Once complete, you can type ddev start to run the containers inside of Docker. Initial setup and pulling of containers will take a minute or two, but once the containers are downloaded, starting and stopping DDEV will be a cinch.

Once complete, DDEV will give you two URLs, http://project.ddev.site and http://127.0.0.1:32769 to use for local development. If you wanted to share your project, you need to install ngrok and then you can run ddev share.

For more information on using DDEV’s CLI click here.

Extending DDEV

For a basic installation, that’s it, you’re all finished. However, if you need to extend DDEV, you have complete freedom. For instance, you can go to /.ddev/config.yaml and change or add configuration parameters. Here’s my config file as an example…

APIVersion: v1.13.1name: blogtype: phpdocroot: publicphp_version: "7.4"webserver_type: nginx-fpmrouter_http_port: "80"router_https_port: "443"xdebug_enabled: trueadditional_hostnames: []additional_fqdns: []nfs_mount_enabled: falseprovider: defaultuse_dns_when_possible: truetimezone: ""

You can also add your own custom commands. For instance, if you have a Laravel project you can create a file called artisan inside the /.ddev/commands/web directory. Within this file add the following

#!/bin/bashphp artisan $@

This will allow you to run any artisan command such as ddev artisan make:migration create_comments_table and it will generate a new migration file.

For testing, I added a file named phpunit with

#!/bin/bash./vendor/bin/phpunit

This allows me to run ddev phpunit and it will run my testing suite. The same can be done for Symfony’s console command. Create a file called console inside the same web directory as before and add the following.

#!/bin/bashphp bin/console $@

And now you can run any Symfony console command using ddev console debug:router etc. If you would like to read more on this, then please take a look at their custom commands documentation.

Closing thoughts

I’ve covered the basics of using DDEV, but there is a lot more that it can do. You can switch from nginx to apache, change PHP versions and even add services such as Memcached, Solr, Beanstalk and more.

I’ll make another blog post in the future which goes into more details about these other services, but in the meantime you can sign up to my newsletter using the form below.