كيفية تخزين مستودعات Gitea على حجم منفصل

مقدمة

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

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

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

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

قبل البدء، ستحتاج إلى ما يلي:

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

الخطوة 1 — تثبيت حجم تخزين مكتل

A volume can take many different forms. It could be an NFS volume, which is storage available on the network provided via a file share. Another possibility is that it takes the form of block storage via a service such as DigitalOcean’s Volumes. In both cases, storage is mounted on a system using the mount command.

سيكون من القابل رؤيته أن الأحجام مثل هذه ستظهر كملفات الجهاز المخزنة داخل /dev. هذه الملفات هي كيفية تفاعل النواة مع أجهزة التخزين بحيث لا تستخدم الملفات فعليا للتخزين. من أجل أن تتمكن من تخزين الملفات على جهاز التخزين، ستحتاج إلى تثبيتها باستخدام أمر mount.

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

أنشئ نقطة تثبيت بالاسم gitea كما تقوم بإنشاء مجلد عادي باستخدام أمر mkdir:

  1. sudo mkdir /mnt/gitea

من هنا، يمكنك تركيب الجهاز على ذلك الدليل لاستخدامه للوصول إلى تلك المساحة التخزينية. استخدم أمر mount لتركيب الجهاز:

  1. sudo mount -t ext4 -o defaults,noatime /dev/disk/by-id/your_disk_id /mnt/gitea

السلسلة ext4 الخيار تحدد نوع نظام الملفات، ext4 في هذه الحالة، على الرغم من أنه بناءً على نوع نظام الملفات لحجمك، قد يكون شيئًا مثل xfs أو nfs؛ للتحقق من نوع حجمك استخدم أمر mount بدون خيارات:

  1. mount

سيوفر لك هذا سطرًا من الإخراج لكل نظام ملفات مركب. نظرًا لأنك قمت بتركيب الخاص بك فقط، من المحتمل أن يكون آخر على القائمة:

Output
. . . /dev/sda on /mnt/gitea type ext4 (rw,noatime,discard)

يظهر أن نوع نظام الملفات هو ext4.

هذا الأمر يقوم بتركيب الجهاز المحدد بواسطة معرفه إلى /mnt/gitea. الخيار -o يحدد الخيارات المستخدمة عند التركيب. في هذه الحالة، تستخدم الخيارات الافتراضية التي تسمح بتركيب نظام ملفات قابل للقراءة/الكتابة، والخيار noatime يحدد أن النواة لا تحدث وقت آخر وصول للملفات والدلائل على الجهاز من أجل أن تكون أكثر كفاءة.

الآن بعد أن قمت بتركيب الجهاز الخاص بك، سيبقى مركبًا طالما أن النظام قيد التشغيل. ومع ذلك، بمجرد إعادة تشغيل النظام، لن يتم تركيبه بعد الآن (على الرغم من أن البيانات ستظل على الحجم)، لذا ستحتاج إلى إعلام النظام بتركيب الحجم بمجرد بدء تشغيله باستخدام ملف /etc/fstab (‘جدول نظم الملفات’). يقوم هذا الملف بسرد الأنظمة الملفات المتاحة ونقاط تركيبها في تنسيق محدد بواسطة الفواصل المتوالية.

استخدام echo و tee، أضف سطرًا جديدًا إلى نهاية /etc/fstab:

  1. echo '/dev/disk/by-id/your_disk_id /mnt/gitea ext4 defaults,nofail,noatime 0 0' | sudo tee /etc/fstab

يُضاف هذا الأمر السلسلة “/dev/disk/by-uid/معرف_القرص_الخاص_بك” إلى ملف fstab ويُطبع على الشاشة. كما هو الحال مع الأمر mount السابق، يقوم بتثبيت الجهاز على نقطة التثبيت باستخدام الخيارات defaults، nofail، و noatime.

بمجرد إجراء التغييرات على /etc/fstab، سيقوم النواة بتثبيت الحجم الخاص بك أثناء التمهيد.

ملاحظة: الأجهزة التخزينية في نظام Linux مرنة للغاية وتأتي بجميع أنواع مختلفة، من نظام ملفات متصل بالشبكة (NFS) إلى القرص الصلب القديم. لمعرفة المزيد حول تخزين البلوك والأجهزة في Linux، يمكنك قراءة المزيد حول مفاهيم التخزين في مقدمة إلى مصطلحات ومفاهيم التخزين في Linux.

الخطوة 2 — تكوين Gitea لتخزين البيانات على حجم تخزين البلوك

