تميمة الدب القطبي لـNordBastion واقفة أمام منبر حجري نوردي منحوت، ولوحة تحكم هولوغرافية سيانية ضخمة تطفو فوقه تعرض رسومًا بيانية شريطية، ومنحنى خطيًا صاعدًا، وحلقة دائرية مفرغة بلمسة عنبرية واحدة، وسلسلة واحدة متصلة من نقاط سيانية متوهجة تمتد من نافذة مقنطرة تتلألأ فيها الشفق القطبي عبر لوحة التحكم إلى باب قبو منقوش برموز رونية، وخلفها رف خوادم
دليل عملي · التحليلات·18 دقيقة قراءة · 40 دقيقة تطبيقًا

لقد ثبّتَ سكربتًا واحدًا لمراقبة قرّائك.
إنه يرصدك بدوره، ويُرسل تقاريره إلى مكان آخر.

التحليلات هي آخر وسم من طرف ثالث يحتفظ به معظم الناس، وهي الوسم الذي يرى كل شيء: كل صفحة، وكل قارئ، وكل ساعة، على نظام لا تملكه ولا يمكنك تدقيقه. ست خطوات لاستبداله بعدّاد تملكه أنت — Umami أو Plausible Community Edition أو Matomo أو مجرد سجل الخادم — يعمل على خادم نوردي مُستأجر بلا وثيقة هوية. بلا ملفات تعريف بشكل افتراضي، وبلا شريط موافقة تتجادل حوله، وبلا نقل لقرّائك إلى بلد ثالث. بدءًا من $3.90 شهريًا. جُرِّب على Debian 12.

الخطوات الست
  1. 01

    الاختيار

    أربع أدوات، جدول واحد صادق

  2. 02

    التوفير

    نطاق فرعي واحد، وثلاثة منافذ

  3. 03

    نشر

    Compose وCaddy وتسجيل الدخول الأول

  4. 04

    القياس

    وسم واحد، والمسار من الجهة الأولى

  5. 05

    الامتثال

    قانونان، لا قانون واحد

  6. 06

    Keep

    مدة الاحتفاظ، والنسخ الاحتياطي، والسجل المنسي

قبل أن تبدأ · ما هو الوسم

إنه ليس عدّادًا. إنه خط تقارير.

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

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

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

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

الخاصية وسم التحليلات المجاني الكبير خدمة تحليلات SaaS تُغلّب الخصوصية نفس البرمجية، خادمك VPS الخاص
من يحتفظ بجدول القرّاءشركة إعلاناتمزوّد خدمة، بموجب عقدأنت، على القرص
شريط الموافقة مطلوبنعم، دائمًا في الممارسة العمليةغالبًا لاغالبًا لا — انظر الخطوة 05
البيانات تغادر المنطقة الاقتصادية الأوروبيةنعم، بحسب التصميميعتمد على المزوّدفقط إذا اخترت خادمًا خارجها
أطراف ثالثة يجب الإفصاح عنهاواحدة على الأقل، إضافة إلى مُعالجيها الفرعيينمعالج واحدلا شيء
محجوب بواسطة قوائم الحجببشدةباسم المضيف، غالبًانادرًا، بمجرد أن يصبح من الجهة الأولى
بيانات خام متاحة لكلا — تقارير فقطعبر API، ما دمت تدفعإنها قاعدة بياناتك
التكلفة الشهرية عند 100k مشاهدةلا شيء من حيث المالعشرات الدولارات، وترتفع مع الزيارات$3.90–$7.90، ثابت
اخترها حينأنت بحاجة إلى التكامل مع منصة الإعلانات وتتقبّل بقية الأمرتريد الجانب الأخلاقي بلا تشغيل أي شيءالقرّاء لك، والجدول لك أيضًا

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

الخطوة 01 · الاختيار

أربع أدوات. قاعدة البيانات هي التي تحدد الفاتورة.

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

الأداة الحزمة والتخزين الفئة المناسبة اخترها من أجل
Umamiتطبيق Node + PostgreSQL أو MySQL. حاويتان.Sentinel · $3.90الجواب الافتراضي. خفيف، وواضح، وبلا ملفات تعريف، ومتعدد المواقع، ومرخّص بموجب MIT.
Plausible Community Editionتطبيق Elixir + PostgreSQL + ClickHouse. أربع حاويات.Garrison · $7.90الأهداف، ومسارات التحويل، ولوحات التحكم العامة؛ واستعلامات سريعة عند الحجم الكبير.
Matomoتطبيق PHP + MariaDB، إضافة إلى مهمة أرشفة مجدولة.Garrison · $7.90تكافؤ في الميزات مع الأداة القائمة — الشرائح، والأفواج، والتجارة الإلكترونية، واستيراد السجلات.
GoAccessملف تنفيذي واحد يقرأ سجل وصول خادم الويب. بلا قاعدة بيانات.أيًا كان ما تشغّله بالفعلبلا JavaScript على الإطلاق — المواقع الثابتة، والوثائق، وواجهات API.

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

