كيفية نشر خلفية Swift على Amazon AWS

هل سمعت من قبل كلمة "الخلفية"؟ إذا كانت هذه هي المرة الأولى التي تسمع فيها هذه الكلمة الغريبة وتتساءل عما إذا كان حيوانًا أو نوعًا معينًا من النباتات أو حتى طعامًا لذيذًا حقًا ، أو إذا كنت تعرف ما هو هذا ولكنك تشعر أنك لا تعرف حقًا الكثير حول هذا الموضوع ، اتبعني خلال هذا الدليل ، وفي النهاية ستكون خبيرا في الأمر.

في نهاية هذا الدليل ، سيكون لديك خلفية أساسية لتطبيقك. لتحقيق هذا الهدف ، سنستخدم Kitura ، وهو إطار ويب على جانب الخادم يسمح لنا ببناء خادم باستخدام Swift ، لنقاط النهاية لواجهة برمجة التطبيقات ، و Postgres ، وقاعدة بيانات علائقية مفتوحة المصدر ، لتخزين البيانات و Docker لإدارة الموارد.

ربما الآن أنت وات؟! ما هي نقطة نهاية API؟ سوف اساعدك!

واجهة برمجة التطبيقات (API) هي واجهة برمجية تتكون من واحدة أو أكثر من نقاط النهاية المكشوفة علنًا لنظام رسائل استجابة - طلب محدد ، يتم التعبير عنها عادةً في JSON ، والتي يتم كشفها من خلال بروتوكول HTTPS.

في هذا الدليل ، سنستخدم HTTP بدلاً من HTTPS ، لأنه لدعم الرسالة التي تبدو غير ذات صلة ، في النهاية ، هناك الكثير من الخطوات الصعبة والطويلة.

في النهاية ، سيكون لدينا ثلاث نقاط نهاية API. سنكون قادرين على الاستعلام عن نقاط النهاية هذه للحصول على استجابة JSON. قاعدة البيانات عبارة عن قاعدة بيانات مكونة من ثلاثة جداول ، تصف هيكل تطبيق السفر.

عمل!

نحن هنا. بادئ ذي بدء ، هناك بعض المتطلبات المسبقة اللازمة. بالنسبة إلى Kitura ، إذا كنت تستخدم نظام التشغيل MacOS ، فأنت بحاجة إلى تثبيت Xcode 9 أو إصدار أحدث ، وتشغيل xcode-select - تثبيت على الجهاز الطرفي. إذا كنت تستخدم Linux ، فاتبع هذا الدليل.

للمتابعة ، ستحتاج إلى بعض الحزم الأخرى على جهاز الكمبيوتر الخاص بك. أوصي بتثبيت Homebrew ، مدير الحزم الذي يعمل على تبسيط حياتك من خلال عمليات التثبيت التي يتم استخدامها في حالة من الفوضى.

الآن وبعد إعداد كل شيء ، قم بتثبيت Kitura من خلال Homebew:

$ الشراب الحنفية ibm-swift / kitura
الشراب $ تثبيت kitura

حان الوقت لتثبيت Docker ، وهي أداة قوية تساعدك في إدارة الواجهات الخلفية القابلة للتطوير ونشرها بسهولة. قم بتنزيل Docker وتثبيته باتباع خطوات التطبيق. خذ وقتك ، وبمجرد تثبيته ، سجّل الدخول والعودة إلى هنا.

قمت فقط بتثبيت كل ما تحتاجه ، تهانينا! الآن نحن بحاجة إلى مجلد المشروع. يتكون التسلسل الهرمي لدينا من مجلد رئيسي يسمى "MyFirstBackend". سننشئ فيه مجلدين آخرين: "الخلفية" و "الشهادات" و "قاعدة البيانات". سوف نستخدم هذه المجلدات لتخزين القواعد الخاصة بصور حاويات الرصيف. في وقت لاحق ، في مجلد قاعدة البيانات ، سنضع القواعد لإنشاء ... تخمينها: قاعدة البيانات. في مجلد الواجهة الخلفية ، بدلاً من ذلك ، سننشئ مشروع Kitura. يبدو المرح ، أليس كذلك؟ دعنا نحفر فيه!

Postgres ، حان دورك!

