Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

The reliable way to run WordPress locally with Vagrant is to define the machine in a version-controlled Vagrantfile, provision an Ubuntu guest with Apache or Nginx, PHP, and MariaDB/MySQL, then install WordPress with WP-CLI. Your host keeps the project files and commands; the virtual machine supplies a repeatable server that is isolated from production.

This guide uses the maintained bento/ubuntu-24.04 box and VirtualBox, targets WordPress.org’s current baseline of PHP 8.3 or newer, MariaDB 10.11 or newer or MySQL 8.0 or newer, and shows how to reach the site at a local hostname. Provider versions, box versions, and host virtualization support change, so verify them before pinning a team setup.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What you will build

The finished project has four layers:

  • Host tools: the Vagrant CLI, VirtualBox, and (optionally) WP-CLI for running remote commands.
  • A Vagrant definition: a Vagrantfile that selects the Ubuntu box, allocates resources, configures networking, mounts your project directory, and invokes provisioning.
  • A provisioner: a checked-in shell script that installs Apache, PHP extensions, MariaDB, WP-CLI, and the WordPress files.
  • WordPress data: a database and wp-config.php inside the guest, with the code directory shared from your project so edits survive a VM rebuild.

Vagrant’s role is orchestration: it provides the framework and configuration format for creating and managing portable development environments. It does not replace the virtualization provider or the operating system inside the VM.

Prerequisites and compatibility checks

Install Vagrant and a provider

Install the current Vagrant CLI and VirtualBox. HashiCorp’s setup tutorial uses VirtualBox 7.1.4; that version is a moving prerequisite rather than a permanent requirement, so check the tutorial and the VirtualBox release you intend to use before standardizing a project. If another provider is installed, explicitly select VirtualBox during startup with --provider=virtualbox.

#1 Best Overall
Sale
Compressed Air Duster,130000RPM Super Power Cordless Air Duster,Rechargeable Brushless Blower,3 Gear Adjustable Blower with LED Light,Dust Remover for Computer/House/Outdoor/Car
  • Powerful Turbo Fan:CAGIWIRU Electric Air Duster have reached speed up to 130000RPM,Can efficient remove dust and debris.With LED light and Three Adjustable Speed to meet with different cleaning tasks.
  • With Attached USB C Fasting Charging cable.Charing 3 hours,Enjoy up to 240 minutes of use on the lowest setting, For third speed can use for 25mins.with four charging options to meet with your needs.
  • Wide Application: attached 5 different nozzles,making it suitable for a variety of scenes, such as car,pet, pc, keyboards, and other electronic devices. It also serves for office and home clean duster.
  • Handy Design & Portable:Cordless air duster electric nozzle is Light weight and small size, design and comfortable to hold and space saving, convenient to carry around. You can put it in your room or inside the car without taking up space.
  • Economical &Reusable: Built durable materials with a long-lasting battery,our CAGIWIRU air duster it's a sustainable alternative to disposable air cans.

Enable hardware virtualization in the host firmware when your operating system or VirtualBox reports that VT-x/AMD-V is unavailable. On Windows, Hyper-V and related security features can compete with VirtualBox; follow the provider’s current compatibility guidance instead of assuming that every host configuration behaves the same way. Apple Silicon hosts, Windows hosts, and Linux distributions can differ in supported guest architectures and filesystem sharing.

Use a maintained development box

The examples use bento/ubuntu-24.04, the box used in HashiCorp’s current quick-start tutorial. Canonical states that its Ubuntu Vagrant boxes are for local development, not production, and stopped publishing Vagrant images directly beginning with Ubuntu 24.04 LTS. That is why the example uses a maintained community box rather than assuming an official Canonical image exists.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Box and provider releases are volatile. After you have a working combination, record the tested box version in your project documentation or Vagrant configuration and review it deliberately when upgrading. If your host architecture cannot run the selected box, choose a box that publishes a compatible architecture and test the provisioning script again.