يحتفظ Gitea بجميع مستودعاته في موقع مركزي. يتضمن هذا المستودعات من جميع المستخدمين والمنظمات. ما لم يتم تكوينه على نحو آخر، يتم الاحتفاظ بجميع المعلومات في دليل واحد. يُسمى هذا الدليل بـ data في التثبيتات الافتراضية. لأغراض هذا البرنامج التعليمي، سنستخدم نسخة من Gitea تعمل على Docker كما هو موضح في البرنامج التعليمي المرتبط أعلاه.

أولاً، دعنا نحصل على فكرة عن محتويات هذا الدليل. يمكنك القيام بذلك عن طريق التنقل إلى دليل البيانات وتشغيل أمر ls. باستخدام تنسيق -l سيزودنا بمزيد من المعلومات حول الملفات:

  1. cd gitea
  2. ls -l

سيوفر هذا قائمة مثل الآتي:

Output
total 20 drwxr-xr-x 5 root root 4096 Jun 23 22:34 ./ drwxrwxr-x 3 sammy sammy 4096 Jun 26 22:35 ../ drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/ drwxr-xr-x 12 git git 4096 Jun 26 22:35 gitea/ drwx------ 2 root root 4096 Jun 23 22:34 ssh/

لنقم بتفكيك نتائج هذا الأمر. يقوم بقائمة ملف أو دليل واحد في كل سطر. في هذه الحالة، يقوم بقائمة خمسة دلائل. إدخال . هو إدخال خاص يعني مجرد الدليل الحالي، و .. يمثل الدليل الذي يحتوي على مستوى واحد أعلى. تُظهر هذه النتيجة أن الدليل الحالي مملوك لمستخدم root، وهو الحال في هذه الحالة لأن Docker يعمل كمستخدم مُفوض، والدليل الذي يحتوي على مستوى واحد أعلى هو مملوك لـ sammy.

الدليل git مهم بالنسبة لنا لأنه يحتوي على جميع مستودعات البيانات التي قد نرغب في تخزينها على حجم منفصل. قم بقائمة محتويات الدليل:

  1. ls -l git

سيوفر هذا القائمة الطويلة للدليل:

Output
total 24 drwxr-xr-x 5 git git 4096 Jun 23 22:42 ./ drwxr-xr-x 6 root root 4096 Jun 27 14:21 ../ -rw-r--r-- 1 git git 190 Jun 23 22:42 .gitconfig drwxr-xr-x 2 root root 4096 Jun 23 22:34 .ssh/ drwxr-xr-x 2 git git 4096 Jun 23 22:42 lfs/ drwxr-xr-x 5 git git 4096 Jun 30 20:03 repositories/

بداخله، هناك دليلان مهمان: دليل repositories الذي يحتوي على مستودعات git التي يديرها Gitea مرتبة حسب المستخدم/المنظمة، ودليل lfs الذي يحتوي على البيانات الخاصة بوظيفة تخزين الملفات الكبيرة لـ Git. يحتوي الدليل gitea على المعلومات التي يستخدمها Gitea في الخلفية، بما في ذلك أرشيفات المستودعات القديمة، فضلاً عن قاعدة البيانات التي تحتوي على معلومات مثل المستخدمين ومعلومات المستودع المستخدمة من قبل خدمة الويب. يحتوي الدليل ssh على أزواج مفاتيح SSH المختلفة التي يستخدمها Gitea.

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

هناك مساران لاتباعهما من هذا النقطة، اعتمادًا على ما إذا كنت تعمل مع تثبيت جديد لـ Gitea وتكمل هذا البرنامج التعليمي أثناء عملية التثبيت. في المسار الأول، ستتمكن من تحديد المواقع قبل إنهاء التثبيت، وفي الثاني، ستتعلم كيفية نقل تثبيت موجود.

إعداد تثبيت جديد لـ Gitea

إذا كنت تبدأ بتثبيت جديد كامل لـ Gitea، يمكنك تحديد مكان تخزين كل معلوماتك أثناء عملية التكوين. على سبيل المثال، إذا كنت تقوم بتثبيت Gitea باستخدام Docker Compose، يمكنك ربط الأحجام مع الحجم المرفق بك.

افتح ملف docker-compose.yml باستخدام محرر النص المفضل لديك. يستخدم المثال التالي nano:

  1. nano docker-compose.yml

بمجرد فتح الملف، ابحث عن إدخال volumes في ملف التكوين وقم بتعديل الربط على الجانب الأيسر من : للإشارة إلى المواقع المناسبة على حجم التخزين الخاص بك لدليل بيانات Gitea

docker-compose.yml
...

    volumes:
      - /mnt/gitea:/data
      - /home/git/.ssh/:/data/git/.ssh
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro

...

عند الانتهاء من ضبط المعلومات، قم بحفظ وإغلاق الملف. إذا كنت تستخدم nano، يمكنك القيام بذلك عن طريق الضغط على CTRL + X، ثم Y، وأخيرًا ENTER.