Plausible Community Edition هو الإصدار القابل للاستضافة الذاتية من المنتج المستضاف، والعنصر الإضافي فيه هو ClickHouse — قاعدة بيانات عمودية تجعل الاستعلامات التجميعية على عشرات الملايين من الصفوف تبدو فورية، وتستهلك من الذاكرة بقدر ما تسمح له. هذه مقايضة عادلة فوق حدود بضعة ملايين من الزيارات الشهرية، وغريبة تحت هذا الحد. اقرأ شروط ترخيص المشروع قبل النشر: فالإصدار المجتمعي مخصص لتشغيل تحليلاتك الخاصة، لا لإعادة بيعه كخدمة.

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

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

القرار في سطر واحد

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

الخطوة 02 · التجهيز

خادم واحد، واسم واحد. أصلح الاسم أولًا.

اطلب VPS واختر مدينة الحصن وفقًا لموقع قرّائك والمكان الذي تريد أن تستقر فيه بياناتك — ستوكهولم وهلسنكي وأوسلو وريكيافيك جميعها داخل المنطقة الاقتصادية الأوروبية، وهذا هو المقصود بالضبط. ثم شغّل جولة التصليب في الساعة الأولى قبل أن يلمس الخادم أي شيء آخر: SSH بالمفتاح فقط، ومنفذ مُغيَّر، وجدار حماية يرفض كل شيء بشكل افتراضي، وتحديثات بلا مراقبة. هذه هي الأربعون دقيقة نفسها في كل دليل من هذه السلسلة، وهي ليست اختيارية على جهاز سيحمل سنة كاملة من قرّاء شخص ما.

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

dig +short stats.example.com          # must return the VPS address before you deploy
ufw default deny incoming
ufw allow 47222/tcp                  # administrative SSH, moved off 22
ufw allow 80/tcp                     # ACME challenge and the redirect to 443
ufw allow 443/tcp                    # the dashboard and the collection endpoint
ufw enable && ufw status numbered

ثلاثة منافذ، ولا شيء آخر. يجب ألا تُنشَر قاعدة البيانات: فهي تعيش على شبكة Docker الداخلية، ويمكن لحاوية التطبيق الوصول إليها ولا يستطيع ذلك أي شخص آخر على الإنترنت. وهذا هو السبب الأكثر شيوعًا على الإطلاق لظهور خادم تحليلات ذاتي الاستضافة في نتيجة فحص: منفذ PostgreSQL أو MySQL مرتبط بالعنوان العام لأن ملف Compose من درس تعليمي كان يحتوي على تخطيط منافذ وُضع أصلًا للتطوير المحلي.

بخصوص الحجم، قاوم الرغبة في الشراء الزائد. فئة Sentinel — 2 vCPU، و4 GB، و120 GB NVMe، بسعر $3.90 شهريًا — تشغّل Umami مع Postgres وتترك مساحة فائضة، وستحتفظ بسنوات من الأحداث لموقع يبلغ زياراته الشهرية ست خانات رقمية. وارتقِ إلى فئة Garrison — 4 vCPU، و8 GB، و240 GB — إذا اخترت Plausible، لأن ClickHouse يكون أكثر ارتياحًا هناك، أو Matomo، لأن مهمة الأرشفة تحتاج إلى الأنوية. عرض النطاق غير محدود في كل الفئات، وحركة التحليلات خطأ تقريب لا يُذكر بالمقارنة معه: فكل زيارة لا تتجاوز بضع مئات من البايتات.

الخطوة 03 · النشر

حاويتان ووكيل واحد. ثم أغلق الباب.

عملية النشر المرجعية أدناه هي Umami، لأنها الأداة التي ينبغي لأغلب القراء تشغيلها، ولأن الشكل العام قابل للتعميم: حاوية تطبيق، وحاوية قاعدة بيانات يمكنها الوصول إليها ولا يستطيع أي طرف آخر ذلك، ووكيل عكسي يحمل الشهادة. تختلف Plausible وMatomo في عدد الحاويات وأسماء المتغيرات، لا في البنية — فخذ ملفات Compose الرسمية الخاصة بهما وطبّق القواعد الثلاث نفسها.

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

mkdir -p /srv/analytics && cd /srv/analytics
openssl rand -base64 32 > .app_secret      # keep this file; back it up with the database
openssl rand -base64 24 > .db_password
chmod 600 .app_secret .db_password

ملف Compose. خدمتان، وشبكة خاصة واحدة، ووحدة تخزين واحدة مُسمّاة لقاعدة البيانات، وليس أي منفذ منشور — فالوكيل هو الشيء الوحيد الذي يتحدث إلى العالم الخارجي:

services:
  umami:
    image: ghcr.io/umami-software/umami:postgresql-v2.x.y   # an exact tag, never :latest
    environment:
      DATABASE_URL: postgresql://umami:CHANGE_ME@db:5432/umami
      APP_SECRET:   CHANGE_ME                                # the openssl output above
    depends_on: [db]
    restart: unless-stopped
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB:       umami
      POSTGRES_USER:     umami
      POSTGRES_PASSWORD: CHANGE_ME
    volumes:
      - umami-db:/var/lib/postgresql/data
    restart: unless-stopped
volumes:
  umami-db:

Caddy هو أقصر طريق إلى إعداد TLS صحيح هنا: سطران من الإعداد، وشهادة يتم الحصول عليها وتجديدها دون مهمة cron، وإعدادات افتراضية حديثة لا تحتاج إلى البحث عنها. إذا كنت تشغّل nginx على الخادم بالفعل، فابقَ عليه — فالمطلوب هو وكيل أمامي، لا هذا الوكيل بعينه. وفي كل الحالات، يجب ألا يكون تطبيق التحليلات هو ما يستمع على المنفذ 443 مباشرة أبدًا.