WordPress server baseline

WordPress.org currently recommends PHP 8.3 or greater, MariaDB 10.11 or greater or MySQL 8.0 or greater, and HTTPS. Apache or Nginx is recommended. A local site can begin on HTTP for basic development, but HTTPS is important when you test secure cookies, OAuth callbacks, mixed-content handling, REST integrations, payment flows, or any feature whose behavior changes under TLS.

Create the project and Vagrantfile

Create a new directory, initialize it with the selected box, and keep the resulting files in version control:

mkdir wordpress-vagrant
cd wordpress-vagrant
mkdir site
vagrant init bento/ubuntu-24.04

vagrant init creates a starter file. Replace its contents with a definition that makes the networking, shared folder, resources, and provisioner explicit:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Vagrant.configure('2') do |config|
  config.vm.box = 'bento/ubuntu-24.04'
  config.vm.hostname = 'wp-local'

  # The private address is reachable only from the host.
  config.vm.network 'private_network', ip: '192.168.56.10'

  # Keep WordPress files in the host project's site/ directory.
  config.vm.synced_folder './site', '/var/www/html', create: true

  config.vm.provider 'virtualbox' do |vb|
    vb.memory = 2048
    vb.cpus = 2
  end

  config.vm.provision 'shell', path: 'provision.sh'
end

The two CPU and 2,048 MB memory values are an example starting point, not a universal requirement. Increase them if your host has capacity and the site uses resource-heavy plugins; reduce them when the host is constrained. Do not commit secrets to the Vagrantfile.

Commit the Vagrantfile and provisioning script, but keep generated database dumps, logs, and private keys out of the repository. A simple .gitignore can exclude .vagrant/, local dump files, and editor metadata while leaving the site code and configuration definition reviewable.

Write a repeatable provisioner

Provisioners install software, alter configuration, and run as part of vagrant up. Vagrant runs the provisioner on the first successful startup and can run it again with vagrant provision or vagrant reload --provision. Make the script idempotent: installing an already-installed package should be harmless, an existing WordPress tree should not be overwritten, and an existing Apache site should not be duplicated.

Rank #2
EVEO® Screen Cleaner Spray Kit (Streak-Free) TV Screen Cleaner for Smart TV, Lcd, LEd, Oled | Computer Screen Cleaner Spray and Wipe Microfiber Cloth - TV, Monitor, Laptop, iPad, Car - 6.7oz 1 Pack
  • Screen Cleaner is Your Screen’s New Bestfriend! - EVEO is proud to present a screen cleaner that’s perfectly suited for your TV. Meet your new screen cleaner, computer screen cleaner, laptop cleaner, iPad cleaner, Macbook,tv cleaner or any other electronic device. Our screen cleaner spray and wipe along with the included plush microfiber cloth, easily removes dust, fingerprints & other smudges on the screen’s surface. Clean effectively for a streak-free screen
  • Gentle on your Screens - Our screen cleaner spray and wipes is compatible to be used even for the most sensitive LCD, LED, CRT, and OLED screens in proper use. Be at ease knowing that this product is compatible with all the major brands: LG, SONY, Samsung, Sharp, iPad, iPhone, Android screens, Kindle, PC monitors - we’ve got you covered! Can be used as LCD screen cleaner, tv cleaner, smart tv screen cleaner, and more
  • Premium Super Soft Plush Microfiber Cloth - Included in this efficient screen cleaning kit. This screen cleaner spray and wipe has our signature plush microfiber cloth specially designed to comply with screens and monitors and leave them streak-free. Has been shown to effectively absorbs stubborn stains, zero streaks, and no fiber shedding. Always use this together with our screen cleaner for the best results
  • Easy-to-Use Screen Cleaner Kit + microfiber cleaning cloth - The EVEO Screen Cleaning Kit will easily be your new favorite tool when it comes to taking care of the things you love most, quick and easy solution for a streak-free screen. Simply screw on the sprayer gun on the screen cleaner bottle. Spray the cleaning liquid onto the microfiber cloth, then wipe the screen until desired cleanliness & shine is achieved.
  • Quality Screen Care Kit Worth Purchasing - Enjoy a convenient Screen Cleaner anytime, anywhere you need it. Your satisfaction is our top priority. We stand behind the quality of our products and that’s why, you shouldn’t be worrying at all. We manufacture the Best Screen Cleaner. and can be used for laptop cleaning kit, laptop screen cleaner, tv screen cleaner for smart tv. MacBook screen cleaner, monitor cleaner or screen cleaner spray for electronic devices with microfiber cleaning cloth

