دليل عملي

مزامنة سجل الأوامر بين الأجهزة باستخدام ‎Atuin على ‎VPS

الأتمتة7 دقائق للقراءةعدد الخطوات: 6

يستبدل ‎Atuin ملف `.zsh_history` بقاعدة بيانات ‎SQLite محلية، ويزامن هذا السجل بين أجهزتك عبر خادم تديره بنفسك. يُشفَّر كل أمر قبل إرساله: لا يرى الخادم محتواه أبدًا. النتيجة: سجل قابل للبحث في أجزاء من الثانية، مشترك بين أجهزة الحاسوب المحمول والخوادم والآلات الافتراضية، دون تسليم بياناتك لأطراف خارجية.

المحتويات· لماذا تزامن سجل أوامر الطرفية1/9
  1. 01لماذا تزامن سجل أوامر الطرفية
  2. 02الفوائد العملية لـ‎Atuin المُستضاف ذاتيًا
  3. 03المتطلبات الأساسية
  4. 04تثبيت خادم ‎Atuin على الـ‎VPS
  5. 05تثبيت وإعداد عميل ‎Atuin
  6. 06التأمين: جدار الحماية، التسجيل، والوكيل العكسي
  7. 07استكشاف الأخطاء — الأخطاء الشائعة
  8. 08‎Atuin مقابل البدائل: أي أداة تختار
  9. 09‎Atuin، أداة تنمو معك

لماذا تزامن سجل أوامر الطرفية

العمل على أجهزة متعددة يجب أن يكون سلسًا. في الواقع، الأمر kubectl rollout undo deployment/api الذي كتبته على حاسوبك المحمول ليس موجودًا في طرفية خادم الـ‎CI، والأمر docker compose exec من قبل ثلاثة أسابيع اختفى لأن دورة السجل مسحت الإدخالات القديمة.

يحل ‎Atuin المشكلتين من الجذر: يخزن كل أمر في ‎SQLite مع سياقه (الوقت، المدة، رمز الخروج، المجلد الحالي)، ويزامن هذه القاعدة بين أجهزتك عبر خادم تتحكم به. يعمل البحث محليًا — لا تأخير شبكي عند استدعاء أمر — والمزامنة تحدث في الخلفية. تصبح واجهة البحث (Ctrl+R) فهرسًا شاملًا لكل ما كتبته على أي جهاز منذ اليوم الأول.

الفوائد العملية لـ‎Atuin المُستضاف ذاتيًا

  • ابحث عن أي أمر كتبته على أي جهاز في أقل من ثانية عبر Ctrl+R.
  • تشفير من جانب العميل (‏‎AES-256‏): لا يرى الخادم محتوى سجلك أبدًا.
  • سياق غني لكل إدخال: رمز الخروج، مدة التنفيذ، المجلد الحالي، اسم الجهاز.
  • لا بيانات تُرسل لأطراف خارجية — أنت تستضيف، أنت تتحكم.
  • ثنائي ‎Rust بلا تبعيات ثقيلة: يعمل على VPS Start ابتداءً من 99 درهم/شهر.
  • دعم ‎zsh و‎bash و‎fish و‎nushell و‎PowerShell — خادم واحد لكل أسطولك.
  • إحصاءات استخدام مدمجة (atuin stats): أكثر أوامرك تكرارًا، وأوقات نشاطك.

المتطلبات الأساسية

‏‎VPS‏: خادم ‎Atuin هو ثنائي ‎Rust مُجمَّع مع قاعدة بيانات ‎SQLite مدمجة. يستهلك أقل من ‏50‏ ميغابايت من ذاكرة الوصول العشوائي في وضع الراحة، مما يجعله متوافقًا مع VPS Start. خصص ‏512‏ ميغابايت من ذاكرة الوصول العشوائي للنظام بالكامل (نظام التشغيل + عملية ‎Atuin)، و‏5‏ غيغابايت من تخزين ‎SSD للسجل طويل المدى. نواة ‎Linux حديثة (‎Debian 12 أو ‎Ubuntu 22.04+) تعمل بشكل مثالي.

يجب تثبيت ‎Docker و‎Docker ‎Compose على الـ‎VPS — هذا هو أسلوب النشر الموصى به من المشروع. إن كان الـ‎VPS جديدًا، ثبّت ‎Docker عبر <a ‎href="‎https://‎docs.docker.com/engine/install/">السكريبت الرسمي</a> أو قالب ‎Docker من ‎Marketplace لـ‎ServOrbit.

اسم نطاق يشير إلى الـ‎VPS موصى به (atuin.your-domain.com، سجل A) للحصول على شهادة ‎TLS تلقائية. الشهادة ضرورية: عميل ‎Atuin يرفض المزامنة في نص واضح بشكل افتراضي.

