ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Automatisch 环境变量配置完全指南:docker-compose 部署中的参数详解与源码级原理

Automatisch 环境变量配置完全指南:docker-compose 部署中的参数详解与源码级原理 Automatisch 环境变量配置完全指南docker-compose 部署中的参数详解与源码级原理【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatischAutomatisch 是一款开源的工作流自动化平台Zapier 的开源替代品其行为几乎完全由环境变量驱动。本文以官方配置文档为骨架完整解析 Automatisch 在 docker-compose 部署方式下的全部环境变量——包括 Web 服务、PostgreSQL 数据库、Redis、安全密钥、SMTP 邮件、BullMQ 看板等功能开关并深入仓库源码说明每个参数如何被读取、校验与生效。读完本文你将能独立完成 Automatisch 的部署调优、安全密钥管理、HTTPS 反代场景配置与故障排查。一、如何设置环境变量docker-compose 双服务同步原则Automatisch 的后端由mainAPI/Web 服务与worker后台任务队列消费者两个服务组成官方文档明确指出修改环境变量时必须同时修改 docker-compose 中的main和worker两个服务因为大多数变量数据库、Redis、密钥等会在两者中被同时使用。在仓库根目录的 docker-compose.yml 中可以看到两个服务各自声明的环境变量main服务HOST、PROTOCOL、PORT、APP_ENV、REDIS_HOST、POSTGRES_HOST、POSTGRES_DATABASE、POSTGRES_USERNAME、POSTGRES_PASSWORD以及ENCRYPTION_KEY、WEBHOOK_SECRET_KEY、APP_SECRET_KEY三个密钥变量注意这三个变量在 compose 文件中只写了变量名、没有默认值说明其值必须来自宿主机环境或.env文件worker服务与main几乎相同的数据库、Redis 与密钥变量并额外设置了WORKERtrue用于在 docker/entrypoint.sh 中区分启动模式WORKER非空则执行yarn start:worker否则执行yarn db:migrate、yarn db:seed:user与yarn start。修改方式示例在docker-compose.yml的main与worker两个environment:段中同步添加或覆盖变量然后执行docker compose up -d重启服务。如果你不希望在 compose 文件中写死敏感值也可以把密钥放在宿主机环境中compose 会透传同名变量或使用独立的.env文件配合 compose 的变量替换机制。二、核心安全密钥ENCRYPTION_KEY 与 WEBHOOK_SECRET_KEY官方文档对这两个变量给出了最高级别的警告:::dangerENCRYPTION_KEY与WEBHOOK_SECRET_KEY一旦修改已有的第三方服务连接connections和流程flows将无法继续工作。原因如下ENCRYPTION_KEY用于加密第三方服务的凭据。若更换该密钥此前用旧密钥加密存储的凭据将无法解密所有已建立的应用连接都会失效WEBHOOK_SECRET_KEY用于校验 webhook 请求的真实性。更换后依赖该密钥签名验证的 webhook 触发流程将无法通过校验。另一个容易被忽略的细节是这两个变量并非可选。在 packages/backend/src/config/app.js 中服务启动时会做强制校验if (!appConfig.encryptionKey) { throw new Error(ENCRYPTION_KEY environment variable needs to be set!); } if (!appConfig.webhookSecretKey) { throw new Error(WEBHOOK_SECRET_KEY environment variable needs to be set!); }即缺少任意一个后端都会直接抛错拒绝启动。因此首次部署时必须保证这两个变量被正确注入。首次启动的自动密钥生成机制如果你使用的是官方 compose 镜像无需手动生成密钥容器入口脚本 docker/compose-entrypoint.sh 会在存储卷/automatisch/storage/.env不存在时用openssl rand -base64 36自动生成ENCRYPTION_KEY、WEBHOOK_SECRET_KEY、APP_SECRET_KEY三个随机密钥并持久化到该文件后续启动再从该文件导入。这保证了容器重启后密钥不变连接与流程得以持续有效。这也解释了为什么 docker-compose 卷定义中包含automatisch_storage:/automatisch/storage见 docker-compose.yml——删除该卷等同于更换全部密钥。APP_SECRET_KEY用于用户会话认证源码中注释为 Secret Key to authenticate the user同样建议保持稳定。三、完整环境变量参考表以下表格完整覆盖官方配置文档的全部变量默认值针对docker-compose 部署方式。官方文档同时提示开发环境development setup下部分变量的默认值可能与此不同——从源码看例如 packages/backend/src/config/app.js 中数据库名与用户名在开发模式下默认分别为automatisch_development与automatisch_development_user。变量名类型默认值说明HOSTstringlocalhostHTTP 主机名PROTOCOLstringhttpHTTP 协议PORTstring3000HTTP 端口APP_ENVstringproduction运行环境production/development/testWEB_APP_URLstring空用于覆盖前端应用的 URL、连接 URL 与 CORS URLWEBHOOK_URLstring空用于覆盖 webhook URLLOG_LEVELstringinfo日志级别error、warn、info、http、debugPOSTGRES_DATABASEstringautomatisch数据库名POSTGRES_SCHEMAstringpublic数据库 SchemaPOSTGRES_PORTnumber5432数据库端口POSTGRES_ENABLE_SSLbooleanfalse是否启用数据库 SSLPOSTGRES_HOSTstringpostgres数据库主机POSTGRES_USERNAMEstringautomatisch_user数据库用户POSTGRES_PASSWORDstring空数据库用户密码ENCRYPTION_KEYstring空必填加密第三方服务凭据的密钥WEBHOOK_SECRET_KEYstring空必填校验 webhook 请求的密钥APP_SECRET_KEYstring空用户认证用密钥REDIS_HOSTstringredisRedis 主机REDIS_PORTnumber6379Redis 端口REDIS_DBnumber空Redis 数据库编号REDIS_USERNAMEstring空Redis 用户名REDIS_PASSWORDstring空Redis 密码REDIS_TLSbooleanfalse是否启用 Redis TLSTELEMETRY_ENABLEDbooleantrue是否启用遥测数据上报ENABLE_BULLMQ_DASHBOARDbooleanfalse是否启用 BullMQ 任务看板BULLMQ_DASHBOARD_USERNAMEstring空BullMQ 看板登录用户名BULLMQ_DASHBOARD_PASSWORDstring空BullMQ 看板登录密码DISABLE_NOTIFICATIONS_PAGEbooleanfalse是否禁用通知页面DISABLE_FAVICONbooleanfalse是否禁用网站图标faviconSMTP_HOSTstring空SMTP 服务器主机SMTP_PORTstring587SMTP 端口SMTP_SECUREbooleanfalse是否启用 SMTP SSLSMTP_USERstring空SMTP 用户名SMTP_PASSWORDstring空SMTP 密码FROM_EMAILstring空SMTP 发件人邮箱地址四、源码级解析环境变量如何被读取与生效1. 配置聚合入口config/app.js所有环境变量的读取与默认值注入都集中在 packages/backend/src/config/app.js 中其余模块数据库、Redis、BullMQ、邮件等都从这份appConfig对象取值。要点包括URL 推导逻辑L15-L39API URL 默认由${PROTOCOL}://${HOST}:${PORT}拼接而成前端 URLwebAppUrl优先取WEB_APP_URL未设置时回退到 API URL若SERVE_WEB_APP_SEPARATELYtrue开发模式特征则回退到http://localhost:3001。webhook URL 则取WEBHOOK_URL未设置时回退到 API URL。布尔值解析约定项目统一使用字符串与true比较来解析布尔变量例如process.env.POSTGRES_ENABLE_SSL true、process.env.REDIS_TLS true、process.env.TELEMETRY_ENABLED false ? false : true即遥测默认开启只有显式写false才关闭。数字解析PORT、POSTGRES_PORT、REDIS_PORT、REDIS_DB、SMTP_PORT均通过parseInt转换为数字。环境判定APP_ENV决定isDev/isTest/isProd进而影响日志、测试数据库.env.test加载等行为。注意APP_ENV未设置时源码默认是development而 docker-compose 中显式设置为production。2. PostgreSQLknex 连接与连接失败即退出数据库连接由 packages/backend/src/config/database.js 基于 knex 建立实际连接参数在 packages/backend/knexfile.js 中组装connection: { host: appConfig.postgresHost, port: appConfig.postgresPort, user: appConfig.postgresUsername, password: appConfig.postgresPassword, database: appConfig.postgresDatabase, ssl: appConfig.postgresEnableSsl, }, searchPath: [appConfig.postgresSchema], pool: { min: 0, max: 20 },POSTGRES_SCHEMA通过 knex 的searchPath生效连接池上限为 20。同时 packages/backend/src/config/database.js 会启动时执行SELECT 1探活若遇到ECONNREFUSED连接被拒绝会打印错误提示并直接process.exit()确保配置错误能第一时间暴露。3. Redis单机、TLS 与 Sentinel 三种形态packages/backend/src/config/redis.js 展示了对 Redis 的完整配置逻辑默认读取REDIS_HOST/REDIS_PORT/REDIS_USERNAME/REDIS_PASSWORD/REDIS_DB当设置REDIS_SENTINEL_HOST源码支持的变量可配合REDIS_NAME、REDIS_ROLE、REDIS_SENTINEL_PORT等时会切换为 Sentinel 模式并忽略普通 host/portREDIS_TLStrue时为连接附加tls: {}选项测试环境isTest下强制使用db 1避免污染开发库。Redis 是 Automatisch 队列系统BullMQ基于 Redis 的任务队列的底层依赖因此REDIS_*系列变量与ENABLE_BULLMQ_DASHBOARD、BULLMQ_DASHBOARD_USERNAME、BULLMQ_DASHBOARD_PASSWORD配合即可在ENABLE_BULLMQ_DASHBOARDtrue时开启可视化看板并设置登录凭据。4. Web 前端通知页与 favicon 开关DISABLE_NOTIFICATIONS_PAGE与DISABLE_FAVICON会由后端经配置接口下发到 Web 前端。在 packages/web/src/routes.jsx 中可以看到!config?.disableNotificationsPage (...)的条件渲染逻辑——设为true时通知相关路由/页面不再渲染。五、典型部署场景配置示例场景 1通过反向代理提供 HTTPS 访问将PROTOCOL改为https或显式设置WEB_APP_URL/WEBHOOK_URL使前端调用、回调 URL 与 webhook 地址指向你的公网域名environment: - PROTOCOLhttps - HOSTyour-domain.example.com - WEB_APP_URLhttps://your-domain.example.com - WEBHOOK_URLhttps://your-domain.example.com/webhooks # 若使用外部托管数据库/Redis - POSTGRES_HOSTdb.internal - POSTGRES_ENABLE_SSLtrue - REDIS_HOSTcache.internal - REDIS_PASSWORDyour-redis-password场景 2启用邮件通知SMTPSMTP_*与FROM_EMAIL是 Automatisch 发送邀请邮件、通知邮件的基础配置。常见组合为environment: - SMTP_HOSTsmtp.example.com - SMTP_PORT465 - SMTP_SECUREtrue - SMTP_USERno-replyexample.com - SMTP_PASSWORDyour-smtp-password - FROM_EMAILno-replyexample.com场景 3日志调优与功能裁剪environment: - LOG_LEVELdebug # 排障时调高日志详细度 - TELEMETRY_ENABLEDfalse # 关闭遥测 - DISABLE_NOTIFICATIONS_PAGEtrue - DISABLE_FAVICONtrue - ENABLE_BULLMQ_DASHBOARDtrue - BULLMQ_DASHBOARD_USERNAMEadmin - BULLMQ_DASHBOARD_PASSWORDstrong-password六、配置变更与排查提示修改后必须重启两个服务仅重启main而 worker 仍使用旧配置会导致队列处理与 API 行为不一致建议docker compose down docker compose up -d或至少docker compose up -d --force-recreate main worker。密钥类变量修改的代价改动ENCRYPTION_KEY、WEBHOOK_SECRET_KEY意味着既有连接与 webhook 流程失效详见第二节生产环境务必提前规划密钥轮换策略例如先备份storage卷中的.env。连接失败类故障若日志中出现数据库ECONNREFUSED提示请核对POSTGRES_HOST、POSTGRES_PORT、POSTGRES_PASSWORD以及POSTGRES_ENABLE_SSL是否与你的数据库实例匹配Redis 异常则重点检查REDIS_HOST、REDIS_PASSWORD、REDIS_TLS。URL 类故障若前端页面回调、OAuth 连接回调或 webhook 触发异常优先检查WEB_APP_URL、WEBHOOK_URL是否与外部实际可达的地址一致结合 config/app.js 的 URL 回退逻辑排查。以上配置项均可在仓库中的 docker-compose.yml、packages/backend/src/config/app.js 以及官方配置文档 packages/docs/pages/advanced/configuration.md 中交叉验证按需调整即可稳定运行 Automatisch 的完整工作流自动化能力。【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatisch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表