Deployment ed esecuzione di n8n su Google Cloud Run

1. Introduzione

In questo codelab configurerai n8n su Google Cloud Run. n8n è uno strumento di automazione del flusso di lavoro open source che consente agli utenti di connettere diverse applicazioni e servizi per automatizzare le attività ripetitive.

Il codelab si basa sulla guida alla documentazione di n8n, che spiega come ospitare n8n su Google Cloud Run. Installeremo e configureremo una versione di n8n che è un deployment più duraturo e di livello di produzione di n8n su Cloud Run. Include risorse come un database per la persistenza e Secret Manager per i dati sensibili.

Attività previste

  • Esegui il deployment di n8n su Google Cloud Run, una piattaforma di computing serverless completamente gestita che esegue container stateless sull'infrastruttura di Google.

Cosa imparerai a fare

  • Provisioning e popolamento di un database Cloud SQL per PostgreSQL che fungerà da versione persistente e durevole per la nostra installazione di n8n.
  • Esegui il provisioning dell'immagine container n8n in Google Cloud Run.
  • Prova l'installazione di n8n su Google Cloud Run.

Che cosa ti serve

  • Browser web Chrome
  • Un account Gmail
  • Un progetto cloud con fatturazione abilitata

2. Prima di iniziare

Crea un progetto

  1. Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
  2. Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto .
  3. Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud precaricato con bq. Fai clic su Attiva Cloud Shell nella parte superiore della console Google Cloud.

Immagine del pulsante Attiva Cloud Shell

  1. Una volta eseguita la connessione a Cloud Shell, verifica di essere già autenticato e che il progetto sia impostato sul tuo ID progetto utilizzando il seguente comando:
gcloud auth list
  1. Esegui questo comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto.
gcloud config list project
  1. Se il progetto non è impostato, utilizza il seguente comando per impostarlo:
gcloud config set project <YOUR_PROJECT_ID>
  1. Abilita le API richieste tramite il comando mostrato di seguito. L'operazione potrebbe richiedere alcuni minuti.
gcloud services enable run.googleapis.com \
                       sqladmin.googleapis.com \
                       secretmanager.googleapis.com 

Se il comando viene eseguito correttamente, dovresti visualizzare un messaggio simile a quello mostrato di seguito:

Operation "operations/..." finished successfully.

Se manca un'API, puoi sempre abilitarla durante l'implementazione. Consulta la documentazione per i comandi e l'utilizzo di gcloud.

Infine, imposteremo un paio di variabili di ambiente che utilizzeremo negli script che eseguiremo nei prossimi passaggi. Nel terminale Cloud Shell, esegui i due comandi seguenti (ricorda di sostituire GCP_PROJECT_ID e GCP_REGION con i rispettivi valori per l'ID progetto e la regione (ad es. us-central1) in cui vuoi eseguire questo deployment. Per il deployment utilizzeremo us-central1.

export PROJECT_ID=GCP_PROJECT_ID
export REGION=us-central1

3. Crea un'istanza Cloud SQL

Utilizzeremo un'istanza Google Cloud SQL per PostgreSQL, che sarà il nostro livello di persistenza per archiviare l'istanza n8n e i dati di esecuzione. Questo è necessario per garantire la durata della configurazione.

Cloud SQL per PostgreSQL è un servizio di database completamente gestito che semplifica la configurazione, la manutenzione, la gestione e l'amministrazione dei database relazionali PostgreSQL su Google Cloud.

Esegui questo comando in Cloud Shell per creare l'istanza:

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

L'esecuzione di questo comando richiede circa 5 minuti. Una volta eseguito correttamente il comando, dovresti visualizzare un output che indica che il comando è stato completato, insieme alle informazioni sull'istanza Cloud SQL, come NAME, DATABASE_VERSION, LOCATION e così via.

Tieni presente che abbiamo utilizzato il valore root-password come postgres. Se lo modifichi, conservalo.

4. Configura le credenziali del database e dell'utente del database n8n

Ora che l'istanza Cloud SQL per PostgreSQL è pronta, possiamo creare il nostro database n8n, oltre ad archiviare la password del database e la chiave di crittografia in Google Cloud Secrets Manager.

Per prima cosa, creiamo un database denominato n8n nell'istanza Cloud SQL (n8n-db) che abbiamo creato. Tutti i comandi riportati di seguito devono essere eseguiti nel terminale Google Cloud Shell.

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

Una volta creata, dovresti visualizzare un messaggio come segue:

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

Ora che il database è stato creato, creiamo un account utente per questo database. Utilizzeremo le seguenti credenziali:

  • ID utente : n8n-user
  • password : n8n

Nota: se vuoi utilizzare un'altra password più efficace (consigliata per la produzione), devi utilizzarla al posto di quella che abbiamo scelto qui, ovvero n8n, ma assicurati di utilizzarla in modo coerente anche nei prossimi comandi.

Di seguito è riportato il comando per creare l'utente del database:

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

A questo punto, è consigliabile archiviare le credenziali per la password e la chiave di crittografia del database utente in Google Cloud Secret Manager, un sistema di archiviazione pratico e sicuro per chiavi API, password, certificati e altri dati sensibili.

Iniziamo con il seguente comando che prende la password che abbiamo utilizzato (n8n)) e la invia al comando gcloud secrets create. La nostra chiave segreta sarà n8n-db-password.

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