Create provision.sh beside the Vagrantfile:

#!/usr/bin/env bash
set -euxo pipefail
export DEBIAN_FRONTEND=noninteractive

apt-get update
apt-get install -y 
  apache2 
  mariadb-server 
  curl 
  unzip 
  php 
  php-cli 
  php-curl 
  php-gd 
  php-intl 
  php-mbstring 
  php-mysql 
  php-xml 
  php-zip 
  libapache2-mod-php

a2enmod rewrite
systemctl enable --now apache2
systemctl enable --now mariadb

install -d -o www-data -g www-data /var/www/html

# Install WP-CLI only when it is not already present.
if [ ! -x /usr/local/bin/wp ]; then
  cd /tmp
  curl -fsSLO https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
  php wp-cli.phar --info
  chmod +x wp-cli.phar
  mv wp-cli.phar /usr/local/bin/wp
fi

# Download WordPress once; never replace an existing installation.
if [ ! -f /var/www/html/wp-load.php ]; then
  cd /var/www/html
  wp core download --allow-root
fi

cat >/etc/apache2/sites-available/wordpress.conf <<'APACHE'

    ServerName wp.local
    DocumentRoot /var/www/html
    
        AllowOverride All
        Require all granted
    
    ErrorLog ${APACHE_LOG_DIR}/wordpress-error.log
    CustomLog ${APACHE_LOG_DIR}/wordpress-access.log combined

APACHE

a2ensite wordpress.conf
# The command is safe when the default site was already disabled.
a2dissite 000-default.conf || true
systemctl reload apache2

chown -R www-data:www-data /var/www/html

Make it executable before starting the VM:

chmod +x provision.sh

The script installs generic Ubuntu PHP packages, so the guest’s repository determines the exact minor release. Confirm the result with php -v; if the repository on your selected box does not provide PHP 8.3 or newer, choose a box or package source that does rather than silently running an obsolete PHP version.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The script downloads WordPress into the shared site/ directory. Because that directory is mounted from the host, destroying and recreating the VM does not remove the files. The database is separate and must be backed up or recreated intentionally.

Start the VM and verify the guest

Start with an explicit provider when more than one is installed:

vagrant up --provider=virtualbox

The first run downloads the box and executes the provisioner. Enter the guest with:

vagrant ssh

Run these checks inside the VM:

php -v
mariadb --version
apache2ctl -S
wp --info
ls -la /var/www/html

Expected results are a PHP version meeting the WordPress baseline, a running MariaDB service, an Apache virtual host for wp.local, a working WP-CLI executable, and WordPress files in the document root. If provisioning stops, read the first failing command in the Vagrant output, correct the script, and rerun:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
vagrant provision

Use vagrant reload --provision when a change requires a reboot as well as provisioning. Do not repeatedly destroy the VM while debugging; preserving the guest makes it easier to inspect logs and determine whether the failure is in package installation, Apache configuration, database authentication, or file permissions.

Install WordPress with WP-CLI

Prepare a local database account

WordPress should use a dedicated local database and user, not production credentials. Inside the VM, create them with MariaDB’s local administrative socket:

sudo mysql

