README.md 2.2 KB

CodePress Boilerplate

This is a boilerplate for using Docker to develop WordPress sites locally and then deploy to shared hosting. This isn't a fun procedure, so this project exists to mitigate some of the pain.

Local development

1. Install Docker

$ wget -nv -O - https://get.docker.com/ | sh

Once installed, you will need to add yourself to the docker group on your computer. Replace myname with your username below.

$ sudo usermod -aG docker myname

Finally, log out of and back into your computer (or reboot it).

If this doesn't work, you can follow the tutorial to install Docker. This project assumes you're using a Linux workstation.

2. Start the containers

$ make start

You can now see the WordPress install screen at localhost:8000

3. Authenticate

You need a file called .env in the root of your project containing the necessary credentials for pulling and pushing to the server. There is an example file called env-example for reference.

Contributing

Make sure you are authenticated with a .env file before trying any of this.

Strategy

  1. Get things working locally, then push any relevant code to master
  2. Deploy the code to the server
  3. Log into the deployed site and configure the back-end as needed
  4. Pull the database back locally

This does require doing things in the dashboard twice. It's tedious, but probably also the best way currently available for WordPress.

Sync with the server

You can use the provided Makefile to automate some tasks.

make deploy

Logs in via FTP and uploads only the relevant files to the server.

make pulldb

Connects to the remote MySQL database, dumps it, and pulls it into your local Docker container.

Docker tips

Stop the container:

$ docker stop mysite

Start the container:

$ docker start mysite

List all active containers:

$ docker ps

List all active AND stopped containers:

$ docker ps -a

Shell into a container:

$ docker exec -it mysite /bin/bash

Remove a container:

$ docker stop mysite
$ docker rm mysite

Get all information imaginable about a container:

$ docker inspect mysite