Docker ، كما قيل من قبل ، هو برنامج قوي حقًا يقوم بإجراء المحاكاة الافتراضية لنظام التشغيل. نحن نستخدمها لأننا سننشر خلفية لدينا على السحابة. وبهذه الطريقة ، لن تهتم بالذاكرة والمساحة وكل قيود استضافة الويب العادية. هذا ممكن بفضل السحابة وقابلية التوسع فيه.

دعونا نبني قاعدة البيانات الآن! في مجلد "قاعدة البيانات" ، سنقدم قواعد قاعدة بيانات بوستجرس. العودة إلى المحطة الطرفية ، وقرص مجلد قاعدة البيانات. هناك إنشاء Dockerfile وملف SQL

مسار CD $ / إلى / قاعدة بيانات /
$ اللمس Dockerfile
$ touch CreateDB.sql

تم إنشاء ملفين في مجلد قاعدة البيانات. أحدهما هو Dockerfile ، وهو ملف به كل التعليمات الخاصة بإنشاء صورة Docker ، والآخر هو ملف دعم نحتاجه لإنشاء بنية قاعدة البيانات الفعلية. دعنا نفتح Dockerfile. الآن لديك ملف نصي فارغ أمامك ، دعنا نكتب بعض الإرشادات لحاوية Docker.

من postgres: الأحدث
ENV POSTGRES_USER root
ENV POSTGRES_PASSWORD المشرف
ENV POSTGRES_DB myFirstDatabase
إضافة CreateDB.sql /docker-entrypoint-initdb.d/

عندما نبني هذه القواعد ، سيقوم Docker بتنزيل أحدث صور Postgres من DockerHub ، وسيعمل على إنشاء مستخدم لقاعدة البيانات مع الجذر كاسم مستخدم ومشرف ككلمة مرور. سيكون اسم قاعدة البيانات myFirstDatabase. كل شيء سوف يعتمد على ملف CreateDB.sql الذي أنشأناه منذ دقيقة واحدة.

حان الوقت الآن لإنشاء بنية قاعدة البيانات.

هذا هو الهيكل الذي سنستخدمه. هناك ثلاثة جداول: المستخدمون والأماكن والرحلات.

باستخدام الأمر الأول ، نقوم بإنشاء جدول المستخدمين الذي يحتوي على:

  • user_id: المفتاح الأساسي (SERIAL) autoincremetal
  • اسم المستخدم والبريد الإلكتروني وكلمة المرور: خصائص النص لكل مجموعة من المستخدمين
  • اسم المستخدم والبريد الإلكتروني: هذه الخصائص تحمل علامة "UNIQUE" ، مما يعني أنه لن يكون من الممكن إدراج قيمة موجودة بالفعل

ثم نملأ جدول المستخدمين بمجموعة من القيم. لقد حققنا نفس العملية لإنشاء جدول الأماكن. بعد ذلك ، أنشأنا الجدول الثالث المسمى trip وهو عبارة عن علاقة بين الجدولين السابقين. في هذا الجدول ، لدينا حقلان يعتمدان على الجداول الأخرى ، ونحن نفعل ذلك باستخدام بناء جملة FOREIGN KEY () REFERENCE ().

كيتورا ، أنا اخترت لك!

ما عليك سوى الانتقال في المجلد الخلفي واستخدام Kitura لإنشاء مشروع جاهز لبناء OpenAPI على الفور:

$ cd path / to / backend /
kit kit init

افتح الآن مشروع Xcode الذي تم إنشاؤه. للتواصل مع قاعدة البيانات ، نحتاج إلى استيراد بعض الأُطر. في ملف Package ، قم باستيراد أطر عمل IBM هذه وتحديث التبعيات. أول واحد يرمز إلى "رسم تخطيطي للكائن" وسيسهل علينا استفسارات قاعدة البيانات الخاصة بنا. الثانية مطلوبة لأننا نستخدم PostgreSQL. كن على علم أنه بالنسبة للاستعلامات المخصصة المتقدمة ، يمكنك اختيار استخدام Swift-Kuery مباشرة بدلاً من Swift-Kuery-ORM.

