ארכיון תגיות: apache

איך להפיץ פרויקט ASP.NET CORE 2 אל שרת לינוקס CentOs 7 – מדריך צעד אחר צעד

לאחרונה, עברתי לתכנת ב-C#. השפה מוכיחה את עצמה כבחירה מעולה, ואילולא הייתה האפשרות להריץ את התוכנות על לינוקס, לא הייתי מבצע את הבחירה הזו.

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

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

linux photo

הנחות יסוד :

  • ידע בסיסי בלינוקס
  • ידע איך להתקין חבילות ( yum \ apt-get )
  • הרכיבים שלא קשורים ל dot net core – מותקנים כבר ( למשל רכיב ה Database, כמו MySql \ MariaDB ).
  • אני מניח ששרת apache מותקן כבר .
  • שרת ה-Web הוא Apache ( ולא ngnix ) .
  • יש לכם הרשאה מספיקה להריץ פקודות בתור מנהל – כלומר sudo
  • יש לכם אפליקציית dot net core כלשהיא להפצה (בדוגמא אני משתמש ב-MVC , אבל אפשר כל דבר…)
  • אינטלגנציה בסיסית

הסבר תיאורטי

מה שמסבירים במדריך הזה, הוא ששרת ה-Apache עובד בתוך Proxy Server אל שרת פנימי של ה- DotNetCore שנקרא kestrel.

כלומר, אנחנו נגדיר למעשה Virtual Host של Apache, שמנתב את כל קריאות ה-Http אל האפליקציה שהפעלנו ב-DotNetCore .

בנוסף – נגדיר שירות, ש"עוטף" את הפעלת ה-dot net core בתור damon – כלומר "שירות", ואחת מההגדרות, תהיה שבמקרה של תקלה, אז התפקיד של המעטפת, יהיה להפעיל מחדש את אפליקציית ה-dot net core שלנו.

הערה חשובה : קיימת אפשרות להפיץ אפליקציות dot net core יחד עם RunTime מובנה – המדריך הזה לא מדבר על האפשרות הזו.

צעדים מעשים – איך להתקין אפליקציית asp.net core על לינוקס cent os 7

שלב 1 – להתקין את ה-sdk ה-dot net core על השרת

  sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc

 sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'
  sudo yum update
 sudo yum install libunwind libicu
 sudo yum install dotnet-sdk-2.0.0

את ההתקנה צריך לבצע כמובן בשרת .

הפקודות הראשונה והשניה מוסיפות  את הכתובת של שרת החבילות ש מיקרוסופט, אל מאגר החבילות של yum

הפקודה השלישית מעדכנת את רשימת  החבילות של yum.

הפקודות הרביעית והחמישית מתקינות את סביבת dot net core.

שלב 2 – קימפול + אריזה של אפליקצית ה dot net core עם כל הספריות שלה

עכשיו, בסביבת הפיתוח (=המחשב שלכם ?) \ או בסביבת ה-build   נשתמש בפקודה דרך ה-Command Line כדי ליצור ספריה שמכילה את ה-dll של התוכנה שלנו, יחד עם כל קבצי ה-dll ועוד.

  • פתחו cmd
  • תגיעו לתיקיה של הפרויקט (לא ה- solution, אלא הפרוייקט ! )
  • תריצו את הפקודה הבאה  : dotnet publish -c Release
    המשמעות של publish היא ליצור "אריזה" מוכנה להפצה של התוכנה שלנו.
    המשמעות של Release היא לקמפל באופן מייטבי – כזה שהוא יותר יעיל מאשר קימפול שמיועד עבור מצב debug.
  • ההרצה יכולה לארוך בין שניות לדקות, ובסופה תקבלו
    • כל מיני הערות warning של הקומפיילר ( בצבע צהוב ) – אפשר להתעלם
    • הודעה על מיקום תיקית ה-publish
    • הודעה על מיקום נפרד של ה-dll שמכיל את התוכנה מקומפלת.
  • צריך לזכור שבפועל, גם בתוך תיקיית ה-publish יש העתק של ה-dll של התוכנה
    ובהמשך – אנחנו נשתמש דווקא בהעתק של ה-dll שנוצר בתוך תיקיית publish.

שלב 3 – להעביר את קבצי התוכנה לשרת

כעת, תעבירו את הקבצים לשרת (בכל צורה שנוחה לכם, ftp, git ….)

המקום הטבעי – הוא תיקיה בתוך ה-www  ( או html וכדומה).

 

שלב 4 – להגדיר את apache בתור reverse proxy

כעת, ניצור Virtual Host באפצ'ה

שמפנה את כל התעבורה – ישירות לאפליקציית ה-dot net

כלומר ה-אפצ'ה  יאזין לתקשורת HTTP על פורט 80 או 443, ויעביר את כל התעבורה לאפליקציית הדוט נט, שבדוגמא שלנו תשב על תאזין על פורט 5000.

לצורך כך, ניצור קובץ בתיקייה  הבאה ( עם nano \ vim \ מה שנוח לכם )  :

/etc/httpd/conf.d/

ובתוך הקובץ נרשום את ההגדרות של אפצה לוירטואל הוסט

<VirtualHost *:80>
 ProxyPreserveHost On
 ProxyPass / http://127.0.0.1:5000/
 ProxyPassReverse / http://127.0.0.1:5000/
 ErrorLog /var/log/httpd/hellomvc-error.log
 CustomLog /var/log/httpd/hellomvc-access.log common
 </VirtualHost>

שימו לב להגדרת ה-errorLog וגם ה- customLog

כי שתיהם דורשים שינוי הגדרה לעומת הקובץ שמוצג פה.

עכשיו – כדי לבדוק את ההגדרות, נקליד את הפקודה הבאה :

    sudo service httpd configtest

אם קיבלתם את ההודעה Syntax OK  – אז הוירטואל הוסט תקין, לפחות מבחינת צורת הכתיבה (ה- Syntax ).

כדי שההגדרות יכנסו לתוקף – נעשה ריסט לשירות האפצה.

 sudo systemctl restart httpd 
sudo systemctl enable httpd

שלב 5 – להגדיר את השרת של דוט נט בתור שירות (שרת kestrel )

סיכום ביניים :  כעת, האפצה משמש בתור reverse proxy ומפנה את התעבורה אל פורט 5000. עכשיו מה שנשאר הוא להפעיל את אפליקציית ה-dot net core כדי שתאזין לפורט 5000.

כאשר כתבתי לפני כן שאפליקציית הדוט נט מאזינה על פורט 5000 בדוגמא שלנו, אז היא עושה זאת באמצעות שרת שנקרא kestrel.

אנחנו "נעטוף" את הפעלת הדוט נט, באמצעות service של המערכת, כלומר ניצור שירות שאחראי על הפעלת הדוט נט, ואחראי גם "להרים" אותו מחדש, במקרה והוא קורס.

בדוגמא של מיקרוסופט, הם יוצרים שירות בשם kestrel-hellomvc.service , אני אצמד לדוגמא הזו – אבל בפרודקשיין, כמובן, תשנו את שם הקובץ=שירות לשם משמעותי, שרלוונטי למקרה שלכם.

  •  ראשית ניצור קובץ הגדרות לשירות :
sudo nano /etc/systemd/system/kestrel-hellomvc.service
  • שנית — בתוך הקובץ נכתוב את התוכן הבא :
[Unit]

Description=Example .NET Web API Application running on CentOS 7


[Service]

WorkingDirectory=/var/aspnetcore/hellomvc

ExecStart=/usr/local/bin/dotnet /var/aspnetcore/hellomvc/hellomvc.dll

Restart=always

# Restart service after 10 seconds if dotnet service crashes

RestartSec=10

SyslogIdentifier=dotnet-example

User=apache

Environment=ASPNETCORE_ENVIRONMENT=Production 


[Install]

WantedBy=multi-user.target

שימו לב – הקובץ רגיש לרווחים בתחילת שורה, אז צריך להקפיד לא לשים רווחים בתחילת שורה, ולא תווים מיותרים.

כמובן  – תתאימו את התוכן לאפליקציה שלכם.

  • עכשיו – שמרו את הקובץ, וצאו מ- nano.
  • וסוף סוף נפעיל את השירות :
systemctl enable kestrel-hellomvc.service

systemctl start kestrel-hellomvc.service
  • וכדי לבדוק שהשירות עובד כמו שצריך – נקליד :
systemctl status kestrel-hellomvc.service
  • אם קיבלתם הודעה עם המילה Active (בצבע ירוק – תלוי במערכת)
    אז הכל תקין – ואפשר סוף סוף לגלוש מהדפדפן ולראות שזה עובד.

 

מה נותר ?

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

מקורות :

שלב 1 – מדריך להתקנת sdk של dot net core

שלב 2 ואילך – במדריך לאירוח של asp.net core עם apache