نشر n8n وتشغيله على Google Cloud Run

1- مقدمة

في هذا الدرس التطبيقي حول الترميز، ستضبط n8n على Google Cloud Run. n8n هي أداة مفتوحة المصدر لأتمتة سير العمل تتيح للمستخدمين ربط تطبيقات وخدمات مختلفة لأتمتة المهام المتكررة.

يستند الدرس التطبيقي حول الترميز إلى دليل مستندات n8n الذي يوضّح كيفية استضافة n8n على Google Cloud Run. سنثبّت ونضبط إصدارًا من n8n يكون أكثر متانة ويناسب عمليات النشر على مستوى الإنتاج في Cloud Run. ويتضمّن هذا الإصدار مراجع، مثل قاعدة بيانات للاحتفاظ بالبيانات و"مدير الأسرار" للبيانات الحساسة.

المهام التي ستنفّذها

  • نشر n8n على Google Cloud Run، وهي منصة حوسبة مُدارة بالكامل وبدون خادم تشغّل الحاويات غير الثابتة على البنية الأساسية من Google

المفاهيم التي ستتعرّف عليها

  • توفير قاعدة بيانات Cloud SQL لقاعدة بيانات PostgreSQL وتعبئتها، وستكون بمثابة إصدار دائم ومتين من تثبيت n8n
  • توفير صورة حاوية n8n على Google Cloud Run
  • تجربة تثبيت n8n على Google Cloud Run

المتطلبات

  • متصفّح الويب Chrome
  • حساب Gmail
  • مشروع على السحابة الإلكترونية تم تفعيل الفوترة له

2. قبل البدء

إنشاء مشروع

  1. في Google Cloud Console، في صفحة اختيار المشروع، اختَر مشروعًا على Google Cloud أو أنشِئ مشروعًا.
  2. تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. تعرّف على كيفية التحقّق مما إذا كانت الفوترة مفعّلة في مشروع
  3. ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud ومحمّلة مسبقًا بأداة bq. انقر على تفعيل Cloud Shell في أعلى Google Cloud Console.

صورة زر تفعيل Cloud Shell

  1. بعد الاتصال بـ Cloud Shell، تحقَّق من أنّك قد تمت مصادقتك وأنّ المشروع مضبوط على رقم تعريف مشروعك باستخدام الأمر التالي:
gcloud auth list
  1. نفِّذ الأمر التالي في Cloud Shell للتأكّد من أنّ أمر gcloud يعرف مشروعك.
gcloud config list project
  1. إذا لم يتم ضبط مشروعك، استخدِم الأمر التالي لضبطه:
gcloud config set project <YOUR_PROJECT_ID>
  1. فعِّل واجهات برمجة التطبيقات المطلوبة من خلال الأمر الموضّح أدناه. قد يستغرق ذلك بضع دقائق، لذا يُرجى التحلي بالصبر.
gcloud services enable run.googleapis.com \
                       sqladmin.googleapis.com \
                       secretmanager.googleapis.com 

عند تنفيذ الأمر بنجاح، من المفترض أن تظهر لك رسالة مشابهة للرسالة الموضّحة أدناه:

Operation "operations/..." finished successfully.

إذا فاتتك أي واجهة برمجة تطبيقات، يمكنك تفعيلها في أي وقت أثناء عملية التنفيذ. يمكنك الرجوع إلى المستندات لمعرفة أوامر gcloud واستخدامها.

