הגדרת תוכנית python בשרת.

שיווקי

New member
הגדרת תוכנית python בשרת.

כתבתי תוכנית קטנה, hello world בשרת centos ב-python.
קוד:
from wsgiref.simple_server import make_server

def hello_world(environ, start_response):
        status = '200 ok'
        headers = [('Content-type', 'text/plain')]
        start_response(status, headers)
        return [b'Hello world']

httpd = make_server('', 8005, hello_world)
print 'Serving on port 8005...'
httpd.serve_forever()
כן פתחתי ב-firewall את הפורט 8005 למחשב שלי, כך שאני יכול לבצע telnet.

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

כשאני לוחץ על ctrl-c בשרת הלינוקס, היכן שה-python פתוח, אני מקבל הודעת שגיאה:
קוד:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/SocketServer.py", line 295, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib64/python2.7/SocketServer.py", line 321, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib64/python2.7/SocketServer.py", line 334, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib64/python2.7/SocketServer.py", line 649, in __init__
    self.handle()
  File "/usr/lib64/python2.7/wsgiref/simple_server.py", line 116, in handle
    self.raw_requestline = self.rfile.readline()
  File "/usr/lib64/python2.7/socket.py", line 447, in readline
    data = self._sock.recv(self._rbufsize)
KeyboardInterrupt
ואז הדפדפן משתחרר (במקום שעון חול תמידי בדפדפן, אני רואה לאחר לחיצה על ctrl+c את תוצאת הדף, כלומר hello world).

1. אין דרך אחרת מאשר להריץ serve_forever? גם שיהיה פתוח תמיד על כל המחיצה באופן קבוע (וההרצה תהיה ב-background).
2. אם אני עושה הקבלה לנ"ל ל-iis, ב-iis פשוט מגדירים את המחיצה של האתר, ופותחים את הפורט כרגיל (וכל הדפים באותו דף הם ניתנים לקריאה).
בתוכנית לדוגמה זה נראה שקיבעתי את השרת אך ורק ל-hello_world. איך אני מקבע את הנ"ל למשהו יותר רחב (מחיצה שלמה), וכן שדפדפן לא ייתקע לי כמו בדוגמה הנ"ל?

תודה.
 

BravoMan

Active member
אין שום בעיה עם הקוד שלך

(למעט העובדה שתוספת b למחרוזת תמוהה), ואצלי הוא עובד יפה.
כנראה שיש בעיה ספציפית בסביבה שהקמת.

בנוסף, יש לך חוסר הבנה מוחלט במה שאתה עושה.

נתחיל מזה, שמה שאתה מקבל כשאתה מפסיק את התוכנה זו לא שגיאה, אלא "פסיקה" interrupt, וזה בדיוק מה שאמור לקרוא כשאתה מפסיק תוכנת Pyhton בלחיצה על Ctrl + C.

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

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

אם אתה רוצה להגיש קבצים סטטים מתוך ספריה, כפי ש-iis עושה ברירת מחדל, אתה צריך שרת web פשוט ולא אפליקציה.
apache יעשה את העבודה, גם nginx.

אם בכל זאת אתה רוצה להשתמש ב-python, מסיבה שאינה ברורה, כל שעליך לעשות זה להריץ את השורה:
python -m SimpleHTTPServer 8000

בספרייה שבה נמצאים הקבצים שלך, וזה יגיש את כל הקבצים בהיררכיה שבה הם יושבים (כולל תת תיקיות).
כמובן, זה לא יריץ קבצי PHP או כל תוכן אקטיבי, רק יגיש קבצים סטטיים.

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

אם כל מה שאתה רוצה זה להגיש קבצים כמו ש-iis עושה, אתה לגמרי במקום הלא נכון!
 

שיווקי

New member
או קיי, תודה.

נתחיל מהתחלה.

אני רוצה לספק מידע לתוכנה (למשל אנגולר) באמצעות כלי של צד שרת (למשל python).

ה-python יפנה ל-db ויחזיר מחרוזת json, שאטפל בה בקוד של אנגולר.

