SSD Nodes Learn Hosting plans →
الأدلة Matt Connorبقلم Matt Connor · آخر تحديث في 2026-08-28

أفضل أدوات تحليلات الويب ذاتية الاستضافة على VPS

قارن Plausible وUmami وMatomo وGoatCounter وGoAccess على VPS صغير، مع متطلبات RAM وقواعد البيانات ونمو القرص وإعداد reverse proxy وفجوة أدوات حظر الإعلانات.

ما أداة تحليلات الويب ذاتية الاستضافة التي ينبغي لك تشغيلها على VPS؟

تنقسم تحليلات الويب ذاتية الاستضافة إلى عائلتين، واختيار العائلة الخاطئة يكلّفك أكثر من اختيار المنتج الخاطئ. تشغّل إحدى العائلتين نصاً برمجياً صغيراً في متصفح الزائر، وتخزّن البيانات التي يرسلها ذلك النص. أما العائلة الأخرى فتقرأ access log الذي يكتبه خادم الويب لديك مسبقاً. وتنتج كل التفاصيل اللاحقة، بما في ذلك قاعدة البيانات والذاكرة التي تحتاج إليها، عن هذا الاختيار وحده.

الإجابة المختصرة لخادم صغير. يلائم GoatCounter وMedama خادماً بذاكرة 1 GB، لأن كل واحد منهما عبارة عن عملية واحدة تعمل فوق ملف واحد. يضيف Umami حاوية Postgres، ويوفّر لوحة معلومات يستطيع غير المتخصصين قراءة بياناتها. يشغّل كل من Plausible Community Edition وRybbit ‏ClickHouse، لذلك خطّط لذاكرة RAM بسعة 2 GB أو أكثر. Matomo هو المنتج الكامل، ويطلب خادماً يتناسب حجمه مع حجم حركة المرور لديك. ولا يضيف GoAccess شيئاً إلى الصفحة، لأنه يقرأ access log موجوداً مسبقاً.

وسم Script أو سجل الخادم: ما الذي يمكن لكل منهما رؤيته

يقيس وسم Script المتصفحات. تُحمَّل الصفحة، ويعمل Script، ثم يرسل طلباً واحداً إلى أداة التجميع لديك. وكل ما يقطع هذه السلسلة يكون غير مرئي لك: تعطيل JavaScript، أو قائمة ترشيح تحظر الطلب، أو فشل الطلب الموجّه إلى أداة التجميع، أو زاحف لا يشغّل Scripts.

يحلّل محلل السجلات الطلبات. يكتب خادم الويب سطراً واحداً لكل طلب، سواء ثبّتَّ أي شيء أم لا، ولذلك تكون البيانات موجودة على القرص مسبقاً. وهو يرى كل الزواحف وكل طلب يصل إلى ملف لا يحمل وسم Script. لكنه لا يستطيع رؤية ما حدث داخل المتصفح، ولا يستطيع رؤية صفحة قُدّمت من ذاكرة التخزين المؤقت للمتصفح أو من CDN (شبكة توصيل المحتوى) أمام خادمك، لأن ذلك الطلب لم يصل إلى خادمك.

لن يتطابق الرقمان، ولا يعني ذلك أن أحدهما خاطئ. يستطيع Matomo إجراء الأمرين، وهو يوضّح ما تفقده عملية استيراد السجلات مقارنةً بأداة التتبع JavaScript: دقة الشاشة وعناوين الصفحات، والأحداث، وتتبع المحتوى، والخرائط الحرارية، وتسجيلات الجلسات، وتحليلات النماذج. هذه هي كلفة عدّ الطلبات بدلاً من المتصفحات.

تمثّل حركة الروبوتات النصف الآخر من الفجوة. تشمل الأعداد المعتمدة على السجلات الزواحف ما لم ترشّحها، وفي الموقع العادي تكون حصة الزواحف كبيرة بما يكفي لتغيير استنتاجاتك. يرشّح كل من GoAccess واستيراد سجلات Matomo الروبوتات المعروفة. ولا يستطيع أي منهما ترشيح زاحف يزوّر User-Agent الخاص به. لذلك من الأفضل الجمع بين أي عدّ معتمد على السجلات وحظر زواحف الذكاء الاصطناعي على الخادم، وقراءة السجل بعد الحظر لا قبله.

GoAccess: تحليلات من السجل الموجود لديك

