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
Antihost offers managed WordPress hosting with free migration, one-click staging and a 14-day free trial.
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.
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
Vagrantfilethat 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.phpinside 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
- 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.
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:
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
- 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.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteThe 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:
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.
Recommended Free Tools
Rank #3
- 【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.
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/hostswith administrator privileges. - Windows: edit
C:WindowsSystem32driversetchostsas 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.
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
- 【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:
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →- Package operations are repeatable:
apt-get install -ycan run after the packages are already present. - Downloads are guarded: the WordPress download runs only when
wp-load.phpis 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.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Repair Windows errors before they cause bigger problems3Scan for outdated or missing drivers - takes under a minuteTroubleshooting 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
- 【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.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →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.
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.
Quick Recap
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 provisioncan 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
vagrantSSH 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.

