A Docker Wordpress development environment by the team at Visible and some awesome contributors. Our goal is to make Wordpress development slightly less frustrating.
Well, to run a Docker environment, you will need Docker. The Dockerfile is only for an Apache+PHP+Wordpress container, you will need a MySQL container to run a website. We use Docker Compose 1.6+ for the orchestration.
This project has 2 parts: the Docker environment and a set of tools for theme development. To quickly get started, you can simply run the following:
# copy the files
git clone https://github.com/visiblevc/wordpress-starter.git
rm -rf .git Dockerfile run.sh README.md CHANGELOG.md ISSUE_TEMPLATE.md
# start the website at localhost:8080
docker-compose up
This repository does 2 things:
- Include the files to create a wordpress Docker image (visiblevc/wordpress)
- Include build tools to develop wordpress themes (gulp)
If you don't plan to build the Docker image yourself, you shouldn't care for 1. We publish the image on Docker Hub and you can grab it directly from there. That's why you can safely remove the Dockerfile and run.sh.
The reason we remove .git, README.md and CHANGELOG.md is because we assume you will start your own repository, named after your project. There is virtually no benefit keeping ties with our remote git repository.
We wrote a series of articles explaining in depth the philosophy behind this project:
- Intro: A slightly less shitty WordPress developer workflow
- Part 1: Setup a local development environment for WordPress with Docker
- Part 2: Setup an asset pipeline for WordPress theme development
- Part 3: Optimize your wordpress theme assets and deploy to S3
- Part 4: Auto deploy your site on your server (coming)
The only thing you need to get started is a docker-compose.yml file:
version: '2'
services:
wordpress:
image: visiblevc/wordpress:latest
links:
- db
ports:
- 8080:80
- 443:443
volumes:
- ./data:/data # Required if importing an existing database
- ./wp-content/uploads:/app/wp-content/uploads
- ./yourplugin:/app/wp-content/plugins/yourplugin # Plugin development
- ./yourtheme:/app/wp-content/themes/yourtheme # Theme development
environment:
DB_HOST: db
DB_NAME: wordpress
DB_PASS: root # must match below
PLUGINS: >-
academic-bloggers-toolkit,
co-authors-plus,
[WP-API-master]https://github.com/WP-API/WP-API/archive/master.zip,
SEARCH_REPLACE: yoursite.com,localhost:8080
WP_DEBUG: 'true'
db:
image: mysql:5.7 # or mariadb:10
ports:
- 3306:3306
volumes:
- data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
data: {}- hostname:
db(can be changed with theDB_HOSTenvironment variable) - username:
root - password:
root(can be changed with theMYSQL_ROOT_PASSWORDandDB_PASSenvironment variables) - database:
wordpress(can be changed with theDB_NAMEenvironment variable) - admin email:
admin@${DB_NAME}.com
DB_HOST(optional): Defaults todbDB_PASS(required): Must matchMYSQL_ROOT_PASSWORDof the mysql containerDB_NAME(optional): Defaults towordpressDB_PREFIX(optional): Defauts towp_ADMIN_EMAIL(optional): Defaults toadmin@${DB_NAME}.comWP_DEBUG(optional): Defaults tofalseWP_DEBUG_DISPLAY(optional): Defaults tofalseWP_DEBUG_LOG(optional): Defaults tofalseTHEMES(optional): Comma-separated list of themes you want to install in either of the following forms:theme-slug: Used when installing theme direct from WordPress.org.[theme-slug]http://themesite.com/theme.zip: Used when installing theme from URL.
PLUGINS(optional): Comma-separated list of plugins you want to install in either of the following forms:plugin-slug: Used when installing plugin direct from WordPress.org.[plugin-slug]http://pluginsite.com/plugin.zip: Used when installing plugin from URL.
MULTISITE(optional): Set to'true'to enable multisiteSEARCH_REPLACE(optional): Comma-separated string in the form ofcurrent-url,replacement-url.- When defined,
current-urlwill be replaced withreplacement-urlon build (useful for development environments utilizing a database copied from a live site). - IMPORTANT NOTE: If you are running Docker on Mac or PC (using Docker Machine), your replacement url MUST be the output of the following command:
echo $(docker-machine ip <your-machine-name>):8080
- When defined,
VERBOSE(optional): Set totrueto run build with verbose logging.
MYSQL_ROOT_PASSWORD(required): Must matchDB_PASSof the wordpress container
You can access wp-cli by running npm run wp .... Here are some examples:
npm run wp plugin install <some-plugin>
npm run wp db import /data/database.sql
If you have an exported .sql file from an existing website, drop the file into the data/ folder. The first time you run the container, it will detect the SQL dump and use it as a database. If it doesn't find one, it will create a fresh database.
If the SQL dump changes for some reason, you can reload the database by running:
docker exec wordpress /bin/bash "wp db import $(find /data/*.sql | head -n 1) --allow-root"If you want to create a dump of your development database, you can run:
npm run wp db export /data --allow-rootFinally, sometimes your development environment runs on a different domain than your live one. The live will be example.com and the development localhost:8080. This project does a search and replace for you. You can set the SEARCH_REPLACE: example.com,localhost:8080 environment variable in the docker-compose.yml.
You can find Development instructions in the Wiki.