At the MariaDB prompt, replace the example password with a value used only for this disposable environment:

CREATE DATABASE IF NOT EXISTS wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'wordpress'@'localhost' IDENTIFIED BY 'local-only-password';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost';
FLUSH PRIVILEGES;
EXIT;

The database name, username, and password below must match these values. A local password is still worth keeping out of public repositories; put personal overrides in an ignored file or enter them interactively.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
BladeHawks RGB Gaming Mouse Pad Extra Large Extended 31.5x12 Inch-Black | LED mouse pad with 14 lighting modes, covers keyboard & mouse, anti-slip rubber base, waterproof surface, USB powered
  • 【Large size】:Measuring 800 x 300 mm/ 31. 5×12 inches, which is wider and taller than others. Large mouse pad can perfectly fit your keyboard and mouse of any size, and there is also ample space for peripherals such as phones, tablets, etc.
  • 【LED backlight mouse pad】:Blade Hawks RGB mouse pad provides 7 static modes and 7 dynamic modes will give you the options you are looking for. Power-off memory function remembers the last lighting mode you selected. The super glow fiber Chroma will give you a colorful gaming setup that you want.
  • 【Anti-slip rubber base】:Made from Natural rubber, this gaming mousepad will firmly grip your desktop, allowing you to enjoy the ultimate precision in the games you are most passionate about. It also comes with a texture that enhances this ability even further.
  • 【Smooth and waterproof surface】: Micro-textured cloth surface, for extremely precise mouse control and a smooth movement. When liquid splashes on the gaming mouse pad, it forms water droplets and slides down. Will not delay your work or gameplay.
  • 【Plug and play】: This mouse and keyboard pad is powered by USB, plug and play, no driver required. One button control light modes. Press one time to change the lighting mode, press twice to change the brightness, press and hold about 3 seconds turn ON/OFF.

Run the WP-CLI installation sequence

WP-CLI’s documented flow is to download WordPress, generate the configuration file, create the database, and run the core installation. In this example the database is created explicitly first because Ubuntu’s MariaDB root account commonly authenticates through the local socket and the application user is intentionally restricted to its own database. The resulting commands are:

cd /var/www/html
wp core download --allow-root
wp config create 
  --dbname=wordpress 
  --dbuser=wordpress 
  --dbpass='local-only-password' 
  --dbhost=localhost 
  --dbcharset=utf8mb4 
  --allow-root
wp core install 
  --url='http://wp.local' 
  --title='WordPress Local' 
  --admin_user='localadmin' 
  --admin_password='change-this-local-password' 
  --admin_email='you@example.test' 
  --skip-email 
  --allow-root
chown -R www-data:www-data /var/www/html

If you prefer WP-CLI to create the database, give the database account permission to create databases, run wp db create immediately after wp config create, and then reduce the account’s privileges. Do not assume that an Ubuntu MariaDB root password exists; socket authentication is normal on a fresh development guest.

--skip-email prevents a local installation from trying to deliver the administrator notification. Use an address in the reserved .test namespace or another address that cannot be mistaken for a production mailbox. Never copy a production administrator password, salts, API key, or database dump into this VM.

Install WP-CLI correctly when it is not in the provisioner

The provisioner uses the official Phar installation pattern. If you need to install it manually, download the Phar, verify that PHP can report its information, make it executable, and move it onto the PATH:

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
curl -fsSLO https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
wp --info

Run wp --info both on the host (when using the remote scheme) and in the guest. The two installations do not need to be the same minor version, but keeping them current and compatible avoids confusing transport or command errors.

Reach the site from your host

Add the private address and hostname to the host’s hosts file:

  • macOS and Linux: edit /etc/hosts with administrator privileges.
  • Windows: edit C:WindowsSystem32driversetchosts as Administrator.
192.168.56.10 wp.local

Open http://wp.local in a browser. If you choose a different private address or hostname, use the same value in the Apache ServerName, the hosts file, and the --url passed to wp core install.