ثبّته من مستودع المشروع الخاص بـ Debian وUbuntu، لأن حزم التوزيعة تتأخر عن الإصدارات الجديدة.

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

وجّهه إلى السجل، واكتب تقريراً ثابتاً.

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

يفشل هذا الأمر مع Permission denied لدى المستخدم العادي، لأن سجل nginx في Ubuntu مملوك للحساب root، ومجموعته هي adm. أضف حسابك إلى هذه المجموعة باستخدام sudo usermod -aG adm $USER، ثم سجّل الخروج وأعد تسجيل الدخول، لأن عضوية المجموعة تُقرأ عند تسجيل الدخول. شغّل id وتحقق من ظهور adm في القائمة قبل إعادة المحاولة.

يغطي التقرير المستند إلى السجل المباشر فقط الإدخالات التي لم ينقلها logrotate بعد. توجد طلبات الأمس في access.log.1، بينما تكون الطلبات الأقدم مضغوطة؛ لذلك يجب أن يقرأ العرض الأسبوعي الملفات التي جرى تدويرها أيضاً.

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

يتوفر أيضاً وضع مباشر، --real-time-html، يحدّث الصفحة عبر WebSocket. ويحتاج ذلك إلى منفذ ثانٍ وقاعدة proxy مستقلة. بالنسبة إلى معظم المواقع، يكفي تقرير يُكتب كل ساعة عبر cron، كما أن تأمينه يتطلب جهداً أقل.

GoatCounter: ملف تنفيذي واحد بلغة Go وملف SQLite واحد

يُصدِر GoatCounter ملفاً تنفيذياً ثابت الترجمة، لذلك لا تحتاج إلى تثبيت بيئة تشغيل. نزّل إصداراً من صفحة الإصدارات وشغّله، أو استخدم الصورة.

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

عند تشغيله كملف تنفيذي، يستمع goatcounter serve على المنفذ 8080 وينشئ قاعدة SQLite في ./goatcounter-data/db.sqlite3. أنشئ الموقع الأول من سطر الأوامر بدلاً من معالج الإعداد على الويب عندما تكون النسخة موجودة خلف Proxy.

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

يمكنه إدارة شهادته بنفسه باستخدام goatcounter serve -listen=:443 -tls=tls,rdr,acme عبر ACME (بيئة إدارة الشهادات التلقائية)، وهذا مفيد على خادم لا يشغّل خدمات أخرى. عندما يكون nginx أو Caddy قد حجز المنفذ 443، اترك GoatCounter يستمع على 8080 ووجّه الطلبات إليه عبر Proxy بدلاً من ذلك. يبلغ حجم سكربت التتبع نحو 3.5K وفقاً لرقم المشروع، ويتوفر أيضاً tracking pixel للصفحات التي لا تحتوي على JavaScript. إذا أصبحت SQLite عنق زجاجة في موقع مزدحم، يقبل الملف التنفيذي نفسه Postgres باستخدام goatcounter serve -db 'postgresql+dbname=goatcounter'. النسخ الاحتياطية عبارة عن نسخ للملف، وهذا هو المبرر العملي لهذا التصميم من الأدوات.

Medama: حاوية واحدة تدّعي استخدام 256 MB

Medama هو أحدث خيار ثنائي واحد هنا. صُمّم ليعمل دون cookies، ويذكر المشروع أن حجم أداة التتبع أقل من 1 KB، وأن المواقع الصغيرة تعمل على أجهزة افتراضية بذاكرة 256 MB. هذه أرقام منشورة من المشروع، وليست قياسات أُجريت لهذا الدليل.

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

ينشر الأمر الرسمي المنفذ على أنه 8080:8080. بادئة loopback المذكورة أعلاه مقصودة، ويشرح قسم reverse proxy سبب ذلك. يكون تسجيل الدخول الأول عبر admin باستخدام كلمة المرور CHANGE_ME_ON_FIRST_LOGIN، واسم كلمة المرور هو التعليمات.

هناك حالة فشل موثقة ينبغي الانتباه إليها. لا يعمل تسجيل الدخول إلا عبر HTTPS أو على localhost. لذلك، إذا أعددت الـproxy قبل الشهادة، فسيرفض النموذج كلمة مرور صحيحة، ولن يعرض السبب. أكمل إعداد TLS (أمان طبقة النقل) أولاً، ثم سجّل الدخول.

Umami: PostgreSQL ولوحة معلومات مألوفة للمستخدمين

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

