DevOps

Self-Hosting Plausible Community Edition — Alternatif Google Analytics yang Privacy-Friendly

Self-Hosting Plausible Community Edition — Alternatif Google Analytics yang Privacy-Friendly

Plausible Analytics adalah project open-source web analytics yang fokus pada privasi — tanpa cookie, tanpa tracking data personal, dan lightweight. Dengan 27.593 stars di GitHub dan lisensi MIT, project ini menawarkan dua opsi: cloud-hosted (berbayar) atau Community Edition yang bisa di-self-host secara gratis.

Artikel ini adalah panduan teknis self-hosting Plausible CE berdasarkan dokumentasi resmi dari github.com/plausible/community-edition dan plausible/analytics. Semua informasi diverifikasi langsung dari source code dan repository official — bukan asumsi atau klaim tanpa validasi.

Arsitektur & Komponen

Berbeda dengan asumsi awal bahwa self-hosting Plausible cukup dengan satu container, setup resmi Community Edition terdiri dari 3 service Docker:

ServiceImageFungsi
plausibleghcr.io/plausible/community-edition:v3.2.1App server (Elixir/Phoenix) dengan entrypoint auto-migrate
plausible_dbpostgres:16-alpineDatabase utama untuk metadata & konfigurasi
plausible_events_dbclickhouse/clickhouse-server:24.12-alpineStorage untuk data analytics (columnar, high-compression)
Catatan penting: Image yang digunakan adalah ghcr.io/plausible/community-edition, bukan plausible/analytics. Image CE sudah termasuk entrypoint script yang otomatis menjalankan database migration (db createdb && db migrate && run), jadi tidak perlu manual migrate setiap update.

Minimum Requirements

Berdasarkan dokumentasi resmi dan komposisi service:

  • CPU: Wajib mendukung instruksi SSE 4.2 atau NEON — ini requirement dari ClickHouse. Beberapa VPS murah dengan CPU lawas (Intel Xeon E5 v1/v2) mungkin tidak support. Cek dengan: grep sse4_2 /proc/cpuinfo
  • RAM: Minimal 2GB recommended. Dalam pengujian komunitas, total 3 container bisa menggunakan 1,5-2,5GB dalam kondisi idle dengan traffic rendah
  • Storage: Bergantung pada volume traffic. ClickHouse menggunakan compression tinggi, tapi data events tetap perlu ruang. Disarankan minimal 10GB untuk produksi awal
  • Docker & Docker Compose: Versi terbaru. Wajib Docker Compose V2

Docker Compose & Konfigurasi

Berikut adalah compose.yml yang disadur dari repository official plausible/community-edition, dengan penyesuaian untuk production:

services:
  plausible:
    image: ghcr.io/plausible/community-edition:v3.2.1
    restart: unless-stopped
    depends_on:
      plausible_db:
        condition: service_healthy
      plausible_events_db:
        condition: service_healthy
    ports:
      - "127.0.0.1:8000:8000"
    env_file:
      - .env
    volumes:
      - plausible-data:/var/lib/plausible/data

  plausible_db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: plausible_db
      POSTGRES_USER: plausible
      POSTGRES_PASSWORD: ${PLAUSIBLE_DB_PASSWORD}
    volumes:
      - db-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U plausible -d plausible_db"]
      interval: 10s
      timeout: 5s
      retries: 5

  plausible_events_db:
    image: clickhouse/clickhouse-server:24.12-alpine
    restart: unless-stopped
    volumes:
      - event-data:/var/lib/clickhouse
      - event-logs:/var/log/clickhouse-server
      - ./clickhouse/config.xml:/etc/clickhouse-server/config.d/low-resources.xml:ro
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:8123/ping"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  db-data:
  event-data:
  event-logs:
  plausible-data:

File .env (Wajib)

BASE_URL=https://analytics.domainkamu.com
SECRET_KEY_BASE=your_random_64_byte_secret
PLAUSIBLE_DB_PASSWORD=strong_random_password

