دليل الترحيل
قم بترحيل مشروع حالي — الملفات وخدمات Docker وقواعد البيانات — من خادم تقليدي أو بيئة تطوير محلية إلى مستودع Rediacc مشفر.
المتطلبات الأساسية
- تثبيت واجهة سطر الأوامر
rdc(التثبيت) - إضافة جهاز وتجهيزه (الإعداد)
- مساحة قرص كافية على الخادم لمشروعك (تحقق باستخدام
rdc machine status)
الخطوة 1: إنشاء مستودع
أنشئ مستودعاً مشفراً بحجم يناسب مشروعك. خصص مساحة إضافية لصور Docker وبيانات الحاويات.
rdc repo create my-project -m server-1 --size 20G
نصيحة: يمكنك تغيير الحجم لاحقاً باستخدام
rdc repo resizeإذا لزم الأمر، لكن يجب إلغاء تحميل المستودع أولاً. من الأسهل البدء بمساحة كافية.
الخطوة 2: رفع الملفات
استخدم rdc sync upload لنقل ملفات مشروعك إلى المستودع.
# معاينة ما سيتم نقله (بدون إجراء تغييرات)
rdc sync upload -m server-1 -r my-project --local ./my-project --dry-run
# رفع الملفات
rdc sync upload -m server-1 -r my-project --local ./my-project
يجب أن يكون المستودع محمّلاً قبل الرفع. إذا لم يكن محمّلاً بالفعل:
rdc repo mount my-project -m server-1
لعمليات المزامنة اللاحقة حيث تريد أن يطابق المحتوى البعيد دليلك المحلي تماماً:
rdc sync upload -m server-1 -r my-project --local ./my-project --mirror
يحذف خيار
--mirrorالملفات على الخادم البعيد التي لا توجد محلياً. استخدم--dry-runأولاً للتحقق.
الخطوة 3: إصلاح ملكية الملفات
تصل الملفات المرفوعة بمعرّف المستخدم المحلي الخاص بك (مثل 1000). يستخدم Rediacc مستخدماً موحداً (UID 7111) بحيث يتمتع VS Code وجلسات الطرفية والأدوات جميعها بوصول متسق. شغّل أمر الملكية للتحويل:
rdc repo ownership my-project -m server-1
استثناء مدرك لـ Docker
إذا كانت حاويات Docker قيد التشغيل (أو تم تشغيلها سابقاً)، يكتشف أمر الملكية تلقائياً أدلة البيانات القابلة للكتابة الخاصة بها ويتخطاها. هذا يمنع تعطيل الحاويات التي تدير ملفاتها الخاصة بمعرّفات مستخدم مختلفة (مثل MariaDB يستخدم UID 999، وNextcloud يستخدم UID 33).
يعرض الأمر تقريراً بما يفعله:
Excluding Docker volume: database/data
Excluding Docker volume: redis/data
Ownership set to UID 7111 (245 changed, 4 skipped, 0 errors)
متى يتم التشغيل
- بعد رفع الملفات — لتحويل معرّف المستخدم المحلي إلى 7111
- بعد بدء الحاويات — إذا كنت تريد استثناء أدلة أحجام Docker تلقائياً. إذا لم تكن الحاويات قد بدأت بعد، فلا توجد أحجام للاستثناء وسيتم تغيير ملكية جميع الأدلة (وهذا مقبول — ستعيد الحاويات إنشاء بياناتها عند أول تشغيل)
وضع الإجبار
لتخطي اكتشاف أحجام Docker وتغيير ملكية كل شيء، بما في ذلك أدلة بيانات الحاويات:
rdc repo ownership my-project -m server-1 --force
تحذير: قد يؤدي هذا إلى تعطيل الحاويات قيد التشغيل. أوقفها أولاً باستخدام
rdc repo downإذا لزم الأمر.
معرّف مستخدم مخصص
لتعيين معرّف مستخدم غير القيمة الافتراضية 7111:
rdc repo ownership my-project -m server-1 --uid 1000
الخطوة 4: إعداد Rediaccfile
أنشئ ملف Rediaccfile في جذر مشروعك. هذا السكربت بلغة Bash يحدد كيفية تحضير خدماتك وبدئها وإيقافها.
#!/bin/bash
prep() {
docker compose pull
}
up() {
docker compose up -d
}
down() {
docker compose down
}
الدوال الثلاث لدورة الحياة:
| الدالة | الغرض | سلوك الخطأ |
|---|---|---|
prep() | سحب الصور، تشغيل عمليات الترحيل، تثبيت التبعيات | إيقاف فوري: أي فشل يوقف كل شيء |
up() | بدء الخدمات | فشل الجذر حرج؛ فشل الأدلة الفرعية يُسجّل ويستمر |
down() | إيقاف الخدمات | بأفضل جهد: يحاول دائماً تنفيذ الكل |
مهم: استخدم
dockerمباشرة في Rediaccfile — لا تستخدم أبداًsudo docker. يعيد أمرsudoتعيين متغيرات البيئة، مما يؤدي إلى فقدانDOCKER_HOSTوإنشاء الحاويات على Docker daemon الخاص بالنظام بدلاً من daemon المعزول للمستودع. تعمل دوال Rediaccfile بالفعل بصلاحيات كافية. انظر الخدمات للتفاصيل.
انظر الخدمات للحصول على تفاصيل كاملة حول ملفات Rediaccfile وتخطيطات الخدمات المتعددة وترتيب التنفيذ.
الخطوة 5: تهيئة شبكة الخدمات
يشغّل Rediacc Docker daemon معزولاً لكل مستودع. تستخدم الخدمات network_mode: host وتربط بعناوين loopback فريدة بحيث يمكنها استخدام المنافذ القياسية دون تعارضات بين المستودعات.
تكييف docker-compose.yml
قبل (التقليدي):
services:
postgres:
image: postgres:16
ports:
- "5432:5432"
volumes:
- ./data/postgres:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secret
redis:
image: redis:7-alpine
ports:
- "6379:6379"
app:
image: my-app:latest
ports:
- "8080:8080"
environment:
DATABASE_URL: postgresql://postgres:secret@postgres:5432/mydb
REDIS_URL: redis://redis:6379
بعد (Rediacc):
services:
postgres:
image: postgres:16
network_mode: host
restart: unless-stopped
volumes:
- ./data/postgres:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secret
command: -c listen_addresses=${POSTGRES_IP} -c port=5432
redis:
image: redis:7-alpine
network_mode: host
restart: unless-stopped
command: redis-server --bind ${REDIS_IP} --port 6379
app:
image: my-app:latest
network_mode: host
restart: unless-stopped
environment:
DATABASE_URL: postgresql://postgres:secret@${POSTGRES_IP}:5432/mydb
REDIS_URL: redis://${REDIS_IP}:6379
LISTEN_ADDR: ${APP_IP}:8080
التغييرات الرئيسية:
- إضافة
network_mode: hostلكل خدمة - إزالة تعيينات
ports:(غير مطلوبة مع شبكة المضيف) - ربط الخدمات بمتغيرات البيئة
${SERVICE_IP}(يتم حقنها تلقائياً بواسطة Rediacc) - الإشارة إلى الخدمات الأخرى بعنوان IP الخاص بها بدلاً من أسماء Docker DNS (مثل
${POSTGRES_IP}بدلاً منpostgres)
يتم إنشاء متغيرات {SERVICE}_IP تلقائياً من أسماء الخدمات في ملف compose الخاص بك. قاعدة التسمية: أحرف كبيرة، استبدال الشرطات بشرطات سفلية، وإضافة لاحقة _IP. على سبيل المثال، listmonk-app يصبح LISTMONK_APP_IP.
انظر شبكة الخدمات للتفاصيل حول تعيين عناوين IP و.rediacc.json.
الخطوة 6: بدء الخدمات
قم بتحميل المستودع (إذا لم يكن محمّلاً بالفعل) وابدأ جميع الخدمات:
rdc repo up my-project -m server-1 --mount
سيقوم هذا بما يلي:
- تحميل المستودع المشفر
- بدء Docker daemon المعزول
- إنشاء
.rediacc.jsonتلقائياً مع تعيينات عناوين IP للخدمات - تشغيل
prep()من جميع ملفات Rediaccfile - تشغيل
up()من جميع ملفات Rediaccfile
تحقق من أن الحاويات تعمل:
rdc machine containers server-1
الخطوة 7: تفعيل البدء التلقائي (اختياري)
بشكل افتراضي، يجب تحميل المستودعات وبدء تشغيلها يدوياً بعد إعادة تشغيل الخادم. فعّل البدء التلقائي حتى تبدأ خدماتك تلقائياً:
rdc repo autostart enable my-project -m server-1
سيُطلب منك إدخال عبارة مرور المستودع.
ملاحظة أمنية: يخزّن البدء التلقائي ملف مفتاح LUKS على الخادم. أي شخص لديه صلاحيات root يمكنه تحميل المستودع بدون عبارة المرور. انظر البدء التلقائي للتفاصيل.
سيناريوهات الترحيل الشائعة
WordPress / PHP مع قاعدة بيانات
my-wordpress/
├── Rediaccfile
├── docker-compose.yml
├── app/ # ملفات WordPress (UID 33 عند التشغيل)
├── database/data/ # بيانات MariaDB (UID 999 عند التشغيل)
└── wp-content/uploads/ # ملفات المستخدمين المرفوعة
- ارفع ملفات مشروعك
- ابدأ الخدمات أولاً (
rdc repo up) حتى تنشئ الحاويات أدلة بياناتها - شغّل إصلاح الملكية — يتم استثناء أدلة بيانات MariaDB والتطبيق تلقائياً
Node.js / Python مع Redis
my-api/
├── Rediaccfile
├── docker-compose.yml
├── src/ # الكود المصدري للتطبيق
├── node_modules/ # التبعيات
└── redis-data/ # بيانات Redis المستمرة (UID 999 عند التشغيل)
- ارفع مشروعك (فكّر في استثناء
node_modulesوسحبها فيprep()) - شغّل إصلاح الملكية بعد بدء الحاويات
مشروع Docker مخصص
لأي مشروع يحتوي على خدمات Docker:
- ارفع ملفات المشروع
- كيّف
docker-compose.yml(انظر الخطوة 5) - أنشئ
Rediaccfileبدوال دورة الحياة - شغّل إصلاح الملكية
- ابدأ الخدمات
استكشاف الأخطاء وإصلاحها
رفض الإذن بعد الرفع
لا تزال الملفات تحمل معرّف المستخدم المحلي الخاص بك. شغّل أمر الملكية:
rdc repo ownership my-project -m server-1
الحاوية لا تبدأ
تحقق من أن الخدمات تربط بعنوان IP المعيّن لها، وليس 0.0.0.0 أو localhost:
# تحقق من عناوين IP المعيّنة
rdc term server-1 my-project -c "cat .rediacc.json"
# تحقق من سجلات الحاوية
rdc term server-1 my-project -c "docker logs <container-name>"
تعارض المنافذ بين المستودعات
يحصل كل مستودع على عناوين loopback فريدة. إذا رأيت تعارضات في المنافذ، تحقق من أن docker-compose.yml يستخدم ${SERVICE_IP} للربط بدلاً من 0.0.0.0. الخدمات المربوطة بـ 0.0.0.0 تستمع على جميع الواجهات وستتعارض مع المستودعات الأخرى.
إصلاح الملكية يعطّل الحاويات
إذا شغّلت rdc repo ownership --force وتوقفت حاوية عن العمل، فقد تم تغيير ملكية ملفات بيانات الحاوية. أوقف الحاوية واحذف دليل بياناتها وأعد تشغيلها — ستعيد الحاوية إنشاءه:
rdc repo down my-project -m server-1
# احذف دليل بيانات الحاوية (مثل database/data)
rdc repo up my-project -m server-1