Allo stesso modo, utilizzeremo il seguente insieme di comandi per generare una chiave di crittografia e poi creare una variabile segreta n8n-encryption-key che conterrà il valore.

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

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

5. Crea un service account per Google Cloud Run

Nel passaggio successivo, eseguiremo il deployment di n8n su Google Cloud Run. Per prepararti, creeremo un service account che Cloud Run utilizzerà per eseguire i flussi di lavoro n8n. Per questo, vogliamo assicurarci che il service account che creiamo disponga solo dei ruoli/autorizzazioni minimi richiesti su Google Cloud.

In base ai nostri requisiti attuali, avremo bisogno dei seguenti ruoli per il service account che creiamo:

  • roles/cloudsql.client : questo è necessario per consentire all'account di servizio di accedere al nostro database Cloud SQL
  • roles/secretAccessor : dovremo fornire questo ruolo per accedere alle chiavi di Secret Manager sia per n8n-db-password che per n8n-encryption-key.

Iniziamo. Tutti i comandi riportati di seguito devono essere eseguiti in Google Cloud Shell. Il primo crea il service account, poi forniamo i ruoli richiesti come descritto. Esegui i comandi uno dopo l'altro. Se ti viene chiesto di specificare una condizione per uno dei comandi riportati di seguito, scegli "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"

Ora siamo pronti per eseguire il deployment dell'immagine container n8n su Google Cloud Run.

6. Esegui il deployment di n8n in Google Cloud Run

Esegui questo comando in 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

Il deployment dovrebbe richiedere circa un minuto. Se il deployment va a buon fine, dovresti visualizzare un messaggio simile a quello mostrato di seguito:

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

Prendi nota dell'URL del servizio nell'output precedente, poiché lo utilizzerai nel passaggio successivo per avviare la console n8n.

7. Esegui un workflow n8n

Avvia un browser e visita l'URL del servizio che hai ottenuto nel passaggio precedente. Puoi ottenere l'URL del servizio anche dalla home page di Cloud Run, dove n8n è elencato tra i servizi.

Nota: se ricevi un errore che indica la schermata Cannot GET / o n8n is starting up, di solito significa che n8n è ancora in fase di avvio. Puoi aggiornare la pagina e dovrebbe caricarsi.

Alla fine vedrai una schermata come quella mostrata di seguito, in cui puoi configurare l'account proprietario:

5a3b1d60d02b13ec.png

Compila i dettagli richiesti, annota la password e completa la configurazione. Puoi saltare alcuni passaggi, incluso quello che richiede l'invio di una chiave di licenza.

Se tutto va bene, dovresti visualizzare la home page di n8n come mostrato di seguito:

3e072e9189ff9464.png

Se hai familiarità con n8n, potrai completare il lab.

Se vuoi fare un piccolo test drive di n8n, puoi provare il seguente flusso di lavoro:

  1. Fai clic su Credenziali e poi su Aggiungi prima credenziale.

14a1f3d2098a266c.png

  1. Configureremo una credenziale della chiave API Gemini. Digita gemini per visualizzare l'opzione API Google Gemini (PaLM), poi fai clic su Continua.

7f48bfe35e5d9e98.png

  1. Puoi ottenere la chiave API Gemini da https://aistudio.google.com/app/api-keys.
  2. Una volta ottenuta la chiave, incollala. n8n la convaliderà e le credenziali saranno configurate.

3f31cbfc5072f113.png 5. Ora vai all'opzione Flussi di lavoro e fai clic su Inizia da zero o crea un nuovo flusso di lavoro. Verrà visualizzata una tela vuota, in cui puoi creare i due nodi seguenti: uno è un trigger (Simple Chat) e l'altro è un agente, in cui configureremo le credenziali che abbiamo creato, in modo che il modello di agente sia Google Gemini. Alla fine dovresti avere un workflow simile al seguente:

8f394e456ae7d1a.png

  1. Puoi eseguire questo flusso di lavoro tramite il riquadro della chat e, se tutto va bene, ricevere una risposta ai tuoi prompt. Di seguito sono riportate schermate di esecuzione di esempio:

aec85c84f65d0da1.png

In questo modo, la convalida del deployment di n8n su Google Cloud Run è completata.

8. Esegui la pulizia

Se hai scelto di utilizzare questo codelab per imparare a installare ed eseguire n8n su Google Cloud Run e non per requisiti di produzione / permanenti, puoi evitare addebiti continui sul tuo account Google Cloud. È importante eliminare le risorse che abbiamo creato durante questo workshop.

Elimineremo l'istanza Cloud SQL e il servizio Cloud Run di cui abbiamo eseguito il deployment.

Assicurati che le seguenti variabili di ambiente siano impostate correttamente, in base al progetto e alla regione:

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

I due comandi seguenti eliminano i servizi Cloud Run di cui abbiamo eseguito il deployment:

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

Il seguente comando elimina l'istanza Cloud SQL:

gcloud sql instances delete n8n-db

I due comandi seguenti eliminano le chiavi Secret Manager che abbiamo creato:

gcloud secrets delete n8n-db-password

gcloud secrets delete n8n-encryption-key

9. Complimenti

Congratulazioni, hai eseguito correttamente il deployment di n8n su Google Cloud Run e hai convalidato la configurazione con un flusso di lavoro di esempio.

Documenti di riferimento