---
title: "Cara Menjalankan WordPress dengan Docker Compose"
description: "Contoh file compose.yaml untuk WordPress dan MariaDB, cara menyimpan password di .env, memasang HTTPS lewat reverse proxy, dan backup data."
url: "https://nivelva.com/insight/cara-menjalankan-wordpress-docker-compose"
category: "Server \u0026 Infrastruktur"
tags: ["wordpress","docker compose","docker","mariadb","vps"]
author: "Theresia Candiawan"
published: "2026-11-07T06:31:00+07:00"
updated: "2026-11-07T06:31:00+07:00"
language: "id"
publisher: "Nivelva (https://nivelva.com)"
---

# Cara Menjalankan WordPress dengan Docker Compose

> **Jawaban singkat:** Siapkan satu file compose.yaml berisi layanan WordPress dan MariaDB dengan volume terpisah, simpan password di file .env, jalankan docker compose up -d, lalu pasang reverse proxy untuk HTTPS. Data aman selama volume tidak dihapus.

Ingin menjalankan WordPress di VPS tanpa memasang Apache, PHP, dan MySQL satu per satu? Docker Compose memungkinkan semuanya ditulis dalam satu file, dijalankan dengan satu perintah, dan dipindahkan ke server lain dengan mudah.

Jawabannya singkat: kamu butuh dua container (WordPress dan database), dua volume untuk menyimpan data, serta reverse proxy untuk HTTPS. Panduan ini memakai image resmi `wordpress` dan `mariadb` dari Docker Hub.

## Apa yang harus siap sebelum mulai?

