SSD Nodes Learn 🎉 VPS $5.50/aydan başlayan
Rehberler Matt ConnorYazan Matt Connor · Güncellendi 2026-08-16

Kendi Sunucunuzda Web Analitiği Kurulumu ve VPS Seçimi

Plausible, Umami, Matomo, GoatCounter ve GoAccess araçlarını VPS üzerinde barındırırken RAM, veritabanı, disk kullanımı, reverse proxy ve reklam engelleyici sorunlarını inceleyin.

Bir VPS üzerinde hangi self-hosted web analitiği aracı çalıştırılmalıdır?

Self-hosted web analitiği iki aileye ayrılır ve yanlış aileyi seçmek, yanlış ürünü seçmekten daha maliyetlidir. Bir aile, ziyaretçinin tarayıcısında küçük bir betik çalıştırır ve bu betiğin raporladığı verileri saklar. Diğer aile ise web sunucunuzun halihazırda oluşturduğu erişim loglarını okur. Veritabanı ve ihtiyaç duyulan bellek dahil olmak üzere sonraki tüm gereksinimler, bu temel tercihe göre şekillenir.

Küçük bir sunucu için kısa cevap şudur: GoatCounter ve Medama, her biri tek bir dosya üzerinde çalışan tek bir süreç oldukları için 1 GB RAM ile çalışabilir. Umami, bir Postgres container'ı ekler ve teknik bilgisi olmayan birinin de okuyabileceği bir kontrol paneli sunar. Plausible Community Edition ve Rybbit, ClickHouse kullandıkları için 2 GB veya daha fazla RAM planlamalısınız. Matomo tam kapsamlı bir üründür ve trafiğinize uygun boyutta bir sunucu gerektirir. GoAccess ise halihazırda var olan bir log dosyasını okuduğu için sayfaya hiçbir ek yük getirmez.

Script etiketi veya sunucu günlüğü: her biri neyi görebilir

Bir script etiketi tarayıcıları ölçer. Sayfa yüklenir, script çalışır ve toplayıcınıza tek bir istek gönderir. Bu zinciri bozan her şey sizin için görünmezdir: JavaScript'in kapalı olması, isteği engelleyen bir filtre listesi, toplayıcıya yapılan başarısız bir istek veya script çalıştırmayan bir tarayıcı (crawler).

Bir günlük ayrıştırıcı (log parser) istekleri ölçer. Web sunucunuz, siz hiçbir şey kurmasanız dahi her istek için bir satır yazar, dolayısıyla veriler zaten diskte mevcuttur. Bu yöntem, her tarayıcıyı ve script etiketi içermeyen dosyalara yapılan her isabeti görür. Tarayıcı içinde ne olduğunu göremez; ayrıca tarayıcı önbelleğinden veya sunucunuzun önündeki bir CDN (içerik dağıtım ağı) üzerinden sunulan bir sayfayı da göremez, çünkü bu istek sunucunuza asla ulaşmamıştır.

İki sayı birbiriyle eşleşmeyecektir ve ikisi de yanlış değildir. Matomo her ikisini de yapabilir; günlük içe aktarma işleminin, JavaScript takipçisinin yanında nelerden feragat ettiğini belgeler: ekran çözünürlüğü ve sayfa başlıkları, etkinlikler, içerik takibi, ısı haritaları, oturum kayıtları ve form analitiği. Bu liste, tarayıcılar yerine istekleri saymanın bedelidir.

Bot trafiği, aradaki farkın diğer yarısını oluşturur. Günlük tabanlı sayımlar, siz filtrelemediğiniz sürece tarayıcıları içerir ve sıradan bir sitede tarayıcı payı, vardığınız sonuçları değiştirecek kadar büyüktür. GoAccess ve Matomo'nun günlük içe aktarma özelliği, bilinen botları filtreler. Ancak hiçbiri, user agent bilgisi konusunda yalan söyleyen bir tarayıcıyı filtreleyemez; bu durum, günlük tabanlı her türlü sayımı sunucu seviyesinde yapay zeka tarayıcılarını engelleme ile eşleştirmek ve günlüğü engellemeden önce değil, engelledikten sonra okumak için iyi bir nedendir.

