Руководство по самостоятельному развертыванию n8n на Google Cloud Run
Хотите использовать n8n без ежемесячных подписок, контролировать свои данные и избежать сложностей с обслуживанием серверов? Google Cloud Run предоставляет именно такую возможность — серверное развертывание с оплатой за использование.
Это руководство проведет вас через процесс развертывания n8n на Google Cloud Run с использованием PostgreSQL для постоянного хранения данных. В итоге вы получите полностью функциональную систему, которая автоматически масштабируется, подключается к сервисам Google через OAuth и не тратит ваш бюджет в период простоя.
Обзор
n8n отлично подходит для автоматизации всех тех утомительных задач, которые вы предпочли бы не выполнять вручную. В этой настройке используются:
- Google Cloud Run для хостинга приложения (оплата только за время работы).
- Cloud SQL PostgreSQL для постоянного хранения данных (чтобы ваши рабочие процессы сохранялись после перезапуска).
- Google Secret Manager для безопасного хранения конфиденциальных данных.
- Google Artifact Registry для хранения контейнерных образов.
Предварительные требования
- Аккаунт в Google Cloud Platform (GCP): Если у вас его еще нет, зарегистрируйтесь на console.cloud.google.com.
- Установленный Google Cloud SDK: Это позволит вам использовать команду
gcloud
для управления ресурсами GCP. Инструкции по установке доступны здесь. - Docker: Понадобится для создания контейнерного образа n8n. Скачайте и установите Docker с официального сайта.
Шаг 1: Настройка проекта GCP
1. Создайте новый проект в GCP:
gcloud projects create your-project-id gcloud config set project your-project-id
gcloud services enable run.googleapis.com sqladmin.googleapis.com secretmanager.googleapis.com artifactregistry.googleapis.com
Шаг 2: Настройка базы данных PostgreSQL
1. Создайте экземпляр Cloud SQL для PostgreSQL:
gcloud sql instances create n8n-postgres --database-version=POSTGRES_13 --cpu=1 --memory=4GB --region=us-central1
2. Установите пароль для пользователя postgres
:
gcloud sql users set-password postgres --instance=n8n-postgres --password=yourpassword
3. Создайте базу данных для n8n:
gcloud sql databases create n8n_database --instance=n8n-postgres
Шаг 3: Хранение конфиденциальных данных в Secret Manager
1. Сохраните пароль базы данных в Secret Manager:
echo -n 'yourpassword' | gcloud secrets create n8n-db-password --data-file=-
2. Сохраните секретный ключ JWT:
openssl rand -base64 32 | gcloud secrets create n8n-jwt-secret --data-file=-
openssl rand -base64 32 | gcloud secrets create n8n-encryption-key --data-file=-
Шаг 4: Создание и загрузка контейнерного образа n8n
1. Создайте репозиторий в Artifact Registry:
gcloud artifacts repositories create n8n-repo --repository-format=docker --location=us-central1
2. Аутентифицируйтесь в Artifact Registry:
gcloud auth configure-docker us-central1-docker.pkg.dev
FROM n8n/n8n:latest ENV N8N_PORT=8080 ENV DB_TYPE=postgresdb ENV DB_POSTGRESDB_HOST=localhost ENV DB_POSTGRESDB_PORT=5432 ENV DB_POSTGRESDB_DATABASE=n8n_database ENV DB_POSTGRESDB_USER=postgres ENV DB_POSTGRESDB_PASSWORD=/secrets/db-password ENV N8N_JWT_SECRET=/secrets/jwt-secret ENV N8N_ENCRYPTION_KEY=/secrets/encryption-key ENV N8N_BASIC_AUTH_ACTIVE=true ENV N8N_BASIC_AUTH_USER=admin ENV N8N_BASIC_AUTH_PASSWORD=adminpassword COPY startup.sh /startup.sh ENTRYPOINT ["/startup.sh"]
#!/bin/bash set -e # Считывание секретов из Secret Manager export DB_POSTGRESDB_PASSWORD=$(cat /secrets/db-password) export N8N_JWT_SECRET=$(cat /secrets/jwt-secret) export N8N_ENCRYPTION_KEY=$(cat /secrets/encryption-key) # Запуск n8n n8n
5. Сделайте startup.sh
исполняемым:
chmod +x startup.sh
6. Постройте и загрузите образ:
docker build -t us-central1-docker.pkg.dev/your-project-id/n8n-repo/n8n:latest . docker push us-central1-docker.pkg.dev/your-project-id/n8n-repo/n8n:latest
Шаг 5: Развертывание n8n на Google Cloud Run
1. Создайте сервисный аккаунт для Cloud Run:
gcloud iam service-accounts create n8n-cloud-run --display-name "n8n Cloud Run"
2. Предоставьте необходимые роли сервисному аккаунту:
gcloud projects add-iam-policy-binding your-project-id --member=serviceAccount:n8n-cloud-run@your-project-id.iam.gserviceaccount.com --role=roles/run.invoker gcloud projects add-iam-policy-binding your-project-id --member=serviceAccount:n8n-cloud-run@your-project