يشغّل ذلك التطبيق على المنفذ 3000 مع حاوية PostgreSQL إلى جانبه. تذكر الوثائق أن PostgreSQL v12.14 هو الحد الأدنى المطلوب، وأن Node.js 18.18 أو أحدث مطلوب إذا بنيت التطبيق من المصدر بدلاً من استخدام الصورة الجاهزة. تتوفر صورة مبنية مسبقاً، docker.umami.is/umami-software/umami:postgresql-latest، وتحتاج إلى ضبط DATABASE_URL ليشير إلى قاعدة بيانات تديرها مسبقاً.

بيانات تسجيل الدخول الأولى هي admin وكلمة المرور هي umami. غيّر كلمة المرور قبل توجيه DNS إلى الخادم، لأن المثيل يصبح قابلاً للوصول من الإنترنت فور حل السجل واستجابة الـproxy. للحصول على تفاصيل Compose وملفات البيئة وسياسة إعادة التشغيل، راجع حزمة Docker Compose على VPS بدلاً من نسخ حزمة لم تقرأها.

يتكوّن هذا التثبيت من عملية Node وPostgres. وهو أثقل من ملف ثنائي واحد، وأخف بكثير من أي شيء يشغّل ClickHouse.

Plausible Community Edition: يضع ClickHouse الحد الأدنى للذاكرة

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 هو الإصدار الحالي اعتباراً من August 2026، ويثبّت أمر الاستنساخ هذا الإصدار عمداً. يتكوّن المكدس من ثلاثة أجزاء: التطبيق، وPostgres للحسابات والإعدادات، وClickHouse لبيانات الأحداث. يجب أن تكون SECRET_KEY_BASE سلسلة بطول 64 بايتاً على الأقل، وهذا ما ينتجه استدعاء openssl.

تتطلب متطلبات Plausible نفسها ذاكرة RAM لا تقل عن 2 GB حتى لا يتسبب ClickHouse والتطبيق في وصول قاتل نفاد الذاكرة، كما تتطلب CPU يدعم SSE 4.2 أو NEON، وهو ما يحتاج إليه ClickHouse. يجدر بك التحقق من المتطلب الثاني قبل الشراء، فهو أحد الفروق العملية عند الاختيار بين VPS بمعمارية ARM وVPS بمعمارية x86. سيستخدم ClickHouse أيضاً مقدار الذاكرة الذي يراه متاحاً، لذلك عيّن حداً أقصى على خادم مشترك كما هو موضح في تحديد حد لذاكرة الحاوية في Compose.

يجب أن تساوي BASE_URL عنوان URL العام تماماً. عندما لا تساويه، تسجّل الدخول، ثم يعيد التطبيق توجيهك إلى المضيف الخطأ، وتُكتب session cookie لنطاق لا يستخدمه متصفحك، فتعود إلى نموذج تسجيل الدخول من دون رسالة خطأ.

لا ينشر ملف compose المرفق أي منفذ، لأن التصميم يفترض وجود proxy أمام التطبيق. أضف ملف override ينشر منفذ التطبيق الافتراضي على loopback فقط.

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

Matomo: المنتج الكامل والخادم الذي يحتاج إليه

يعمل Matomo على PHP مع MySQL أو MariaDB، ولذلك فهو يناسب حزمة الويب التقليدية وليس حزمة الحاويات. وهو أيضاً الأداة الوحيدة هنا التي تنشر إرشادات العتاد وفقاً لحجم حركة المرور.

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
  }
]

هذه هي الحدود الدنيا المنشورة من Matomo اعتباراً من August 2026، وليست قياسات أُجريت لهذا الدليل. حتى 100,000 مشاهدة صفحة شهرياً، يحتاج إلى 2 من أنوية CPU، و2 GB من RAM، و50 GB من SSD، ويستضيف خادم واحد التطبيق وقاعدة البيانات معاً. عند 1M/month يصبح الاحتياج 8 GB من RAM و250 GB من القرص. عند 10M/month يوصي Matomo بخادمين، ويعرض الصف الأخير خادم قاعدة البيانات: 16 GB من RAM و400 GB من القرص. اقرأ أرقام القرص هذه إلى جانب خيارات الملف الثنائي الواحد، حيث تكون مجموعة البيانات بأكملها ملف SQLite واحداً.