GoAccess: mevcut günlük kayıtlarınızdan analizler

Dağıtım paketleri sürümlerin gerisinde kaldığı için, yazılımı projenin kendi Debian ve Ubuntu deposundan kurun.

wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
sudo apt-get update
sudo apt-get install goaccess

Ardından aracı günlük dosyasına yönlendirin ve statik bir rapor oluşturun.

goaccess /var/log/nginx/access.log -o ~/report.html --log-format=COMBINED

Ubuntu üzerinde nginx günlük dosyalarının sahibi root kullanıcısı ve adm grubudur; bu nedenle normal bir kullanıcı ile çalıştırılan bu komut Permission denied hatası verir. sudo usermod -aG adm $USER komutu ile kendinizi bu gruba ekleyin. Grup üyeliği oturum açma sırasında okunduğu için oturumu kapatıp tekrar açın. id komutunu çalıştırın ve tekrar denemeden önce adm ifadesinin listede göründüğünü doğrulayın.

Canlı günlük kaydı üzerindeki bir rapor, yalnızca logrotate tarafından henüz taşınmamış verileri kapsar. Dünkü istekler access.log.1 içinde tutulur ve daha eskileri sıkıştırılır; bu nedenle haftalık bir görünüm elde etmek için döndürülmüş (rotated) dosyaların da okunması gerekir.

zcat /var/log/nginx/access.log.*.gz | goaccess - --log-format=COMBINED -o ~/last-week.html

Ayrıca, sayfayı WebSocket üzerinden güncelleyen --real-time-html adlı bir canlı mod da mevcuttur. Bu mod, ikinci bir port ve kendine ait bir proxy kuralı gerektirir. Çoğu site için cron tarafından saatlik oluşturulan bir rapor yeterlidir ve güvenliği sağlanması gereken daha az bileşen bulunur.

GoatCounter: tek bir Go binary dosyası ve bir SQLite dosyası

GoatCounter, statik olarak derlenmiş bir binary dosyası olarak sunulur, bu nedenle kurulması gereken bir çalışma zamanı (runtime) yoktur. Release sayfasından bir derleme alıp çalıştırın veya imajı kullanın.

docker run -p 8080:8080 -v goatcounter-data:/home/goatcounter/goatcounter-data arp242/goatcounter

Binary olarak çalıştırıldığında, goatcounter serve 8080 numaralı portu dinler ve ./goatcounter-data/db.sqlite3 konumunda bir SQLite dosyası oluşturur. Örnek bir proxy arkasındaysa, web sihirbazı yerine komut satırından ilk siteyi oluşturun.

goatcounter db create site -vhost=stats.example.com -user.email=me@example.com

Başka hiçbir servisin çalışmadığı bir sunucuda, ACME (otomatik sertifika yönetim ortamı) kullanarak goatcounter serve -listen=:443 -tls=tls,rdr,acme ile kendi sertifikasını yönetebilir. Eğer nginx veya Caddy halihazırda 443 numaralı portu kullanıyorsa, GoatCounter'ı 8080 portunda bırakın ve trafiği ona yönlendirin. İzleme betiği, projenin kendi verilerine göre yaklaşık 3.5K boyutundadır ve JavaScript içermeyen sayfalar için bir izleme pikseli mevcuttur. Yoğun bir sitede SQLite bir sınırlama haline gelirse, aynı binary goatcounter serve -db 'postgresql+dbname=goatcounter' ile Postgres kullanabilir. Yedeklemeler bir dosya kopyalama işleminden ibarettir; bu da bu tür bir aracın tercih edilmesinin temel nedenidir.

Medama: 256 MB bellek gerektiren tek bir container