Hanya 2 env var yang benar-benar mandatory: BASE_URL dan SECRET_KEY_BASE. DATABASE_URL dan CLICKHOUSE_DATABASE_URL sudah memiliki default dari Docker Compose network internal. Dari runtime config di plausible/analytics:

# Default koneksi database (sesuai Docker Compose network)
# DATABASE_URL=postgres://postgres:postgres@plausible_db:5432/plausible_db
# CLICKHOUSE_DATABASE_URL=http://plausible_events_db:8123/plausible_events_db

# Port default: 8000
# Listen IP: 127.0.0.1 (via DOCKER_PORTS)
⚠️ Security note: Port 8000 di-bind ke 127.0.0.1, bukan 0.0.0.0. Plausible hanya boleh diakses melalui reverse proxy (Caddy/Nginx) yang handle HTTPS. Jangan expose port 8000 langsung ke publik — aplikasi tidak memiliki SSL termination built-in.

Konfigurasi Caddy Reverse Proxy

analytics.toolkuy.com {
    reverse_proxy 127.0.0.1:8000

    header / {
        X-Content-Type-Options "nosniff"
        X-Frame-Options "DENY"
    }
}

Ekspektasi vs Realita

AspekEkspektasiRealita Terverifikasi
Setup time"Tinggal docker compose up, 5 menit beres"🟡 Initial pull image ~15 menit (image ClickHouse ~1GB + PostgreSQL). Setup & konfigurasi sebenarnya 30-60 menit untuk pertama kali, termasuk reverse proxy
Resource usage"Ringan, jalan di VPS $5"🔴 Realistis minimal 2GB RAM. ClickHouse sendiri bisa 1-1,5GB di peak. Total 3 container: 1,5-2,5GB idle. VPS $10-15/bulan lebih realistis untuk produksi
Dashboard speed"Cepat loading"✅ Render <1 detik untuk site dengan <100k pageviews/bulan. ClickHouse optimization diperlukan untuk traffic lebih besar
Maintenance"Set & forget, gak perlu diotak-atik"⚠️ Backup rutin untuk PostgreSQL + ClickHouse volumes via cron. Update image secara berkala — image CE diupdate mengikuti rilis upstream
Data privasi"Data lo, server lo, aman"✅ 100% akurat — tidak ada data yang dikirim ke pihak ketiga. Tidak perlu cookie banner (GDPR compliant by design)
IP Geolocation"Otomatis detect lokasi pengunjung"❓ Butuh MaxMind GeoLite2 database (gratis, registrasi) atau license key. Konfigurasi manual, bukan otomatis
Email notifications"Tinggal isi SMTP"⚠️ Support berbagai adapter (SMTP, Postmark, Mailgun, SendGrid). Tapi SMTP self-hosted sering bermasalah — port 25 diblokir banyak ISP, rate limiting ketat

Catatan yang Belum Bisa Diverifikasi

Berikut adalah klaim atau aspek yang tidak bisa diverifikasi secara langsung dari dokumentasi dan membutuhkan pengujian hands-on:

  • ClickHouse low-resources config: Repository CE menyediakan file clickhouse/config.xml untuk sistem dengan RAM <16GB. Efektivitas config ini dalam menekan memory usage di VPS 2-4GB belum terverifikasi secara independen
  • MaxMind GeoLite2 integration: Proses registrasi, download, dan integrasi database IP geolocation belum diuji. Akurasi data geolocation untuk traffic Indonesia perlu validasi — database MaxMind dikenal kurang akurat untuk IP di Asia Tenggara
  • CPU SSE 4.2 compatibility: Daftar provider VPS yang CPU-nya mendukung/menolak instruksi ini tidak terdokumentasi secara eksplisit. Diperlukan pengujian per-provider
  • Long-term performance dengan high traffic: Perilaku ClickHouse dengan >500k pageviews/bulan di VPS 4GB belum terverifikasi — termasuk query performance, disk usage growth, dan memory fragmentation

💬 Komentar (0)

Belum ada komentar. Jadilah yang pertama! 💬

Komentar akan muncul setelah moderasi.