• בלוג
  • ורסל מציעה את הדרך הקלה ביותר להעלות יישום Flask לענן

ורסל מציעה את הדרך הקלה ביותר להעלות יישום Flask לענן

24/01/2023

ורסל (vercel) מפורסמת בזכות הפריימוורק next.js, אותה יצר אותו גיירום ראוך שהקים גם את ורסל. אבל חוץ מפרויקטי ריאקט לורסל יש עוד לא מעט פיצ'רים בשרוול. הם חולמים להיות שכבה מעל AWS שתאפשר הקמה קלה יותר של שירותים מבוססי ענן, ולפחות לפי התקנת יישום flask על התשתיות שלהם - הם מקיימים ובגדול. בואו נראה איך זה עובד.

1. מה אנחנו בונים

בשביל הדוגמה אני אעבוד על הקוד מהמאגר: https://github.com/ynonp/flask-demo-on-vercel. אגב, את הסטארטר למאגר יצרתי דרך הממשק הגרפי של ורסל בעמוד יצירת פרויקט חדש שלהם.

הפרויקט מורכב מתיקיה בשם api ובה קובץ index.py שמטפל בכל הבקשות הנכנסות. זה תוכנו:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return 'some new text'

@app.route('/about')
def about():
    return 'About'

הקובץ הוא קובץ flask רגיל לגמרי ועוד מעט נראה איך לעדכן אותו כדי להחזיר JSON במקום מחרוזות.

חוץ ממנו יש בפרויקט קובץ בשם requirements.txt עם התוכן הבא:

Flask==2.2.2

אבל כמובן שאפשר להוסיף אליו שורות כדי להוסיף תלויות לפרויקט, וקובץ בשם vercel.json שמתאר את מבנה הפרויקט בשביל ה Deployment:

{
  "builds": [
    {
      "src": "api/index.py",
      "use": "@vercel/python"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "api/index.py"
    }
  ]
}

2. העלאה לשרת

ורסל מייצרים Deployment חדש בצורה אוטומטית אחרי כל Push לפרויקט. הם גם שומרים את כל ה Deployments הישנים שלכם, ויש אופציה במסך ההגדרות של הפרויקט להגביל את הגישה לאותם Deployments ניסיוניים. בלחיצת כפתור אתם "מקדמים" Deployment מסוים כך שיהפוך ל Production Deployment.

בפרויקט הדוגמה שלי יצרתי מספר Deployments. כשהתחלתי לעבוד יצרתי Deployment ראשון שזמין בקישור הזה:

https://flask-demo-on-vercel-4k95r1get-ynonp.vercel.app

אחרי זה עדכנתי את הקוד ויצרתי Deployment נוסף שזמין בקישור הזה:

https://flask-demo-on-vercel-ayghas8d3-ynonp.vercel.app

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

נעדכן את הפרויקט וניצור גירסה חדשה שמחזירה את הטקסט בתור JSON. בגלל שזה פרויקט flask אני יכול להריץ אותו מקומית עם:

python -m flask --app api.index run

עכשיו אפשר לגלוש ל http://localhost:5000/ כדי לקבל את הטקסט. אני מעדכן את הקוד ב api/index.py לקוד הבא שיחזיר את הטקסט בתור JSON:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return { "text": "Hello WOrld" }

@app.route('/about')
def about():
    return 'About'

ועכשיו גלישה מחדש לעמוד מחזירה את ה JSON:

{ text: "Hello WOrld" }

אחרי העדכון אני רוצה להעלות את הגירסה החדשה לשרת - וזה ממש פשוט! מפעיל:

$ git commit -a -m 'return JSON'
$ git push

עכשיו במסך הניהול של ורסל אני רואה גירסה חדשה, אני רואה את מזהה הקומיט והודעת הקומיט ויכול להשתמש וקיבלתי קישור חדש כדי לראות את הגירסה החדשה שלי באוויר:

https://flask-demo-on-vercel-e6irs1pie-ynonp.vercel.app

כשהגירסה מוכנה אני יכול לחבר אותה ל Production שוב דרך מסכי הניהול של ורסל. אני לוחץ על כפתור Promote To Production ומקבל את ה JSON בדומיין הראשי של האפליקציה, אותו גם קיבלתי מ vercel בקישור https://flask-demo-on-vercel.vercel.app.

בעבודה עם ורסל אתם מקבלים מקום חינמי לגמרי לאחסן ולהגיש ממנו את פרויקט ה flask שלכם, אבל לא רק זה - אתם מקבלים הזדמנות לעבוד עם הכלים הכי מפנקים של התעשיה, כלים שימשיכו לשרת אתכם גם כשהפרויקט יגדל (ותרצו לעבור לאחת התוכניות בתשלום שלהם). היכולות להתקין תלויות, להעלות ולראות כל גירסה ולשמור על חיבור בין ה Deployment ל git, וכמובן המחיר (חינם לגמרי) הן סיבות מצוינות לבחירה ב vercel בתור בית לפרויקט הפייתון הבא שלכם.