Fly#
Fly منصة استضافة تتيح تشغيل التطبيقات الخادمية وقواعد البيانات مع التركيز على الحوسبة الطرفية (edge computing). راجع موقعها الإلكتروني لمزيد من المعلومات.
ملاحظة
الأوامر المحدّدة في هذا المستند تخضع لـ تسعير Fly، تأكد من فهمك له جيدًا قبل المتابعة.
التسجيل#
إذا لم يكن لديك حساب، فستحتاج إلى إنشاء حساب.
تثبيت flyctl#
الطريقة الرئيسية للتفاعل مع Fly هي باستخدام أداة CLI المخصّصة، flyctl، والتي ستحتاج إلى تثبيتها.
macOS#
brew install flyctl
Linux#
curl -L https://fly.io/install.sh | sh
خيارات تثبيت أخرى#
لمزيد من الخيارات والتفاصيل، راجع مستندات تثبيت flyctl.
تسجيل الدخول#
لتسجيل الدخول من الطرفية، شغّل الأمر التالي:
fly auth login
إعداد مشروع Vapor الخاص بك#
قبل النشر إلى Fly، يجب أن تتأكد من أن لديك مشروع Vapor مع ملف Dockerfile مُعدّ بشكل كافٍ، لأن Fly يتطلّبه لبناء تطبيقك. في معظم الحالات، ينبغي أن يكون هذا سهلاً جدًا لأن قوالب Vapor الافتراضية تحتوي على واحد بالفعل.
مشروع Vapor جديد#
أسهل طريقة لإنشاء مشروع جديد هي البدء بقالب. يمكنك إنشاء واحد باستخدام قوالب GitHub أو Vapor toolbox. إذا كنت بحاجة إلى قاعدة بيانات، فيُوصى باستخدام Fluent مع Postgres؛ يُسهّل Fly إنشاء قاعدة بيانات Postgres لربط تطبيقاتك بها (راجع القسم المخصّص أدناه).
باستخدام Vapor toolbox#
أولاً، تأكد من أنك ثبّت Vapor toolbox (راجع تعليمات التثبيت لـ macOS أو Linux).
أنشئ تطبيقك الجديد بالأمر التالي، مع استبدال app-name باسم التطبيق الذي تريده:
vapor new app-name
سيعرض هذا الأمر مطالبة تفاعلية تتيح لك إعداد مشروع Vapor الخاص بك، وهنا يمكنك اختيار Fluent و Postgres إذا كنت بحاجة إليهما.
باستخدام قوالب GitHub#
اختر القالب الأنسب لاحتياجاتك من القائمة التالية. يمكنك إما استنساخه محليًا باستخدام Git أو إنشاء مشروع GitHub بزر “Use this template”.
مشروع Vapor موجود#
إذا كان لديك مشروع Vapor موجود، فتأكد من وجود ملف Dockerfile مُعدّ بشكل صحيح في جذر مجلدك؛ قد تفيدك مستندات Vapor حول استخدام Docker ومستندات Fly حول نشر تطبيق عبر ملف Dockerfile.
تشغيل تطبيقك على Fly#
بمجرد أن يصبح مشروع Vapor الخاص بك جاهزًا، يمكنك تشغيله على Fly.
أولاً، تأكد من أن مجلدك الحالي مضبوط على المجلد الجذر لتطبيق Vapor الخاص بك وشغّل الأمر التالي:
fly launch
سيبدأ هذا مطالبة تفاعلية لإعداد إعدادات تطبيق Fly الخاص بك:
Name (الاسم): يمكنك كتابة اسم أو تركه فارغًا للحصول على اسم مُنشأ تلقائيًا.
Region (المنطقة): الافتراضي هو الأقرب إليك. يمكنك اختيار استخدامه أو أي منطقة أخرى في القائمة. من السهل تغيير هذا لاحقًا.
Database (قاعدة البيانات): يمكنك أن تطلب من Fly إنشاء قاعدة بيانات لاستخدامها مع تطبيقك. إذا كنت تفضّل، يمكنك دائمًا فعل الشيء نفسه لاحقًا بالأمرين
fly pg createوfly pg attach(راجع قسم إعداد Postgres لمزيد من التفاصيل).
ينشئ الأمر fly launch ملف fly.toml تلقائيًا. يحتوي هذا الملف على إعدادات مثل تعيينات المنافذ الخاصة/العامة، ومعاملات فحوصات السلامة (health checks)، وغير ذلك الكثير. إذا كنت قد أنشأت للتو مشروعًا جديدًا من الصفر باستخدام vapor new، فلا يحتاج ملف fly.toml الافتراضي إلى أي تغييرات. إذا كان لديك مشروع موجود، فمن المرجّح أن يكون fly.toml جيدًا أيضًا دون تغييرات أو بتغييرات طفيفة فقط. يمكنك العثور على مزيد من المعلومات في مستندات fly.toml.
لاحظ أنه إذا طلبت من Fly إنشاء قاعدة بيانات، فسيتعيّن عليك الانتظار قليلاً حتى يتم إنشاؤها واجتيازها لفحوصات السلامة.
قبل الخروج، سيسألك الأمر fly launch عمّا إذا كنت ترغب في نشر تطبيقك فورًا. يمكنك قبول ذلك أو فعله لاحقًا باستخدام fly deploy.
نصيحة
عندما يكون مجلدك الحالي في جذر تطبيقك، تكتشف أداة fly CLI تلقائيًا وجود ملف fly.toml مما يُعلم Fly بالتطبيق الذي تستهدفه أوامرك. إذا أردت استهداف تطبيق محدّد بغضّ النظر عن مجلدك الحالي، فيمكنك إلحاق -a name-of-your-app بمعظم أوامر Fly.
النشر#
تشغّل الأمر fly deploy كلما احتجت إلى نشر تغييرات جديدة إلى Fly.
يقرأ Fly ملفَي Dockerfile و fly.toml في مجلدك لتحديد كيفية بناء مشروع Vapor الخاص بك وتشغيله.
بمجرد بناء حاويتك، يبدأ Fly نسخة منها. سيُجري فحوصات سلامة متنوعة، للتأكد من أن تطبيقك يعمل بشكل جيد وأن خادمك يستجيب للطلبات. يخرج الأمر fly deploy بخطأ إذا فشلت فحوصات السلامة.
افتراضيًا، سيتراجع Fly إلى أحدث إصدار عامل من تطبيقك إذا فشلت فحوصات السلامة للإصدار الجديد الذي حاولت نشره.
عند نشر عامل خلفي (background worker) (مع Vapor Queues). لا تغيّر CMD أو ENTRYPOINT في ملف Dockerfile الخاص بك؛ اتركها كما هي بحيث يبدأ تطبيق الويب الرئيسي بشكل طبيعي. بدلاً من ذلك، أضف قسم [processes] في ملف fly.toml الخاص بك كما يلي:
[processes]
app = ""
worker = "queues"
هذا يخبر Fly.io بتشغيل عملية app باستخدام نقطة دخول Docker الافتراضية (خادم الويب الخاص بك)، وتشغيل عملية worker لتنفيذ قائمة انتظار المهام الخاصة بك باستخدام واجهة سطر الأوامر لـ Vapor (أي، swift run App queues).
إعداد Postgres#
إنشاء قاعدة بيانات Postgres على Fly#
إذا لم تنشئ تطبيق قاعدة بيانات عندما شغّلت تطبيقك أول مرة، فيمكنك فعل ذلك لاحقًا باستخدام:
fly pg create
ينشئ هذا الأمر تطبيق Fly سيكون قادرًا على استضافة قواعد بيانات متاحة لتطبيقاتك الأخرى على Fly، راجع مستندات Fly المخصّصة لمزيد من التفاصيل.
بمجرد إنشاء تطبيق قاعدة البيانات الخاص بك، انتقل إلى المجلد الجذر لتطبيق Vapor الخاص بك وشغّل:
fly pg attach name-of-your-postgres-app
إذا كنت لا تعرف اسم تطبيق Postgres الخاص بك، فيمكنك العثور عليه بـ fly pg list.
ينشئ الأمر fly pg attach قاعدة بيانات ومستخدمًا مخصّصَين لتطبيقك، ثم يكشفهما لتطبيقك عبر متغير البيئة DATABASE_URL.
ملاحظة
الفرق بين fly pg create و fly pg attach هو أن الأول يخصّص ويُعِدّ تطبيق Fly سيكون قادرًا على استضافة قواعد بيانات Postgres، بينما ينشئ الثاني قاعدة بيانات ومستخدمًا فعليَّين مخصّصَين للتطبيق الذي تختاره. بشرط أن يلبّي متطلباتك، يمكن لتطبيق Postgres Fly واحد استضافة قواعد بيانات متعددة تستخدمها تطبيقات مختلفة. عندما تطلب من Fly إنشاء تطبيق قاعدة بيانات في fly launch، فإنه يقوم بما يعادل استدعاء كل من fly pg create و fly pg attach.
ربط تطبيق Vapor الخاص بك بقاعدة البيانات#
بمجرد ربط تطبيقك بقاعدة بياناتك، يضبط Fly متغير البيئة DATABASE_URL على عنوان URL للاتصال الذي يحتوي على بيانات اعتمادك (ينبغي التعامل معه كمعلومات حسّاسة).
مع معظم إعدادات مشاريع Vapor الشائعة، تُعِدّ قاعدة بياناتك في configure.swift. إليك كيف قد ترغب في فعل ذلك:
if let databaseURL = Environment.get("DATABASE_URL") {
try app.databases.use(.postgres(url: databaseURL), as: .psql)
} else {
// Handle missing DATABASE_URL here...
//
// Alternatively, you could also set a different config
// depending on wether app.environment is set to to
// `.development` or `.production`
}
عند هذه النقطة، ينبغي أن يكون مشروعك جاهزًا لتشغيل الترحيلات (migrations) واستخدام قاعدة البيانات.
تشغيل الترحيلات#
باستخدام release_command في fly.toml، يمكنك أن تطلب من Fly تشغيل أمر معيّن قبل تشغيل عملية الخادم الرئيسية. أضف هذا إلى fly.toml:
[deploy]
release_command = "migrate -y"
ملاحظة
يفترض مقطع الكود أعلاه أنك تستخدم ملف Dockerfile الافتراضي لـ Vapor الذي يضبط ENTRYPOINT لتطبيقك على ./App. بشكل ملموس، هذا يعني أنه عندما تضبط release_command على migrate -y، سيستدعي Fly ./App migrate -y. إذا كانت ENTRYPOINT مضبوطة على قيمة مختلفة، فستحتاج إلى تكييف قيمة release_command.
سيشغّل Fly أمر الإصدار (release command) في نسخة مؤقتة لها حق الوصول إلى شبكة Fly الداخلية والأسرار ومتغيرات البيئة الخاصة بك.
إذا فشل أمر الإصدار الخاص بك، فلن يستمر النشر.
قواعد بيانات أخرى#
بينما يُسهّل Fly إنشاء تطبيق قاعدة بيانات Postgres، من الممكن استضافة أنواع أخرى من قواعد البيانات أيضًا (على سبيل المثال، راجع “Use a MySQL database” في مستندات Fly).
الأسرار ومتغيرات البيئة#
الأسرار (Secrets)#
استخدم الأسرار لضبط أي قيم حسّاسة كمتغيرات بيئة.
fly secrets set MYSECRET=A_SUPER_SECRET_VALUE
تحذير
ضع في اعتبارك أن معظم الصدفات (shells) تحتفظ بسجلّ للأوامر التي كتبتها. كن حذرًا بشأن هذا عند ضبط الأسرار بهذه الطريقة. يمكن إعداد بعض الصدفات بحيث لا تتذكّر الأوامر المسبوقة بمسافة بيضاء. راجع أيضًا الأمر fly secrets import.
لمزيد من المعلومات، راجع توثيق fly secrets.
متغيرات البيئة#
يمكنك ضبط متغيرات بيئة أخرى غير حسّاسة في fly.toml، على سبيل المثال:
[env]
MAX_API_RETRY_COUNT = "3"
SMS_LOG_LEVEL = "error"
اتصال SSH#
يمكنك الاتصال بنسخ تطبيق باستخدام:
fly ssh console -s
فحص السجلات#
يمكنك فحص السجلات المباشرة لتطبيقك باستخدام:
fly logs
الخطوات التالية#
الآن بعد أن أصبح تطبيق Vapor الخاص بك منشورًا، هناك الكثير مما يمكنك فعله مثل توسيع تطبيقاتك رأسيًا وأفقيًا عبر مناطق متعددة، وإضافة وحدات تخزين دائمة، وإعداد النشر المستمر، أو حتى إنشاء عناقيد تطبيقات موزّعة. أفضل مكان لتعلّم كيفية فعل كل هذا والمزيد هو مستندات Fly.