- VPS Linux dengan Docker Engine dan plugin Compose. Kalau belum, ikuti [cara install Docker dan Docker Compose di Ubuntu](https://nivelva.com/insight/install-docker-compose-ubuntu).
- Domain yang record A-nya sudah mengarah ke IP VPS.
- RAM minimal sekitar 1 GB untuk satu situs kecil; lebih baik 2 GB bila ada plugin berat.

Cek dulu dengan `docker compose version`. Bila keluar nomor versi, kamu siap.

## Langkah menjalankan WordPress

### 1. Buat folder proyek

```
mkdir -p ~/wordpress && cd ~/wordpress
```

Semua file proyek (compose, .env, konfigurasi tambahan) disimpan di sini. Folder ini yang nanti kamu salin bila pindah server.

### 2. Simpan password di file .env

Buat file `.env`:

```
DB_PASSWORD=ganti-password-panjang-acak
DB_ROOT_PASSWORD=ganti-password-root-lain
```

Compose otomatis membaca file `.env` di folder yang sama dan mengganti `${DB_PASSWORD}` di file compose dengan nilainya. Batasi izinnya dengan `chmod 600 .env` dan jangan memasukkannya ke repositori Git.

### 3. Tulis compose.yaml

```
services:
  db:
    image: mariadb:11.4
    restart: unless-stopped
    environment:
      MARIADB_DATABASE: wordpress
      MARIADB_USER: wordpress
      MARIADB_PASSWORD: ${DB_PASSWORD}
      MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    restart: unless-stopped
    depends_on:
      - db
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
    ports:
      - "127.0.0.1:8080:80"
    volumes:
      - wp_data:/var/www/html

volumes:
  db_data:
  wp_data:
```

Beberapa hal yang sengaja dibuat begini:

- **Database tidak punya `ports`.** Container WordPress menjangkaunya lewat nama layanan `db` di jaringan internal Compose, jadi port 3306 tidak pernah terbuka ke luar.
- **Port WordPress diikat ke `127.0.0.1`.** Docker bisa melewati aturan UFW saat mem-publish port ke semua alamat. Dengan `127.0.0.1:8080`, situs hanya bisa diakses lewat reverse proxy di server yang sama. Penjelasan lengkapnya ada di [mengamankan Docker agar port tidak bocor](https://nivelva.com/insight/cara-mengamankan-docker-vps-port-tidak-bocor).
- **Dua volume bernama.** `db_data` menyimpan database, `wp_data` menyimpan inti WordPress, tema, plugin, dan upload.

Untuk produksi, ganti `latest` dengan tag versi tertentu yang tercantum di halaman image di Docker Hub, supaya pembaruan terjadi saat kamu memutuskannya.

### 4. Jalankan

```
docker compose up -d
docker compose ps
docker compose logs -f wordpress
```

Tunggu sampai log database menyatakan siap menerima koneksi. Uji dari server dengan `curl -I http://127.0.0.1:8080`; jawaban berupa redirect ke halaman instalasi berarti WordPress berjalan.

### 5. Pasang reverse proxy untuk HTTPS

Reverse proxy menerima koneksi di port 80 dan 443, mengurus sertifikat SSL, lalu meneruskan ke `127.0.0.1:8080`. Contoh paling ringkas dengan Caddy (dipasang langsung di host) adalah file `Caddyfile` berikut:

```
contoh.com {
    reverse_proxy 127.0.0.1:8080
}
```

Caddy mengambil sertifikat Let's Encrypt secara otomatis. Nginx atau Traefik juga bisa; perbandingannya ada di [Traefik, Caddy, atau Nginx Proxy Manager](https://nivelva.com/insight/traefik-caddy-nginx-proxy-manager). Pastikan proxy meneruskan header `X-Forwarded-Proto` agar WordPress tahu situsnya diakses lewat HTTPS dan tidak terjebak redirect berulang.

### 6. Selesaikan instalasi WordPress

Buka `https://contoh.com` di browser, pilih bahasa, isi nama situs, user admin, dan password kuat. Hindari nama user "admin". Setelah masuk dashboard, buka Pengaturan lalu Umum dan pastikan alamat WordPress dan alamat situs sudah memakai `https://`. Kalau masih `http://`, periksa lagi header dari reverse proxy sebelum mengubahnya.

### 7. Naikkan batas upload (bila perlu)

Buat file `uploads.ini`:

```
upload_max_filesize = 64M
post_max_size = 64M
```

Tambahkan baris ini di bagian `volumes` layanan wordpress, lalu jalankan `docker compose up -d` lagi:

```
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro
```

## Bagaimana cara backup WordPress di Docker?

Ada dua hal yang dibackup: database dan file. Untuk database:

```
docker compose exec -T db sh -c 'mariadb-dump -uroot -p"$MARIADB_ROOT_PASSWORD" wordpress' > wp-db.sql
```

Untuk file, arsipkan isi volume `wp_data` lewat container sementara:

```
docker run --rm -v wordpress_wp_data:/data -v "$PWD":/backup alpine tar czf /backup/wp-files.tar.gz -C /data .
```

Nama volume di host biasanya diawali nama folder proyek, jadi cek dengan `docker volume ls`. Simpan kedua file backup di luar server.

## Ringkasan perintah harian

| Tujuan | Perintah |
|:--|:--|
| Melihat status | `docker compose ps` |
| Melihat log | `docker compose logs -f wordpress` |
| Restart layanan | `docker compose restart` |
| Mematikan tanpa hapus data | `docker compose down` |
| Memperbarui image | `docker compose pull && docker compose up -d` |

Jangan menambahkan opsi `-v` pada `docker compose down` kecuali kamu memang ingin menghapus volume, karena opsi itu ikut menghapus database dan upload. Detail pembaruan yang aman dibahas di [update container Docker tanpa kehilangan data](https://nivelva.com/insight/cara-update-container-docker-kehilangan-data).

## Pertanyaan yang sering diajukan

### Apakah WordPress di Docker lebih cepat dari instalasi biasa?

Tidak otomatis. Docker memudahkan pemasangan dan pemindahan, tapi performa tetap ditentukan oleh spesifikasi server, cache, dan plugin yang dipakai.

### Bisakah menjalankan beberapa situs WordPress di satu VPS?

Bisa. Buat folder proyek terpisah untuk tiap situs dengan port lokal berbeda (misalnya 8081, 8082), lalu arahkan tiap domain di reverse proxy ke port masing-masing.

### Kenapa muncul "Error establishing a database connection"?

Biasanya password di .env tidak sama dengan yang dipakai saat volume database pertama kali dibuat. Variabel MARIADB_* hanya dibaca saat inisialisasi awal, jadi mengubah .env belakangan tidak mengganti password yang sudah tersimpan.

### Apakah update WordPress dari dashboard tetap bisa?

Bisa, karena file inti ada di volume wp_data. Tetap pastikan backup sudah ada sebelum update besar.

## Checklist singkat

- File `.env` berizin 600 dan tidak ikut ke Git.
- Database tanpa port publik, WordPress hanya di `127.0.0.1`.
- HTTPS aktif lewat reverse proxy.
- Backup database dan volume terjadwal, disimpan di luar server.

## Sumber

- <https://hub.docker.com/_/wordpress>
- <https://hub.docker.com/_/mariadb>
- <https://docs.docker.com/compose/how-tos/environment-variables/set-environment-variables/>

---

Diterbitkan oleh Nivelva Insight (https://nivelva.com/insight/). Artikel ini: https://nivelva.com/insight/cara-menjalankan-wordpress-docker-compose
Kontak Nivelva: WhatsApp https://wa.me/6285111245007, email hello@nivelva.com