الأرشفة هي ما يفاجئ المستخدمين. ينشئ Matomo تقاريره افتراضياً عندما يفتح أحدهم لوحة المعلومات، ولذلك تصبح لوحة المعلومات أبطأ مع نمو البيانات، ثم تنتهي مهلة الطلب في النهاية. والإصلاح الموثق هو تعطيل الأرشفة التي يطلقها المتصفح في الإعدادات العامة، وتشغيل أداة الأرشفة من cron بدلاً من ذلك، باستخدام المستخدم الذي يملك ملفات Matomo، ومن دليل Matomo.

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

يحتفظ Matomo أيضاً بجداول السجلات الأولية إلى جانب جداول التقارير المعالجة، ويمكنه حذف البيانات الأولية القديمة والتقارير القديمة وفق جدول زمني. فعّل ذلك عند التثبيت، لا بعد امتلاء القرص. ويمكن لـMatomo استيراد سجلات وصول الخادم أيضاً، ولذلك فهو المنتج الوحيد هنا الذي يغطي العائلتين معاً.

Rybbit والمكدسات الأحدث

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

Rybbit مشروع حديث نسبياً ويأتي بلوحة تحكم عصرية. يكتب برنامج الإعداد ملف البيئة ويشغّل المكدس باستخدام Docker Compose. ويشغّل ClickHouse، كما يضم Caddy كخادم ويب خاص به؛ إذ يستمع على المنفذ 443 ويطلب شهادة للنطاق الذي أدخلته. إذا كان nginx يستخدم المنفذ 443 مسبقاً على الخادم، فلن يتمكن البرنامج النصي من ربط المنفذ. استخدم بدلاً من ذلك طريقة Compose اليدوية الخاصة بالمشروع، وضعه خلف الـproxy الحالي لديك. تذكر الوثائق أن الحد الأدنى هو 2 GB من RAM، وأن الاختبار أُجري على Ubuntu 24 LTS، وأن ARMv8.2-A أو أحدث مطلوب على ARM بسبب ClickHouse.

يجب الانتباه إلى أمر أساسي في أي مشروع حديث: تصل الميزات بسرعة، وكذلك التغييرات غير المتوافقة. ثبّت tag محدداً، واقرأ ملاحظات الإصدار قبل تنفيذ pull، وأنشئ نسخة احتياطية لقاعدة البيانات أولاً.

قياس مدة الاحتفاظ ونمو القرص: قِسه على خادمك

يعتمد نمو القرص على ما تخزّنه الأداة لكل حدث. يجمع GoatCounter الزيارات في عدادات، لذلك ينمو ملفه مع عدد الصفحات والأيام المختلفة أكثر مما ينمو مع الحجم الخام للزيارات. يخزّن Umami وMatomo صفوفاً لكل حدث، ويخزّن Matomo جداول تقارير معالجة فوق الجداول الخام. يخزّن ClickHouse الأحداث في أعمدة ويضغطها بدرجة كبيرة، ولذلك يستطيع Plausible التعامل مع حجم قد يجهد مخزناً يعتمد على الصفوف.

لا ينشر هذا الدليل رقماً بالميغابايت لكل مليون مشاهدة صفحة، لأن هذا الرقم لم يُقَس على حركة المرور لديك. خذ القياس بنفسك. عدّل أسماء الخدمات والمستخدمين لتطابق ملف Compose لديك.

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"

سجّل الرقم، وانتظر أسبوعاً، ثم سجّله مرة أخرى، واقسم الفرق على عدد مشاهدات الصفحات الذي تعرضه لوحة المعلومات لذلك الأسبوع. يعبّر هذا الرقم عن موقعك وعن تصفية الروبوتات لديك، ولذلك فهو أكثر فائدة من أي متوسط منشور. بعد ذلك، حدّد حداً لمدة الاحتفاظ بينما لا يزال الرقم صغيراً. يؤدي امتلاء القرص إلى إيقاف كل خدمة على VPS، وليس خدمة التحليلات فقط، وهذا أقوى سبب لوضع وحدة تخزين قاعدة البيانات في مكان سيحذّرك df -h منه. يستحق هذا الخطر مزيداً من الاهتمام على خادم يحتوي بالفعل على شيء كبير الحجم، لأن خادم صور مستضاف ذاتياً سيستهلك القرص قبل وقت طويل من اقتراب أي قاعدة بيانات تحليلات من الحد.

السلوك خلف Reverse Proxy على نطاق فرعي

