ComposePress

ComposePress is a Docker-based toolkit designed to streamline WordPress upgrades using official images. It provides pre-configured Docker Compose files, Dockerfiles, and standardized procedures to make WordPress maintenance more predictable and reliable.


🚀 Project Configuration

Project Name & WordPress Version

Define a unique project name and WordPress version in the .env file:

COMPOSE_PROJECT_NAME=test
WORDPRESS_VERSION=6-fpm

🛠 Environment Variables

Docker Images

# Web & Database Images
IMAGE_WEB=test_web_staging
IMAGE_DATABASE=mariadb:11.5

Let's Encrypt Configuration

VIRTUAL_HOST=test.test.org
LETSENCRYPT_HOST=test.test.org
LETSENCRYPT_EMAIL=test@test.com
LETSENCRYPT_TEST=true

Database Configuration

WORDPRESS_DB_PASSWORD=wordpress # Used for MYSQL_PASSWORD AND MYSQL_ROOT_PASSWORD
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
TABLE_PREFIX=test # optional

Volume Configuration

# External Volumes (Persist Data)
DB_VOLUME=test_db_staging
CONTENT_VOLUME=test_content_staging

# Recreated Volumes (Rebuild On Setup)
HTML_VOLUME=test_html_staging

📂 Configuration Files

Three important configuration files are available in the project directory:

Nginx (after editing, perform a restart):

./default.conf  # generate-compose-nginx.sh respects user added changes
./nginx.conf    # Manually customizable configuration

Wordress:

./wp-config.php # generated once by generate-compose-nginx.sh and respects user added changes


🚀 Usage

Initialize a Project with a Unique COMPOSE_PROJECT_NAME; expects one word

Run the following script to generate the required files:

./generate-compose-nginx.sh

🔄 Upgrade Process

If you want a fully automated upgrade, use the wp-rocket-launch.sh script:

./wp-rocket-launch.sh

Automatically cleans up existing containers and volumes
Builds the custom WordPress image
Deploys the new version with minimal manual intervention
Copies new installation files to production and correct permissions Wordpress salt keys are shuffled

Alternatively, follow the manual upgrade process below.

🚀 Manual Upgrade (Expert Mode)

1 Stop Containers & Clean Up

docker compose down -v

# Optional: Remove external database & content volume (DANGER: Only do this if you have backups)
grep -E 'DB_VOLUME|CONTENT_VOLUME' .env | cut -d '=' -f2 | xargs -I {} sh -c 'docker volume rm {} 2>/dev/null; docker volume create {}'

# Optional: Remove WordPress Image
docker rmi $(grep IMAGE_WEB .env | cut -d '=' -f2)

2 Update WordPress Version

Modify the version in .env:

WORDPRESS_VERSION=7-fpm

3 Build & Deploy

# Build custom WordPress image
docker compose -f docker-compose.first.yml build 

# Install or upgrade WordPress volume from custom image
docker compose -f docker-compose.first.yml up -d

# Stop WordPress container (but keep HTML volume)
docker compose -f docker-compose.first.yml down

# Start production environment
docker compose up -d

4 Migrate Content (Themes, Plugins)

# Copy new content to production
cp -a wp-content-new/* wp-content/

# Verify permissions on the wp-content directory
chmod -R [appropriate-permissions] wp-content/

5 Optional: Database Updates for web address change

./update-db

or

docker compose exec wpcli_${COMPOSE_PROJECT_NAME} wp option update siteurl "https://mynewwebsite.com"
docker compose exec wpcli_${COMPOSE_PROJECT_NAME} wp option update home "https://mynewwebsite.com"


Tricks of the Trade

Cookie issues prevent login? Add to beginning of wp-config.php.

ob_start();

Change to a different template. Perhaps the current one has broken the site?

UPDATE wp_options SET option_value = 'twentytwentyfive' WHERE option_name = 'template';
UPDATE wp_options SET option_value = 'twentytwentyfive' WHERE option_name = 'stylesheet';

or

docker compose exec wpcli_${COMPOSE_PROJECT_NAME} wp theme activate twentytwentyfive

Disable all plugins

UPDATE wp_options SET option_value = '' WHERE option_name = 'active_plugins';

or

docker compose exec wpcli_${COMPOSE_PROJECT_NAME} wp plugin deactivate --all

📌 Requirements

  • Docker

🤝 Contributing

For contributions, reach out to @bike .


📜 License

GNU GENERAL PUBLIC LICENSE

Description
A Docker-based toolkit that streamlines WordPress upgrades using official images. Provides pre-configured docker-compose files, Dockerfiles, and standardized procedures to make WordPress maintenance more predictable and reliable.
Readme GPL-3.0 44 KiB