استقرار و اجرای n8n در Google Cloud Run

۱. مقدمه

در این آزمایشگاه کد، شما n8n را روی Google Cloud Run راه‌اندازی خواهید کرد. n8n یک ابزار اتوماسیون گردش کار متن‌باز است که به کاربران امکان می‌دهد برنامه‌ها و سرویس‌های مختلف را برای خودکارسازی وظایف تکراری به هم متصل کنند.

این آزمایشگاه کد بر اساس راهنمای مستندات n8n است که نحوه میزبانی n8n در Google Cloud Run را توضیح می‌دهد. ما نسخه‌ای از n8n را نصب و پیکربندی خواهیم کرد که یک پیاده‌سازی بادوام‌تر و در سطح تولید از n8n در Cloud Run است. این نسخه شامل منابعی مانند پایگاه داده برای پایداری و مدیر مخفی برای داده‌های حساس است.

کاری که انجام خواهید داد

  • n8n را روی Google Cloud Run مستقر کنید، که یک پلتفرم محاسباتی کاملاً مدیریت‌شده و بدون سرور است که کانتینرهای بدون وضعیت را روی زیرساخت گوگل اجرا می‌کند.

آنچه یاد خواهید گرفت

  • تهیه و پر کردن یک پایگاه داده Cloud SQL برای PostgreSQL که به عنوان یک نسخه پایدار و بادوام برای نصب n8n ما عمل خواهد کرد.
  • تصویر کانتینر n8n را به Google Cloud Run ارائه دهید.
  • نصب n8n را روی Google Cloud Run امتحان کنید.

آنچه نیاز دارید

  • مرورگر وب کروم
  • یک حساب جیمیل
  • یک پروژه ابری با قابلیت پرداخت صورتحساب

۲. قبل از شروع

ایجاد یک پروژه

  1. در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید.
  2. مطمئن شوید که صورتحساب برای پروژه ابری شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر .
  3. شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا می‌شود و bq از قبل روی آن بارگذاری شده است، استفاده خواهید کرد. روی Activate 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. API های مورد نیاز را از طریق دستور زیر فعال کنید. این کار ممکن است چند دقیقه طول بکشد، پس لطفاً صبور باشید.
gcloud services enable run.googleapis.com \
                       sqladmin.googleapis.com \
                       secretmanager.googleapis.com 

در صورت اجرای موفقیت‌آمیز دستور، باید پیامی مشابه آنچه در زیر نشان داده شده است را مشاهده کنید:

Operation "operations/..." finished successfully.

اگر هر API از قلم افتاده باشد، می‌توانید همیشه آن را در طول پیاده‌سازی فعال کنید. برای دستورات و نحوه‌ی استفاده از gcloud به مستندات مراجعه کنید.

