لماذا Grist بدلاً من Google Sheets أو Airtable
Google Sheets جدول بيانات: يخزن البيانات مستوية والحسابات محدودة بدوال الورقة والعلاقات تعتمد على VLOOKUP هشة. Airtable يحل هذا بقواعد علائقية لكن بـ 20 دولاراً للمستخدم شهرياً، تتراكم الفاتورة بسرعة.
Grist يجمع العالمين: واجهة جداول بيانات مألوفة فوق قاعدة بيانات علائقية حقيقية. كل مستند يحتوي على جداول بأعمدة مكتوبة (نص، رقمي، تاريخ، مرجع، مرفق)، علاقات صريحة بين الجداول وصيغ Python تعمل من جانب الخادم. على VPS الخاص بك، Grist يكلف 0 دولار إضافي شهرياً.
ما يفعله Grist ولا يستطيع Google Sheets فعله
- علاقات بين الجداول: عمود مرجع في
الطلباتيشير إلىالعملاء— ليس VLOOKUP هشاً بل مفتاح أجنبي حقيقي مع إكمال تلقائي. - صيغ Python من جانب الخادم:
import datetime،import re،import uuid— وأي مكتبة Python نقية. الصيغ تعمل في صندوق رملي على الخادم. - واجهة برمجية REST تلقائية: كل مستند يعرض
/api/docs/<id>/tables/<table>/recordsبلا إعداد. دمج Grist مع n8n أو Make أو أي عميل HTTP. - طرق عرض متعددة على نفس البيانات: شبكة، بطاقة، مخطط، تقويم، ودجت مخصص — كل طريقة عرض قابلة للتصفية والإعداد بشكل مستقل.
- قواعد وصول لكل صف وعمود: قيّد القراءة والكتابة بناءً على سمات المستخدم — دقيق بما يكفي للمستندات متعددة المستأجرين.
معمارية Docker بحاوية واحدة
Grist ينتشر في حاوية واحدة gristlabs/grist:latest تضم Node.js (الخادم) وPython (صندوق الصيغ) وSQLite (تخزين المستندات). حجم مسمى /persist يخزن ملفات .grist — ملف واحد لكل مستند. لا خدمة خارجية مطلوبة.
متغير بيئة واحد يقود المصادقة الأولية: [email protected] يسجّل دخولك تلقائياً بدون SMTP. لعمليات النشر متعددة المستخدمين، Grist يدعم OIDC (GRIST_OIDC_*) — Google Workspace أو Authentik أو Keycloak.
نشر Grist على VPS في 4 خطوات
تحضير VPS وDocker
VPS بـ 1 غيغابايت RAM كافٍ. اتصل بـ SSH، ثبّت Docker (curl -fsSL https://get.docker.com | sh)، أنشئ مجلد الستاك: mkdir -p /opt/stacks/grist && cd /opt/stacks/grist.
إنشاء docker-compose.yml
عرّف الخدمة من الصورة gristlabs/grist:latest، اربط حجم /persist، افتح المنفذ 8484، واضبط GRIST_SESSION_SECRET عشوائياً (openssl rand -hex 32). أضف [email protected] للوصول التلقائي بدون SMTP.
الإطلاق والتحقق
ابدأ بـ docker compose up -d وانتظر بدء Node.js (~10 ثوانٍ). تحقق بـ curl -sI http://localhost:8484/ — يجب أن تحصل على HTTP 200 أو إعادة توجيه 302. Grist يعمل.
إنشاء مستندك الأول
افتح http://ip-vps:8484 — يسجّل Grist دخولك مباشرة. انقر '+ Add document'، عرّف جداولك وأعمدتك، ثم استكشف صيغ Python بكتابة = في خلية. لاستيراد بيانات موجودة: File → Import from file (CSV، Excel، .grist).
إضافة reverse proxy وHTTPS
ضع Caddy أمام Grist: grist.yourdomain.com { reverse_proxy grist:8484 }. Caddy يحصل على شهادة Let's Encrypt تلقائياً. حدّث GRIST_ALLOWED_HOSTS=grist.yourdomain.com وأعد تشغيل الحاوية.
أول تسجيل دخول
يحوّلكم Grist إلى شاشة دخول «boot» تطلب مفتاح التثبيت — أدخلوا المفتاح المزوّد لكم. بعدها ينطلق معالج إعداد سريع، ثم تصلون إلى مستنداتكم بصفة مسؤول بالحساب: [email protected]
لأتمتة النسخ الاحتياطية لمستندات Grist، اربط حجم /persist/docs/ بمهمة Backrest (أيضاً في كتالوج ServOrbit): Backrest يأخذ لقطات للمجلد عبر restic ويرسل الزيادات المشفرة إلى S3 أو Backblaze B2 أو SFTP — دون إيقاف Grist. Grist نفسه يحتفظ بتاريخ لقطات لكل مستند (قائمة المستند → History).