Medama, bu alandaki en yeni tek ikili (single binary) seçenektir. Tasarımı gereği çerezsizdir ve proje, 1 KB'tan küçük bir takipçi boyutu ile 256 MB belleğe sahip sanal makinelerde çalışan küçük siteleri desteklediğini belirtmektedir. Bunlar projenin yayınladığı iddialardır; bu rehber için ölçülmüş değerler değildir.

docker volume create medama-data
docker run -d -p 127.0.0.1:8080:8080 -v medama-data:/app/data ghcr.io/medama-io/medama:latest

Resmi komut, portu 8080:8080 olarak yayınlar. Yukarıdaki loopback öneki kasıtlıdır; reverse proxy bölümünde bunun nedeni açıklanmıştır. İlk giriş admin ile, parola ise CHANGE_ME_ON_FIRST_LOGIN ile yapılır; parolanın adı aslında talimatın kendisidir.

Belgelenmiş bir hata durumuyla karşılaşabilirsiniz. Giriş işlemi yalnızca HTTPS üzerinden veya localhost adresinde çalışır; bu nedenle proxy kurulumunu sertifikadan önce yaparsanız, form doğru parolayı reddeder ve hata nedeni ekrana yazdırılmaz. Önce TLS (transport layer security) kurulumunu tamamlayın, ardından giriş yapın.

Umami: Postgres ve herkesin tanıdığı bir panel

git clone https://github.com/umami-software/umami.git
cd umami
docker compose up -d

Bu komut, uygulamayı yanında bir PostgreSQL container'ı ile birlikte 3000 numaralı portta başlatır. Belgeler, minimum gereksinim olarak PostgreSQL v12.14 sürümünü, kaynak koddan derleme yapılması durumunda ise Node.js 18.18 veya daha yeni bir sürümü şart koşar. Halihazırda çalışan bir veritabanına işaret etmesi gereken DATABASE_URL değişkenine ihtiyaç duyan docker.umami.is/umami-software/umami:postgresql-latest adlı önceden oluşturulmuş bir imaj mevcuttur.

İlk giriş bilgileri admin kullanıcı adı ve umami parolasıdır. DNS kaydını sunucuya yönlendirmeden önce bu parolayı değiştirin; çünkü kayıt çözümlendiği ve proxy yanıt vermeye başladığı anda örnek internet üzerinden erişilebilir hale gelir. Docker Compose detayları, environment dosyaları ve yeniden başlatma politikaları için, okumadığınız bir yığını kopyalamak yerine bir VPS üzerinde Docker Compose yığını bölümüne bakın.

Sistem üzerindeki ayak izi, bir Node süreci ve Postgres'ten oluşur. Bu, tek bir binary dosyadan daha ağır, ancak ClickHouse çalıştıran herhangi bir yapıdan çok daha hafiftir.

Plausible Community Edition: ClickHouse RAM alt sınırı

git clone -b v3.2.1 --single-branch https://github.com/plausible/community-edition plausible-ce
cd plausible-ce
touch .env
echo "BASE_URL=https://stats.example.com" >> .env
echo "SECRET_KEY_BASE=$(openssl rand -base64 48)" >> .env
docker compose up -d

v3.2.1 sürümü Ağustos 2026 itibarıyla günceldir ve clone komutu bu sürümü özellikle sabitler. Yığın üç bölümden oluşur: uygulama, hesaplar ve ayarlar için Postgres ve etkinlik verileri için ClickHouse. SECRET_KEY_BASE en az 64 baytlık bir dizge olmalıdır; openssl çağrısının ürettiği değer de budur.

Plausible'ın kendi gereksinimleri, ClickHouse ve uygulamanın out of memory killer ile karşılaşmaması için en az 2 GB RAM ve ClickHouse'un ihtiyaç duyduğu SSE 4.2 veya NEON destekleyen bir CPU talep eder. Bu ikinci gereksinim, satın alma yapmadan önce kontrol edilmelidir ve ARM ile x86 VPS seçimi arasındaki pratik farklardan biridir. ClickHouse ayrıca kullanılabilir olduğunu düşündüğü tüm belleği kullanacaktır; bu nedenle paylaşımlı bir sunucuda, Compose içinde container bellek sınırlandırma bölümünde açıklandığı gibi bir üst sınır belirleyin.

