143 lines
3.2 KiB
Markdown
143 lines
3.2 KiB
Markdown
# 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:
|
||
```bash
|
||
COMPOSE_PROJECT_NAME=test
|
||
WORDPRESS_VERSION=6-fpm
|
||
```
|
||
|
||
---
|
||
|
||
## 🛠 Environment Variables
|
||
|
||
### **Docker Images**
|
||
```bash
|
||
# Web & Database Images
|
||
IMAGE_WEB=test_web_staging
|
||
IMAGE_DATABASE=mariadb:11.5
|
||
```
|
||
|
||
### **Let's Encrypt Configuration**
|
||
```bash
|
||
VIRTUAL_HOST=test.test.org
|
||
LETSENCRYPT_HOST=test.test.org
|
||
LETSENCRYPT_EMAIL=test@test.com
|
||
LETSENCRYPT_TEST=true
|
||
```
|
||
|
||
### **Database Configuration**
|
||
```bash
|
||
WORDPRESS_DB_PASSWORD=wordpress # Used for MYSQL_PASSWORD AND MYSQL_ROOT_PASSWORD
|
||
MYSQL_DATABASE=wordpress
|
||
MYSQL_USER=wordpress
|
||
```
|
||
|
||
### **Volume Configuration**
|
||
```bash
|
||
# 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
|
||
|
||
Two important Nginx configuration files are available in the project directory. After editing, perform a restart:
|
||
```bash
|
||
./default.conf # generate-compose-nginx.sh respects user added changes
|
||
./nginx.conf # Manually customizable configuration
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Usage
|
||
|
||
### **Initialize a Project with a Unique `COMPOSE_PROJECT_NAME`; expects one word**
|
||
Run the following script to generate the required files:
|
||
```bash
|
||
./generate-compose-nginx.sh
|
||
```
|
||
|
||
---
|
||
|
||
## 🔄 Upgrade Process
|
||
|
||
### **1️⃣ Stop Containers & Clean Up**
|
||
```bash
|
||
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:
|
||
```bash
|
||
WORDPRESS_VERSION=7-fpm
|
||
```
|
||
|
||
### **3️⃣ Build & Deploy**
|
||
```bash
|
||
# 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)**
|
||
```bash
|
||
# 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**
|
||
```bash
|
||
# Inside the database container
|
||
apt-get update && \
|
||
apt-get install -y mariadb-client && \
|
||
apt-get clean && \
|
||
rm -rf /var/lib/apt/lists/*
|
||
|
||
# From the host
|
||
./update-db
|
||
```
|
||
|
||
---
|
||
|
||
## 📌 Requirements
|
||
- Docker
|
||
|
||
---
|
||
|
||
## 🤝 Contributing
|
||
For contributions, reach out to @bike .
|
||
|
||
---
|
||
|
||
## 📜 License
|
||
GNU GENERAL PUBLIC LICENSE
|