ضع أداة الجمع على نطاق فرعي للموقع الذي تقيسه، مثل stats.example.com. يجعل ذلك طلب أداة الجمع من النطاق نفسه، لذلك لا تتأثر بقواعد المتصفح التي تحظر الطلبات من نطاقات خارجية.

اربط التطبيق بواجهة loopback عند نشر منفذ الحاوية. يكتب Docker قواعد جدار الحماية الخاصة به قبل قواعد ufw، لذلك تكون الحاوية المنشورة على -p 3000:3000 قابلة للوصول من الإنترنت حتى عندما يوضح ufw status أن المنفذ محظور. اختبر ذلك من جهاز آخر باستخدام curl http://SERVER_IP:3000، وستصل إلى لوحة المعلومات. عند نشرها على -p 127.0.0.1:3000:3000، يعرض الاختبار نفسه Connection refused، ولا يستطيع الوصول إليها إلا الـproxy. لا تقتصر فائدة هذه الممارسة على إخفاء لوحة المعلومات؛ فهي جوهر تشغيل onion service على الخادم نفسه، لأن أي خدمة تظل تستجيب على الواجهة العامة هي التي تربط العنوان المخفي بعنوان IP الخاص بك. يجب أن تظل نقطة نهاية الجامع قابلة للوصول من الإنترنت العام، لكن لوحة المعلومات لا تحتاج إلى ذلك. وإذا كنت تفضّل قراءتها عبر شبكة خاصة بدلاً من نشر نطاق فرعي ثانٍ، فإن إتاحة شبكة VPS لشبكة tailnet عبر subnet router تحقق ذلك من دون فتح منفذ.

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;
    }
}

رؤوس إعادة التوجيه ضرورية هنا. من دون X-Forwarded-For، يصل كل طلب من 127.0.0.1، لذلك يكون تقرير البلدان فارغاً ويتقارب عدد الزوار الفريدين نحو 1. يحدد كل مشروع الرأس الذي يثق به والإعداد الذي يستخدمه، لذا راجع وثائق الـproxy الخاصة به مرة واحدة بدلاً من الافتراض. يضبط Caddy هذه الرؤوس بنفسه، ويتكون Caddyfile للمهمة نفسها من سطرين.

stats.example.com {
    reverse_proxy 127.0.0.1:3000
}

إذا لم تكن قد اخترت proxy بعد، فتوضح مقارنة nginx وCaddy وTraefik أيها يناسب خادماً واحداً مع بضعة نطاقات فرعية.

هل ما زلت تحتاج إلى لافتة ملفات تعريف الارتباط إذا كنت تستضيف الخدمة بنفسك؟

تغيّر الاستضافة الذاتية الجهة التي تحتفظ بالبيانات. لكنها لا تغيّر ما ينص عليه القانون بشأن هذه البيانات. افصل بين قاعدتين. تتعلق قاعدة الموافقة في ePrivacy بتخزين أي شيء على جهاز الزائر أو قراءته، لذلك تكون الأداة التي لا تنشئ ملف تعريف ارتباط ولا تكتب شيئاً في التخزين المحلي خارج نطاق هذا المتطلب المحدد. أما GDPR فتتعلق بمعالجة البيانات الشخصية، ويُعد عنوان IP بيانات شخصية، لذلك ما زلت تحتاج إلى أساس قانوني، وحد للاحتفاظ بالبيانات، وإجابة عندما يطلب شخص معرفة ما تحتفظ به عنه.

لا تنشئ Plausible وUmami وGoatCounter وMedama أي ملف تعريف ارتباط افتراضياً. لكن ما يستنتجه كل مشروع بدلاً من ذلك يختلف من مشروع إلى آخر ويتغير بين الإصدارات، لذلك اقرأ وثائق الخصوصية الخاصة بالمشروع بدلاً من الاعتماد على ملخص. يتضمن Matomo إخفاء هوية عناوين IP ونقطة نهاية لإلغاء الاشتراك، ويجب تفعيلهما من واجهة الإدارة.

تصل الجهات التنظيمية إلى استنتاجات مختلفة في البلدان المختلفة. فعلى سبيل المثال، تنشر CNIL في فرنسا شروطاً يمكن بموجبها إعفاء قياس الجمهور من الموافقة. هذا القسم ملخص واقعي وليس استشارة قانونية. إذا كان لديك موقع فعلي ومستخدمون فعليون، فاستشر محامياً في نطاقك القضائي.

