Need help with wordpress-nginx-docker-compose?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

urre
434 Stars 173 Forks 163 Commits 2 Opened issues

Description

Run WordPress with nginx using Docker Compose.

Services available

!
?

Need anything else?

Contributors list

# 57,276
React
alfred
PHP
bedrock
122 commits
# 241,853
PHP
bedrock
wp-cli
WordPre...
5 commits
# 321,354
PHP
phpmyad...
WordPre...
nginx
2 commits
# 321,706
PHP
phpmyad...
bedrock
WordPre...
2 commits
# 156,216
JavaScr...
HTML
update-...
phpmyad...
2 commits
# 379,931
JavaScr...
PHP
phpmyad...
bedrock
1 commit
# 94,727
PHP
ionic
cordova...
pintere...
1 commit
# 386,471
PHP
phpmyad...
bedrock
WordPre...
1 commit
# 268,712
PHP
WordPre...
phpmyad...
bedrock
1 commit
# 374,702
phpmyad...
WordPre...
nginx
C
1 commit

Docker Compose and WordPress

Build Status

Donate

Use WordPress locally with Docker using Docker compose

Contents

  • A
    Dockerfile
    for extending a base image and using a custom Docker image with an automated build on Docker Hub
  • PHP 7.4
  • Custom domain for example
    myapp.local
  • Custom nginx config in
    ./nginx
  • Custom PHP
    php.ini
    config in
    ./config
  • Volumes for
    nginx
    ,
    wordpress
    and
    mariadb
  • 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.
  • MailHog - An email testing tool for developers. Configure your outgoing SMTP server and view your outgoing email in a web UI.
  • PhpMyAdmin - free and open source administration tool for MySQL and MariaDB
    • PhpMyAdmin config in
      ./config
  • CLI script to create a SSL certificate

Instructions

Requirements

Install mkcert:

brew install mkcert
brew install nss # if you use Firefox
Setup

Setup Environment variables

Easily set your own local domain, db settings and more. Start by creating .env files, like the examples below.

For Docker and the CLI script

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_

For WordPress

Edit ./src/.env-example to your needs. During the composer create-project command described below, an ./src/.env will be created.

1. Use HTTPS with a custom domain

Create a SSL cert:

cd cli
./create-cert.sh

> Note: mkcert needs to be installed.

This script will create a locally-trusted development certificates. It requires no configuration.

Windows

Follow the instructions

Linux

Follow the instructions

2. Use a simple config
  1. Edit nginx/default.conf.conf to use this simpler config.
server {
    listen 80;

    root /var/www/html/web;
    index index.php;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    client_max_body_size 100M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass wordpress:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}
  1. Edit the nginx service in docker-compose.yml to use port 80. 443 is not needed now.
  nginx:
    image: nginx:latest
    container_name: ${APP_NAME}-nginx
    ports:
      - '80:80'
  1. Edit ./src/.env-example and set
WP_HOME='http://localhost'
  1. Run using docker-compose up
  2. Open http://localhost/
Install
docker-compose run composer create-project
Run
docker-compose up

Docker Compose will now 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
Starting myapp-mailhog    ... done

🚀 Open https://myapp.local in your browser

PhpMyAdmin

PhpMyAdmin comes installed as a service in docker-compose.

🚀 Open http://127.0.0.1:8082/ in your browser

MailHog

MailHog comes installed as a service in docker-compose.

🚀 Open http://0.0.0.0:8025/ in your browser

Tools

Update WordPress Core and Composer packages (plugins/themes)

docker-compose run composer update

Use WP-CLI

docker exec -it myapp-wordpress bash

Login to the container

wp search-replace https://olddomain.com https://newdomain.com --allow-root

Run a wp-cli command

> You can use this command first after you've installed WordPress using Composer as the example above.

Update plugins and themes from wp-admin?

You can, but I recommend to use Composer for this only. But to enable this edit ./src/config/environments/development.php (for example to use it in Dev)

Config::define('DISALLOW_FILE_EDIT', false);
Config::define('DISALLOW_FILE_MODS', false);

Useful Docker Commands

When making changes to the Dockerfile, use:

docker-compose up -d --force-recreate --build

Login to the docker container

docker exec -it myapp-wordpress bash

Stop

docker-compose stop

Down (stop and remove)

docker-compose down

Cleanup

docker-compose rm -v

Recreate

docker-compose up -d --force-recreate

Rebuild docker container when Dockerfile has changed

docker-compose up -d --force-recreate --build
Changelog

2021-01-02

  • Use NGINX_ENVSUBST_TEMPLATE_SUFFIX. Use a template and better substution of ENV variables in nginx config.

    2020-10-04

  • Added mariadb-client (Solves #54)

    2020-09-15

  • Updated Bedrock. Update WordPress to 5.5.1 and other composer updates.

    2020-07-12

  • Added Mailhog. Thanks @mortensassi

    2020-05-03

  • Added nginx gzip compression

    2020-04-19

  • Added Windows support for creating SSH cert, trusting it and setting up the host file entry. Thanks to @styssi

    2020-04-12

  • 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

    2020-03-26

  • Added phpMyAdmin config.Thanks to @titoffanton

    2020-02-06

  • Readme improvements. Explain /etc/hosts better

    2020-01-30

  • Use Entrypoint command 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 .env value DOMAIN
  • Added APP_NAME in .env-example Thanks to @Dave3o3

    2020-01-11

  • Added .env support for specifying your own app name, domain etc in Docker and cli scripts.
  • Added phpMyAdmin. Visit http://127.0.0.1:8080/

2019-08-02

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.