1 Install Docker & Docker Compose
bash
apt install docker.io docker-compose -y
systemctl enable docker
systemctl start docker
# Verify
docker --version
docker-compose --version
2 Add Subdomain in Cloudflare
In your Cloudflare dashboard, add an A record for the subdomain:
dns
Type Name Content Proxy A staging 192.0.2.100 Proxied ✅
3 Create Docker Compose File
bash
mkdir -p /var/www/docker/dev-wordpress cd /var/www/docker/dev-wordpress nano docker-compose.yml
Paste this configuration:
yaml
version: '3.8'
services:
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: SecurePass@2024!
MYSQL_ROOT_PASSWORD: RootSecure@2024!
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: SecurePass@2024!
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
4 Start the Containers
bash
docker-compose up -d
# Check containers are running
docker ps
The -d flag runs containers in detached mode (background). First run will pull the images
— takes a minute.
5 Configure Nginx Reverse Proxy
bash
nano /etc/nginx/sites-available/dev-wordpress
nginx
server {
listen 80;
listen [::]:80;
server_name staging.example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
6 Enable & Test
bash
ln -s /etc/nginx/sites-available/dev-wordpress /etc/nginx/sites-enabled/ nginx -t systemctl reload nginx
Visit https://staging.example.com — you should see a fresh WordPress installation screen.
Your Dockerised staging site is live and completely isolated from your main site.