This post is one I wrote a while back but never published, as I’ve found some free time now, I’m going through and putting together posts that I jotted down but never got to publishing.
tldr; Wordpress in a container, full docker compose file is @ the bottom
Wordpress is one of (if not the) best open source Content Management Systems (CMS) out there. As any software that has been fortunate to grow old/expected with wide use, Wordpress certainly has it’s warts, but it is by far and away the most popular choice for a platform that is easy for users to setup, get started with, and manage. To top it all off, it’s open source and has one of thet few rare working large-scale monetization models available to Open Source Software (OSS) today.
Recently while building a project for a client, we needed to almost completely overhaul their existing wordpress site (some bad viruses had infected their host, and the old site wasn’t really needed. During the early stages of this project I wanted to get wordpress running locally on my own servers so others I was working with (and the client) could easily view the progress and suggest changes to the site as it was being developed. A longtime (if you can even count a few years as a “long time”) fan of Docker and the benefits of containerization, surely it would be easy to:
Get a decent quality docker image for wordpress
Set up NGINX with php-fpm
to serve the PHP that makes Wordpress tick
Reverse proxy (with NGINX) to the docker container running wordpress (w/ SSL stopping @ NGINX)
Luckily, inline with my expectations all this was actually super easy to do. While I didn’t quite completely configure Wordpress (or docker for that matter) for longevity, it was relatively easy to get a simple page up. Also, it was super easy to use docker for local dev of the wordpress environment.
Without further ado, here’s the docker compose file:
version: '2'
services:
wp:
image: wordpress
volumes:
- ./wp-config.ini:/usr/local/etc/php/conf.d/uploads.ini
links:
- wp-db:mysql
environment:
MYSQL_PORT_3306_TCP: 'mysql'
WORDPRESS_DB_PASSWORD: 'example'
ports:
- 8080:80
depends_on:
- wp-db
wp-db:
image: mariadb
expose:
- "3306"
environment:
MYSQL_ROOT_PASSWORD: example
I used the official wordpress image, as well as the official mariadb image. Note that this configuration does NOT account for persistence - you’d need to mount a volume into the wp-db
component for that, and while I’m about to go through the experience (I have some some more WP projects coming up), I haven’t quite yet, so you’ll need to figure that part out yourself. Once I get to working on my next wordpress project I’ll circle back and update this post.. hopefully.