Add HTTPS when a feature needs it

For ordinary template and plugin work, HTTP may be sufficient. Add a local certificate and an HTTPS Apache virtual host when you test secure cookies, redirects, service workers, third-party callbacks, or mixed-content behavior. Use a local certificate authority trusted by your operating system, redirect only after the certificate works, and update the WordPress home and siteurl values together. A self-signed certificate that the browser rejects is not a useful test of application behavior.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Run WP-CLI without opening an interactive shell

WP-CLI supports a vagrant SSH scheme. From the host, after installing WP-CLI locally, you can target the guest’s WordPress path directly:

Rank #4
Sale
Vaydeer Wrist Rest for Keyboard and Mouse, Computer Ergonomic Wrist Support Pad, Soft Memory Foam Arm Cushion for Desk, Palm Hand Office Laptop Typing
  • 【Softer and More Comfortable】Vaydeer wrist rest has unique diamond pattern, which is the combination of softness and aesthetics. The materials of wrist rest are improved into higher quality memory foam and covered with silky smooth lycra. The computer wrist rest makes you as comfortable and cushiony as like rest your wrists on clouds.
  • 【Ergonomic Wrist Saver】The wrist rests for keyboard and mouse comes with a 17.32×3.15×0.83 inch keyboard wrist pad and a 5.94×3.15×0.83 inch mouse wrist support. Based on ergonomic design, the unique concave shape is the perfect fit for your wrist joints. The wrist rest pad fits most computer keyboards and laptops, improve hand and wrist posture, release your wrist and arm stress.
  • 【Non-Slip Rubber Bottom】Featuring an anti-skid silicone base on the bottom, this wrist keyboard support stays firmly in place on your desk, preventing the padding from sliding around, ensuring stable and consistent wrist support during extended computer sessions.
  • 【Better Experience & Pain Relief】Our keyboard arm rest is beneficial to alleviate the soreness caused by direct contact and friction between your arm and a hard desk surface, reducing the risk of wrist fatigue or carpal tunnel. The soft texture of memory foam can evenly distribute the pressure around your wrists and provide good support with just enough give.
  • 【Helpful in Multiple Scenarios】Whether you're working, studying, writing, typing, gaming, this keyboard and mouse rest combo is an essential accessory to add comfort and support to your hands and wrists. It’s also a great gift for men, women, family, friend, coworker, gamer, teacher, etc.
wp --ssh=vagrant:/var/www/html core version
wp --ssh=vagrant:/var/www/html plugin list
wp --ssh=vagrant:/var/www/html theme list
wp --ssh=vagrant:/var/www/html cache flush

The Vagrant transport uses the project’s SSH configuration and executes the command inside the VM. The exact path must be the path inside the guest, not the host’s filesystem path. If your WP-CLI release expects a URI-style form, use the equivalent vagrant:// notation shown by wp help cli param; the important parts are the vagrant scheme and /var/www/html guest path.

When the remote scheme is unavailable or reports an SSH configuration error, use Vagrant’s native command execution as a fallback:

vagrant ssh -c 'cd /var/www/html && wp core version --allow-root'
vagrant ssh -c 'cd /var/www/html && wp plugin update --all --allow-root'

Make provisioning safe to repeat

A development VM is useful only when another developer can recreate it. Review the script for these properties:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Package operations are repeatable: apt-get install -y can run after the packages are already present.
  • Downloads are guarded: the WordPress download runs only when wp-load.php is absent.
  • Configuration is deterministic: the Apache virtual host is written to one known file and enabled once.
  • Data is preserved: provisioning never drops the database, removes uploads, or replaces wp-config.php.
  • Permissions are repaired: the final ownership step lets Apache write where WordPress expects uploads and updates.

If you change PHP extensions, Apache modules, or the virtual host, run vagrant provision and then inspect the service status. If you change the base box or operating-system packages, test on a fresh VM rather than assuming the old guest state masks a missing dependency.

