Our Docker Compose stack on OCI Frankfurt
The OpsForge company site runs on a single OCI VM in eu-frankfurt-1 — not k3s, not managed WordPress. We chose Docker Compose for simplicity, debuggability, and a path solo founders can replicate.
Architecture
→
Nginx
→
WordPress 6.7
→
MariaDB 11
Stack choices
- wordpress:6.7-php8.2-apache — official image, predictable upgrades
- mariadb:11 — persistent data on a named volume
- nginx:1.27-alpine — reverse proxy, Cloudflare-friendly headers
- wp-cli — one-shot container for bootstrap and content apply
Deploy path
From the monorepo: ./scripts/setup-opsforge-frankfurt-vm.sh for first install, or --apply-only for content-only updates. DNS and TLS go through Cloudflare (Flexible SSL today; origin cert on the roadmap).
Lessons from our first deploy
We initially tried k3s + Bitnami Helm on the same VM — ImagePullBackOff, wp-config parse errors, and long blind waits. Pivoting to Compose got us to HTTP 200 in hours. The runbook is in our repo for anyone repeating the same mistakes.