לשם כך, אני צריך שרת web, שידע להפעיל את ה-script של ה-python.
בשרת web תהיה מחיצה שיהיו שם קבצים, בין היתר מסוג py.
(ייתכן והתבלבלתי, כיוון שלקחתי דוגמה מאינטרנט: https://www.youtube.com/watch?v=E7HZyWAWe0E )

בדר"כ בווינדווס, יש תמיכות ל-asp.net ואם צריכים למשל תמיכה ל-php צריך להתקין איזה רכיב שיאפשר גישה.

איך אני מרים את השרת web הנ"ל? האם צריך להתקין משהו נוסף לשרת שתהיה התאמה לסקריפטים ב-python?
יש איזה קובץ config, שם אפשר לראות את המחיצה של ה-web, ה-port, אם תומך ב-python, php וכד'?

תודה.
 

BravoMan

Active member
אתה עובד הפוך.

לפי השרשור הקודם שלך כבר יש לך שרת ותשתית של אתר.
אתה רק צריך להעביר מידע מה-DB שלך לדפדפן.
&nbsp
כלומר, יש לך כבר סביבה כלשהי, שרת כלשהו.
&nbsp
ועכשיו אתה צריך שיהיה בו קוד פעיל צד שרת שיעשה את העבודה.
כדי להמליץ לך איך לבנות את הקוד הזה, אנחנו צריכים לדעת 2 דברים:
&nbsp
1. איזו סביבה יש לך?
2. אלו שפות תכנות אתה יודע?
&nbsp
האם אתה בכלל יודע Python, או שאתה הולך לנסות להבין דרך סרטונים ב-youtube איך ניגשים ממנו ל-DB?
 

שיווקי

New member
כמה דברים.

אני יותר מכיר מערכות windows, אך לאחרונה אני גם עובד עם linux.


יש סביבה שאני בוחן אותה למוצר פיתוח.
פיתחתי מוצרים בעבר - הקמתי שרת php באיזשהו אתר אחסון, שאפשר שימוש ב-cpannel. אז לא ממש שברתי את הראש איך התקינו בלינוקס דברים (היום אני גם בוחן לינוקס תחת centos ו-ubuntu - לא מעט עומס ...)

אני מנסה טכנולוגיה חדשה לפיתוח אתר. עדיף שאוכל להתקין בלינוקס (זה עניין של עלויות, וגם נוכחות של שימוש בענן ובניית dockers). מעיין poc למוצר לטכנולוגיה שאני רוצה ליישם (וברגע שיהיה hello world פשוט - אני ארוץ עם הקוד ללא בעייה. חייב לעבור את המשוכה הזאת).

הוחלט אנגולר (יש כאלה שמציעים לי react, vue וכד', אך אין לזה סוף. צריך להתקבע על משהו).
כתבתי מספר תוכניות בסיסיות באנגולר (תוך שימוש ב-jquery וכד') - עובד סבבה.
עכשיו רציתי להוסיף גם אפשרות קריאה ל-db מצד שרת כלשהו.
חשבתי לתומי - הרי יש node js עבור ה-angular (זה גירסה 4) - למה שלא אשתמש בו.
לא ממש מצאתי דוגמאות באינטרנט שמשלבות קוד מלא של node js בשילוב עם אנגולר (אם עובדים עם visual studio code, למה שה-visual studio code לא ישרת אותי לשימוש עם כתיבה של קוד אנגולר וגם קוד node js).

לפי תשובות בפורום זה, הבנתי שזה לא משנה (לא ממש הבנתי למה לא מיקדו אותי ב-node.js), אז הוחלט לעבוד עם python (גם משום שהיא הכי נפוצה, וגם ממילא אני צריך להשתמש בה לדברים נוספים, כגון הרצה של סרוויסים שונים). python זה לא php, ומיועד גם לדברים נוספים. קצת התנסייתי עם השפה וכתבתי קצת קוד עם השפה הזאת (זה מספיק ... ברגע שיהיה hello world - אפשר לרוץ עם הכתיבה ...)

אז בדקתי איך אפשר לייצר קוד rest api ל-python, ואני מנסה כעת לעבוד עם django.
כתבתי לא מעט rest full api, אך זה היה ב-windows, ואני מנסה להסב את ה-rest full ליישומים שהם ב-linux מסיבות עסקיות.

משהו מריץ את ה-python - איזו אפליקציית שרת.
רק לא ממש הבנתי, אם יש איזו דרך אחרת לצד שרת מאשר לבנות rest full api (אם ב-C# זה חתיכת קוד לא קטן - איך זה יהיה ב-python, או ב-django).

כתבתי קוד לקריאה מבסיס נתונים:

קוד:
import threading
import json
from mysql.connector import (connection)
from wsgiref.simple_server import make_server

def hello_world(environ, start_response):
        status = '200 ok'
        headers = [('Content-type', 'text/plain'), ('Access-Control-Allow-Origin','*')]
        start_response(status, headers)
        cnx = connection.MySQLConnection(user='****', password='****',
                                 host='******',
                                 database='*******')
        parts = {}
        cursor = cnx.cursor()

        query = ("SELECT id, partname, partdesc FROM part ")

        cursor.execute(query)

        parts["Parts"] = []
        p = parts["Parts"]

        for (id, partname, partdesc) in cursor:
                p.append({"PartName": partname, "Description": partdesc})

        cursor.close()
        cnx.close()
        s = json.dumps(parts)
        return [s]

httpd = make_server('', 8005, hello_world)
print 'Serving on port 8005...'
threading.Thread(target=httpd.serve_forever).start()
את הנ"ל אני מעביר כ-json לקוד באנגולר, וגם זה עובד (רק לא נראה לי סביר שלכל איזה קובץ python אכתוב את הפקודות http = make_server וכו', לכן חיפשתי איזה שרת שיודע להריץ קוד python. כיוון ש-django מאפשר גם הרצה של rest full וגם אתר, זה מזכיר קצת את ה-iis, וכן מה שבדקתי באינטרט - זה הדבר הראשון שצץ, כך שאני מניח שזה בסדר לעבוד עם django).

אם צריך rest full api (שזה נראה קצת מורכב, בשביל צורך בקוד שרת פשוט) אז זה מה שיהיה (נראה יותר הגיוני, אם האתר באנגולר שאני כותב, יוכל לקרוא למתודות שלו בלבד, עם חשיפה אך ורק ברמת שרת.
כן, התרגלתי ל-windows, וזה גם נראה לי קצת מוזר שכל כלי פיתוח צריך שרת נוסף. ב-windows זה היה אחד. כנראה לינוקס מקובל קצת אחרת ...)

ב-asp.net זה היה קצת שונה (יכולתי לכתוב גם צד שרת וגם צד client באותו ide של ה-visual studio, וזה היה הכי עדיף).

אשמח להכוונה (דגש אנגולר עם צד שרת שקורא מבסיס נתונים, איזה שרת ואיזו גישה עדיפה - rest api, שילוב של node js בצורה נאטיבית עם אנגולר, או שימוש בכל שפת פיתוח צד שרת, כגון python בשילוב עם django).

תודה.
 

BravoMan

Active member
אוי ואבוי...

סלח לי, אבל אתה קופץ מעל הפופיק, עושה סלט, ובגלל זה מסתבך:

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

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

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

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

1. אין שום צורך בלינוקס לעשות שרת נפרד לכל שפה או טכנולוגיה.
המקבילה הישירה של iis בלינוקס היא Apache.
אתה מתקין אותו, והוא יודע לעשות הכל: להגיש קבצי HTML סטטיים, להפעיל סקריפטים של PHP (שהוא מקבילה ל-ASP.NET) בצד שרת, וגם להריץ סקריפטים בטכנולוגיה CGI בשפות אחרות, כולל Python.
https://www.youtube.com/watch?v=mBKU56uMQX4

2. Visual Studio Code הוא רק עורך טקסט מיופיף.
אתה יכול לכתוב בו כל קוד שאתה רוצה: node.js, angular, Python, Java, C.

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

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

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

4. Django הוא פריימוורק (framework) שכתוב ב-Python ונועד לחסוך לך את רוב מה שכתבתי בסעיף 3.
אבל יש לזה מחיר - אתה צריך ללמוד איך משתמשים בו נכון.

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


בהצלחה!
 

שיווקי

New member
תודה רבה.

תודה רבה על המענה.
זה נתן לי כיוון פחות או יותר.

לא היה נראה העניין שלכל תוכנית python קטנה צריך להריץ על שרת.

היה עדיף גם להשתמש ב-rest, אך בשל כך צריך django או flask. בעיה היא ש-python ל-centos זה גירסה ישנה, שלא ממש נתמכת ב-django או flask, ואז צריך להשתמש ב-virtual env עבור גירסת פייטון ספציפית.

ארכיטקטונית - זה לא משנה בצד ה-client (ואז אפשר להעביר לתיכנות ובמקביל למצוא פתרונות), לכן בכל מקרה מה שעשיתי, זה:
  • העלאת שרת אפאצ'י ב-centos.
  • שימוש ב-python שרק מחזיר response, משהו בסגנון
קוד:
#!/usr/bin/python

import threading
import json
from mysql.connector import (connection)
from wsgiref.simple_server import make_server
from requests import Request, Session

def test_hello():
  ... read from db. return json

str = test_hello()
print "Content-Type: application/json"
print "Access-Control-Allow-Origin: *"
print
print str
בנ"ל גם העברתי headers באופן שרירותי.
בתוכנית של אנגולר:
קוד:
this._http.request("[URL]http://myip:myport/myfunc.py[/URL]").subscribe((sub) =>
    {
       str = sub.text();
       JSON.stringify(str);
       ev.emit(str);
      }
    );
לגבי django - אין בעייה ב-ubuntu (ב-centos אי אפשר להוריד סתם כך את python. ה-centos מבוסס על גירסת python ישנה. אפשרי בדרכים עקיפות ולהעלות virtual env, כמו [URL]https://hostpresto.com/community/tutorials/how-to-install-django-web-framework-on-centos-7/[/URL] אך כיוון שהפיתוח הוא לענן, בסופו של דבר אני אבחר את מערכת הפעלה עבור ה-docker).
מה לעשות. כשעושים הכל לבד - צריך גם להתמודד עם התקנות, צד שרת, client וכל המשתמע...

תודה, בכל אופן.
 

BravoMan

Active member
למה החלטת שבשביל rest צריך django או flask?

RESTful זו בסה"כ ארכיטקטורה - הדרך לסדר את הקוד שלך, את הפניות ומה הן עושות.
http://searchcloudstorage.techtarget.com/definition/RESTful-API
&nbsp
אתה יכול לממש אותה גם ללא framework כלשהו אם שימוש ב-framework מפריע לך.
&nbsp
לגבי CentOS:
זו למעשה Red Hat בחינם.
המערכת כוללת גרסאות ישנות של כל החבילות, כי אלה הגרסאות הבדוקות והיציבות ביותר שיש.
היצרן של ההפצה הזו מעדיף יציבות על פני חדשנות, כי יציבות חשובה מאוד לשרתים.
&nbsp
ב-Ubuntu לאומת זאת, מעדיפים מחזור עדכונים קצר, ומספקים גרסאות חדשות יותר של התוכנות השונות גם בגרסת שרת.
&nbsp
אבל, שים לב שיש סיבה שקוראים ל-Ubuntu ו-CentOS "הפצות":
בלינוקס, בניגוד ל-WIndows, אתה לא מקבל "מקשה אחת", take it or leave it.
מדובר פשוט באוסף תוכנות - הכל מ-kernel ועד שולחן העבודה (אם מותקן) שמופצות ביחד, כחבילה.
&nbsp
לרוב אין בעיה להחליף חלק מהתוכנות.
&nbsp
אני לא בטוח מה הדרישות של django ו-flask, אבל כל עוד ההבדל הוא לא בין Python 2 ל-Python 3, אתה לא חייב virtual env ויכול פשוט לעדכן את גרסת ה-Python שיש לך.
נניח מ-2.5 ל-2.7 או מה שזה לא יהיה (רק על תנסה לעדכן מ-2 ל-3 כי הן לא תואמות אחת לשנייה).
&nbsp
כמובן, אם אין עדכון זמין במאגרים ראשיים זה יהיה בעייתי קצת.
אבל אני בטוח שיש מאגרים חלופיים ומדריכים ברשת איך להשתמש בהם.
&nbsp
וחוץ מזה, אם Ubuntu עונה על הצרכים שלך מהקופסה ו-CentOS לא, למה לא להשתמש ב-Ubuntu?
 

שיווקי

New member
תודה רבה.
הסתדרתי.

אין דבר חדש בלינק שהצגת. ידוע ש-rest ניתן לבצע בלא מעט דרכים.
ה-web service של ווינדווס מבוסס xml מבוסס soap, ומכיל יותר מידי מידע שהוא "מפורמט" באיזה פורמט soap, ולא ממש נאטיבי לשימוש. כבר מזמן משתמשים ב-rest.

בכל מקרה, הייתי חייב לבצע דרך גירסת לינוקס שהיא. אם זה ubuntu או centos (לא סובל את ה-windows. גם כל מה שהם עושים - windows core, dockers לא ממש מוצלח, ועדיין לא מתאים ליישום בענן בצורה נורמלית. חוץ מזה - יש פה עלויות עסקיות, כאשר יש לא מעט דברים בחינם, וכמעט הכל בלינוקס. המודל העסקי למערכת ענן מבוססת לינוקס יותר מוצלחת מווינדווס, לכן גם הבחירות הן בהתאם).

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

הצלחתי להשמיש את ה-django (יש מיליון דרכים. בחרתי דרך מסויימת ולמדתי אותה, כמו שיכולתי ללמוד גם משהו אחר, אך זה מה שנראה נפוץ ועדיף על flask לפי המלצות שונות. בכל מקרה, זה החלטה שרירותית) גם ב-centos וגם ב-ubuntu.
גם קריאה מבסיס נתונים, ביצוע סריאליזציה ל-json וגם פקודות rest, כמו get, post וכד'.

הסתדרתי (לפחות עברתי עקומת לימוד בנושא ההתקנה של rest full api בשרת).

גם python יכול לשמש אותי לדברים נוספים - זה קוד cgi, ואני יכול לייצר services וכד'.

לא יודע למה לא מעט דוגמאות של django ו-flask מראים שימוש ב-virtual environment. אפשר גם בלי זה (אולי בשביל שיהיה אפשר "לארוז" בצורה יותר מסודרת. זה גם תפיסה קצת יותר מודרנית).

אגב, גם באנגולר - הסתדרתי וגם הרצתי תוכנית בסיסית עם עיצוב ועם פילטרים (זה גם עניין של החלטה. למה לא vue, למה לא react, ולמה לא בצד שרת ruby - הכל זה החלטות ... אין לזה סוף. אם לא מחליטים, לא מתקדמים ...).

תודה, בכל אופן.
 

BravoMan

Active member
שמח לשמוע!

נקודה קטנה לגבי CentOS:
היא לא "בנויה על קוד התנדבותי".
&nbsp
יש הפצה מסחרית בשם RedHat שמתוחזקת ע"י חברה באותו שם.
כמובן, בגלל שכל הקוד חופשי, מה שהם מוכרים זה לא רישיונות מערכת הפעלה כמו MS, אלא רישיונות תמיכה.
הם לא זולים.
&nbsp
את הקוד כמובן ניתן לקבל חופשי, וזה מה שעושים חברי שמתחזקים את CentOS:
הם לוקחים את כל הקוד של RedHat כפי שהוא (שלא באמת שייך לחברה, כי מדובר בתוכנה חופשית שמפתחים כל מיני פרויקטים נפרדים כמו ה-kernel של Linux), מסירים משם כל אזכור לשם המסחרי "RedHat" ומפיצים את המערכת חופשי.
&nbsp
למה הם עושים את זה?
כל מיני סיבות.
ב-Ubuntu זה דווקא עובד הפוך: חברת Canonical לקחה פרויקט קהילתי וותיק, יציב, ומפורסם שנקרא Debian, פרויקט מאוד חזק גם עכשיו שמתאים להמון סביבות, סוגי מעבדים וכו', ובנתה עליו הפצה מסחרית שהיא מוכרת לה תמיכה.
&nbsp
בדיוק כמו RH הם לא יכולים למכור רישיונות למערכת הפעלה כי זה לא שלהם.
&nbsp
אני לא יודע אלו שמועות שמעת, אבל היות והקהילה של CentOS עובדת צמוד עם RH וזו לא הולכת לשום מקום, אין חשש בעתיד הנראה לעין של CentOS תעלם או לא תתעדכן.
&nbsp
כמובן, כמדיניות שהתחילה ב-RH, הם לא ממהרים להחליף גרסאות, אלא רק להפיץ עדכוני אבטחה, כי הם מאמינים שגרסאות ישנות יותר יציבות יותר ולכן עדיפות לשרתים.
&nbsp
אבל כלל האצבע הוא - תשתמש במה שמתאים לך.
&nbsp
virtual env באמת פופולרי. אני לא בטוח למה.
&nbsp
לגבי שרת פיתוח:
היום משחב שולחני עם מפרט נורמלי מאפשר בקלות להרים מכונה ווירטואלית לצורכי התעללות.
יש VirtualBox חינמי לחלוטין, ויש גרסה חינמית ל-VMWare.
&nbsp
בתוכם, אתה יכול להתקין את המערכת שאתה רוצה - Ubuntu, CentOS מה שלא יהיה, רק כדי לנסות כל מיני דברים, גם במחיר שבירת המערכת.
הקמה של דבר כזה היא עניין של דקות, וזה מצוין ללמידה.
&nbsp
בהצלחה בהמשך הדרך!
 
למעלה