تثبيت خادم ‎Atuin على الـ‎VPS

  1. الاتصال بالـ‎VPS وإنشاء مجلد العمل

    اتصل عبر ‎SSH بالـ‎VPS الخاص بك:

    ssh root@<ip-du-vps>

    أنشئ مجلدًا مخصصًا:

    mkdir -p /opt/atuin && cd /opt/atuin
  2. كتابة ملف ‎docker-compose.yml

    أنشئ ملف التركيب:

    cat > docker-compose.yml << 'EOF'
    services:
      atuin:
        image: ghcr.io/atuinsh/atuin:v18.23.0
        command: server start
        volumes:
          - ./config:/config
        ports:
          - "8888:8888"
        environment:
          ATUIN_HOST: "0.0.0.0"
          ATUIN_PORT: "8888"
          ATUIN_OPEN_REGISTRATION: "true"
          ATUIN_DB_URI: "sqlite:///config/history.db"
        restart: unless-stopped
    EOF

    يستخدم هذا الإعداد ‎SQLite (مدمجة، لا تبعيات خارجية) ويفتح التسجيل حتى تتمكن من إنشاء حسابك عند الاتصال الأول.

  3. إنشاء مجلد الإعداد وتشغيل الحاوية

    يحتاج ‎Atuin إلى مجلد إعداد قابل للكتابة:

    mkdir -p config && chown 1000:1000 config

    شغّل الخادم:

    docker compose up -d

    تحقق من تشغيل الحاوية:

    docker compose ps
    # NAME      STATUS          PORTS
    # atuin     Up 2 minutes    0.0.0.0:8888->8888/tcp
  4. فتح المنفذ 8888 في جدار الحماية ‎UFW

    يجب أن يكون المنفذ ‏8888‏ متاحًا من أجهزتك العميلة. على ‎Ubuntu/Debian مع ‎UFW:

    sudo ufw allow 8888/tcp
    sudo ufw status

    ⚠️ إن تخطيت هذه الخطوة، سيعرض عميل ‎atuin خطأ Connection refused أو Failed to sync history عند المزامنة — وهو الخطأ الأكثر شيوعًا في عمليات النشر الذاتي.

  5. وضع وكيل عكسي ‎HTTPS أمام الخادم

    يتطلب عميل ‎Atuin ‎HTTPS بشكل افتراضي. ضع ‎Caddy أمامه:

    apt-get install -y caddy

    أنشئ /etc/caddy/Caddyfile:

    atuin.your-domain.com {
        reverse_proxy localhost:8888
    }

    أعد تشغيل ‎Caddy (يحصل على شهادة ‎Let's ‎Encrypt تلقائيًا):

    systemctl restart caddy

    تحقق من استجابة الخادم:

    curl https://atuin.your-domain.com
    # {"msg":"Atuin server v18.23.0"}
  6. إغلاق التسجيل بعد إنشاء حسابك

    بعد إنشاء حساباتك (انظر الخطوة التالية)، عطّل التسجيل العام لمنع الحسابات غير المرغوب فيها. عدّل docker-compose.yml:

    ATUIN_OPEN_REGISTRATION: "false"

    أعد تشغيل الحاوية:

    docker compose up -d

    بدلًا من ذلك، أنشئ /opt/atuin/config/server.toml للتحكم الدقيق:

    [server]
    host = "0.0.0.0"
    port = 8888
    open_registration = false
    
    [server.db]
    db_uri = "sqlite:///config/history.db"

تثبيت وإعداد عميل ‎Atuin

على كل جهاز من أجهزتك (حاسوب محمول، خادم تطوير، إلخ)، ثبّت ‎Atuin باستخدام السكريبت الرسمي:

curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh

يثبت السكريبت الثنائي في ~/.atuin/bin ويكتشف الشل الخاص بك.

تكامل الشل — أضف السطر المناسب لملف إعداد الشل:

# لـzsh (~/.zshrc)
eval "$(atuin init zsh)"

# لـbash (~/.bashrc)
eval "$(atuin init bash)"

# لـfish (~/.config/fish/config.fish)
atuin init fish | source

أعد تحميل الشل: source ~/.zshrc (أو ما يعادله).

تسجيل حساب على خادمك:

atuin register \
  --server https://atuin.your-domain.com \
  -u your-username \
  -e [email protected] \
  -p your-password

يُنشئ ‎Atuin مفتاح تشفير محليًا — يظهر على الشاشة. دوّنه فورًا: ستحتاجه لتوصيل أجهزة أخرى، ولا يمكن إعادة إنشائه.

المزامنة الأولى:

atuin sync
# Syncing history...
# History synced!

تسجيل الدخول من جهاز ثانٍ:

atuin login \
  --server https://atuin.your-domain.com \
  -u your-username \
  -p your-password \
  -k "<your-encryption-key>"

atuin sync

التأمين: جدار الحماية، التسجيل، والوكيل العكسي

ثلاثة إعدادات للتحقق منها بعد النشر الأولي:

‏1. open_registration: false فور إنشاء حساباتك. إن تركته true، يمكن لأي شخص يعرف الـ‎URL إنشاء حساب واستخدام مساحة التخزين الخاصة بك.

‏2. لا تكشف المنفذ ‏8888‏ مباشرة — يجب أن يمر حركة المرور دائمًا عبر الوكيل العكسي ‎HTTPS. قيّد ‎UFW:

# حظر الوصول الخارجي المباشر للمنفذ 8888
sudo ufw delete allow 8888/tcp
# يتصل الوكيل العكسي المحلي (Caddy) به داخليًا

‏3. احتِفظ بنسخة احتياطية من قاعدة بيانات ‎SQLite بانتظام:

docker compose exec atuin sh -c "sqlite3 /config/history.db \".backup /config/history.backup.db\""

تنمو قاعدة البيانات ببطء — بضعة عشرات من الميغابايت حتى بعد سنوات من الاستخدام المكثف.

استكشاف الأخطاء — الأخطاء الشائعة

بعض الأخطاء التي تُواجَه في النشر الذاتي وكيفية حلها.

Connection refused عند أول atuin sync
المنفذ ‏8888‏ غير مفتوح في ‎UFW، أو الحاوية غير مشغّلة. تحقق بـ:

sudo ufw status | grep 8888
docker compose ps

SSL certificate problem: unable to get local issuer certificate
لم تُصدر ‎Caddy شهادة ‎TLS بعد. انتظر ‏30‏–‏60‏ ثانية بعد إعادة تشغيل ‎Caddy وأعد atuin sync. تأكد أن ‎DNS لـatuin.your-domain.com يشير لـ‎IP الـ‎VPS.

Invalid credentials عند atuin login
مفتاح التشفير غلط أو مقطوع. استرجعه من الجهاز الأصلي:

atuin key

الصق القيمة الكاملة (سلسلة ‎base64 طويلة) بعد -k.

open_registration is disabled
أغلقت التسجيل قبل إنشاء جميع حساباتك. اضبط مؤقتًا ATUIN_OPEN_REGISTRATION: "true" في docker-compose.yml، أعد التشغيل، أنشئ الحساب، ثم ارجع إلى false.

السجل لا يتزامن بعد atuin sync
تحقق أن الخادم هو الهدف المُعيَّن في إعداد العميل:

cat ~/.config/atuin/config.toml | grep sync_address
# sync_address = "https://atuin.your-domain.com"

إن كانت الخاصية غائبة، أضفها يدويًا إلى ~/.config/atuin/config.toml.

‎Atuin مقابل البدائل: أي أداة تختار

مرّر الجدول أفقيًا

الأداةتشفير ‎E2Eمزامنة متعددة الأجهزةاستضافة ذاتيةبحث متقدم
**‎Atuin**‏نعم (‏‎AES-256‏، مفتاح محلي)‏‏نعم (خادم اختياري)‏‏نعم (‏‎Docker‏، ‏‎SQLite‏)‏‏نعم (سياق، رمز الخروج، المدة)‏
‎McFlyلالا‏غير متاح (محلي فقط)‏‏نعم (شبكة عصبية، المجلد الحالي)‏
‎Histdbلالا‏غير متاح (محلي فقط)‏‏جزئي (‏‎SQLite‏ محلي، مكون إضافي لـ‎zsh)‏
‏‎zsh_history‏ الأصليلا‏لا (‏‎rsync‏ يدوي ممكن)‏غير متاح‏بسيط (‏‎grep‏، ‏‎fzf‏ اختياري)‏

‎Atuin، أداة تنمو معك

يُعدّ ‎Atuin ‎v18.23.0 الحل الأكثر اكتمالًا للمطوّر الذي يعمل على أجهزة متعددة ويهتم بخصوصية بياناته. يستغرق الإعداد الأولي أقل من ‏30‏ دقيقة على VPS Start، والنتيجة سجل شامل ومشفّر قابل للبحث الفوري من أي طرفية.

بعد تشغيل الخادم، يمكنك التعمق أكثر: إعداد المزامنة التلقائية (atuin daemon)، واستخدام الإحصاءات الأسبوعية (atuin stats)، أو استكشاف واجهة البحث المتقدم مع التصفية حسب رمز الخروج أو اسم الجهاز. الأمر الذي تبحث عنه موجود دائمًا — بغض النظر عن الجهاز الذي كتبته عليه.

انشر ‎Atuin على ‎VPS من ‎ServOrbit

يكفي {{‎vps.start.name}} لتشغيل خادم ‎Atuin باستمرار. وصول ‎Root، و‎IPv4 مخصص، و‎SSD ‎NVMe — كل ما تحتاجه لسجل أوامر خاص ومتاح دائمًا.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة