איך לאחסן את המאגרים של Gitea בנפרד

הקדמה

Gitea הוא מאגר קוד מקורי המבוסס על מערכת בקרת גרסאות, Git. בעוד שקיימות כמה פתרונות להתקנה עצמית כמו GitLab ו-Gogs, Gitea נהנית מיתרון בקלות משקל, וזה אומר שהוא יכול לרוץ על שרת יחסית קטן.

אך, כשיש לך שרת קטן, במיוחד בעולם של VPSes, זה נקרא בדרך כלל היותך מוגבל בנפח האחסון. למרבה המזל, רבים מספקי האירוח מציעים אחסון נוסף בצורת נפחים חיצוניים, אחסון בלוק, או אחסון קבצים מחובר (NFS). זה נותן למשתמשים אפשרות לחסוך כסף על מארחי VPS קטנים ליישומים שלהם מבלי לוותר על אחסון.

עם Gitea והיכולת להחליט איפה הקוד המקורי שלך מאוחסן, אתה יכול לוודא שיש לפרויקטים וקבצים שלך מקום להרחיב. במדריך הזה, תזמין נפח אחסון חיצוני לנקודת ההרכבה ותוודא ש-Gitea קורא את המידע המתאים מהנפח הזה. בסיום, יהיה לך התקנת Gitea שמאחסנת מאגרי קוד ומידע חשוב אחר בנפח אחסון נפרד.

דרישות מוקדמות

לפני שתתחיל, תצטרך את הפריטים הבאים:

שים לב שאם התקנת את 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 ומדפיס אותו למסך שלך. כמו בפקודת ההרכבה הקודמת, היא מרכבה את ההתקן על נקודת ההרכבה באמצעות אפשרויות 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 בתיקיית הבית של משתמש ה-Git (git, במקרה זה). התיקייה הזו מכילה את כל מפתחות ה-SSH שיעשה שימוש בהם Gitea, לכן לא מומלץ להעביר את הערך לנקודת ההעברה של נפח ה-Docker הזה. כדי לגבות את המיקום הזה על נפח הנתונים שלך, הכי טוב יהיה להשתמש בפתרון אחר כמו משימת cron לגיבוי של התיקייה. כדי למד עוד, בדוק מדריך זה על שימוש ב־cron לניהול משימות מתוזמנות.

כאשר אתה מפעיל docker-compose ו-Gitea מתקין, הוא ישתמש בנפח האחסון החסום שלך כדי לאחסן את הנתונים שלו.

אם אינך משתמש בנפחי Docker כדי לנהל את מיקומי הנתונים שלך — לדוגמה, אם אתה מתקין את Gitea על השרת שלך דרך השחרורים הבינאריים על פי ההוראות הללו מ-Gitea — אז תצטרך לשנות את המיקומים בתוך קובץ התצורה (נפוץ /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 גישה לכתובת זו. ניתן לקרוא עוד על הרשאות Linux כאן.

העברת התקנת Gitea קיימת

אם כבר יש לך התקנה פועלת של Gitea, עדיין תהיה לך אפשרות לאחסן את הנתונים שלך בנפרד, אך זה ידרוש תשומת לב בהבטחה שכל הנתונים שלך נשמרים בצורה בטוחה ונגישה ל־Gitea.

הערה: כמו כל פעולה הקשורה בנתונים שלך, חשוב לוודא שיש לך גיבוי מעודכן של הכל. במקרה זה, זה אומר גיבוי של כל הקבצים בתיקיית הנתונים שלך (הקבצים של SSH, התיקיות gitea-repositories ו־lfs, בסיס הנתונים, וכו') למיקום בטוח.

ישנם שני אפשרויות להעברת הנתונים שלך לנפח חדש. הדרך הראשונה היא להעתיק את נתוני ה־Gitea שלך למיקום משני, ואז להפוך את המיקום המקורי לנקודת העגינה של הנפח שלך. כאשר אתה מעתיק את הנתונים שלך חזרה למיקום הזה, תעתיק אותם אל הנפח הזה, ולא יידרשו שינויים בתוך Gitea עצמו; הוא ימשיך פשוט כמו שהוא עשה עד כה. אם עם זאת, אינך רוצה לעגון את כל התקן ליעד הזה (לדוגמה, אם נתוני ה־Gitea שלך לא יהיו היחידים על הנפח הזה), אז אפשרות שנייה היא להעביר את כל נתוני ה־Gitea שלך למיקום חדש על הנפח הזה ולהורות לגיטיה עצמו להשתמש במיקום זה.

ללא קשר לאפשרות שבחרת, תחילה, עצור את שירות האינטרנט של Gitea.

אם התקנת את Gitea דרך Docker Compose, השתמש ב־docker-compose כדי לעצור את השירות. בעודך באותו ספרייה המכילה את קובץ ה־docker-compose.yml, הפעל:

  1. docker-compose down

אם התקנת אותו כשירות systemd, השתמש בפקודת systemctl:

  1. sudo systemctl stop 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, תוכל גם לבדוק ולהעלות למאגרי קוד באמצעות git clone ו־git push.

סיכום

במדריך זה, העברת את כל נתוני ה-Gitea שלך לנפח אחסון בלוק. נפחים כאלה הם גמישים מאוד ומספקים יתרונות רבים. כגון יכולת לאחסן את כל הנתונים שלך על דיסקים גדולים יותר, נפחי RAID, מערכות קבצים מחוברות לרשת, או להשתמש באחסון בלוק כמו נפחים של DigitalOcean כדי להפחית בהוצאות אחסון. זה מאפשר גם ליצור צילומי מסך של דיסקים שלמים לצורך גיבוי כך שתוכל לשחזר את תוכנם במקרה של כשל קטסטרופי.

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