Everyday workflow and isolation rules

Start, stop, suspend, and rebuild

vagrant up
vagrant halt
vagrant suspend
vagrant resume
vagrant reload --provision
vagrant destroy

vagrant halt stops the guest without deleting it. vagrant suspend saves its running state and resumes quickly, while vagrant destroy removes the VM and its database. The shared site/ directory remains on the host, but database contents do not; export a dump first when you need to preserve data:

vagrant ssh -c 'sudo mysqldump wordpress > /vagrant/wordpress.sql'

To restore into a rebuilt guest, create the database and user again, then import the dump from /vagrant. Keep dumps out of public repositories because they may contain users, hashes, customer data, or secrets.

Keep local and production environments separate

  • Use a local hostname, database, administrator account, salts, and API credentials.
  • Never point the VM at a production database or production uploads directory.
  • Use sanitized content when a production data copy is genuinely required, and rotate every credential contained in that copy.
  • Disable outbound mail or route it to a local catcher so test messages cannot reach customers.
  • Do not treat the Vagrant guest as a production server; the Ubuntu box is explicitly intended for development.

A local WordPress instance lets you update, develop, and modify a site without interrupting the live version. Test plugin and core updates locally, review database migrations, and only then plan a production deployment.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshooting by symptom

vagrant up cannot start the provider

Run vagrant status and confirm that VirtualBox is installed and visible to Vagrant. If multiple providers are installed, repeat the command with --provider=virtualbox. Check that hardware virtualization is enabled and that host security or Hyper-V settings are compatible with your VirtualBox release. On Apple Silicon or another non-x86 host, verify that the selected box publishes an architecture your provider can run.

The box cannot be downloaded or booted

Check the box name, network access, and the provider version. A box may be unpublished, renamed, or unavailable for your architecture even though the Vagrantfile is syntactically correct. Select a maintained box that matches the provider, record the tested version, and run vagrant box list to see what is installed locally.

Best Value
Sale
Under Desk Cable Management Tray No Drill, Metal Mesh Cable Management Under Desk with Clamp Mount, 2 Hole Cable Tray with Wire Management and Cord Organizer for Home Office Standing Desk
  • 【No Drill Mounted】Cable management tray can be assembled in as little as 3 minutes or less-simply. Side clips easily clampe the edge of desk, pass through the holes on the sides, and secure excess cables with baskets. Desk cable management supports inward or outward installation to meet your needs in different scenarios, and provides you with great convenience when collecting and organizing wires.
  • 【Rubber Pad Protects Desk】Wire organizer under desk built-in soft rubber pads on the clamp protect your desk from scratches, so you will not damage your furniture or office.
  • 【Sturdy and Beautiful】Cord management under desk is made of high-quality carbon steel and holds about 15 lbs. The wire basket has 2 holes on each side of the tray to enable your cables to pass freely. Cable baskets are suitable for desk thickness use from 0.4" to 2.4".
  • 【Space Saving & Keep Organized】Desk cable management tray holds all your power cords, outlet strips, USB hubs and computer transformers hidden from your feet, and the data cables will not enter the vacuum cleaner to keep your desk clean and tidy. Desk wire organizer is also suitable for use in the kitchen and outdoors.
  • 【Reduce Safety Risks】Cable tray under desk keeps all plugs away from your kids, no more worry about tripping. Using 2 holes wire tray saves extra space, helps you easily cabling and wire protection. The mesh design is not easy to accumulate dust, but avoids safety accidents caused by messy wires.

The browser shows a host-not-found error

Confirm that the VM is running, that the private address in the hosts file matches the Vagrantfile, and that the Apache ServerName matches the hostname in the browser. Test the address directly with curl -I http://192.168.56.10 from the host. If the address works but the hostname does not, the problem is name resolution rather than WordPress.

