DEV Community

Cover image for ✨Automate WordPress + MySQL Deployment Using Docker Compose & OpenTofu on Server
Latchu@DevOps
Latchu@DevOps

Posted on

✨Automate WordPress + MySQL Deployment Using Docker Compose & OpenTofu on Server

💡 Introduction

OpenTofu is an open-source fork of Terraform.
It allows full automation of server provisioning even in your local machine—not just cloud infrastructure.

In this guide, we automate:

  • Docker installation
  • Docker Compose installation
  • Creating volumes + networks
  • Deploying a full WordPress + MySQL stack
  • Starting the containers

All using OpenTofu and null_resource.

This is perfect for:

  • DevOps practice
  • Local development setup
  • CI/CD environments
  • Rapid application testing

🔧 Prerequisites

Ubuntu machine (local, VM, or cloud)

Install OpenTofu:

sudo apt update -y
sudo apt upgrade -y
sudo snap install --classic opentofu
Enter fullscreen mode Exit fullscreen mode

📁 Project Setup

mkdir tofu-docker-wordpress
cd tofu-docker-wordpress
nano main.tf
Enter fullscreen mode Exit fullscreen mode

🧱 OpenTofu Code (main.tf)

terraform {
  required_providers {
    null = {
      source = "hashicorp/null"
    }
  }
}

###############################
# 1) INSTALL DOCKER + COMPOSE
###############################
resource "null_resource" "install_docker" {
  provisioner "local-exec" {
    command = <<-EOT
      echo "--- Updating system ---"

      # Add Docker's official GPG key:
      sudo apt update -y
      sudo apt install ca-certificates curl -y
      sudo install -m 0755 -d /etc/apt/keyrings
      sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o                /etc/apt/keyrings/docker.asc
      sudo chmod a+r /etc/apt/keyrings/docker.asc

      # Add the repository to Apt sources:
      sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
      Types: deb
      URIs: https://download.docker.com/linux/ubuntu
      Suites: $(. /etc/os-release && echo         "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
      Components: stable
      Signed-By: /etc/apt/keyrings/docker.asc
      EOF

      sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
      sudo systemctl start docker
      sudo usermod -aG docker ubuntu

      sudo apt update

      echo "--- Installing Docker Compose ---"
      sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
        -o /usr/local/bin/docker-compose

      sudo chmod +x /usr/local/bin/docker-compose
      sudo usermod -aG docker $USER
    EOT
  }
}

###############################
# 2) CREATE DOCKER COMPOSE FILE
###############################
resource "local_file" "docker_compose" {
  depends_on = [null_resource.install_docker]

  filename = "/home/ubuntu/docker-compose.yml"
  content  = <<-EOF
version: '3.9'

services:
  db:
    image: mysql:8.0
    container_name: wp-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: wppass
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - wp-network

  wordpress:
    image: wordpress:latest
    container_name: wordpress-app
    restart: always
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: wppass
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp_data:/var/www/html
    networks:
      - wp-network

volumes:
  mysql_data:
  wp_data:

networks:
  wp-network:
EOF
}

###############################
# 3) RUN DOCKER COMPOSE
###############################
resource "null_resource" "run_stack" {
  depends_on = [local_file.docker_compose]

  provisioner "local-exec" {
    command = <<-EOT
      cd /home/ubuntu
      sudo docker-compose down || true
      sudo docker-compose up -d
    EOT
  }
}
Enter fullscreen mode Exit fullscreen mode

🚀 Run the Automation

tofu init
tofu fmt
tofu validate
tofu plan
tofu apply -auto-approve
Enter fullscreen mode Exit fullscreen mode

1

OpenTofu will:

✔ Install Docker
✔ Install Docker Compose
✔ Generate docker-compose.yml
✔ Start WordPress + MySQL

2


🌐 Access the Application

Visit:

👉 http://your-server-ip:8080

3


🌟 Thanks for reading! If this post added value, a like ❤️, follow, or share would encourage me to keep creating more content.


— Latchu | Senior DevOps & Cloud Engineer

☁️ AWS | GCP | ☸️ Kubernetes | 🔐 Security | ⚡ Automation
📌 Sharing hands-on guides, best practices & real-world cloud solutions

Top comments (0)