Convert Figma logo to code with AI

geerlingguy logodrupal-vm

A VM for Drupal development

1,368
647
1,368
16

Top Related Projects

2,632

Docker-based local PHP+Node.js web development environments

4,075

A development tool for all your projects that is fast, easy, powerful and liberating

4,537

An open source Vagrant configuration for developing with WordPress

26,159

Vagrant is a tool for building and distributing development environments.

Quick Overview

Drupal VM is a pre-configured virtual machine for local Drupal development, built with Vagrant and Ansible. It provides a complete and consistent development environment for Drupal projects, allowing developers to quickly set up a local Drupal site with minimal configuration.

Pros

  • Easy setup and configuration for a complete Drupal development environment
  • Consistent development environment across team members
  • Includes popular tools and services like Apache, Nginx, PHP, MySQL, Solr, and more
  • Highly customizable through configuration files

Cons

  • Requires significant system resources, especially for multiple VMs
  • Learning curve for those unfamiliar with Vagrant and Ansible
  • May be overkill for simple projects or experienced developers with established workflows
  • Potential performance issues compared to native development setups

Getting Started

  1. Install Vagrant, VirtualBox, and Ansible on your host machine.
  2. Clone the Drupal VM repository:
    git clone https://github.com/geerlingguy/drupal-vm.git
    cd drupal-vm
    
  3. Copy default.config.yml to config.yml and customize as needed:
    cp default.config.yml config.yml
    
  4. Start the VM:
    vagrant up
    
  5. Access your Drupal site at http://drupalvm.test (or the domain you configured).

For more detailed instructions and configuration options, refer to the project's documentation.

Competitor Comparisons

2,632

Docker-based local PHP+Node.js web development environments

Pros of DDEV

  • Supports multiple PHP frameworks and CMSs, not limited to Drupal
  • Easier setup and configuration with a simple CLI interface
  • More actively maintained with frequent updates and community support

Cons of DDEV

  • Less customizable than Drupal VM for specific Drupal development needs
  • May have a steeper learning curve for users familiar with Vagrant-based setups

Code Comparison

DDEV configuration (.ddev/config.yaml):

name: myproject
type: drupal9
docroot: web
php_version: "7.4"
webserver_type: nginx-fpm

Drupal VM configuration (config.yml):

vagrant_hostname: drupal.test
drupal_core_path: "/var/www/drupal"
drupal_core_version: "9.3.x"
php_version: "7.4"

Both projects aim to simplify local development environments, but DDEV offers a more flexible approach for various web projects, while Drupal VM focuses specifically on Drupal development. DDEV uses Docker containers, making it more portable across different operating systems, whereas Drupal VM relies on Vagrant and VirtualBox. DDEV's configuration is generally simpler, but Drupal VM provides more granular control over the Drupal-specific environment.

4,075

A development tool for all your projects that is fast, easy, powerful and liberating

Pros of Lando

  • Supports multiple development environments beyond Drupal (WordPress, Laravel, etc.)
  • Offers a user-friendly GUI for managing projects
  • Provides built-in tooling and commands for common development tasks

Cons of Lando

  • May have a steeper learning curve for beginners
  • Can be resource-intensive, especially when running multiple projects simultaneously

Code Comparison

Drupal VM (Vagrantfile):

Vagrant.configure("2") do |config|
  config.vm.box = "geerlingguy/drupal-vm"
  config.vm.network "private_network", ip: "192.168.88.88"
  config.vm.synced_folder ".", "/var/www/drupal", type: "nfs"
end

Lando (.lando.yml):

name: myapp
recipe: drupal9
config:
  webroot: web
  database: mysql:5.7
  php: '7.4'

Drupal VM focuses specifically on Drupal development, providing a pre-configured Vagrant box. It offers a straightforward setup process and is well-suited for Drupal-centric projects. Lando, on the other hand, is more versatile and supports various development environments. It uses Docker containers and provides a more flexible configuration system.

While Drupal VM may be easier for Drupal developers to get started with, Lando offers greater adaptability for diverse project requirements. Both tools aim to simplify local development environments, but their approaches and target audiences differ slightly.

4,537

An open source Vagrant configuration for developing with WordPress

Pros of VVV

  • Supports multiple WordPress installations out of the box
  • Includes tools for database management and debugging
  • Offers a more comprehensive development environment for WordPress

Cons of VVV

  • Larger footprint and potentially slower setup time
  • Less focused on a single CMS, which may lead to unnecessary complexity
  • May require more configuration for specific WordPress setups

Code Comparison

VVV (config.yml):

sites:
  wordpress-one:
    repo: https://github.com/WordPress/WordPress.git
    hosts:
      - one.wordpress.test

Drupal VM (config.yml):

drupal_core_path: "/var/www/drupal"
drupal_domain: "drupalvm.test"
drupal_db_user: drupal
drupal_db_password: drupal