أخيرًا، سنضبط متغيّري بيئة سنستخدمهما في النصوص البرمجية التي سنشغّلها في الخطوات القليلة التالية. في الوحدة الطرفية Cloud Shell، نفِّذ الأمرين التاليَين (تذكَّر استبدال GCP_PROJECT_ID وGCP_REGION بالقيمتَين المناسبتَين لرقم تعريف مشروعك والمنطقة (مثل us-central1) التي تريد إجراء عملية النشر فيها. سنستخدم us-central1 لعملية النشر.

export PROJECT_ID=GCP_PROJECT_ID
export REGION=us-central1

3. إنشاء مثيل Cloud SQL

سنستخدم مثيل Google Cloud SQL لقاعدة بيانات PostgreSQL، والذي سيكون طبقة الاحتفاظ بالبيانات لتخزين مثيل n8n وبيانات التنفيذ. هذا الإجراء مطلوب لضمان متانة عملية الإعداد.

‫Cloud SQL لقاعدة بيانات PostgreSQL هي خدمة قواعد بيانات مُدارة بالكامل تساعدك في إعداد قواعد البيانات العلائقية PostgreSQL والحفاظ عليها وإدارتها والإشراف عليها على Google Cloud Platform.

نفِّذ الأمر التالي في Cloud Shell لإنشاء المثيل:

gcloud sql instances create n8n-db \
--database-version=POSTGRES_15 \
--tier db-g1-small \
--region=us-central1 \
--edition=ENTERPRISE \
--root-password=postgres

يستغرق تنفيذ هذا الأمر 5 دقائق تقريبًا. بعد تنفيذ الأمر بنجاح، من المفترض أن يظهر لك ناتج يشير إلى اكتمال الأمر، بالإضافة إلى معلومات مثيل Cloud SQL، مثل NAME وDATABASE_VERSION وLOCATION وما إلى ذلك.

يُرجى العِلم أنّنا استخدمنا القيمة postgres لـ root-password. إذا غيّرتها إلى قيمة أخرى، يُرجى الاحتفاظ بها في مكان يسهل الوصول إليه.

4. إعداد قاعدة بيانات n8n وبيانات اعتماد مستخدم قاعدة البيانات

بعد أن أصبح مثيل Cloud SQL لقاعدة بيانات PostgreSQL جاهزًا، يمكننا إنشاء قاعدة بيانات n8n فيه، بالإضافة إلى تخزين كلمة مرور قاعدة البيانات ومفتاح التشفير في Google Cloud Secrets Manager.

أولاً، لننشئ قاعدة بيانات باسم n8n في مثيل Cloud SQL (n8n-db) الذي أنشأناه. يجب تنفيذ جميع الأوامر أدناه في الوحدة الطرفية Google Cloud Shell.

gcloud sql databases create n8n --instance=n8n-db

بعد الإنشاء بنجاح، من المفترض أن تظهر لك رسالة على النحو التالي:

Creating Cloud SQL database...done.                                                                                                                                                                                                           
Created database [n8n].
instance: n8n-db
name: n8n
project: YOUR_GCP_PROJECT_ID

بعد إنشاء قاعدة البيانات، لننشئ حساب مستخدم لقاعدة البيانات هذه. سنستخدم بيانات الاعتماد التالية:

  • رقم تعريف المستخدم : n8n-user
  • كلمة المرور : n8n

ملاحظة: إذا أردت استخدام كلمة مرور أخرى أقوى (ننصح بذلك في بيئات الإنتاج)، عليك استخدامها بدلاً من كلمة المرور التي اخترناها هنا، أي n8n، ولكن تأكَّد من استخدامها باستمرار في الأوامر القليلة التالية أيضًا.

يظهر أدناه الأمر الذي يُستخدم لإنشاء مستخدم قاعدة البيانات:

gcloud sql users create n8n-user \
    --instance=n8n-db \
    --password="n8n"

في هذه المرحلة، من المستحسن تخزين بيانات اعتماد كلمة مرور قاعدة بيانات المستخدم ومفتاح التشفير في Google Cloud Secret Manager، وهو نظام تخزين آمن ومريح لمفاتيح واجهة برمجة التطبيقات وكلمات المرور والشهادات والبيانات الحساسة الأخرى.

لنبدأ بالأمر التالي الذي يأخذ كلمة المرور التي استخدمناها (n8n) ويُدخلها في الأمر gcloud secrets create. سيكون مفتاحنا السرّي هو n8n-db-password.

printf "n8n" | gcloud secrets create n8n-db-password --replication-policy="automatic" --data-file=-        

وبالمثل، سنستخدم المجموعة التالية من الأوامر لإنشاء مفتاح تشفير، ثم إنشاء متغيّر سرّي n8n-encryption-key سيحتوي على القيمة.

openssl rand -base64 -out my-encryption-key 42

gcloud secrets create n8n-encryption-key \
    --data-file=my-encryption-key \
    --replication-policy="automatic"        

5. إنشاء حساب خدمة لـ Google Cloud Run

سننشر n8n على Google Cloud Run في الخطوة التالية. استعدادًا لذلك، سننشئ حساب خدمة سيستخدمه Cloud Run لتنفيذ مهام سير عمل n8n. لهذا الغرض، نريد التأكّد من أنّ حساب الخدمة الذي ننشئه لا يتضمّن سوى الأدوار/الأذونات المطلوبة كحد أدنى على Google Cloud.

بالنظر إلى متطلباتنا الحالية، سنحتاج إلى الأدوار التالية لحساب الخدمة الذي ننشئه:

  • roles/cloudsql.client : هذا الدور مطلوب لحساب الخدمة للوصول إلى قاعدة بيانات Cloud SQL
  • roles/secretAccessor : سنحتاج إلى منح هذا الدور للوصول إلى مفاتيح "مدير الأسرار" لكل من n8n-db-password وn8n-encryption-key.

لِنبدأ إذًا يجب تنفيذ جميع الأوامر أدناه في Google Cloud Shell. ينشئ الأمر الأول حساب الخدمة، ثم نمنح الأدوار المطلوبة كما هو موضّح. نفِّذ كل أمر على حدة. إذا طُلب منك تحديد شرط لأي من الأوامر أدناه، اختَر "None".

gcloud iam service-accounts create n8n-service-account \
    --display-name="n8n Service Account"

export SA_NAME=n8n-service-account@$PROJECT_ID.iam.gserviceaccount.com

gcloud secrets add-iam-policy-binding n8n-db-password \
    --member="serviceAccount:$SA_NAME" \
    --role="roles/secretmanager.secretAccessor"

gcloud secrets add-iam-policy-binding n8n-encryption-key \
    --member="serviceAccount:$SA_NAME" \
    --role="roles/secretmanager.secretAccessor"

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:$SA_NAME" \
    --role="roles/cloudsql.client"

أصبحنا الآن جاهزين لنشر صورة حاوية n8n على Google Cloud Run.

6. نشر n8n على Google Cloud Run

نفِّذ الأمر التالي في Google Cloud Shell:

gcloud run deploy n8n \
    --image=n8nio/n8n:latest \
    --command="/bin/sh" \
    --args="-c,sleep 5;n8n start" \
    --region=$REGION \
    --allow-unauthenticated \
    --port=5678 \
    --memory=2Gi \
    --no-cpu-throttling \--set-env-vars="N8N_PORT=5678,N8N_PROTOCOL=https,N8N_ENDPOINT_HEALTH=health,DB_TYPE=postgresdb,DB_POSTGRESDB_DATABASE=n8n,DB_POSTGRESDB_USER=n8n-user,DB_POSTGRESDB_HOST=/cloudsql/$PROJECT_ID:$REGION:n8n-db,DB_POSTGRESDB_PORT=5432,DB_POSTGRESDB_SCHEMA=public,GENERIC_TIMEZONE=UTC,QUEUE_HEALTH_CHECK_ACTIVE=true" \
    --set-secrets="DB_POSTGRESDB_PASSWORD=n8n-db-password:latest,N8N_ENCRYPTION_KEY=n8n-encryption-key:latest" \
    --add-cloudsql-instances=$PROJECT_ID:$REGION:n8n-db \
    --service-account=$SA_NAME

من المحتمل أن تستغرق عملية النشر دقيقة واحدة تقريبًا. بعد النشر بنجاح، من المفترض أن تظهر لك رسالة مشابهة للرسالة الموضّحة أدناه:

Deploying container to Cloud Run service [n8n] in project [YOUR_PROJECT_ID] region [us-central1]
Deploying new service...                                                                                                                                                                                                                      
  Setting IAM Policy...done                                                                                                                                                                                                                   
  Creating Revision...done                                                                                                                                                                                                                    
  Routing traffic...done                                                                                                                                                                                                                      
Done.                                                                                                                                                                                                                                         
Service [n8n] revision [n8n-00001-8nh] has been deployed and is serving 100 percent of traffic.
Service URL: https://n8n-<SOME_ID>.us-central1.run.app

دوِّن عنوان URL للخدمة في الناتج أعلاه، لأنّك ستستخدمه في الخطوة التالية لتشغيل وحدة تحكّم n8n.

7. تشغيل سير عمل n8n

شغِّل متصفّحًا وانتقِل إلى عنوان URL للخدمة الذي حصلت عليه في الخطوة السابقة. يمكنك أيضًا الحصول على عنوان URL للخدمة من الصفحة الرئيسية لـ Cloud Run، حيث سيظهر n8n كإحدى الخدمات.

ملاحظة: إذا ظهرت لك شاشة تعرض رسالة الخطأ Cannot GET / أو n8n is starting up، يشير ذلك عادةً إلى أنّ n8n لا يزال قيد التشغيل. يمكنك إعادة تحميل الصفحة ومن المفترض أن يتم تحميلها في النهاية.

في النهاية، ستظهر لك شاشة مشابهة للشاشة الموضّحة أدناه، حيث يمكنك إعداد حساب المالك:

5a3b1d60d02b13ec.png

املأ التفاصيل المطلوبة، مع تدوين كلمة المرور وأكمِل عملية الإعداد. يمكنك تخطّي بعض الخطوات، بما في ذلك الخطوة التي تطلب إرسال مفتاح ترخيص.

إذا سارت الأمور على ما يرام، من المفترض أن تظهر لك الصفحة الرئيسية لـ n8n كما هو موضّح أدناه:

3e072e9189ff9464.png

إذا كنت على دراية بـ n8n، ستتمكّن من إكمال هذا الدرس التطبيقي حول الترميز.

إذا أردت تجربة n8n، يمكنك تجربة سير العمل التالي:

  1. انقر على بيانات الاعتماد ، ثم على إضافة أول بيانات اعتماد.

14a1f3d2098a266c.png

  1. سنضبط بيانات اعتماد مفتاح Gemini API. اكتب gemini لعرض خيار Google Gemini (PaLM) Api، ثم انقر على متابعة.

7f48bfe35e5d9e98.png

  1. يمكنك الحصول على مفتاح Gemini API من https://aistudio.google.com/app/api-keys.
  2. بعد الحصول على المفتاح، ألصِقه. سيتحقّق n8n من صحة المفتاح وسيتم إعداد بيانات الاعتماد الآن.

3f31cbfc5072f113.png 5- انتقِل الآن إلى خيار مهام سير العمل وانقر على البدء من الصفر أو إنشاء سير عمل جديد. سيؤدي ذلك إلى عرض لوحة فارغة يمكنك فيها إنشاء العقدتَين التاليتَين، إحداهما مشغّل (محادثة بسيطة) والأخرى وكيل، حيث سنضبط بيانات الاعتماد التي أنشأناها، بحيث يكون نموذج الوكيل هو Google Gemini. في النهاية، من المفترض أن يكون لديك سير عمل على النحو التالي: 8f394e456ae7d1a.png

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

aec85c84f65d0da1.png

بهذا نكون قد أكملنا عملية التحقّق من صحة عملية نشر n8n على Google Cloud Run.

8. تنظيف

إذا اخترت استخدام هذا الدرس التطبيقي حول الترميز لتعلُّم كيفية تثبيت n8n وتشغيله على Google Cloud Run وليس لتلبية متطلبات الإنتاج أو المتطلبات الدائمة، يمكنك تجنُّب الرسوم المستمرة على حسابك على Google Cloud، ومن المهم حذف المراجع التي أنشأناها خلال ورشة العمل هذه.

سنحذف مثيل Cloud SQL وخدمة Cloud Run التي نشرناها.

تأكَّد من ضبط متغيّرات البيئة التالية بشكل صحيح، وفقًا لمشروعك ومنطقتك:

export PROJECT_ID="YOUR_PROJECT_ID"
export REGION="YOUR_REGION"

يحذف الأمران التاليان خدمات Cloud Run التي نشرناها:

gcloud run services delete n8n --platform=managed --region=${REGION} --project=${PROJECT_ID} --quiet

يحذف الأمر التالي مثيل Cloud SQL:

gcloud sql instances delete n8n-db

يحذف الأمران التاليان مفاتيح "مدير الأسرار" التي أنشأناها:

gcloud secrets delete n8n-db-password

gcloud secrets delete n8n-encryption-key

9. تهانينا

تهانينا، لقد نشرت n8n بنجاح على Google Cloud Run وتحقّقت من صحة عملية الإعداد باستخدام سير عمل نموذجي.

المستندات المرجعية