node.js - 将 n8n 部署到 Heroku
问题描述
我无法通过 Docker 注册表将n8n部署到 Heroku,并且无法弄清楚我做错了什么。任何帮助将不胜感激。
手动配置 Postgres 版本 11:
heroku addons:create heroku-postgresql:hobby-dev --version=11 -a my-app
Dockerfile:
FROM n8nio/n8n
heroku.yml:
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
日志通过heroku logs --tail
:
2020-04-15T11:19:50.178271+00:00 app[web.1]: [WARN tini (3)] Tini is not running as PID 1 and isn't registered as a child subreaper.
2020-04-15T11:19:50.178300+00:00 app[web.1]: Zombie processes will not be re-parented to Tini, so zombie reaping won't work.
2020-04-15T11:19:50.178302+00:00 app[web.1]: To fix the problem, use the -s option or set the environment variable TINI_SUBREAPER to register Tini as a child subreaper, or run Tini as PID 1.
2020-04-15T11:19:50.179480+00:00 app[web.1]: su-exec: setgroups: Operation not permitted
2020-04-15T11:24:54.478493+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=my-app.herokuapp.com request_id=myid fwd="myip" dyno= connect= service= status=503 bytes= protocol=https
解决方案
您需要稍微修改 Dockerfile 和入口点脚本。正如@VxJasonxV 所提到的,su-exec 需要 sudo 权限,而 Heroku 不允许使用这些权限。
这是我对容器的实现-
Heroku yml -
build:
docker:
web: Dockerfile
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"]
入口点脚本
#!/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
我已经为此创建了一个 Github 存储库,请看一下,我添加了一个描述性很好的自述文件,希望对您有所帮助。 https://github.com/sarveshpro/n8n-heroku
推荐阅读
- docker - 如何使用带有hadoop流的docker工具箱来解决多节点集群的map reduce
- .net - 在流文档中设置静态样式,以便仅 Style=(static somestyle} 与文档一起保存
- python - Arcpy 脚本循环 - 如何循环浏览文件夹中的表并在每个表上执行 arcpy 连接功能?
- xml - 如何使用 Wordpress 修改 YoastSEO 站点地图?(XML 文件)
- macos-mojave - 更改时不显示 NSTabViewItem 图像
- django - 如何通过 UserChangeForm 保存我的条目?
- vb.net - 如何在 VB.NET 中格式化 curl API 调用如何处理主 url 之后的部分
- ios - 为什么 Unity for iOS 在没有调用 WWW 类的情况下导致内存泄漏?
- r - 解决错误 - 找不到功能 ezANOVA?
- django - TRAVIS CI : ERROR 1045 (28000): Access denied for user 'root'@'localhost' (使用密码: NO)