BASE_URL değeri, genel URL ile tam olarak eşleşmelidir. Eşleşmediği durumlarda giriş yaparsınız, uygulama sizi yanlış ana bilgisayara yönlendirir ve oturum çerezi tarayıcınızın üzerinde olmadığı bir alan adı için yazılır; bu nedenle herhangi bir hata mesajı almadan tekrar giriş formuna dönersiniz.

Dağıtılan compose dosyası bir port yayınlamaz, çünkü ön tarafta bir proxy olması beklenir. Varsayılan uygulama portunu yalnızca loopback üzerinde yayınlayan bir geçersiz kılma (override) ekleyin.

cat > compose.override.yml << EOF
services:
    plausible:
        ports:
            - 127.0.0.1:8000:8000
EOF

Matomo: ürünün tamamı ve gereksinim duyduğu sunucu

Matomo, PHP üzerinde MySQL veya MariaDB ile çalışır; bu da onun container yığını yerine klasik web yığınına uygun olduğu anlamına gelir. Ayrıca, trafik hacmine göre donanım kılavuzu yayımlayan bu listedeki tek araçtır.

ChartMatomo sizing guidance by monthly pageviews
The data behind this chart
[
  {
    "label": "100K/month",
    "cpu_cores": 2,
    "ram_gb": 2,
    "disk_gb": 50
  },
  {
    "label": "1M/month",
    "cpu_cores": 4,
    "ram_gb": 8,
    "disk_gb": 250
  },
  {
    "label": "10M/month",
    "cpu_cores": 8,
    "ram_gb": 16,
    "disk_gb": 400
  }
]

Bunlar, bu kılavuz için yapılan ölçümler değil, Matomo'nun Ağustos 2026 itibarıyla yayımladığı minimum değerlerdir. Ayda 100.000 sayfa görüntülemesine kadar 2 CPU çekirdeği, 2 GB RAM ve 50 GB SSD talep eder; tek bir sunucu hem uygulamayı hem de veritabanını barındırır. 1M/month seviyesinde bu değerler 8 GB RAM ve 250 GB diske çıkar. 10M/month seviyesinde Matomo iki sunucu önerir; son satır veritabanı sunucusunu gösterir: 16 GB RAM ve 400 GB disk. Bu disk değerlerini, tüm veri kümesinin tek bir SQLite dosyası olduğu tekil binary seçeneklerinin yanında değerlendirin.

Arşivleme, kullanıcıları şaşırtan kısımdır. Matomo varsayılan olarak raporlarını birisi kontrol panelini açtığında oluşturur; bu nedenle veri büyüdükçe kontrol paneli yavaşlar ve sonunda zaman aşımına uğrar. Belgelenmiş çözüm, genel ayarlardan tarayıcı tetiklemeli arşivlemeyi kapatmak ve arşivleyiciyi cron üzerinden, Matomo dosyalarının sahibi olan kullanıcı ile Matomo dizininden çalıştırmaktır.

php console core:archive --url=https://analytics.example.com

Matomo ayrıca işlenmiş rapor tablolarının yanında ham log tablolarını da tutar; eski ham verileri ve eski raporları bir takvime göre silebilir. Bu özelliği disk dolduğunda değil, kurulum sırasında etkinleştirin. Matomo, sunucu erişim loglarını da içe aktarabilir; bu da onu her iki aileyi aynı anda kapsayan tek ürün yapar.

Rybbit ve yeni nesil yığınlar

git clone https://github.com/rybbit-io/rybbit.git
cd rybbit
chmod +x *.sh
./setup.sh your.domain.name