VVV is more geared towards WordPress development with multiple site configurations, while Drupal VM is specifically tailored for Drupal projects with simpler configuration options.

26,159

Vagrant is a tool for building and distributing development environments.

Pros of Vagrant

  • More versatile, supporting various development environments beyond Drupal
  • Larger community and ecosystem with extensive plugins and providers
  • Can be used with multiple virtualization technologies (VirtualBox, VMware, etc.)

Cons of Vagrant

  • Requires more configuration and setup for specific use cases like Drupal development
  • Steeper learning curve for beginners compared to purpose-built solutions
  • May require additional tools and plugins for optimal Drupal development workflow

Code Comparison

Vagrant (Vagrantfile):

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.provision "shell", path: "bootstrap.sh"
  config.vm.network "forwarded_port", guest: 80, host: 8080
end

Drupal VM (config.yml):

vagrant_box: geerlingguy/ubuntu2004
drupal_core_path: "/var/www/drupal"
drupal_domain: "drupalvm.test"
drupal_site_name: "Drupal VM"
drupal_install_profile: standard

Vagrant provides a more general-purpose solution for creating development environments, while Drupal VM offers a pre-configured setup specifically tailored for Drupal development. Vagrant requires more manual configuration but offers greater flexibility, whereas Drupal VM provides a smoother out-of-the-box experience for Drupal projects at the cost of some customization options.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Drupal VM Logo

DEPRECATION NOTICE: Drupal VM is no longer maintained, and no new releases will be made. See issue #2164 for details. Thank you to all users and maintainers over the past decade!

CI Documentation Status Packagist Docker Automated build irc://irc.freenode.net/drupal-vm

Drupal VM is a VM for Drupal, built with Ansible.

Drupal VM makes building Drupal development environments quick and easy, and introduces developers to the wonderful world of Drupal development on virtual machines or Docker containers (instead of crufty old MAMP/WAMP-based development).

There are two ways you can use Drupal VM:

  1. With Vagrant and VirtualBox.
  2. With Docker.

The rest of this README assumes you're using Vagrant and VirtualBox (this is currently the most flexible and widely-used method of using Drupal VM). If you'd like to use Drupal VM with Docker, please read the Drupal VM Docker documentation.

Drupal VM installs the following on an Ubuntu 18.04 (by default) linux VM:

  • Apache (or Nginx)
  • PHP (configurable version)
  • MySQL (or MariaDB, or PostgreSQL)
  • Drupal 7, 8, or 9
  • Optional:
    • Drupal Console
    • Drush
    • Varnish
    • Apache Solr
    • Elasticsearch
    • Node.js
    • Selenium, for testing your sites via Behat
    • Ruby
    • Memcached
    • Redis
    • SQLite
    • Blackfire, XHProf, or Tideways for profiling your code
    • XDebug, for debugging your code
    • Adminer, for accessing databases directly
    • MailHog, for catching and debugging email

It should take 5-10 minutes to build or rebuild the VM from scratch on a decent broadband connection.

Please read through the rest of this README and the Drupal VM documentation for help getting Drupal VM configured and integrated with your workflow.

Documentation

Full Drupal VM documentation is available at http://docs.drupalvm.com/

Customizing the VM

