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

1- مقدمة

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

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

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

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

ما ستتعلمه

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

المتطلبات

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

2. قبل البدء

إنشاء مشروع

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

صورة زر تفعيل 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 for 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 وما إلى ذلك.

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

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

بعد أن أصبح مثيل Cloud SQL for 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 : يجب توفير هذا الدور للوصول إلى مفاتيح Secret Manager لكل من 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,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. انتقِل الآن إلى خيار "سير العمل" (Workflows) وانقر على "البدء من البداية" (Start from scratch) أو إنشاء سير عمل جديد (create a new workflow). سيؤدي ذلك إلى ظهور لوحة فارغة يمكنك فيها إنشاء العقدتَين التاليتَين، إحداهما مشغّل (Simple Chat) والأخرى وكيل، حيث سنضبط بيانات الاعتماد التي أنشأناها، ليكون نموذج الوكيل هو 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

يحذف الأمران التاليان مفاتيح Secret Manager التي أنشأناها:

gcloud secrets delete n8n-db-password

gcloud secrets delete n8n-encryption-key

9- تهانينا

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

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