Rybbit, modern bir yönetim paneline sahip yeni bir projedir. Kurulum betiği, environment dosyasını oluşturur ve Docker Compose ile yığını ayağa kaldırır. ClickHouse çalıştırır ve kendi web sunucusu olarak Caddy ile gelir; bu sunucu 443 numaralı portu kullanır ve belirttiğiniz alan adı için sertifika talep eder. Nginx'in halihazırda 443 numaralı portu kullandığı bir sunucuda, betik portu bağlayamayacaktır; bu nedenle projenin manuel Compose yöntemini kullanın ve servisi mevcut proxy'nizin arkasına konumlandırın. Dokümantasyona göre en az 2 GB RAM gereklidir; testler Ubuntu 24 LTS üzerinde yapılmıştır ve ClickHouse nedeniyle ARM mimarisinde ARMv8.2-A veya daha yeni bir sürüm gereklidir.

Yeni projeler için dürüst bir uyarı: özellikler hızla eklenir ve buna bağlı olarak köklü değişiklikler yaşanabilir. Bir sürüm etiketini sabitleyin, güncelleme yapmadan önce sürüm notlarını okuyun ve mutlaka veritabanı yedeği alın.

Saklama süresi ve disk büyümesi: kendi sunucunuzda ölçüm yapın

Disk büyümesi, aracın her olay için neyi depoladığına bağlıdır. GoatCounter, isabetleri sayaçlarda toplar; bu nedenle dosya boyutu, ham trafik hacminden ziyade benzersiz sayfa ve gün sayısına göre artar. Umami ve Matomo her olay için satırlar depolar; Matomo ayrıca ham verilerin üzerine işlenmiş rapor tabloları da kaydeder. ClickHouse olayları sütunlar halinde depolar ve yoğun bir şekilde sıkıştırır; Plausible'ın satır tabanlı bir depolama sistemini zorlayacak hacimlerle başa çıkabilmesinin nedeni budur.

Bu kılavuz, milyon sayfa görüntüleme başına megabayt cinsinden bir değer yayınlamaz; çünkü sizin trafiğiniz üzerinde bir ölçüm yapılmamıştır. Ölçümü kendiniz yapın. Servis ve kullanıcı adlarını kendi Compose dosyanıza uyacak şekilde düzenleyin.

du -h goatcounter-data/db.sqlite3
docker compose exec db psql -U umami -d umami -c "SELECT pg_size_pretty(pg_database_size('umami'));"
docker compose exec plausible_events_db clickhouse-client -q "SELECT formatReadableSize(sum(bytes_on_disk)) FROM system.parts WHERE active"

Değeri kaydedin, bir hafta bekleyin, tekrar kaydedin ve aradaki farkı o hafta için panelde raporlanan sayfa görüntüleme sayısına bölün. Bu değer, siteniz ve bot filtrelemeniz ile ilgili olduğundan, yayınlanan herhangi bir ortalamadan daha değerlidir. Ardından, sayı henüz küçükken bir saklama sınırı belirleyin. Dolu bir disk, yalnızca analitik aracını değil, VPS üzerindeki her servisi devre dışı bırakır; bu da veritabanı birimini df -h aracının sizi uyaracağı bir yerde tutmak için en güçlü argümandır. Bu risk, halihazırda hacimli veriler barındıran bir sunucuda daha fazla dikkat gerektirir; çünkü kendi kendine barındırılan bir fotoğraf sunucusu, herhangi bir analitik veritabanı yaklaşmadan çok önce diski tüketecektir.

Bir reverse proxy arkasında nasıl davranır

Toplayıcıyı, ölçüm yaptığı sitenin bir alt alan adına, örneğin stats.example.com adresine yerleştirin. Bu, toplayıcı isteğini birinci taraf (first party) haline getirir; böylece tarayıcının üçüncü taraf isteklerini engelleyen kurallarına takılmaz.