.package (عنوان URL: "https://github.com/IBM-Swift/Swift-Kuery-ORM.git" ، من: "0.4.1") ،
.package (عنوان URL: "https://github.com/IBM-Swift/Swift-Kuery-PostgreSQL.git" ، من: "2.1.0")
.target (الاسم: "التطبيق" ، التبعيات: ["SwiftKueryPostgreSQL" ، "SwiftKueryORM" ، ...

يجب عليك تجديد المشروع للتبعيات الجديدة. أولاً ، أغلق Xcode واستخدم هذه الأوامر:

الخلفية CD $ /
حزمة سريعة $ gener-xcodeproj

أعد فتح المشروع ، يمكنك الآن استيرادها داخل ملف Application.swift:

استيراد SwiftKueryORM
استيراد SwiftKueryPostgreSQL

الآن دعونا نعد نموذجنا لربطه بقاعدة البيانات. نحن في حاجة إليها لتتوافق مع البروتوكولات القابلة للترميز والتكافؤ والنموذج:

  • Codable: يسمح للبنية أن يتم تصديرها في JSON
  • Equatable: إنها تتيح المقارنة بين كائنات المستخدم المختلفة من أجل المساواة
  • النموذج: هذا يعرض طرقًا جديدة للحفظ والبحث عن وحذف إلخ من قاعدة بيانات

الآن يتعين علينا إنشاء اتصال بقاعدة البيانات. أدخل هذه الوظيفة في فئة التطبيق في Application.swift:

مجرد تغيير المعلمات وفقا لذلك مع databaseName ، اسم المستخدم وكلمة المرور.

الآن دعنا ندعم طلبات GET بصيغتين مختلفتين ضمن فئة التطبيقات:

مهلا ، أنت مستعد للذهاب!

عامل الميناء: كيف!

في هذه المرحلة ، يجب أن يكون لديك هيكل مثل هذا:

الآن لدينا كل Dockerfiles التي نحتاجها. بعض الأسطر أعلاه أنشأنا Dockerfile لقاعدة بياناتنا ، ثم أنشأنا مشروع Kitura ، الذي ينشئ Dockerfile تلقائيًا. يفتقد Dockerfile هذا متغير. افتح الملف الذي يمكنك العثور عليه في المجلد الخلفي وإزالة كل شيء والكتابة:

من ibmcom / kitura-ubuntu: الأحدث
RUN mkdir /&& apt-get update && apt-get -y الترقية && apt-get -y install curl
RUN curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
RUN apt-get update && apt-get -y الترقية && apt-get install -y nodejs libpq-dev
تشغيل NPM تثبيت -g يو
كشف 8080
ENV DATABASE_URL 127.0.0.1
إضافة. / / خارجي /
RUN ["/ bin / bash"، "-c"، "cd / external /؛ swift build"]
CMD ["/ bin / bash"، "-c"، "cd /external/.build/x86_64-unknown-linux/debug/؛ ./backend"]

الآن لدينا فقط لبناء الصور عامل ميناء. لتحقيق ذلك ، نحتاج إلى تشغيل بعض الأوامر. بادئ ذي بدء ، تشغيل عامل ميناء فتح التطبيق ، قمنا بتثبيت في البداية. عند تشغيله ، ارجع إلى المحطة الطرفية وقم بتغيير الأدلة إلى مجلد المشروع الرئيسي (myFirstBackend). لإنشاء الصور في النهاية ، تحتاج إلى تشغيل هذه الأوامر:

بناء عامل ميناء -t اسم المستخدم / قاعدة البيانات: v1. / قاعدة البيانات
عامل بناء بناء -t اسم المستخدم / mybackend: v1 ./backend

أين:

  • اسم المستخدم: اسم المستخدم لحساب DockerHub الخاص بك
  • mydatabase - mybackend: اسم الصور
  • v1: علامة الإصدار الذي تقوم ببنائه

يمكنك اختبار صورك عن طريق تشغيلها على جهازك. يجب أن تعمل قاعدة البيانات على المنفذ 5432:

تشغيل عامل ميناء -p 5432: 5432 اسم المستخدم / قاعدة البيانات: v1

عند تشغيل قاعدة البيانات ، قم بتشغيل الواجهة الخلفية على المنفذ 8080 ، وقم بتغيير متغير البيئة باستخدام IP المحلي الخاص بك. للعثور على عنوان IP المحلي الخاص بك ، افتح "تفضيلات النظام" ، ثم انتقل إلى الشبكة ، وانظر إلى عنوان IP الحالي الخاص بك. عيّن هذا العنوان كـ DATABASE_URL:

عامل التشغيل - 8080: 8080 - e DATABASE_URL = '' اسم المستخدم / mybackend: v1

عند الانتهاء من هذه الخطوة ، تحتاج إلى تحميل هذه الصور على DockerHub مع:

عامل ميناء دفع اسم المستخدم / قاعدة البيانات: v1
عامل ميناء ادفع اسم المستخدم / mybackend: v1
تذكر استبدال اسم المستخدم باسم مستخدم DockerHub الخاص بك.

نشر كل شيء

نحن على وشك الإنتهاء! الآن حان الوقت لنشر ما قمت به حتى الآن ، على السحابة ، في هذه الحالة هو Amazon AWS. بادئ ذي بدء ، تحتاج إلى حساب هناك. إذا لم يكن لديك حساب ، فقم بإنشائه هنا. بمجرد الحصول على واحدة ، تسجيل الدخول ، وتحت الخدمات ، حدد EC2. في الجزء العلوي الأيمن ، يمكنك تحديد منطقة الخادم الذي تريد العمل عليه. في هذا البرنامج التعليمي ، نحن نستخدم الولايات المتحدة. غرب (شمال كاليفورنيا) ولكن يمكنك أن تقرر الشخص الذي يناسب احتياجاتك بشكل أفضل.

لتشغيل صور عامل الإرساء على AWS ، تحتاج إلى مثيل. لإنشاء واحدة ، حدد مثيلات في القائمة على اليسار وحدد الزر الأزرق "تشغيل مثيل" في منتصف الصفحة.

الآن حان الوقت لتكوين جهازك. اختر Amazon Linux 2 AMI بالنقر فوق الزر تحديد.

تعتبر المواصفات الفنية مهمة لمثيلك لأنها تحدد حدود تطبيقك.

تكوين مجموعة الأمان والابتعاد عن سيناريوهات سيئة وغير متوقعة. افتح فقط المنافذ التي تحتاجها لتشغيل الواجهة الخلفية الخاصة بك. HTTP هو البروتوكول الذي ستستخدمه لتحميل واجهة برمجة التطبيقات ، لذلك يتم تعيين المصدر إلى كل مكان بحيث يمكن الوصول إلى الخدمة من كل مكان.

ملاحظة: لأغراض الاختبار ، نقوم بتعيين مصادر SSH إلى أي مكان ، ولكن لتحسين الأمان ، يجب فتح منفذ SSH لعنوان IP الخاص بك فقط. وبهذه الطريقة ، لا يمكن لأحد الوصول إلى مثيلك عبر SSH.

بمجرد مراجعة جميع التفاصيل ، انقر فوق "تشغيل". بهذه الطريقة ، ستقوم بنشر المثيل وستكون قادرًا على إنشاء زوج من المفاتيح ستحتاج إلى تسجيل الدخول باستخدام SSH من الجهاز الطرفي. حدد إنشاء زوج مفاتيح جديد ، ثم أعطه اسمًا (في هذه الحالة "debug_tutorial"). ثم قم بتنزيل زوج المفاتيح ، وقم بإزالة ملحق .txt من الملف ووضعه في مجلد الشهادات. سوف نعود هناك في وقت لاحق.

منجز. يجب أن تظهر رسالة نجاح خضراء على الصفحة. مثيلك يعمل الآن على السحابة. المشكلة هي أنه سيتم تحميل أي شيء لأنه فارغ. لنملأها!

بادئ ذي بدء ، نحن بحاجة إلى CLI (واجهة سطر الأوامر) لنظام Amazon AWS. افتح الجهاز مرة أخرى ، وباستخدام Homebrew ، فإن الأمر الوحيد الذي تحتاج إلى تشغيله هو:

الشراب $ تثبيت awscli

بمجرد الانتهاء من ذلك ، يجب عليك تكوين تفاصيل aws الخاص بك مع:

$ أوس تكوين

الإدخال الأول الذي ستحتاج إليه هو معرف مفتاح الوصول الخاص بك ، والذي يمكنك العثور عليه بالنقر فوق اسمك في القائمة الموجودة أعلى اليمين ، ثم على "بيانات اعتماد الأمان الخاصة بي". هناك ، حدد مفتاح الوصول ، وإنشاء واحد وتنزيل الملف. ضع الملف الذي تم تنزيله في مجلد الشهادات. الآن لديك مفتاحان: معرف مفتاح الوصول والمفتاح السري. البيانات التالية التي ستحتاجها للتكوين هي اسم المنطقة الافتراضية الذي يجب أن يعكس المنطقة التي حددتها في البداية (في حالتنا نحن غربًا). هنا يمكنك العثور على قائمة المناطق المتاحة:

ap-North-1 - آسيا والمحيط الهادئ (طوكيو)
ap-North-2 - آسيا والمحيط الهادئ (سيول)
ap-south-1 - آسيا والمحيط الهادئ (مومباي)
ap-south-1 - آسيا والمحيط الهادئ (سنغافورة)
ap-south-2 - آسيا والمحيط الهادئ (سيدني)
ca-central-1 - كندا (وسط)
الاتحاد الأوروبي 1 - وسط الاتحاد الأوروبي (فرانكفورت)
eu-west-1 - غرب الاتحاد الأوروبي (أيرلندا)
eu-west-2 - غرب الاتحاد الأوروبي (لندن)
eu-west-3 - غرب الاتحاد الأوروبي (باريس)
جنوب شرق - أمريكا الجنوبية (ساو باولو)
us-east-1 - شرق الولايات المتحدة (فرجينيا)
us-east-2 - شرق الولايات المتحدة (أوهايو)
us-west-1 - غرب الولايات المتحدة (شمال كاليفورنيا)
us-west-2 - غرب الولايات المتحدة (أوريغون)

تعيين تنسيق إخراج البيانات كنص ويتم التكوين. أنت الآن بحاجة إلى الاتصال بمثيلك من خلال SSH. للقيام بذلك ، تحتاج إلى تشغيل الأمر أدناه ، حيث i-0f2103a2a2417f4cd هو معرف المثيل الخاص بك.

$ aws ec2 get-console-output - معرف الوظيفة i-0f2103a2a2417f4cd

في محطة تغيير الدلائل إلى مجلد الشهادات الذي يحتوي على ملف .pem تم إنشاؤه مسبقًا. هنا يجب عليك تشغيل هذا الأمر ، حيث debug_tutorial هو اسم شهادتك.

$ chmod 400 debug_tutorial.pem

دعنا نتواصل مع المثيل أخيرًا! قم بتشغيل هذا الأمر:

$ ssh -i debug_tutorial.pem ec2-user@ec2-13-57-229-28.us-west-1.compute.amazonaws.com

منذ أن اخترنا "Linux" في البداية ، المستخدم هو مستخدم ec2. بعد @ ، اسم DNS هو DNS العام الذي يمكنك العثور عليه في وصف المثيل. debug_tutorial.pem ، بدلاً من ذلك ، هو اسم شهادتك. بعد ذلك ، أدخل نعم ويتم تعيين كل شيء.

أنت الآن متصل من خلال SSH بمثيلك. حان الوقت لتثبيت عامل الميناء على الجهاز:

sudo يم التحديث - ص
sudo الأمازون-لينكس-إضافات تثبيت عامل ميناء

بدء خدمة عامل الميناء:

سودو خدمة عامل ميناء بدء
sudo usermod -a -G docker ec2-user

تسجيل الخروج باستخدام تسجيل الخروج ثم تسجيل الدخول مرة أخرى ثم تحقق من تثبيت عامل الميناء:

معلومات عامل ميناء

الآن تثبيت وتشغيل الحاويات اثنين:

تشغيل عامل ميناء -p 5432: 5432 اسم المستخدم / قاعدة البيانات: v1
عامل التشغيل - 8080: 8080 - e DATABASE_URL = '' اسم المستخدم / mybackend: v1
DATABASE_URL هو عنوان IP العام لمثيلك.

كل شيء جاهز! تهانينا! يمكنك الآن الوصول إلى API الخاصة بك من خلال عنوان IP العام.