将 n8n 部署到 Heroku

met*_*amp 2 heroku node.js heroku-cli

我在通过 Docker 注册表将n8n部署到 Heroku 时遇到问题,并且无法弄清楚我做错了什么。任何帮助将不胜感激。

手动配置 Postgres 版本 11:

heroku addons:create heroku-postgresql:hobby-dev --version=11 -a my-app

Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM n8nio/n8n

Run Code Online (Sandbox Code Playgroud)

heroku.yml:

FROM n8nio/n8n

Run Code Online (Sandbox Code Playgroud)

日志通过heroku logs --tail

setup:
  #addons:
  #  - plan: heroku-postgresql:hobby-dev
  #    version: 11
  #    as: DATABASE
  config:
    SUBDOMAIN: "my-app"
    DOMAIN_NAME: "herokuapp.com"
    NODE_ENV: "production"
    TZ: "Europe/Berlin"
    GENERIC_TIMEZONE: "Europe/Berlin"
    N8N_HOST: "${SUBDOMAIN}.${DOMAIN_NAME}"
    N8N_PORT: "${PORT}" #each app in heroku gets randomly assigned IP on start
    N8N_PROTOCOL: "https"
    N8N_ENCRYPTION_KEY: "mysupersecretkey"
    WEBHOOK_TUNNEL_URL: "https://${SUBDOMAIN}.${DOMAIN_NAME}/"
    VUE_APP_URL_BASE_API: "https://${SUBDOMAIN}.${DOMAIN_NAME}/"
    DB_TYPE: "postgresdb"
    DB_POSTGRESDB_HOST: "dbhost"
    DB_POSTGRESDB_DATABASE: "dbname"
    DB_POSTGRESDB_PORT: 5432
    DB_POSTGRESDB_USER: "dbuser"
    DB_POSTGRESDB_PASSWORD: "dbpass"

build:
    docker:
        web: Dockerfile

Run Code Online (Sandbox Code Playgroud)

Sar*_*rge 5

您需要稍微修改一下 Dockerfile 和入口点脚本。正如 @VxJasonxV 所提到的,su-exec 需要 sudo 权限,这在 Heroku 上是不允许的。

这是我对容器的实现 -

Heroku yml -

build:
    docker:
        web: Dockerfile
Run Code Online (Sandbox Code Playgroud)

Dockerfile -

FROM node:12.16-alpine

# pass N8N_VERSION Argument while building or use default
ARG N8N_VERSION=0.62.1

# Update everything and install needed dependencies
RUN apk add --update graphicsmagick tzdata

# Set a custom user to not have n8n run as root
USER root

# Install n8n and the also temporary all the packages
# it needs to build it correctly.
RUN apk --update add --virtual build-dependencies python build-base && \
    npm_config_user=root npm install -g n8n@${N8N_VERSION} && \
    apk del build-dependencies

# Specifying work directory
WORKDIR /data

# copy start script to container
COPY ./start.sh /

# make the script executable
RUN chmod +x /start.sh

# define execution entrypoint
ENTRYPOINT ["/start.sh"]
Run Code Online (Sandbox Code Playgroud)

入口点脚本

#!/bin/sh

# check if port variable is set or go with default
if [ -z ${PORT+x} ]; then echo "PORT variable not defined, leaving N8N to default port."; else export N8N_PORT=$PORT; echo "N8N will start on '$PORT'"; fi

# kickstart nodemation
n8n
Run Code Online (Sandbox Code Playgroud)

我已经为此创建了一个 Github 存储库,请查看,我添加了一个描述性良好的自述文件,希望它有所帮助。 https://github.com/sarveshpro/n8n-heroku