There are a couple places where you can customize the VM for your needs:

  • config.yml: Override any of the default VM configuration from default.config.yml; customize almost any aspect of any software installed in the VM (more about configuring Drupal VM.
  • drupal.composer.json or drupal.make.yml: Contains configuration for the Drupal core version, modules, and patches that will be downloaded on Drupal's initial installation (you can build using Composer, Drush make, or your own codebase).

If you want to use Drupal 8 on the initial install, do the following:

  1. Set drupal_major_version: 8 inside config.yml.

  2. Set drupal_composer_project_package: "drupal/recommended-project:^8@dev" inside config.yml.

If you want to use Drupal 7 on the initial install, do the following:

  1. Switch to using a Drush Make file.
  2. Update the Drupal version and core inside your drupal.make.yml file.
  3. Set drupal_major_version: 7 inside config.yml.

Quick Start Guide

This Quick Start Guide will help you quickly build a Drupal 9 site on the Drupal VM creating a new Composer project. You can also use Drupal VM with Composer, a Drush Make file, with a Local Drupal codebase, or even a Drupal multisite installation.

If you want to install a Drupal site locally with minimal fuss, just:

  1. Install Vagrant and VirtualBox.
  2. Download or clone this project to your workstation.
  3. cd into this project directory and run vagrant up.

But Drupal VM allows you to build your site exactly how you like, using whatever tools you need, with almost infinite flexibility and customization!

1 - Install Vagrant and VirtualBox

Download and install Vagrant and VirtualBox.

You can also use an alternative provider like Parallels or VMware. (Parallels Desktop 11+ requires the "Pro" or "Business" edition and the Parallels Provider, and VMware requires the paid Vagrant VMware integration plugin).

Notes:

  • For faster provisioning (macOS/Linux only): Install Ansible on your host machine, so Drupal VM can run the provisioning steps locally instead of inside the VM.
  • For stability: Because every version of VirtualBox introduces changes to networking, for the best stability, you should install Vagrant's vbguest plugin: vagrant plugin install vagrant-vbguest.
  • NFS on Linux: If NFS is not already installed on your host, you will need to install it to use the default NFS synced folder configuration. See nfs instructions for Linux
  • Versions: Make sure you're running the latest releases of Vagrant, VirtualBox, and Ansible—as of 2020, Drupal VM recommends: Vagrant 2.2.x, VirtualBox 6.1.x, and Ansible 2.9.x

2 - Build the Virtual Machine

  1. Download this project and put it wherever you want.
  2. (Optional) Copy default.config.yml to config.yml and modify it to your liking.
  3. Create a local directory where Drupal will be installed and configure the path to that directory in config.yml (local_path, inside vagrant_synced_folders).
  4. Open Terminal, cd to this directory (containing the Vagrantfile and this README file).
  5. Type in vagrant up, and let Vagrant do its magic.

Once the process is complete, you will have a Drupal codebase available inside the drupal/ directory of the project.

Note: If there are any errors during the course of running vagrant up, and it drops you back to your command prompt, just run vagrant provision to continue building the VM from where you left off. If there are still errors after doing this a few times, post an issue to this project's issue queue on GitHub with the error.

3 - Access the VM.

Open your browser and access http://drupalvm.test/. The default login for the admin account is admin for both the username and password.

Note: By default Drupal VM is configured to use 192.168.88.88 as its IP, if you're running multiple VM's the auto_network plugin (vagrant plugin install vagrant-auto_network) can help with IP address management if you set vagrant_ip to 0.0.0.0 inside config.yml.

Extra software/utilities

By default, this VM includes the extras listed in the config.yml option installed_extras, for example:

installed_extras:
  - adminer
  # - blackfire
  # - drupalconsole
  - drush
  # - elasticsearch
  # - java
  - mailhog
  [...]

If you don't want or need one or more of these extras, just delete them or comment them from the list. This is helpful if you want to reduce PHP memory usage or otherwise conserve system resources.

Using Drupal VM

Drupal VM is built to integrate with every developer's workflow. Many guides for using Drupal VM for common development tasks are available on the Drupal VM documentation site.

Updating Drupal VM

Drupal VM follows semantic versioning, which means your configuration should continue working (potentially with very minor modifications) throughout a major release cycle. Here is the process to follow when updating Drupal VM between minor releases:

  1. Read through the release notes and add/modify config.yml variables mentioned therein.
  2. Do a diff of your config.yml with the updated default.config.yml (e.g. curl https://raw.githubusercontent.com/geerlingguy/drupal-vm/master/default.config.yml | git diff --no-index config.yml -).
  3. Run vagrant provision to provision the VM, incorporating all the latest changes.

For major version upgrades (e.g. 4.x.x to 5.x.x), it may be simpler to destroy the VM (vagrant destroy) then build a fresh new VM (vagrant up) using the new version of Drupal VM.

System Requirements

Drupal VM runs on almost any modern computer that can run VirtualBox and Vagrant, however for the best out-of-the-box experience, it's recommended you have a computer with at least:

  • Intel Core processor with VT-x enabled
  • At least 4 GB RAM (higher is better)
  • An SSD (for greater speed with synced folders)

Other Notes

  • To shut down the virtual machine, enter vagrant halt in the Terminal in the same folder that has the Vagrantfile. To destroy it completely (if you want to save a little disk space, or want to rebuild it from scratch with vagrant up again), type in vagrant destroy.
  • To log into the virtual machine, enter vagrant ssh. You can also get the machine's SSH connection details with vagrant ssh-config.
  • When you rebuild the VM (e.g. vagrant destroy and then another vagrant up), make sure you clear out the contents of the drupal folder on your host machine, or Drupal will return some errors when the VM is rebuilt (it won't reinstall Drupal cleanly).
  • You can change the installed version of Drupal or drush, or any other configuration options, by editing the variables within config.yml.
  • Find out more about local development with Vagrant + VirtualBox + Ansible in this presentation: Local Development Environments - Vagrant, VirtualBox and Ansible.
  • Learn about how Ansible can accelerate your ability to innovate and manage your infrastructure by reading Ansible for DevOps.

Tests

To run basic integration tests using Docker and Molecule:

  1. Install Docker.
  2. Install Molecule: pip3 install ansible molecule[docker]
  3. In this project directory, run: composer run-tests

The project's automated tests are run via GitHub Actions, and the more comprehensive test suite covers multiple Linux distributions and many different Drupal VM use cases and deployment techniques.

License

This project is licensed under the MIT open source license.

About the Author

Jeff Geerling created Drupal VM in 2014 for a more efficient Drupal site and core/contrib development workflow. This project is featured as an example in Ansible for DevOps.