هناك نقطة يغفلها الناس: سجل الوصول هو بيانات شخصية أيضاً. لا يضيف GoAccess أي script إلى الصفحة، لكنه يظل يعالج عناوين IP، لذلك لا تكون تحليلات السجلات خارج نطاق القواعد تلقائياً. إن نقل خدمة إلى خادمك الخاص ينقل موضع التعرض بدلاً من إزالته، وهذا هو السبب نفسه الذي يجعل ما الذي تخفيه مثيلة SearXNG المستضافة ذاتياً فعلياً يتوقف عند محركات البحث، بينما تصل الاستعلامات نفسها إلى سجلاتك أنت.

حاجبات الإعلانات، ولماذا ستنخفض أرقامك

تطابق قوائم التصفية اسم المضيف ونمط عنوان URL. يسهل مطابقة منتج التحليلات المستضاف، لأن الجميع يحمّله من اسم مضيف معروف وموحّد. يؤدي نقل جامع البيانات إلى نطاق فرعي تملكه إلى إزالة اسم المضيف هذا من الطلب، كما أن تقديم البرنامج النصي من مسار اخترته يزيل اسم الملف المعروف. ويغيّر كلا الإجراءين ما يجب أن تطابقه القائمة.

لا يحدّد هذا المنشور معدل إصابة، لأنه لم يقس واحداً. تعتمد نسبة الزوار الذين يحظرون أي إعداد محدد على جمهورك، ويحظر جمهور المطورين بنسبة أكبر بكثير من الجمهور العام. قِس الفجوة لديك بدلاً من ذلك. خلال الأسبوع نفسه، أحصِ طلبات صفحات HTML في سجل الوصول باستخدام GoAccess، وقارنها بمشاهدات الصفحات التي تسجّلها أداتك المعتمدة على البرنامج النصي. يمثل الفرق الزيارات المحظورة، إضافة إلى الصفحات المقدمة من الذاكرة المؤقتة، على موقعك.

توقع تغيّر الإجماليات في اليوم الذي تنتقل فيه من منتج مستضاف، وتوقع أن يكون جزء من هذا التغيّر غير مرتبط بالحظر. تختلف المنتجات في تعريف مشاهدة الصفحة، وفي تحديد ما إذا كان تغيير المسار داخل تطبيق صفحة واحدة يُحتسب مشاهدة واحدة، وفي توقيت انتهاء الجلسة. قارن الاتجاهات عبر أسابيع متعددة قبل أن تستنتج أن حركة الشبكة انخفضت.

ما الخيار المناسب لكل موقع

  • موقع شخصي أو مدونة تستقبل نحو 50,000 مشاهدة صفحة شهرياً أو أقل: استخدم GoatCounter أو Medama على VPS بسعة 1 GB، مع نسخ احتياطية تكون عبارة عن نسخ للملفات.
  • موقع لا يمكنك إضافة نص برمجي إليه، أو جمهور يحظر النصوص البرمجية بدرجة كبيرة: استخدم GoAccess على السجل الحالي وفق جدول زمني.
  • موقع لشركة صغيرة يطّلع شخص آخر على لوحة معلوماته: استخدم Umami مع حاوية Postgres الخاصة به.
  • موقع تريد له أهدافاً ومسارات تحويل، ويعمل على خادم بسعة 2 GB من RAM أو أكثر: استخدم Plausible Community Edition، أو Rybbit إذا كنت تريد لوحة المعلومات الأحدث وتقبل بأن المشروع أحدث وأقل نضجاً.
  • مواقع كثيرة، أو حسابات مستخدمين كثيرة، أو حاجة إلى إبقاء البيانات الخام وفق سياسة الاحتفاظ الخاصة بك: استخدم Matomo، مع تحديد الموارد استناداً إلى الإرشادات المنشورة أعلاه.

ابدأ بأصغر أداة تجيب عن سؤالك الفعلي. الانتقال من GoatCounter إلى Plausible لاحقاً يكلّفك نطاقاً فرعياً وبعض السجل التاريخي. أما الانتقال من Matomo إلى أي أداة أخرى فيتطلب عملية ترحيل لن تستمتع بها. إذا كنت لا تزال تقرر ما الذي يمكن وضعه على الخادم نفسه، فتغطي المقارنة الأوسع لخدمات الاستضافة الذاتية ما يمكن تشغيله بجواره، وإذا كان ما تريده فعلاً هو تتبّع الطلبات على مستوى التطبيق بدلاً من عدّ الزوار، فـخدمة قابلية المراقبة ذاتية الاستضافة هي الأداة المناسبة لذلك.

