Analytics ที่เคารพความเป็นส่วนตัว: การตั้งค่า Plausible แบบ Self-Hosted พร้อม Google Search Console
ภูมิทัศน์การติดตาม analytics เปลี่ยนไปมากนับตั้งแต่ GDPR มีผลบังคับใช้ในปี 2018 แต่ในความเป็นจริง องค์กรส่วนใหญ่ยังคงรัน Google Analytics 4 บนเว็บไซต์ของตน — ไม่ใช่เพราะเป็นเครื่องมือที่ดีที่สุดสำหรับงาน แต่เพราะการย้ายดูมีค่าใช้จ่ายสูงและทางเลือกอื่นดูเฉพาะทาง เราย้ายจาก Google Analytics ไปยัง Plausible CE แบบ self-hosted ในช่วงกลางปี 2024 และผลลัพธ์นั้นควรค่าแก่การบันทึกอย่างละเอียด
เหตุใดเราจึงออกจาก Google Analytics
Google Analytics 4 เป็น platform ที่มีความสามารถ อย่างไรก็ตาม ค่าใช้จ่ายด้านการปฏิบัติตามกฎระเบียบนั้นสูง การรัน GA4 ในการกำหนดค่าที่ปฏิบัติตาม GDPR อย่างแท้จริงต้องการ cookie consent banner, consent management platform, data processing agreement และการ route ตามภูมิภาคอย่างรอบคอบเพื่อป้องกัน IP address และ user identifier ไม่ให้ออกนอก EU banner ตัวเองนำ gap ที่เป็นระบบในข้อมูลของคุณ: การศึกษาอิสระแนะนำว่าระหว่าง 30% ถึง 50% ของผู้เยี่ยมชมปฏิเสธ consent ทั้งหมด ทิ้ง blind spot ในทุก metric ที่คุณเก็บ
Plausible CE ถูกออกแบบโดยมีสมมติฐานที่แตกต่าง tracking script เป็น cookieless โดยค่าเริ่มต้น ไม่เก็บข้อมูลที่ระบุตัวบุคคลได้ และไม่ต้องการ consent banner ภายใต้ GDPR นี่ไม่ใช่ภาษาทางการตลาด — มันเป็น claim ทางเทคนิคเฉพาะ Plausible ไม่ตั้ง cookie ไม่สร้าง persistent user identifier ระหว่าง session และไม่ส่งข้อมูลไปยัง third-party server เมื่อ self-host
สถาปัตยกรรม: ClickHouse เป็น analytics engine
Plausible CE มาพร้อม database สองตัว: ClickHouse สำหรับการเก็บ event และ PostgreSQL สำหรับการกำหนดค่า ClickHouse เป็น database แบบ column-oriented ที่สร้างสำหรับ analytical workload — engine เดียวกับที่ Yandex สร้างสำหรับโครงสร้างพื้นฐาน analytics ของพวกเขาในระดับขนาดใหญ่
การตั้งค่า Docker Compose ตรงไปตรงมา Plausible มี configuration อย่างเป็นทางการพร้อม service ที่จำเป็นทั้งหมด deployment ของเราทำงานควบคู่กับ Traefik บน Hetzner CX21 instance (2 vCPU, 4 GB RAM) ในเฮลซิงกิ:
services:
plausible_db:
image: postgres:16-alpine
restart: always
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
plausible_events_db:
image: clickhouse/clickhouse-server:24.3.3.102-alpine
restart: always
volumes:
- event-data:/var/lib/clickhouse
- ./clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro
- ./clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:ro
ulimits:
nofile:
soft: 262144
hard: 262144
plausible:
image: ghcr.io/plausible/community-edition:v2.1.4
restart: always
command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
depends_on:
- plausible_db
- plausible_events_db
environment:
- BASE_URL=https://plausible.yourdomain.com
- SECRET_KEY_BASE=${SECRET_KEY_BASE}
- DATABASE_URL=postgres://postgres:${POSTGRES_PASSWORD}@plausible_db:5432/plausible_db
- CLICKHOUSE_DATABASE_URL=http://plausible_events_db:8123/plausible_events_db
- DISABLE_REGISTRATION=true
labels:
- "traefik.enable=true"
- "traefik.http.routers.plausible.rule=Host(`plausible.yourdomain.com`)"
- "traefik.http.routers.plausible.entrypoints=websecure"
- "traefik.http.routers.plausible.tls.certresolver=letsencrypt"
- "traefik.http.services.plausible.loadbalancer.server.port=8000"
volumes:
db-data:
event-data:
Flag DISABLE_REGISTRATION=true ไม่ใช่ optional หลังจากสร้าง account เริ่มต้นของคุณ instance ที่หันหน้าสู่สาธารณะใด ๆ ที่ไม่มี flag นี้เปิดรับการลงทะเบียนโดยใครก็ตามที่พบ URL สร้าง SECRET_KEY_BASE ด้วย openssl rand -base64 64 และเก็บไว้ในไฟล์ .env นอก version control
การ deploy tracking script
เมื่อ stack รันแล้ว การเพิ่ม tracking ให้ไซต์ใด ๆ เป็น tag เดียวใน HTML <head>:
<script defer data-domain="yourdomain.com"
src="https://plausible.yourdomain.com/js/script.js"></script>
script ที่รวมกันมีน้ำหนักประมาณ 2.4 KB แบบไม่บีบอัด script ของ Google Analytics 4 มีประมาณ 45 KB นี่ไม่ใช่ความแตกต่างเล็กน้อย — มัน JavaScript น้อยกว่า 20 เท่าในการ parse ในทุก page load ซึ่งส่งผลต่อคะแนน Core Web Vitals อย่างวัดได้บนอุปกรณ์ที่มีพลังงานต่ำและการเชื่อมต่อช้า
การผสาน Google Search Console
เหตุผลที่แข็งแกร่งที่สุดในการเก็บ GA4 ไว้คือการเชื่อมต่อกับ Google Search Console ซึ่งช่วยให้คุณ correlate ข้อมูล organic search query กับ behavior บนไซต์ Plausible รองรับการผสานนี้ natively และเป็น feature ที่ทำให้การเปลี่ยนเป็นไปได้สำหรับไซต์ที่ขับเคลื่อนด้วยเนื้อหา
รายละเอียดการกำหนดค่าที่สร้างปัญหาอย่างสม่ำเสมอ: domain ใน Plausible ต้องตรงกับ GSC property type อย่างแม่นยำ GSC property ที่ verify เป็น https://www.yourdomain.com โดยใช้ URL-prefix method จะไม่เชื่อมต่อกับ Plausible site ที่ track yourdomain.com โดยไม่มี subdomain
การปฏิบัติตาม GDPR โดยไม่มี cookie banner
ภายใต้ GDPR และ ePrivacy Directive ต้องมี consent เมื่อคุณเก็บหรือเข้าถึงข้อมูลบนอุปกรณ์ของผู้ใช้ Cookie และ localStorage ทั้งสองกระตุ้นข้อกำหนดนี้ Plausible ไม่เก็บอะไรบนอุปกรณ์ของผู้ใช้: ไม่มี cookie ไม่มี localStorage entries ไม่มีการเขียน IndexedDB
ผลลัพธ์ในทางปฏิบัติ: ไม่มี consent banner ไม่มี consent management platform ไม่มีการ optimize consent rate และไม่มี gap ในข้อมูลของคุณจาก consent ที่ถูกปฏิเสธ ข้อมูล analytics ที่คุณเห็นสะท้อน audience จริงของคุณ แทนที่จะเป็น subset ที่ยินดีรับการติดตาม
ค่าใช้จ่ายโครงสร้างพื้นฐานและการเปรียบเทียบประสิทธิภาพ
การรันทั้งสองเครื่องมือพร้อมกัน 60 วันก่อน GA4 cutover ให้การเปรียบเทียบโดยตรง จำนวน page view แตกต่างกันน้อยกว่า 3% ความแตกต่างที่น่าสนใจกว่าคือจำนวน unique visitor Plausible บันทึก unique visitor มากกว่า consented GA4 ประมาณ 12% ในช่วงเดียวกัน นี่เป็นที่คาดหวัง: subset ที่รับ consent ของผู้ใช้ GA4 เอนเอียงไปทาง visitor ที่มีส่วนร่วมมากกว่า
footprint โครงสร้างพื้นฐานเรียบง่าย ClickHouse ใช้ RAM ประมาณ 400 MB ในสถานะ steady state PostgreSQL เพิ่มประมาณ 80 MB สำหรับองค์กรที่รันเซิร์ฟเวอร์ Hetzner อยู่แล้วที่มี capacity สำรอง ต้นทุน marginal ของการเพิ่ม Plausible ลงใน stack ที่มีอยู่นั้นแทบไม่มี
บทความที่เกี่ยวข้อง
- Traefik Reverse Proxy: The Complete Self-Hosting Guide for HTTPS and SSL Automation
- Self-Hosting n8n on Hetzner Cloud: Complete Docker Setup Tutorial
- Deploying React Applications to Production: Complete Docker Setup with Traefik Reverse Proxy
- Building a Multi-Tenant Development Stack with Docker: Complete Setup for Scalable Client Deployments