تحذير: تبحث خوادم SSH عن الدليل .ssh في دليل المستخدم جيت (جيت, في هذه الحالة). يحتوي هذا الدليل على جميع مفاتيح SSH التي ستستخدمها جيتيا، لذلك ليس من المستحسن نقل تركيبة هذا الحجم لحاوية دوكر. من أجل الحصول على هذا الموقع في نسخة احتياطية على حجمك، سيكون من الأفضل استخدام حل آخر مثل مهمة cron لنسخ الدليل. لمعرفة المزيد، تحقق من هذا البرنامج التعليمي حول استخدام cron لإدارة المهام المجدولة.

عند تشغيل docker-compose ويتم تثبيت جيتيا، ستستخدم حجم التخزين الخاص بك لتخزين بياناتها.

إذا كنت لا تستخدم حجوم دوكر لإدارة مواقع بياناتك – على سبيل المثال، إذا كنت تقوم بتثبيت جيتيا على خادمك عبر الإصدارات الثنائية وفقًا لـ هذه التعليمات من جيتيا – فسوف تحتاج إلى تعديل المواقع داخل ملف التكوين (عادةً /etc/gitea/app.ini) عندما تقوم بتعيين جميع القيم وقبل أن تقوم بخطوات التثبيت النهائية في المتصفح. على سبيل المثال، قد تقوم بتعيينها على النحو التالي:

app.ini
...

# إذا كنت تستخدم SQLite لقاعدة البيانات الخاصة بك، فسوف تحتاج إلى تغيير المسار
# المتغير في هذا القسم
[database]
...
PATH = /mnt/gitea/gitea.db

[server]
...
LFS_CONTENT_PATH = /mnt/gitea/lfs

[repository]
ROOT = /mnt/gitea/gitea-repositories

...

ملاحظة: تأكد من أن مستخدم git لديك لديه صلاحيات الكتابة في هذا الموقع. يمكنك قراءة المزيد عن أذونات لينكس هنا.

نقل تثبيت موجود لـ Gitea

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

ملاحظة: كما هو الحال مع أي عملية تتضمن بياناتك، من المهم التأكد من أن لديك نسخة احتياطية محدثة من كل شيء. في هذه الحالة، يعني ذلك نسخة احتياطية من جميع الملفات في دليل البيانات الخاص بك (ملفات SSH، ودلائل gitea-repositories و lfs، وقاعدة البيانات، وهلم جرا) إلى موقع آمن.

هناك خياران لنقل بياناتك إلى حجم جديد. الطريقة الأولى هي نسخ بيانات Gitea الخاصة بك إلى موقع ثانوي، ثم تحويل الموقع الأصلي إلى نقطة تعليق لحجمك. عندما تقوم بنسخ بياناتك مرة أخرى إلى هذا الموقع، ستقوم بنسخها على تلك الحجم، ولن يكون هناك أي تغييرات مطلوبة داخل Gitea نفسه. سيستمر كما كان من قبل. إذا كنت، ومع ذلك، لا ترغب في تعليق الجهاز بأكمله على ذلك الوجهة (على سبيل المثال، إذا لم تكن بيانات Gitea الخاصة بك هي الشيء الوحيد في ذلك الحجم)، فإن الخيار الثاني هو نقل كل بيانات Gitea الخاصة بك إلى موقع جديد على ذلك الحجم وتعليم Gitea نفسه لاستخدام تلك الموقع.

مهما اخترت من الخيارات، أولاً، قم بإيقاف خدمة الويب Gitea.

إذا قمت بتثبيت Gitea عبر Docker Compose، استخدم docker-compose لإيقاف الخدمة. أثناء التواجد داخل نفس الدليل الذي يحتوي على ملف docker-compose.yml، قم بتشغيل:

  1. docker-compose down

إذا قمت بتثبيته كخدمة systemd، استخدم الأمر systemctl:

  1. sudo systemctl stop gitea

بمجرد أن تتم إيقاف Gitea، قم بنقل محتويات الدليل بأكمله إلى نقطة التعليق التي تم إنشاؤها في الخطوة 1:

  1. sudo mv * /mnt/gitea

تأكد من أن جميع الملفات قد تم نقلها عن طريق عرض محتويات الدليل الحالي:

  1. ls -la

سيعيد هذا فقط إدخالات الدليل الحالي والأب:

total 8
drwxrwxr-x 2 sammy sammy 4096 Jun 27 13:56 ./
drwxr-xr-x 7 sammy sammy 4096 Jun 27 13:56 ../

بمجرد نقل كل البيانات، قم بالتغيير إلى دليل البيانات الجديد:

  1. cd /mnt/gitea

استخدم ls للتأكد من أن كل شيء يبدو صحيحًا:

  1. ls -l

سيظهر هذا محتويات الدليل:

Output
total 36 drwxr-xr-x 6 root root 4096 Jun 27 14:21 ./ drwxr-xr-x 3 root root 4096 Jun 27 14:21 ../ drwxr-xr-x 5 git git 4096 Jun 23 22:42 git/ drwxr-xr-x 13 git git 4096 Jul 11 08:25 gitea/ drwx------ 2 root root 16384 Jun 27 03:46 lost+found/ drwx------ 2 root root 4096 Jun 23 22:34 ssh/

كما في السابق، يجب أن تحتوي على الدلائل ssh و git و gitea. إذا كنت تستخدم SQLite كقاعدة بيانات لإدارة Gitea، فسوف تحتوي أيضًا على ملف يُسمى gitea.db في الدليل gitea.

عندما تتأكد من أن جميع البيانات قد تم نقلها، حان الوقت لتثبيت الحجم إلى الدليل الخاص بالبيانات.

أولاً، انتقل إلى الدليل الأصلي للدليل الخاص بالبيانات الذي كنت فيه سابقًا. في هذا المثال الذي يستخدم تثبيت Gitea باستخدام Docker Compose كما هو موضح في الدرس المرتبط في المتطلبات المسبقة، هذا هو الدليل الذي يحتوي على ملف docker-compose.yml.

  1. cd ~/gitea/

كما في السابق، استخدم الأمر mount، ولكن هذه المرة، استخدم الدليل الذي قمت للتو بتفريغه كوجهة:

  1. sudo mount -o defaults,noatime /dev/disk/by-id/your_disk_id gitea

الآن، عند قائمة محتويات ذلك الدليل، يجب أن تكون جميع ملفاتك في مكانها:

  1. ls -la gitea

سيقوم هذا الأمر بإخراج المعلومات المتوقعة. لاحظ أنه، اعتمادًا على نوع نظام ملفات حجمك، قد تجد دليلاً إضافيًا يُسمى lost+found؛ هذا أمر طبيعي وجزء من استخدام نظام الملفات اليومي:

total 36
drwxr-xr-x  6 root  root   4096 Jun 27 13:58 ./
drwxrwxr-x  3 sammy sammy  4096 Jun 27 02:23 ../
drwxr-xr-x  5 git   git    4096 Jun 23 22:42 git/
drwxr-xr-x 12 git   git    4096 Jun 27 00:00 gitea/
drwx------  2 root  root   16384 Jun 27 03:46 lost+found/
drwx------  2 root  root   4096 Jun 23 22:34 ssh/

كما ذُكر، إذا كنت ترغب في استخدام Gitea لدليل داخل حجم التخزين الكتلي، فهناك خطوة إضافية يجب عليك إكمالها قبل إعادة تشغيل Gitea. على سبيل المثال، افترض أنك تريد استخدام مجلد يُسمى scm على حجمك المُثبت على /mnt/gitea. بعد نقل جميع بيانات Gitea الخاصة بك إلى /mnt/gitea/scm، ستحتاج إلى إنشاء رابط رمزي من الدليل القديم للبيانات إلى الجديد. لهذا ستستخدم أمر ln:

  1. sudo ln -s /mnt/gitea/scm gitea

في هذه النقطة، يمكنك إعادة تشغيل Gitea. إذا كنت تستخدم Gitea كخدمة systemd، قم بتشغيل:

  1. sudo systemctl restart gitea

إذا كنت تقوم بتشغيل Gitea كحاوية Docker باستخدام Docker Compose، قم بتشغيل:

  1. docker-compose up -d

الآن بعد أن كل شيء يعمل، قم بزيارة نسخة Gitea الخاصة بك في المتصفح وتأكد من أن كل شيء يعمل كما هو متوقع. يجب أن تكون قادرًا على إنشاء كائنات جديدة في Gitea مثل المستودعات والمشكلات، وما إلى ذلك. إذا قمت بإعداد Gitea مع “SSH shim”، يجب أن تكون قادرًا أيضًا على فحص ودفع التحديثات إلى المستودعات باستخدام git clone و git push.

الاستنتاج

في هذا الدليل، قمت بتحريك جميع بيانات Gitea الخاصة بك إلى حجم تخزين متوازن. الأحجام مثل هذه مرنة للغاية وتوفر العديد من الفوائد مثل السماح لك بتخزين جميع بياناتك على أقراص أكبر، وأحجام RAID، وأنظمة ملفات متصلة بالشبكة، أو باستخدام تخزين الكتل مثل DigitalOcean Volumes لتقليل نفقات التخزين. كما أنها تسمح لك بعمل نسخ احتياطية للأقراص بأكملها لاستعادة محتوياتها في حالة وقوع فشل كارثي.

Source:
https://www.digitalocean.com/community/tutorials/how-to-store-gitea-repositories-on-a-separate-volume