Container portunu yayınlarken uygulamayı loopback arayüzüne bağlayın. Docker, kendi güvenlik duvarı kurallarını ufw'den önce yazar; bu nedenle -p 3000:3000 olarak yayınlanan bir container, ufw status komutu portun engellendiğini söylese bile internetten erişilebilir durumdadır. Bunu başka bir makineden curl http://SERVER_IP:3000 ile test ederseniz paneli görebilirsiniz. -p 127.0.0.1:3000:3000 olarak yayınlandığında ise aynı test Connection refused sonucunu verir ve yalnızca proxy erişim sağlayabilir.

server {
    listen 443 ssl;
    server_name stats.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Yönlendirme başlıkları (forwarding headers) burada isteğe bağlı değildir. X-Forwarded-For olmadan her ziyaret 127.0.0.1 üzerinden geliyormuş gibi görünür; bu yüzden ülke raporu boş kalır ve tekil ziyaretçi sayısı bire düşer. Her proje hangi başlığa ve hangi ayar altında güvendiğine kendisi karar verir; bu yüzden varsayımda bulunmak yerine ilgili proxy dokümantasyonunu bir kez kontrol edin. Caddy bu başlıkları kendisi ayarlar ve aynı iş için bir Caddyfile yalnızca iki satırdan oluşur.

stats.example.com {
    reverse_proxy 127.0.0.1:3000
}

Henüz bir proxy seçmediyseniz, nginx, Caddy ve Traefik karşılaştırması başlıklı yazı, birkaç alt alan adına sahip tek bir sunucu için hangisinin uygun olduğunu açıklamaktadır.

Self-host yaparken çerez banner'ına hâlâ ihtiyaç var mı?

Self-host yapmak, verinin kimin elinde olduğunu değiştirir. Ancak verilerle ilgili yasal yükümlülükleri değiştirmez. İki kuralı birbirinden ayırın. ePrivacy onay kuralı, ziyaretçinin cihazına herhangi bir şey kaydetmek veya oradan bir şey okumakla ilgilidir; bu nedenle çerez oluşturmayan ve yerel depolamaya (local storage) hiçbir şey yazmayan bir araç, bu özel gereksinimin dışında kalır. GDPR ise kişisel verilerin işlenmesiyle ilgilidir ve IP adresi kişisel veri sayılır. Bu nedenle hâlâ yasal bir dayanağa, saklama süresi sınırına ve birisi elinizde ne tür veriler olduğunu sorduğunda verecek bir cevaba ihtiyacınız vardır.

Plausible, Umami, GoatCounter ve Medama varsayılan olarak çerez oluşturmaz. Her birinin bunun yerine ne elde ettiği projeye göre farklılık gösterir ve sürümler arasında değişebilir; bu yüzden özetler yerine projenin kendi gizlilik belgelerini okuyun. Matomo, yönetici arayüzünden etkinleştirebileceğiniz IP anonimleştirme ve bir opt-out uç noktası ile birlikte gelir.

Düzenleyici kurumlar farklı ülkelerde farklı sonuçlara varmaktadır. Örneğin Fransa'nın CNIL kurumu, kitle ölçümünün hangi koşullar altında onaydan muaf tutulabileceğine dair şartlar yayınlamaktadır. Bu bölüm olgusal bir özet niteliğindedir ve hukuki tavsiye içermez. Gerçek kullanıcıları olan gerçek bir site için kendi yargı bölgenizdeki bir avukata danışın.

İnsanların gözden kaçırdığı bir nokta şudur: erişim logları da kişisel veridir. GoAccess sayfaya herhangi bir script eklemez ancak yine de IP adreslerini işler; bu nedenle log tabanlı analizler otomatik olarak kuralların dışında kalmaz.

Reklam engelleyiciler ve istatistiklerinizin neden düşeceği

Filtre listeleri, ana bilgisayar adı (hostname) ve URL kalıpları üzerinden eşleşme sağlar. Barındırılan bir analitik ürününü engellemek kolaydır, çünkü herkes bu ürünü aynı bilinen ana bilgisayar adından yükler. Veri toplayıcıyı kendi alt alan adınıza taşıdığınızda, bu ana bilgisayar adı istekten çıkar; betiği (script) seçtiğiniz bir yoldan sunduğunuzda ise bilinen dosya adı ortadan kalkar. Her iki işlem de filtre listesinin eşleşme kriterlerini değiştirir.

Bu yazı, bir başarı oranı iddia etmemektedir çünkü herhangi bir ölçüm yapılmamıştır. Belirli bir kurulumu engelleyen ziyaretçi oranı hedef kitlenize bağlıdır; yazılımcılardan oluşan bir kitle, genel bir kitleye kıyasla çok daha fazla engelleme yapar. Kendi farkınızı kendiniz ölçün. Aynı hafta içinde, erişim günlüklerindeki (access log) HTML sayfası isteklerini GoAccess ile sayın ve bunu betik tabanlı aracınızın raporladığı sayfa görüntüleme sayılarıyla karşılaştırın. Aradaki fark, sitenizde engellenen ziyaretler ile önbellekten sunulan sayfaların toplamıdır.

Barındırılan bir üründen geçiş yaptığınız gün toplam sayıların değişmesini bekleyin; ancak bu değişimin bir kısmının engelleme ile ilgisi olmayacağını göz önünde bulundurun. Ürünler, bir sayfa görüntülemenin ne olduğu, tek sayfalık bir uygulamada (SPA) rota değişiminin sayılıp sayılmayacağı ve bir oturumun ne zaman sona ereceği konularında farklı tanımlara sahiptir. Trafiğin düştüğü sonucuna varmadan önce haftalık trendleri karşılaştırın.

Hangi site için hangisi

  • Ayda yaklaşık 50.000 sayfa görüntülenmesi alan kişisel bir site veya blog: 1 GB VPS üzerinde, dosya kopyalama yöntemiyle yedeklenen GoatCounter veya Medama.
  • Script ekleyemediğiniz veya ziyaretçilerin yoğun engelleme yaptığı bir site: Zamanlanmış görevlerle mevcut log dosyaları üzerinden çalışan GoAccess.
  • Paneli başkasının okuduğu küçük bir işletme sitesi: Postgres container'ı ile birlikte Umami.
  • Hedefler ve dönüşüm hunileri istediğiniz, 2 GB veya daha fazla RAM'e sahip bir sunucu: Plausible Community Edition veya daha yeni bir panel istiyorsanız ve projenin daha yeni olmasını kabul ediyorsanız Rybbit.
  • Çok sayıda site, çok sayıda kullanıcı hesabı veya ham verileri kendi saklama politikanıza göre tutma zorunluluğu: Yukarıda yayınlanan kılavuzuna göre boyutlandırılmış Matomo.

Gerçek sorunuza yanıt veren en küçük araçla başlayın. Daha sonra GoatCounter'dan Plausible'a geçmek size bir alt alan adına ve biraz geçmiş veriye mal olur. Matomo'dan başka bir şeye geçmek ise keyif almayacağınız bir taşıma süreci gerektirir. Aynı sunucuda başka nelerin yer alacağına hala karar veriyorsanız, genel self-hosting rehberi yanına nelerin sığabileceğini açıklar; eğer istediğiniz ziyaretçi sayılarından ziyade uygulama düzeyinde istek takibi ise, bu iş için self-hosted gözlemlenebilirlik servisi doğru araçtır.

FAQ

Kendi sunucumda barındırdığım analiz araçları çerez bildirimi ihtiyacını ortadan kaldırır mı?

Hayır, bu iki konu birbirinden bağımsızdır. ePrivacy kapsamındaki onay kuralı, ziyaretçinin cihazına bir şey kaydetmeyi veya oradan bir şey okumayı kapsar; bu nedenle çerez oluşturmayan ve yerel depolamaya (local storage) hiçbir veri yazmayan bir araç bu gerekliliğin dışında kalır. GDPR ise farklı bir kuraldır ve kişisel verilerin işlenmesini kapsar. IP adresi kişisel veri sayıldığı için, çerez kullanmasanız dahi yasal bir dayanağa ve veri saklama sınırına ihtiyacınız vardır. Veriyi kendi sunucunuzda barındırmak, veriden sorumlu tarafın siz olduğunuz anlamına gelir. Kendi bölgenizdeki düzenleyici kurumun rehberini inceleyin ve özel durumunuz için bir hukuk uzmanına danışın.

Kendi sunucumda barındırdığım analiz araçları bir VPS üzerinde ne kadar RAM tüketir?

Bunu belirleyen gösterge paneli değil, veri deposudur. GoatCounter ve Medama tek bir dosya üzerinde tek bir süreç (process) olarak çalışır; Medama belgelerine göre küçük siteler 256 MB RAM'e sahip makinelerde çalışabilir. Umami, Node uygulamasına ek olarak bir Postgres container'ı gerektirir. Plausible Community Edition ve Rybbit ise ClickHouse kullanır ve her iki proje de en az 2 GB RAM önermektedir. Matomo'nun kendi rehberi, aylık 100.000 sayfa görüntülemesine kadar 2 CPU çekirdeği ve 2 GB RAM önermektedir.

Kendi sunucumdaki analiz rakamları neden değiştirdiğim analiz aracından daha düşük?

Bunun iki gerçek sebebi vardır. Filtre listeleri bazı toplayıcı (collector) isteklerini engeller, bu yüzden script tabanlı tüm araçlar bu ziyaretleri kaybeder. Ayrıca ürünler farklı sayım yöntemleri kullanır; bir sayfa görüntülemesinin ne olduğu ve bir oturumun ne zaman sona erdiği araçlar arasında farklılık gösterir. Erişim loglarınızdaki bir haftalık HTML sayfa isteklerini, aynı haftanın script tabanlı sayfa görüntüleme verileriyle karşılaştırın. Aradaki fark, engellenen ziyaretler ve tarayıcı önbelleğinden yüklenen sayfalardır; bu ölçümü başkasının yayınladığı oranlardan değil, kendi siteniz üzerinden yapın.

Plausible veya Rybbit'i ARM tabanlı bir VPS üzerinde çalıştırabilir miyim?

Her ikisi de ClickHouse kullanır ve ClickHouse, x86 mimarisinde SSE 4.2, ARM mimarisinde ise NEON desteğine ihtiyaç duyar. Plausible'ın gereksinimleri bunu açıkça belirtir; Rybbit belgeleri ise ARM sistemlerin ARMv8.2-A veya daha yeni bir mimariye sahip olması gerektiğini ifade eder. Güncel ARM sunucu çekirdekleri bu standardı karşılar, ancak eski çekirdekler karşılamaz. Bu durumda hata, uygulama günlüğünde değil, ClickHouse'un komut seti hatası vererek başlamayı reddetmesi şeklinde ortaya çıkar. Küçük bir ARM cihazında, tek dosya tabanlı araçlar ClickHouse kullanmadığı için bu sorunla karşılaşmazsınız.

Takip scripti kullanmak yerine sunucu loglarını mı ayrıştırmalıyım?

Script ekleyemediğiniz, hedef kitlenizin yoğun engelleme yaptığı veya botları da içeren bir sayım istediğiniz durumlarda log ayrıştırmayı tercih edin. GoAccess, sunucunuzun zaten yazmakta olduğu logları okur; bu nedenle sayfa boyutuna ek yük getirmez ve veritabanı gerektirmez. Ancak tarayıcı içinde gerçekleşen hiçbir veriyi alamazsınız; ayrıca CDN veya tarayıcı önbelleğinden sunulan sayfaları da kaçırırsınız, çünkü bu istekler sunucunuza ulaşmaz. Birçok site her iki yöntemi de kullanır ve bunları iki farklı ölçüm türü olarak değerlendirir.