# Caddyfile — Caddy runs as a third service in the same Compose project, so
# "umami" resolves on the internal network. It is the only service that
# publishes ports (80 and 443).
stats.example.com {
    encode zstd gzip
    reverse_proxy umami:3000
}

شغّل الحزمة، ثم نفّذ الأمر الوحيد الحساس للوقت فعليًا. شغّل docker compose up -d، وانتظر انتهاء عمليات الترحيل، وافتح لوحة التحكم. تأتي كل واحدة من هذه الأدوات مزوَّدة إما بحساب مدير افتراضي موثَّق أو بشاشة تسجيل أول مفتوحة، وقد أصبح اسم المضيف معلومة عامة في اللحظة التي صدرت فيها الشهادة، لأن سجلات شفافية الشهادات عامة ويجري جرفها باستمرار. غيّر كلمة المرور الافتراضية وأغلق التسجيل في غضون دقائق من أول تحميل ناجح، لا في اليوم التالي.

docker compose up -d
docker compose logs -f umami          # wait for the schema migration to finish
docker compose ps                     # both services healthy, no published ports listed
ss -tlnp | grep -E ':(5432|3306)'     # must print nothing at all
الدقائق الخمس التي تحدد من يملك النسخة

تُشحَن Umami بحساب مدير موثَّق تكون كلمة مروره نفسها في كل تثبيت على وجه الأرض. ويصبح أول زائر لـPlausible هو المالك ما لم يُعطَّل التسجيل في بيئة التشغيل. وتُرشد Matomo أول زائر خلال مُثبِّت يُنشئ المستخدم الخارق. وفي الحالات الثلاث، الفترة الزمنية بين "وجود الشهادة" و"تسجيلك للدخول" هي فترة يمكن لشخص آخر أن يسجّل الدخول فيها بدلًا منك — وهو لا يحتاج إلى تخمين اسم المضيف، لأنه منشور له بالفعل. سجّل الدخول أولًا، وغيّر بيانات الاعتماد، ثم اضبط مفتاح التسجيل على الإغلاق وأعد تحميل الصفحة للتأكد من أن الإعداد ثبت.

الخطوة 04 · القياس

وسم واحد. ثم قرّر على نطاق مَن يعيش.

سجّل الموقع في لوحة التحكم، وانسخ المعرّف الذي تمنحه لك، وضع وسم سكربت مؤجَّل واحدًا في القالب — في head أو في نهاية body، الأمر لا يهم كثيرًا، لكن يجب أن يكون مؤجَّلًا في كل الحالات حتى لا يؤخّر الصفحة أبدًا. هذا هو التكامل بأكمله. لا يوجد مدير وسوم، ولا حاوية، ولا طبقة بيانات، ولا أي أسلاك خاصة بوضع الموافقة، وهذا الغياب هو أغلب ما جئت من أجله.

<script defer src="https://stats.example.com/script.js"
        data-website-id="00000000-0000-0000-0000-000000000000"></script>

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

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