FAQ

هل يلغي الاستضافة الذاتية للتحليلات الحاجة إلى لافتة ملفات تعريف الارتباط؟

لا، والسؤالان منفصلان. تغطي قاعدة الموافقة بموجب ePrivacy تخزين شيء ما على جهاز الزائر أو قراءته، لذلك فإن الأداة التي لا تنشئ أي cookie ولا تكتب شيئاً في التخزين المحلي لا تخضع لهذا المتطلب تحديداً. أما GDPR فهي قاعدة مختلفة، وتغطي معالجة البيانات الشخصية. ويُعد عنوان IP بيانات شخصية، لذلك ما زلت تحتاج إلى أساس قانوني وحد للاحتفاظ بالبيانات حتى من دون cookie. تنقل الاستضافة الذاتية البيانات إلى خادمك، وتجعلك الجهة المسؤولة عنها. راجع إرشادات الجهة التنظيمية في بلدك واستشر محامياً بشأن حالتك.

ما مقدار RAM الذي تحتاج إليه تحليلات مستضافة ذاتياً على VPS؟

يحدد مخزن البيانات ذلك، وليس لوحة المعلومات. يعمل GoatCounter وMedama كعملية واحدة فوق ملف واحد، وتذكر وثائق Medama أن المواقع الصغيرة تعمل على أجهزة تحتوي على 256 MB. يضيف Umami حاوية Postgres بجوار تطبيق Node. ويستخدم كل من Plausible Community Edition وRybbit ClickHouse، ويذكر كلا المشروعين حداً أدنى قدره 2 GB. تبدأ إرشادات Matomo الخاصة من 2 نوى CPU و2 GB من RAM لما يصل إلى 100,000 مشاهدة صفحة شهرياً.

لماذا أرقام التحليلات المستضافة ذاتياً لدي أقل من أرقام أداة التحليلات التي استبدلتها؟

هناك سببان، وكلاهما حقيقي. تحظر قوائم التصفية بعض طلبات collector، لذلك تفقد كل أداة تعتمد على script بعض تلك الزيارات. كما تحسب المنتجات الزيارات بطرق مختلفة، لأن تعريف مشاهدة الصفحة ووقت انتهاء الجلسة يختلفان بينها. قارن طلبات صفحات HTML خلال أسبوع واحد من access log مع مشاهدات الصفحات المعتمدة على script خلال الأسبوع نفسه. يتكون الفرق من الزيارات المحظورة والصفحات المخزنة مؤقتاً، ويُقاس على موقعك أنت بدلاً من الاعتماد على معدل منشور من جهة أخرى.

هل يمكنني تشغيل Plausible أو Rybbit على VPS يعمل بمعمارية ARM؟

يستخدم كلاهما ClickHouse، ويتطلب ClickHouse SSE 4.2 على x86 أو NEON على ARM. تذكر متطلبات Plausible ذلك حرفياً، وتوضح وثائق Rybbit أن أنظمة ARM تحتاج إلى ARMv8.2-A أو إصدار أحدث. تستوفي أنوية خوادم ARM الحالية هذا الشرط، بينما لا تستوفيه الأنوية الأقدم. ويظهر الفشل على شكل رفض ClickHouse بدء التشغيل مع خطأ في مجموعة التعليمات، وليس كخطأ في application log. على جهاز ARM صغير، تتجنب أدوات الملفات المفردة هذه المشكلة، لأن أياً منها لا يشغّل ClickHouse.

هل ينبغي أن أحلل سجلات الخادم بدلاً من استخدام script للتتبع؟

استخدم تحليل السجلات عندما لا يمكنك إضافة script، أو عندما يحظر جمهورك scripts بكثرة، أو عندما تريد عدّاً يشمل crawlers. يقرأ GoAccess سجلاً يكتبه خادمك بالفعل، لذلك لا يضيف أي وزن إلى الصفحة ولا يحتاج إلى قاعدة بيانات. لكنك تفقد كل ما يحدث داخل المتصفح، ولا ترى أي صفحة تُخدم من CDN أو من cache المتصفح، لأن ذلك الطلب لم يصل إلى خادمك. تشغّل مواقع كثيرة الطريقتين معاً، وتتعامل معهما باعتبارهما قياسين مختلفين.