در نهایت، ما قصد داریم چند متغیر محیطی را تنظیم کنیم که در اسکریپت‌هایی که در چند مرحله بعدی اجرا خواهیم کرد، از آنها استفاده خواهیم کرد. در ترمینال Cloud Shell خود، دو دستور زیر را اجرا کنید (به یاد داشته باشید که GCP_PROJECT_ID و GCP_REGION را با مقادیر مربوطه برای شناسه پروژه خود و منطقه‌ای (مثلاً us-central1 ) که می‌خواهید این استقرار در آن انجام شود، جایگزین کنید. ما برای استقرار از us-central1 استفاده می‌کنیم.

export PROJECT_ID=GCP_PROJECT_ID
export REGION=us-central1

۳. یک نمونه Cloud SQL ایجاد کنید

ما از یک نمونه Google Cloud SQL برای PostgreSQL استفاده خواهیم کرد که لایه پایداری ما برای ذخیره نمونه n8n و داده‌های اجرایی ما خواهد بود. این امر برای پایداری راه‌اندازی ما ضروری است.

Cloud SQL برای PostgreSQL یک سرویس پایگاه داده کاملاً مدیریت‌شده است که به شما در راه‌اندازی، نگهداری، مدیریت و سرپرستی پایگاه‌های داده رابطه‌ای PostgreSQL خود در پلتفرم Google Cloud کمک می‌کند.

برای ایجاد نمونه، دستور زیر را در Cloud Shell اجرا کنید:

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

اجرای این دستور تقریباً ۵ دقیقه طول می‌کشد. پس از اجرای موفقیت‌آمیز دستور، باید خروجی‌ای را مشاهده کنید که نشان می‌دهد دستور انجام شده است، به همراه اطلاعات نمونه Cloud SQL شما مانند NAME، DATABASE_VERSION، LOCATION و غیره.

توجه داشته باشید که ما از مقدار root-password به عنوان postgres استفاده کرده‌ایم. اگر آن را به چیز دیگری تغییر می‌دهید، لطفاً آن را در دسترس نگه دارید.

۴. راه‌اندازی پایگاه داده 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 ذخیره کنید، که یک سیستم ذخیره‌سازی امن و مناسب برای کلیدهای API، رمزهای عبور، گواهی‌ها و سایر داده‌های حساس است.

ما با دستور زیر شروع می‌کنیم که رمز عبوری را که استفاده کرده‌ایم ( 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"        

۵. یک حساب کاربری سرویس برای Google Cloud Run ایجاد کنید

در مرحله بعدی، قصد داریم n8n را روی Google Cloud Run مستقر کنیم. برای آماده شدن برای این کار، یک حساب کاربری سرویس ایجاد می‌کنیم که Cloud Run از آن برای اجرای گردش‌های کاری n8n استفاده خواهد کرد. برای این کار، می‌خواهیم مطمئن شویم که حساب کاربری سرویسی که ایجاد می‌کنیم، فقط حداقل نقش‌ها/مجوزهای مورد نیاز را در Google Cloud دارد.

با توجه به نیازهای فعلی، برای حساب کاربری سرویسی که ایجاد می‌کنیم به نقش‌های زیر نیاز خواهیم داشت:

  • roles/cloudsql.client : این برای دسترسی حساب کاربری سرویس به پایگاه داده ابری SQL ما لازم است.
  • roles/secretAccessor : برای دسترسی به کلیدهای Secret manager برای هر دو n8n-db-password و n8n-encryption-key به این نقش نیاز خواهیم داشت.

بیایید شروع کنیم. تمام دستورات زیر باید در پوسته ابری گوگل اجرا شوند. دستور اول، حساب کاربری سرویس را ایجاد می‌کند و سپس نقش‌های مورد نیاز را همانطور که بحث شد، ارائه می‌دهیم. هر یک از دستورات را یکی پس از دیگری اجرا کنید. اگر از شما خواسته شد شرطی را برای هر یک از دستورات زیر مشخص کنید، "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 مستقر کنیم.

۶. 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

آدرس سرویس (Service URL) را در خروجی بالا یادداشت کنید، زیرا در مرحله بعدی برای راه‌اندازی کنسول n8n از آن استفاده خواهید کرد.

۷. یک گردش کار n8n اجرا کنید

یک مرورگر باز کنید و به آدرس اینترنتی سرویس (Service URL) که در مرحله قبل به دست آوردید، مراجعه کنید. همچنین می‌توانید آدرس اینترنتی سرویس را از صفحه اصلی Cloud Run دریافت کنید، جایی که n8n را به عنوان یکی از سرویس‌ها مشاهده خواهید کرد.

نکته : اگر با خطای Cannot GET / screen مواجه شدید یا اینکه n8n is starting up ، معمولاً نشان می‌دهد که n8n هنوز در حال شروع به کار است. می‌توانید صفحه را رفرش کنید تا در نهایت بارگذاری شود.

در نهایت صفحه‌ای مانند تصویر زیر مشاهده خواهید کرد که می‌توانید در آن حساب کاربری مالک (Owner Account) را تنظیم کنید:

5a3b1d60d02b13ec.png

اطلاعات مورد نیاز را وارد کنید، رمز عبور را یادداشت کنید و تنظیمات را تکمیل کنید. می‌توانید از برخی مراحل، از جمله مرحله‌ای که درخواست ارسال کلید مجوز می‌کند، صرف نظر کنید.

اگر همه چیز خوب پیش برود، باید صفحه اصلی n8n را مطابق شکل زیر مشاهده کنید:

3e072e9189ff9464.png

اگر با n8n آشنا باشید، می‌توانید از پس این کار برآیید و آزمایشگاه را تکمیل کنید.

اگر می‌خواهید n8n را برای یک تست درایو کوچک امتحان کنید، می‌توانید گردش کار زیر را امتحان کنید:

  1. روی Credentials کلیک کنید و سپس اولین اعتبارنامه را اضافه کنید .

۱۴a1f3d2098a266c.png

  1. ما یک اعتبارنامه کلید API Gemini تنظیم خواهیم کرد. برای نمایش گزینه Google Gemini (PaLM) Api، عبارت gemini را تایپ کنید و سپس روی ادامه کلیک کنید.

7f48bfe35e5d9e98.png

  1. می‌توانید کلید API مربوط به Gemini را از آدرس https://aistudio.google.com/app/api-keys دریافت کنید.
  2. وقتی کلید را گرفتید، آن را جایگذاری کنید. n8n کلید را اعتبارسنجی می‌کند و اعتبارنامه اکنون تنظیم شده است.

3f31cbfc5072f113.png ۵. حالا به گزینه Workflows بروید و روی Start from scratch یا create a new workflow کلیک کنید. این یک صفحه خالی نمایش می‌دهد که می‌توانید دو گره زیر را در آن بسازید، یکی trigger (Simple Chat) و دیگری Agent که در آن Credential که ایجاد کرده‌ایم را تنظیم می‌کنیم، به طوری که مدل Agent، Google Gemini باشد. در نهایت باید یک workflow به شکل زیر داشته باشید:

8f394e456ae7d1a.png

  1. شما می‌توانید این گردش کار را از طریق پنل چت اجرا کنید و اگر همه چیز خوب پیش برود، پاسخی به درخواست‌های خود دریافت کنید. نمونه‌هایی از صفحات اجرا در زیر نشان داده شده است:

aec85c84f65d0da1.png

این اعتبارسنجی ما از استقرار n8n در Google Cloud Run را تکمیل می‌کند.

۸. پاکسازی

اگر تصمیم گرفته‌اید از این codelab برای یادگیری نحوه نصب و اجرای 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

۹. تبریک

تبریک می‌گوییم، شما با موفقیت n8n را در Google Cloud Run مستقر کردید و تنظیمات را با یک نمونه گردش کار تأیید کردید.

اسناد مرجع