Apache returns 403 or ignores permalinks

Check apache2ctl -S, verify that the <Directory> block grants access, and confirm that mod_rewrite is enabled. The provisioner uses AllowOverride All so WordPress can use its .htaccess rules. Inspect /var/log/apache2/wordpress-error.log and repair ownership if files were copied as a different user.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

WordPress reports “Error establishing a database connection”

Verify that MariaDB is running with systemctl status mariadb, then compare the database name, username, password, and host in wp-config.php with the account created in MariaDB. Test the credentials directly:

mariadb -u wordpress -p -h localhost wordpress

If the login works but WordPress does not, check that the configuration file is in /var/www/html and that PHP has the mysqli or mysqlnd support supplied by php-mysql.

Provisioning works once and fails on the second run

Look for commands that append duplicate virtual-host lines, overwrite wp-config.php, recreate an existing database, or assume a temporary directory is empty. Replace unconditional operations with file checks, CREATE ... IF NOT EXISTS, and explicit service reloads. The goal is that a second vagrant provision changes only what the script intentionally manages.

File changes are very slow

VirtualBox shared folders can be slower than a native filesystem, especially for projects with many small PHP files. Keep the code in the shared folder for convenience, but place caches and large dependency trees outside it when practical. If your team needs high-performance file watching, compare a container workflow or a provider-specific synced-folder implementation rather than assuming every host has the same performance.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Vagrant, VVV, or DDEV?

Vagrant is a general-purpose VM framework. WordPress.org also identifies VVV (Varying Vagrant Vagrants) as a free, open-source WordPress-focused environment and DDEV as a free, open-source alternative with a database editor, Xdebug, and performance-profiling tools. Choose based on the work your team actually does:

Concern Plain Vagrant VVV DDEV
Virtualization model Full virtual machine managed through a provider such as VirtualBox. Vagrant-based VM with WordPress-specific defaults and tooling. Container-based services orchestrated for local development.
Automation You write and maintain the Vagrantfile and provisioner. Many WordPress conventions are preconfigured; customization follows the project’s model. Project configuration automates web, database, and development services.
Filesystem and database tooling Whatever you install in the guest; maximum control, more setup work. WordPress-oriented utilities and multisite workflows. Convenient database management and service commands, with tooling such as a database editor.
Debugging and profiling Add and configure Xdebug or profilers yourself. Available through the VVV stack and its conventions. Includes straightforward Xdebug and performance-profiling workflows.
Multisite and multiple projects Possible, but you design the routing and isolation. Strong fit when you need a WordPress-focused multisite or many-site environment. Easy to create separate projects, each with its own containers and configuration.
Host compatibility Depends on the provider, guest architecture, and synced-folder support. Shares Vagrant and provider considerations. Depends on a container runtime and its host integration.
Best fit Teams that need a transparent VM and want to control every package and service. WordPress specialists who prefer a ready-made Vagrant stack. Teams that value fast, reproducible container projects and built-in debugging tools.

Use plain Vagrant when understanding and controlling the server image is the priority. Choose VVV when its WordPress defaults eliminate more work than they add. Choose DDEV when containers, per-project isolation, and integrated debugging outweigh the need for a traditional VM.

Before you call the environment complete

  • Vagrant starts with the intended provider and the box version is documented.
  • The guest reports PHP 8.3 or newer, a supported MariaDB/MySQL version, and a running Apache or Nginx service.
  • vagrant provision can run twice without deleting the database or duplicating Apache configuration.
  • The hosts file, Apache ServerName, and WordPress URL agree.
  • WP-CLI can run locally in the guest and, if desired, through the vagrant SSH scheme.
  • HTTPS is configured before testing features that depend on secure transport.
  • Local credentials and database dumps are isolated from production and excluded from version control.
  • Another developer can clone the project, run vagrant up --provider=virtualbox, and understand any host-specific exceptions.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.