Use WordPress locally with Docker using Docker compose
This setup comes shipped with:
- A
Dockerfilefor extending a base image and using a custom Docker image with an automated build on Docker Hub - Custom domain for example
myapp.local - Custom nginx config in
./nginx - Custom PHP
php.iniconfig in./config - Volumes for
nginx,wordpressandmariadb - Bedrock - modern development tools, easier configuration, and an improved secured folder structure for WordPress
- Composer
- WP-CLI - WP-CLI is the command-line interface for WordPress.
- PhpMyAdmin - free and open source administration tool for MySQL and MariaDB
- PhpMyAdmin config in
./config
- PhpMyAdmin config in
- CLI scripts
- Create a self signed SSL certificate for using https
- Trust certs in macOS System Keychain
- Setup the local domain in your in
/etc/hosts
- Docker
- Openssl for creatng the SSL cert. Install using Homebrew
brew install openssl
Easily set your own local domain, db settings and more. Start by creating .env files, like the examples below.
Copy .env-example in the project root to .env and edit your preferences.
Example:
IP=127.0.0.1
APP_NAME=myapp
DOMAIN="myapp.local"
DB_HOST=mysql
DB_NAME=myapp
DB_ROOT_PASSWORD=password
DB_TABLE_PREFIX=wp_
Copy .env-example in the src folder to .env and edit your preferences.
Use the following database settings:
DB_HOST=mysql
DB_NAME=myapp
DB_USER=root
DB_PASSWORD=passwordcd cli
./create-cert.shNote: OpenSSL needs to be installed.
Chrome and Safari will trust the certs using this script.
In Firefox: Select Advanced, Select the Encryption tab, Click View Certificates. Navigate to where you stored the certificate and click Open, Click Import.
cd cli
./trust-cert.shTo be able to use for example https://myapp.local in our browser, we need to modify the /etc/hosts file on our local machine to point the custom domain name. The /etc/hosts file contains a mapping of IP addresses to URLs.
cd cli
./setup-hosts-file.shThe helper script can both add or remove a entry from /etc/hosts. First enter the domain name, then press "a" for add, or "r" to remove. Follow the instructions on the screen.
docker-compose run composer installIf you have Composer installed on your computer you can also use
cd src && composer install
docker-compose up -dDocker Compose will start all the services for you:
Starting myapp-mysql ... done
Starting myapp-composer ... done
Starting myapp-phpmyadmin ... done
Starting myapp-wordpress ... done
Starting myapp-nginx ... done🚀 Open https://myapp.local in your browser
PhpMyAdmin comes installed as a service in docker-compose.
🚀 Open http://127.0.0.1:8080/ in your browser
When making changes to the Dockerfile, use:
docker-compose up -d --force-recreate --builddocker exec -it myapp-wordpress bashLogin to the container
wp search-replace https://olddomain.com https://newdomain.com --allow-rootRun a wp-cli command like this
You can use this command first after you've installed WordPress using Composer as the example above.
- Remove port number from
DB_HOST. Generated database connection error in macOS Catalina. Thanks to @nirvanadev - Add missing ENV variable from mariadb Thanks to @vonwa
- Added phpMyAdmin config.Thanks to @titoffanton
- Readme improvements. Explain
/etc/hostsbetter
- Use
Entrypointcommand in Docker Compose to replace the domain name in the nginx config. Removing the need to manually edit the domain name in the nginx conf. Now using the.envvalueDOMAIN - Added APP_NAME in
.env-exampleThanks to @Dave3o3
- Added
.envsupport for specifying your own app name, domain etc in Docker and cli scripts. - Added phpMyAdmin. Visit http://127.0.0.1:8080/
- Added Linux support. Thanks to @faysal-ishtiaq.
Login to the docker container
docker exec -it myapp-wordpress bashStop
docker-compose stopDown (stop and remove)
docker-compose downCleanup
docker-compose rm -vRecreate
docker-compose up -d --force-recreateRebuild docker container when Dockerfile has changed
docker-compose up -d --force-recreate --build