# On the site's own web server — the two paths the tracker needs, first-party:
example.com {
    handle /p/s.js      { reverse_proxy https://stats.example.com { header_up Host stats.example.com } }
    handle /p/collect   { reverse_proxy https://stats.example.com { header_up Host stats.example.com } }
    # ... the rest of the site
}

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

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

الخطوة 05 · الامتثال

قانونان، لا قانون واحد. ومعظم الإنترنت يخلط بينهما.

سبب عجز الناس عن الاتفاق على ما إذا كانت التحليلات تحتاج إلى شريط موافقة هو أنهم يتجادلون حول قاعدتين مختلفتين كما لو كانتا واحدة. فرّق بينهما ويصبح الجواب ممكنًا. المادة 5(3) من توجيه الخصوصية الإلكترونية — المنقولة إلى القانون الوطني في كل دولة عضو، والمصدر الفعلي لشريط ملفات تعريف الارتباط — تنص على أن تخزين معلومات على معدّات طرفية تابعة لمشترك، أو الوصول إلى معلومات مخزَّنة عليها بالفعل، يتطلب موافقته، إلا إذا كان ذلك ضروريًا بشكل صارم لتقديم خدمة طلبها هو صراحة. لاحظ ما لا تقوله: فهي لا تقول ملف تعريف ارتباط، ولا تقول بيانات شخصية. فهي تشمل localStorage، وتشمل أخذ بصمة الجهاز، وتنطبق حتى على قيمة لا تُعرّف بهوية أي شخص.

اللائحة العامة لحماية البيانات (GDPR) هي القاعدة الثانية، وتحكم سؤالًا مختلفًا: ما الذي يجوز لك فعله بالبيانات الشخصية بعد أن تصبح في حوزتك. وهي تنطبق على تحليلاتك سواء خزّنت شيئًا على الجهاز أم لم تخزّن، لأن طلب الويب ينقل عنوان IP، وقد قضت محكمة العدل في قضية Breyer (C-582/14) بأن عنوان IP يمكن أن يكون بيانات شخصية في يد مشغّل الموقع. فالقاعدتان تتراكبان: المادة 5(3) تسأل هل كتبتَ إلى الجهاز، وGDPR يسأل ما الذي فعلته بما ورد.

خادم تحليلات بلا ملفات تعريف مصمَّم ليجيب عن كلا السؤالين بدقة محدودة. فهو لا يخزّن شيئًا على الجهاز — لا ملف تعريف، ولا مُدخَل في localStorage، ولا معرّف من أي نوع — وهذا يُخرج المادة 5(3) من المعادلة، لأنه لا يوجد تخزين ولا وصول إلى تخزين. ويأخذ عنوان IP الذي يستقبله بالضرورة، فيمزجه مع وكيل المستخدم والموقع وقيمة ملح سرية تتجدد يوميًا، ثم يُجزّئ النتيجة، ويحتفظ بالتجزئة ويتجاهل العنوان. تتيح هذه التجزئة للأداة التمييز بين زائرين خلال اليوم نفسه، وتتوقف عن أن تكون مفيدة في اللحظة التي يتجدد فيها الملح، وهذا هو بالضبط السبب في أن الشخص نفسه يُحسَب غدًا زائرًا جديدًا. المعالجة هنا حقيقية، وهي بأصغر ما يمكن أن تكون عليه المعالجة.

وما يتبقى هو أساس قانوني لتلك العملية المحدودة، وفي الممارسة العملية يستند المشغّلون إلى المصلحة المشروعة بموجب المادة 6(1)(f)، موثَّقة بتقييم توازن قصير لأن الوقائع بسيطة: لا تحليل نمطي، ولا مشاركة، ولا تتبّع عابر للمواقع، واسم مستعار يموت يوميًا، ومدة احتفاظ محددة. وقد ذهبت عدة سلطات رقابية إلى أبعد من ذلك ونشرت معايير يُعفى بموجبها قياس الجمهور المحدود بشكل صارم من الموافقة كليًا — وتختلف هذه المعايير باختلاف البلد، وتُحدَّث، والمعيار الذي يهمك هو معيار بلدك. هذه ليست استشارة قانونية. إنها خريطة للصكوك القانونية المنطبقة، حتى تكون الاستشارة التي تحصل عليها بشأن حالتك أنت، لا بشأن الشكل العام للمشكلة.

السؤال وسم تحليلات إعلانية بلا ملفات تعريف، مُستضاف ذاتيًا داخل المنطقة الاقتصادية الأوروبية
يكتب إلى جهاز الزائر؟نعم — لذا تنطبق موافقة المادة 5(3)لا — لا تُستثار المادة 5(3)
هل يُحتفَظ بمعرّف دائم؟من شهور إلى سنوات، عبر مواقع متعددةتجزئة مملّحة تنتهي صلاحيتها يوميًا
نقل إلى بلد ثالث يجب توثيقه؟نعم، مع آلية نقل يجب الحفاظ عليهالا شيء — الخادم داخل المنطقة الاقتصادية الأوروبية
معالجو البيانات: التسمية والتعاقدالمزوّد ومعالجوه الفرعيونمزوّد استضافتك، من أجل العتاد، ولا أحد آخر
من يمكنه الإجابة عن طلب وصول صاحب البياناتأنت، عبر أي تصدير متاحأنت، باستخدام SQL — وغالبًا لا يوجد شيء لإرجاعه

وثمة سطر آخر ينتمي إلى الملف، لأنه الحجة الهادئة للقيام بأي من هذا كله. فمشروعية إرسال بيانات الزوّار الأوروبيين إلى خدمة تحليلات أمريكية كانت موضع تقاضٍ طوال عقد كامل: أبطلت محكمة العدل إطار النقل السابق في قضية Schrems II (C-311/18) عام 2020، وحكمت عدة سلطات رقابية وطنية ضد وسم التحليلات المعياري على هذا الأساس في عام 2022 — النمسا في يناير، وفرنسا في فبراير، وإيطاليا في يونيو، ثم تبعتها جهات أخرى — وقرار كفاية جديد، وهو إطار خصوصية البيانات بين الاتحاد الأوروبي والولايات المتحدة، أعاد فتح مسار للنقل في يوليو 2023، وهو نفسه محل طعن قانوني. ولست مضطرًا إلى تبني رأي في كيف ستنتهي هذه القضية. فخادم في هلسنكي يُخرج هذا السؤال من ملفك بشكل نهائي، وهذا يستحق أكثر من أن تكون محقًا بشأن حالته الراهنة.

الخطوة 06 · الحفظ

مدة الاحتفاظ، والنسخ الاحتياطي، والتحديثات. والسجل الذي نسيته.

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

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

docker compose exec -T db pg_dump -U umami umami | zstd -q -o /srv/backup/umami-$(date -u +%F).sql.zst
restic -r sftp:backup@bastion-2:/srv/repo backup /srv/backup /srv/analytics/.app_secret
restic -r sftp:backup@bastion-2:/srv/repo forget --keep-daily 7 --keep-weekly 8 --prune

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

السجل الذي يقوّض التمرين كله

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

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

ملاحظات ميدانية · ست فخاخ

ست طرق يمكن أن يسوء بها هذا الأمر. اثنتان منها صامتتان.

الفخ 01 · قاتل

كلمة المرور الافتراضية التي يعرفها الجميع

إحدى هذه الأدوات تُشحَن بنفس بيانات اعتماد المدير في كل تثبيت على وجه الأرض؛ والأدوات الأخرى تسلّم الملكية لأول من يسجّل. ويُنشَر اسم المضيف في سجلات شفافية الشهادات في اللحظة التي يعمل فيها TLS. سجّل الدخول، وغيّر البيانات، وأغلق التسجيل — في الدقائق الخمس الأولى، لا في اليوم التالي.

الفخ 02 · قاتل

منفذ قاعدة البيانات من الدرس التعليمي

ملفات Compose المكتوبة لجهاز محمول تنشر المنفذ 5432 أو 3306 لكي يتمكن كاتبها من الاتصال عبر واجهة رسومية. وإذا نسخت أحدها إلى خادم عام، أصبح جدول القرّاء على مسافة تخمين كلمة مرور واحدة. يصل حاوية التطبيق إلى قاعدة البيانات عبر الشبكة الداخلية؛ ولا حاجة لنشر أي شيء عدا الوكيل.

الفخ 03 · قانوني

افتراض أن الاستضافة الذاتية تعني الإعفاء

نقل البرمجية إلى خادمك الخاص يجيب عن سؤال النقل الدولي وسؤال المعالج. لكنه لا يجيب عن المادة 5(3) إذا فعّلت لاحقًا ميزة تكتب إلى الجهاز، ولا يكتب سياسة الخصوصية عنك. فالإعفاء خاصية تابعة للإعداد، لا للاستضافة.

الفخ 04 · صامت

كل زائر يصل من نفس البلد

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

الفخ 05 · صامت

سجل الوصول الذي ما زلت تحتفظ به

اختيرت هذه الحزمة لأنها لا تخزّن عنوان IP أبدًا. لكن الوكيل الذي يقف أمامها يخزّن كل واحد منها كنص صريح بشكل افتراضي، وكذلك يفعل خادم الويب الذي يقف أمام موقعك الفعلي. فأخفِها أو دوّرها عن قصد، وصِفها في السياسة — أو توقف عن الزعم بأنك لا تجمعها.

الفخ 06 · يمكن تفاديه

مطاردة الأرقام القديمة

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

الأسئلة الشائعة · تحليلات ذاتية الاستضافة

أسئلة، أجوبة.

أحد عشر سؤالًا يُطرح أثناء القيام بهذا — نبدأ بالسؤال الذي يخطئ فيه الجميع في كلا الاتجاهين.

هل يمكنني حقًا إزالة شريط ملفات تعريف الارتباط إذا استضفت ذاتيًا؟

غالبًا نعم، والسبب أدق من مجرد "الاستضافة الذاتية مقبولة". فهناك قاعدتان منفصلتان في العمل. المادة 5(3) من توجيه الخصوصية الإلكترونية (ePrivacy Directive) — التي يسميها الجميع قانون ملفات تعريف الارتباط — تتطلب موافقة لتخزين معلومات على جهاز الزائر أو قراءة معلومات منه، إلا إذا كان ذلك ضروريًا بشكل صارم لخدمة طلبها الزائر نفسه. وهي تنطبق على ملفات تعريف الارتباط، وكذلك على localStorage وsessionStorage وأي شيء آخر تتركه على الجهاز، وتنطبق سواء كانت البيانات شخصية أم لا. والأداة التي لا تكتب أي شيء إلى الجهاز لا تستثير هذه المادة أصلًا. أما اللائحة العامة لحماية البيانات (GDPR) فهي القاعدة الثانية ولا تزول: فأنت ما زلت تستقبل عنوان IP وسلسلة وكيل مستخدم مع كل طلب، وعنوان IP يُعد بيانات شخصية في يد مشغّل الموقع (محكمة العدل، قضية Breyer، C-582/14). وما يفعله خادم تحليلات بلا ملفات تعريف هو تجزئة عنوان IP هذا بملح يتجدد يوميًا ثم التخلص منه، فما يصل إلى قاعدة البيانات هو اسم مستعار خاص باليوم والموقع لا شخص بعينه. وهذه عملية معالجة محدودة وموثَّقة جيدًا يستند فيها معظم المشغّلين إلى المصلحة المشروعة، وقد نشرت عدة سلطات رقابية معايير يُعفى بموجبها قياس الجمهور المحض من الموافقة. وهذا موقف يمكن الدفاع عنه، لا كلمة سحرية: دوّن ما تجمعه، ولماذا، وإلى متى، واقرأ توجيهات الجهة الرقابية في بلدك بدل صفحة تسويقية من مزوّد. لا شيء في هذه الصفحة يشكّل استشارة قانونية.

أي أداة يجب أن أختار إن لم أرغب في التفكير في الأمر؟

Umami. فهي تطبيق Node واحد وقاعدة بيانات PostgreSQL واحدة، وهي مريحة داخل 1 GB من الذاكرة، ولوحة التحكم واضحة من أول زيارة، وهي بلا ملفات تعريف بشكل جاهز، ونسخة واحدة تخدم بسعادة كل موقع تملكه. بالنسبة للغالبية العظمى من الناس الذين يستبدلون Google Analytics في مدونة أو موقع وثائق أو متجر أو موقع شركة، فهي الإجابة الصحيحة، والأدوات الثلاث الأخرى نقاش لم تكن بحاجة إليه. اختر Plausible Community Edition بدلًا منها إذا كنت تريد مسارات تحويل، وأهدافًا للعائد، وقصة لوحة تحكم عامة أقوى، وكنت مستعدًا لتشغيل ClickHouse من أجلها. اختر Matomo إذا كنت تحتاج فعليًا إلى مجموعة ميزات Google Analytics — الشرائح، والأفواج، والتقارير المخصصة، ونسب الفضل في التجارة الإلكترونية، واستيراد السجلات الخام — وتتقبّل أنك تشغّل تطبيق PHP كبيرًا مع مهمة أرشفة مجدولة. اختر GoAccess إذا كنت لا تريد أي JavaScript على الصفحة على الإطلاق.

لماذا لا تتطابق الأرقام مع Google Analytics؟

لأنهما يحسبان أشياء مختلفة، والفارق يسير في الاتجاهين معًا. نحو الأعلى: لا يرى Google Analytics خلف شريط موافقة إلا الزائرين الذين ضغطوا "قبول"، وهو ما يمثل في أوروبا نصفهم غالبًا، في حين يرى عدّاد بلا ملفات تعريف وبلا شريط موافقة الجميع. ونحو الأعلى أيضًا: نقطة النهاية الجديدة لديك تقع على نطاقك الخاص وليست على قوائم الحجب التي تتجاهل الطلبات الموجهة إلى أدوات التتبع المعروفة. نحو الأسفل: لا تستطيع تجزئة تتجدد يوميًا التعرف على الشخص نفسه في اليوم التالي، فالقارئ الذي يزور الموقع يوم الاثنين ويوم الخميس يُحسَب زائرين، لا زائرًا عائدًا واحدًا — فالجلسات تُلحَم داخل اليوم نفسه ولا تُلحَم أبدًا عبر الأيام أو الأجهزة. ونحو الأسفل أيضًا: تأتي معظم الأدوات ذاتية الاستضافة مزوّدة بمرشّح روبوتات متحفّظ، ودون أي تضخيم على طراز Discover. النصيحة العملية هي التوقف عن محاولة التوفيق بين الأرقام. شغّل الأداتين معًا لمدة أسبوعين لمعرفة نسبتك الخاصة، ودوّنها على ورقة لاصقة، ثم احذف وسم Google واستخدم الأرقام الجديدة كخط أساس هو ما أصبحت عليه الآن. ما يهم في اتخاذ القرارات هو شكل الاتجاه العام والترتيب النسبي للصفحات والمصادر، وكلاهما ينجو من عملية الانتقال سليمًا.

هل ستحجب أدوات حجب الإعلانات نسختي الخاصة أيضًا؟

جزئيًا، ويستحق الأمر أن تعرف كيف بالضبط، لأن الآلية أبسط مما يظنه الناس. تعمل قوائم الحجب الكبيرة على أنماط: أسماء مضيفي الخدمات المستضافة، ومجموعة من أسماء الملفات والمسارات المعروفة — فطلب لشيء ينتهي بـplausible.js أو umami.js أو matomo.php يمكن التعرف عليه بصرف النظر عن الخادم الذي يذهب إليه. انقل البرمجية إلى stats.example.com مع الاحتفاظ بأسماء الملفات الافتراضية وستظل تفقد شريحة من الجمهور التقني. وثمة إصلاحان صادقان يعملان معًا. أعد تسمية السكربت ونقطة نهاية الجمع إلى اسم لا يشبه اسم أداة تتبّع — تسمح لك كل واحدة من هذه الأدوات بذلك، وهو يكلّف سطر إعداد واحد. وقدّمهما من نفس مصدر الموقع نفسه، عبر مسار على نطاقك الرئيسي يمرّره الوكيل العكسي، حتى لا يبقى أي طلب من طرف ثالث يمكن حجبه. وبين هذين الإصلاحين تستعيد أغلب الفاقد. لن تستعيده كله، ولا ينبغي أن تريد ذلك: فالزائر الذي يشغّل قائمة حجب صارمة مع تعطيل JavaScript قد اتخذ خيارًا، والاستجابة الصحيحة لذلك هي سجل الخادم، لا سباق تسلح.

هل تمرير السكربت عبر نطاقي الخاص هو أسلوب تصميم خادع؟

السؤال يستحق أن يُطرح، والجواب يتوقف على ما كانت أداة الحجب تحميه. فقائمة الحجب أداة صريحة واحدة تستهدف هدفين مختلفين جدًا: شبكة تقنيات الإعلان التي تتبع شخصًا عبر عشرة آلاف موقع وتبني ملفًا تعريفيًا عنه، والعدّاد الذي يخبر صاحب موقع واحد بأن صفحة وثائقه قُرئت أربعمئة مرة يوم أمس. حجب الأول هو دفاع شخص عن نفسه في مواجهة المراقبة. وحجب الثاني ضرر جانبي ناتج عن قاعدة لا تستطيع التمييز بينهما. تقديم عدّادك من نطاقك الخاص ليس تهريبًا لأداة تتبّع تتجاوز دفاعًا؛ بل هو إزالة طلب من طرف ثالث لم يكن ينبغي له أن يوجد أصلًا، والزيارة نفسها تولّد سطرًا في سجل وصولك في كل الأحوال. والنقطة التي يتوقف فيها هذا عن كونه مبرَّرًا هي اللحظة التي يصبح فيها ما تُمرّره ليس هو ما وُصف هنا — فإن أضفت معرّفات عابرة للمواقع، أو أخذ بصمات الجهاز، أو مسارًا إلى منصة إعلانية، فإن أداة الحجب كانت محقة والوكيل صار كذبة. والاختبار بسيط ويستحق أن تطبّقه على نفسك مرة واحدة: هل تستطيع نشر صفحة تصف بدقة ما تجمعه نقطة النهاية هذه، وهل سيهزّ القارئ كتفيه غير مبالٍ؟ إن كان الجواب نعم، فمرّره. وإن لم يكن، فالمشكلة ليست في التمرير.

ما الحجم الذي يحتاجه VPS فعليًا؟

أصغر مما تخشى، مع استثناء واحد. Umami عملية Node وقاعدة بيانات Postgres: تستقر تحت 1 GB من الذاكرة لموقع عادي، وتتضخم قاعدة البيانات بما يقارب حجم سطر نصي واحد لكل مشاهدة صفحة، لذا فئة Sentinel — 2 vCPU، و4 GB، و120 GB NVMe، بسعر $3.90 شهريًا — تمنحك سنوات من الهامش. أما GoAccess فخطأ تقريب لا يُذكر. وMatomo تقع في الوسط: فـPHP وMariaDB غير متطلبتين حتى تعمل مهمة الأرشفة، وهي ما يمثّل ارتفاع المعالج الذي يجب أن تحسب حسابه، وتتضخم جداولها الخام أسرع من غيرها لأنها تحتفظ بأكثر لكل زيارة. أما الاستثناء فهو Plausible Community Edition، والسبب هو ClickHouse لا Plausible نفسها: فقاعدة البيانات العمودية مصمَّمة لمقايضة الذاكرة بسرعة الاستعلام، وستستولي على كل ما تتركه متاحًا لها. تعمل في 4 GB إذا حددت سقفًا لمخابئها التخزينية في الإعداد الافتراضي المرفق، وتكون مريحة عند 8 GB — وهذا هو السبب في أن فئة Garrison بسعر $7.90 هي الحد الأدنى المعقول لها. وفي كل الحالات، الرقم الذي يفرض التحديث في النهاية هو مساحة القرص، لا الذاكرة، والخطوة 06 هي كيفية إيقاف ذلك.

هل يمكن لنسخة واحدة قياس عدة مواقع مختلفة؟

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

هل أحتاج إلى JavaScript أصلًا؟ وماذا عن تحليل سجل الخادم؟

بالنسبة لفئة واسعة من المواقع، يكفي السجل وحده، وهو أصدق قياس متاح: فهو لا يجمع أي شيء إضافي، لأن السطور موجودة فعلًا. يقرأ GoAccess سجل وصول خادم الويب وينتج تقرير طرفية أو لوحة تحكم HTML قائمة بذاتها — أهم الصفحات، ومصادر الإحالة، وأكواد الحالة، وعرض النطاق، وأوقات الاستجابة، ووكلاء المستخدم — وبالنسبة لموقع ثابت أو مجموعة وثائق أو واجهة API، فهذا يمثّل أغلب ما كان وسم السكربت سيخبرك به. وثمة قيدان يحددان ما إذا كان هذا يكفيك. أولًا، لا يستطيع السجل رؤية ما يحدث داخل الصفحة: لا عمق التمرير، ولا نقرات الروابط الخارجة، ولا أحداث الأزرار، ولا تغييرات المسار في تطبيقات الصفحة الواحدة، لأن لا شيء من ذلك يلمس الخادم. وثانيًا، يعدّ السجل الطلبات لا الأشخاص، فأنت رهن التخزين المؤقت وسكان الروبوتات الذين يشكلون الآن غالبية الزيارات الخام — والترشيح مهمة صيانة دائمة لا خطوة إعداد تُنجَز مرة واحدة. وهناك أيضًا فخ خصوصية في الاتجاه المعاكس لما تتوقعه، وتتناوله الخطوة 06: فالسجل الذي تحلّله يحتفظ بعناوين IP كاملة، وهذا بيانات شخصية أكثر مما كانت أداة JavaScript التي رفضتها تحتفظ به.

هل يمكنني استيراد سجل Google Analytics التاريخي؟

واقعيًا، لا، والتخطيط على هذا الأساس أفضل من محاولة مقاومته. Matomo هي الأداة الوحيدة من الأربع التي تملك قصة استيراد جدّية إلى حد ما، وحتى فيها فالمسارات العملية هي استيراد سجلات خادم الويب الخاصة بك واستخدام أدوات الترحيل من نسخ Matomo القديمة، لا نقلًا نظيفًا لتقارير Google المُعالجة. يمكن لـUmami وPlausible Community Edition قبول تحميل مجمّع عبر واجهات برمجتهما إذا كنت مستعدًا لكتابة التخطيط اللازم، لكنك ستكون تبتكر جلسات وزوّارًا من صادرات مجمَّعة، والنتيجة رسم بياني يبدو متصلًا وهو غير قابل للمقارنة عبر نقطة الوصل. ما ينجح فعليًا: صدّر التقارير التي تهمك من Google قبل أن تفقد الوصول إلى الخاصية — الإجماليات الشهرية، وأهم الصفحات، وأهم المصادر، وأعداد التحويلات — بصيغة CSV، واحتفظ بها في المكان نفسه الذي تحفظ فيه سجلاتك الأخرى، وابدأ الأداة الجديدة كخط أساس جديد في تاريخ تدوّنه. ستراجع الصادر القديم مرتين في السنة الأولى ولن تفعل ذلك بعدها أبدًا، وكل رقم فيه قِيس بتعريف مختلف على أي حال.

ما الذي يجب أن أكتبه فعليًا في سياسة الخصوصية؟

أقل مما تظن، والقصر هنا هو الهدف بعينه — فقرة تستطيع الدفاع عنها أفضل من صفحة نسختها من مكان آخر. اذكر ما هي الأداة وأنك تشغّلها بنفسك؛ وحدّد موقع الخادم وجهته القانونية المشغِّلة، لأن القدرة على القول "على جهاز نستأجره في فنلندا" هي الفائدة الكاملة من القيام بهذا كله. اذكر ما يُسجَّل في كل زيارة: الصفحة، ومصدر الإحالة، والبلد، والجهاز وعائلة المتصفح، ومعرّف مستعار مُستمَد من عنوان IP ووكيل المستخدم مع ملح يتغيّر يوميًا، لا يمكن من خلاله استرجاع عنوان IP الأصلي. واذكر ما لا يُسجَّل: لا ملفات تعريف، ولا معرّف عابر للمواقع، ولا ملف تعريف شخصي، ولا بيانات تُباع أو تُشارَك. وبيّن الأساس القانوني الذي تستند إليه ومدة الاحتفاظ بالبيانات، وتأكد من أن الرقم الذي تكتبه هو الرقم الذي تُهيَّأ الأداة عليه فعليًا. وإذا كان وكيلك العكسي يحتفظ بسجلات وصول، فتلك عملية معالجة منفصلة لها مدة احتفاظ خاصة بها — اذكرها، لأنها الشيء الذي ينساه الناس عادة. ثم حافظ على تزامن الفقرة مع الإعداد الفعلي: فسياسة تصف الإعداد الذي كان لديك منذ عامين أسوأ من سياسة غامضة.

لماذا يهم مزوّد الاستضافة بالنسبة لخادم لا يحتفظ إلا بمشاهدات الصفحات؟

لأن عبارة "مجرد مشاهدات صفحة" تقلل من شأن ما تمثله قاعدة بيانات التحليلات فعليًا. فهي، عند تجميعها على مدى عام، تمثل قرّاء موقعك: أي الصفحات، وبأي ترتيب، ومن أي البلدان، وفي أي الساعات، وقادمين من أي روابط — وبالنسبة لناشر صغير أو متجر متخصص، فذلك خطة عمل وقائمة مصادر في جدول واحد. وهي أيضًا، من الناحية القضائية، بالضبط نوع البيانات التي يطلبها الخصم من المزوّد بدل أن يطلبها منك. ويترتب على ذلك خاصيتان. أولًا، موقع الخادم يحدد أي إجراء قانوني يمكن أن يصل إليه: فالجهاز الموجود في ستوكهولم أو هلسنكي أو أوسلو أو ريكيافيك يقع داخل المنطقة الاقتصادية الأوروبية (EEA)، وهذا يُلغي مسألة النقل الدولي من ملف الامتثال لديك تمامًا، ويقع داخل أربعة أنظمة دستورية ذات تقاليد قوية في حرية الصحافة. ثانيًا، الاسم المسجَّل على الحساب يحدد ما يكشفه الحساب نفسه: فعلى NordBastion لا توجد وثيقة هوية، ولا اسم قانوني، ولا بطاقة مصرفية، والفاتورة تُسدَّد بعملة Monero أو Bitcoin، والجهاز الذي يحمل بيانات قرّائك ليس صفًا في قاعدة بيانات عملاء في مكان ما مرفقًا به جواز سفرك. يتناول دليل الولايات القضائية الحد القانوني الأدنى لكل واحدة من الأربع بالتفصيل.

احصل على الخادم

قرّاؤك، على جهاز داخل المنطقة الاقتصادية الأوروبية غير مسجَّل باسمك.

Sentinel — 2 vCPU و4 GB و120 GB من NVMe بسعر $3.90 شهريًا، في هلسنكي أو ستوكهولم أو أوسلو أو ريكيافيك — تشغّل Umami وقاعدة بياناته مع مساحة تكفي لسنوات من الأحداث. ارتقِ إلى Garrison بسعر $7.90 إذا اخترت Plausible أو Matomo. بلا بريد إلكتروني عند التسجيل، وبلا وثيقة هوية، وبلا بطاقة مصرفية، وبلا طرف ثالث يحتفظ بقائمة كل من قرأ موقعك على الإطلاق.

آخر مراجعة · 2026-10-12 · المصادر · وثائق Umami وPlausible Community Edition وMatomo وGoAccess؛ توجيه الخصوصية الإلكترونية 2002/58/EC، المادة 5(3)؛ اللائحة (الاتحاد الأوروبي) 2016/679؛ أحكام محكمة العدل في قضيتي Breyer (C-582/14) وSchrems II (C-311/18)؛ قرار الكفاية الخاص بإطار خصوصية البيانات بين الاتحاد الأوروبي والولايات المتحدة الصادر في يوليو 2023 · الدورية · سنوياً

استضافة خاصة، مبنية في الشمال.