שרת משלכם
באינטרנט של היום יש מגוון שירותים שמציעים לארח את התוכן שלכם בעבור תשלום מסויים (בין אם גלוי ובין אם לא).
מעבר למדיה חברתית, יש שירותים שמאפשרים לכם לבנות אתרים, לאחסן רפוזיטוריז של גיט, לארח בשבילכם דאטהבייסים, לאפשר לכם לצ'וטט עם אחרים, לשלוח ולקבל אימיילים, ליצור שרת מיינקראפט, או לארח תוכנה משלכם. לכל שירות כזה יש יתרונות וחסרונות כאשר אתם שוכרים אותו ממישהו אחר.
האלטרנטיבה ללשכור שירותים היא שרת משלכם, בין אם פיזית שלכם או מושכר באינטרנט, שעליו תוכלו לתפור איזה פתרונות תוכנה שתרצו.
כמובן, יש לזה יתרונות וחסרונות, וגם לא חייבים ללכת all-in ולארח את כל השירותים שאתם משתמשים בהם, אבל נחמד לדעת שהאפשרות הזאת קיימת.
VPS
בבלוג פוסט הזה אני אדבר על גישה ספציפית: VPS. אתם מקבלים מה שנראה כמו מחשב עם לינוקס לכל דבר, עם IP סטטי, שמנוהל ברמת התשתית והחומרה ע"י חברה שמשכירה לכם אותו, וברמת מערכת ההפעלה על ידכם. עם המחשב הזה אתם יכולים לעשות, בגדול, מה שאתם רוצים. מצד אחד זה דבר מאוד גמיש אבל מהצד השני יכול להיות overwhelming ולדרוש לא מעט ידע.
אנסה לדבר על הצעדים הראשונים בסביבה כזאת, מה כדאי לדעת ולעשות, ואיך להתחיל לשכור VPS באינטרנט ולהריץ עליו תוכנות וסרביסים.
הפוסט הזה מתבשל אצלי כבר תקופה ולא ממש התקדם מאז שכתבתי את הטיוטה שלו. החלטתי לפרסם את מה שיש לי ככה שהוא כנראה יהיה מפורט מדי ולא מפורט מספיק בו זמנית. אבל נראה לי שעדיף לפרסם מלא לפרסם, לא?
מה צריך?
- לשכור VPS - נותן לכם גישה לקופסא. חבילה מאוד בסיסית של 2 ליבות, 2 גיגה זכרון, ו60 גיגה דיסק קשיח יכולה לעלות כ2.5 יורו לחודש. על קופסא אחת כזו אפשר לאחסן דיי הרבה - מספר אתרים, דאטהבייסים, שרתי גיט, ועוד. אפשר לשכור בnetcup או hetzer, ואם הדרישות שלכם גבוהות יותר (או אפילו נמוכות יותר), תוכלו למצוא חבילות יקרות או זולות יותר.
- לקנות דומיין - אם תרצו כתובת יפה לשרת שלכם ולא כתובת IP. מתחיל בערך ב10 דולר לשנה ומשתנה לפי השם והLTD (סיומת, כגון .com, .net, .moe) שבחרתם. אפשר לקנות דומיין בporkbun. ולקנפג את הDNS שלו להצביע על השרת שלכם.
- להכיר לינוקס - איך עובדים עם שורת הכתיבה (שזה הממשק העיקרי שתשתמשו בו), איך מתחברים בSSH לשרת, ואיך מעתיקים קבצים עם SCP. צריך גם להכיר עורך טקסט שעובד בטרמינל כמו nano, vim או emacs. וגם את tmux.
בנוסף, מומלץ גם:
- להכיר Reverse Proxy כמו nginx או caddy, אלו תוכנות שמאפשרות לנתב תעבורה שמגיעה מבחוץ לתוכנות שונות בתוך המחשב. אני משתמש בהן כדי לנתב תעבורה מסאבדומיינים שונים לתוכנות שונות, והן גם מטפלות עבורי בHTTPS.
- להכיר את certbot כדי ליצור סרטיפיקציית TLS בחינם באמצעות השירות Let's Encrypt.
- להכיר את systemd כדי לנהל את התוכנות והשירותים שלכם באמצעותו. systemd יריץ את התוכנה של כשהשרת עולם (במידה ולמשל עשיתם עדכון), ויעלה אותה מחדש אם היא התרסקה מסיבה כלשהי, ינהל לוגים, ועוד.
- להכיר docker ו-docker compose לניהול חלק מהתוכנות שתרצו להריץ.
זו נשמעת כמו רשימה ארוכה ומפחידה, וקודם כל אני רוצה להגיד שכן, לניהול שרתים יש עקומת למידה לא קטנה, אבל אלו גם דברים שאפשר ללמוד בצורה הדרגתית. לא חייבים לשלוט בלינוקס בצורה טוטאלית לפני שמתחילים, ולא צריך לדעת דוקר לפני שצריך. אפשר להתחיל ובכל צעד ללמוד just enough כדי להשלים את המשימה וככה להתגלגל.
במקום לנסות ללמוד את כל הדברים לפני שאנחנו יודעים מה אנחנו עושים איתם, בואו נלך צעד צעד עם דוגמא.
דוגמא
נניח ואני רוצה לעבור מגיטהאב או גיטלאב ולהתחיל לארח את הרפוזיטוריז שלי בצורה עצמאית על שרת משל עצמי, ואין לי אף שרת משל עצמי. מה אני עושה?
forgejo
0. נבחר תוכנה
זה שלב מאוד חשוב. לתוכנות שונות יש חוזקות וחולשות שונות. ביניהן איזה פיצ'רים יש להן, כמה משאבים הן צורכות וכמה קל תהליך ההתקנה שלהן.
לכן, במקום לבחור בGitLab שצריכה הרבה משאבים, דאטהבייסים ושירותים שונים, אבחר בforgejo, שהיא הרבה יותר קלילה, לא מצריכה דאטהבייסים חיצוניים (משתמשת בSQLite), ומספקת קובץ בינארי יחיד להורדה אותו אפשר להריץ.
עכשיו שאנחנו יודעים מה אנחנו רוצים לעשות, מה צריך לעשות כדי שאוכל להקליד דומיין מסויים ולהגיע לפרופיל גיט שלי בשרת משלי?
1. מחשב מרוחק
כדי להתחיל, אנחנו צריכים מחשב מרוחק אליו נוכל להתחבר. אני בשנים האחרונות שוכר VPS-ים מnetcup. הם נמצאים בגרמניה והם דיי זולים. לפעמים אני מקבל מיילים מהם בגרמנית. הממשק שלהם קצת מיושן, אבל אני לא צריך הרבה מעבר למכונה רצה. כפי שאמרתי, יש מספר שירותים שיכולים לספק לכם VPS.
החבילות הזולות אלו בדרך כלל מחשבים גדולים ש"חותכים אותם" כדי ליצור מספר מחשבים וירטואלים, וכשקונים חבילה כזו מקבלים מחשב וירטואלי שחולק את המשאבים שלו עם מחשבים וירטואלים אחרים (כמובן שיש הפרדה מלאה ברמת התוכנה). יש גם חבילות של מחשבים "dedicated", אבל הן מתומחרות בהתאם.
אחרי הרכישה, תקבלו ממשק לשליטה על המכונה שלכם ותוכלו להתקין עליה מערכת הפעלה. אני ממליץ על debian החדשה ביותר שהיא מאוד נפוצה. בסיום ההתקנה תקבלו שם משתמש וסיסמא, וIP סטטי.
2. דומיין
אני לאחרונה קונה דומיינים מרשם בשם porkbun. יש להם ממשק דיי פשוט וסבבה ומחירים טובים. בחרו לכם איזה כתובת מדליקה ותראו אם היא זמינה. שימו לב שלא קל לתפוס דומיינים שהם מילה נפוצה וקצרה באנגלית, או שהם יעלו הרבה, אז נסו להיות טיפה יותר יצירתיים. סיומות כמו .net ו-.com הן זולות ומשתלמות ויכולות לעלות משהו כמו 13 דולר לשנה, אבל אתם יכולים להיות מיוחדים כמוני ולבחור סיומות כמו space, page, me, dev, love ועוד. הרבה פעמים יהיו מבצעים על השנה הראשונה, אז שימו לב גם למחיר renewal!
אחרי שרכשתם דומיין, קנפגו את הדומיין שלכם שיצביע על כתובת הIP שקיבלתם עבור השרת. אתם יכולים לעשות זאת ע"י הגדרה של A Record (Address Record). שתי הכתבות הראשונות בעמוד הזה יסבירו איך להשתמש בממשק של פורקבאן.
אגב, אם יש לכם דומיין ושירות אימייל שתומך בדומיין חיצוני, תוכלו ליצור כתובת מייל מהדומיין שלכם שיפנה לאימייל שלכם. דיי שווה!
3. מערכת הפעלה
אחרי שקנינו שרת ודומיין, והתקנו מערכת הפעלה, אנחנו יכולים להתחבר אל המחשב המרוחק שלנו באמצעות SSH עם היוזר והסיסמא שקיבלנו.
$ ssh my_user@sloorpy.moe
my_user@sloorpy.moe's password:
אמליץ כצעד ראשון ליצור משתמש חדש עם סיסמא חזקה ולמחוק את זה שקיבלתם. יש המחמירים ואומרים שכדאי לבטל לגמרי את ההתחברות בssh באמצעות סיסמא ובמקום כדאי ליצור ssh-keygen ולהעתיק אותו לשרת. אבל אני חושב שבשביל שרת אישי באינטרנט זה קצת אוברקיל. אבל כן כדאי ליצור סיסמא חזקה.
בשלב הזה אתם יכולים לעדכן את מערכת ההפעלה, להתקין תוכנות רלוונטיות לשרת שלכם כמו git, vim, tmux, wget, curl וכו'.
במיוחד tmux משתלמת במיוחד, שכן אפשר באמצעות החיבור שלכם להריץ כמה "חלונות" במקביל, ולא צריך לדאוג שהדבר שאתם עובדים עליו יסגר אם נפל לכם האינטרנט או משהו.
אחרי שהשלמתם את הצעדים האלה, ברכותי - יש לכם שרת באינטרנט! עכשיו נחזור למטרה המקורית שלנו - שרת יפה לאחסון רפוזיטוריז של גיט.
4. התקנת התוכנה
תוכנות שונות יבואו בצורות שונות. חלק מהן יהיה אפשר להתקין עם מנהל החבילות של מערכת ההפעלה, חלק יגיעו עם דוקר, חלק יגיעו כקוד מקור וידרשו מכם להתקין erlang, mysql, redis, ffmpeg ועוד. למזלנו, forgejo מגיע כבינארי סטטי (כזה שמכיל את כל התלויות שלו בתוך הבינארי).
forgejo מגיע עם מדריך התקנה, לא מאוד מורכב. נראה מה הדרישות וההצעות להתקנת התוכנה.
את התוכנה אנחנו יכולים להוריד ישר לתוך השרת באמצעות פקודת wget.
forgejo כן מבקש מאיתנו להתקין git ו-git-lfs, נעשה זאת.
הם מבקשים ליצור יוזר עבור התוכנה, זה גם משהו שאני אוהב לעשות באופן כללי כדי ליצור מעין הפרדה בין תוכנות שונות.
הם מציעים לשים את התוכנה וליצור תיקיות בהם נשים את הדאטה של התוכנה במקום גלובלי. אני מעדיף לשים את הכל תחת תיקיית הבית של היוזר שיצרנו.
ככה גם לא צריך לשחק עם הרשאות ממש.
אפשר לעבור ליוזר הזה, שיצרנו בלי סיסמא, באמצעות פקודת su (switch user).
sudo su - git
5. systemd
כפי שציינתי מקודם, באמצעות systemd אנחנו יכולים לנהל את הסרביסים שלנו בלי להריץ אותם ידנית. במערכות הפעלה כמו דביאן, systemd מגיע עם מערכת ההפעלה.
כדי להגדיר סרביס חדש נוסיף קובץ תחת התיקיה /etc/systemd/system/ בשם forgejo.service.
כנראה שתצטרכו sudo כדי ליצור את הקובץ שם.
הוא נראה כך:
[Unit]
Description=Git service
[Service]
ExecStart=/home/git/forgejo-15.0.0-linux-amd64 web --port=9000 -c /home/git/app.ini
Type=simple
User=git
StandardError=journal
StandardOutput=journal
StandardInput=null
[Install]
WantedBy=multi-user.target
הקובץ הזה מגדיר את הסרביס - שורת הפקודה להריץ את הסרביס, לאן נכתבים הלוגים, מי היוזר שמריץ את הפקודה (ויש לו הרשאות), וכו'. בואו נעשה זום אין על פקודת ההרצה
ExecStart=/home/git/forgejo-15.0.0-linux-amd64 web --port=9000 -c /home/git/app.ini
בפקודה אנחנו מציינים את ה-Path המלא של קובץ ההרצה ואת הפרמטרים שלו. עבור forgejo זה להריץ סרביס ווב, פורט עליו ירוץ הסרביס (בחרתי רנדומלי, עוד על זה בהמשך), ומהו קובץ הקונפיגורציה.
קובץ הקונפיגורציה של forgejo מגדיר את הפרטים של השרת הספציפי שלנו - מה הכותרת שלו, באיזה דאטהבייס להשתמש ואיפה הוא נמצא, מה הדומיין שלו, האם אפשר להירשם לשירות, וכו'.
יש מדריך באתר שמגדיר את כל האפשרויות
ומקשר לקובץ לדוגמה עם ברירות מחדל שאפשר לערוך. אפשר לעשות לקובץ הזה wget,
לעבור עליו ולנקות אותו, וללמוד איזה דברים צריך לשנות.
דבר אחד ספציפי שאדגיש פה זה שבקובץ הקונפיגורציה אפשר להגדיר מה הדומיין שיצביע לסרביס, כולל סאבדומיין.
אז אם למשל אתם רוצים שכדי להגיע לפרופיל גיט שלכם הכתובת תהיה git.sloorpy.moe,
יהיה צריך לקנפג את הסאבדומיין הזה ברשם הדומיין (פורקבאן). תגדירו שם A Record
חדש עם סאבדומיין שמצביע לאותו IP סטטי של המכונה שלכם וזהו.
בחזרה לsystemd, אנחנו יכולים להשתמש בפקודה systemctl כדי לשלוט בסרביסים.
תחילה, כדי שsystemd יכיר את הסרביס החדש שלנו ויתחיל אותו בעליית המערכת
sudo systemctl daemon-reload
sudo systemctl enable forgejo.service
ואז נתחיל אותו
sudo systemctl start forgejo.service
פקודות נוספות שימושיות הן: stop, restart, status
כדי לעצור, לעצור ולהתחיל מחדש, ולראות מה הסטטוס של הסרביס.
כדי לראות לוגים, אפשר לכתוב:
sudo journalctl -u git.service
status במיוחד היא פקודה מאוד חשובה. היא תראה לכם אם הסרביס רץ עכשיו,
כמה זכרון הוא צורך, לוגים אחרונים, וכו'.
6. Reverse Proxy & Certbot
הגדרנו פורט רנדומלי לforgejo ולא את הפורטים 80 ו443 כדי ששבעתיד נוכל להריץ מספר סרביסי ווב במקביל. אם סרביס אחד תופס את הפורטים האלה, לא נוכל לגשת אל הסרביסים האחרים בצורה יפה, אלא אם הסרביס התופס הוא Reverse Proxy, שיעביר את התעבורה לסרביסים שנגדיר לו.
יצא לי להשתמש בעיקר ב-nginx, ומצאתי מדריך יחסית פשוט לאיך להתקין ולהגדיר את nginx וגם את certbot שמספק סרטיפיקציות TLS לגישה מאובטחת לאתר.
בהנחה שהגדרתם סאבדומיין מיוחד לforgejo,
נגדיר בnginx
איך לזהות את הסאבדומיין הזה ולנתב את התעבורה לפורט 9000 שהגדרנו לסרביס שלנו.
נוסיף קובץ חדש: /etc/nginx/sites-available/forgejo.conf
server {
listen 80;
server_name git.sloorpy.moe;
location / {
proxy_pass http://localhost:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
וניתן לcertbot ליצר עבורנו סרטיפיקציה ולקנפג את nginx ככה שהוא ינתב תעבורה שעוברת דרך TLS לסרביסים שלנו, שלא צריכים לדעת דבר על TLS.
sudo certbot --nginx -d git.sloorpy.moe
עכשיו אנחנו אמורים להיות מסוגלים להתחבר דרך הדפדפן ל git.sloorpy.moe ולהריץ את החיבור הראשוני לforgejo שתעזור לכם לעשות את ההתקנה הראשונית של התוכנה עצמה, ולאחר מכן יהיה לכם שרת גיט נאה משלכם, כמו שלי.
סיכום
ליצור שרת משלכם זו משימה עם עקומת למידה גבוהה. היינו צריכים לעבור כמה שלבים בדרך כדי להגיע לתוצר הסופי, ויש תוכנות מורכבות יותר ותובעניות יותר להרצה, אבל אני חושב שא' בסופו של דבר התוצאה משתלמת, ב' אחרי שעשיתם חלק מהדברים פעם אחת הפעם הבאה הרבה יותר קלה, וג' לא צריך לעשות דוקטורט ולהבין את כל הרכיבים לפני שעובדים איתם.
אני מקווה שהפוסט הזה היה לכל הפחות מעניין ופתח קצת את הראשון למי שמתעניין. נגענו רק בקצה הקרחון של הרבה דברים ובפרט לא דיברנו על נושא מאוד חשוב: אבטחה. אם אתם רוצים ללמוד עוד על הנושא, אני יכול להמליץ על Deployment from Scratch שמכיל הרבה מאוד ידע גם תיאורתי וגם פרקטי.
יש שלל שירותים נוספים שתוכלו להריץ על השרת שלכם באותה שיטה. משרתי צ'אט, לפורומים, לניהול תמונות, והכי חשוב, לתוכנות משלכם.
רוצים להגיב? בדקו מהי שאלת הסינון בעמוד הראשי.
