Infisical 密钥管理部署实操:Docker Compose 三步起服务,从容器到密钥注入全打通
【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical
把散落在配置文件、聊天记录和 CI 流水线里的密钥统一收进一个平台,还要自己掌控数据和网络边界——这是 Infisical 想解决的问题。它是一款开源的密钥、证书与特权访问管理平台,内置版本控制、自动轮换和防泄露扫描;用 Docker Compose 起一套自托管实例通常只需要几分钟,装好 Docker 就能跑,无需额外依赖。下面按「准备环境 → 起服务 → 验证 → 把密钥接进应用」的顺序走一遍,全程只涉及几条命令和一份环境变量文件。
一、动手之前:三个前置条件
| 条件 | 说明 | 检查方式 |
|---|---|---|
| Docker Engine + Docker Compose | 部署依赖容器编排,Compose 负责一次拉起多个服务 | docker compose version |
| 80 端口可用 | 生产编排文件把宿主机 80 端口映射到服务,被占用会启动失败 | ss -ltn \| grep :80 |
| 一块能持久化的磁盘 | PostgreSQL 和 Redis 各挂一个命名卷,数据落在本机 | 默认即可,无需配置 |
拿到仓库代码。两种方式任选:
git clone https://gitcode.com/GitHub_Trending/in/infisical cd infisical或者直接在本机找一个已有的仓库目录。注意:自托管部署走的是 docker-compose.prod.yml,它会拉取官方打包镜像infisical/infisical:latest,不需要你在本地编译 backend 或 frontend 源码,省掉了一大堆构建步骤。
二、配置 .env:整个部署里唯一要"动手"的部分
仓库自带的 .env.example 是一份带默认值的模板,先把它复制出来:
cp .env.example .env编排文件通过env_file: .env读取它,所以这一步不能省。翻一下这份文件,真正决定实例能不能跑起来的核心变量只有几项:
- ENCRYPTION_KEY:平台加解密密钥,必须保留一个 64 位十六进制值(示例值仅限本地试验,生产环境请自行生成替换)
- AUTH_SECRET:签发登录 JWT 用的密钥,同上
- POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB:数据库凭据,模板默认都是
infisical,可照用 - DB_CONNECTION_URI:模板里已写死为
postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB},指向编排网络内的db容器,不用改 - SITE_URL:访问地址,模板默认
http://localhost:8080 - SMTP 相关:留空即可,实例能正常登录,只是站内通知发不出去
其他如 GitHub/GitLab 集成、Sentry 监控等变量都按需填写,本地跑通全部留空没有任何问题。
三、一键启动:一条命令拉起三件套
docker compose -f docker-compose.prod.yml up命令执行后,Compose 会同时启动三个容器:
- infisical-backend:主服务,Web 界面和 API 都由它提供,对外只暴露 80 端口
- infisical-db:
postgres:14-alpine,存密钥元数据和账号信息,挂了pg_isready健康检查,编排文件里 backend 会等它报告 healthy 才启动 - infisical-dev-redis:Redis,承担缓存与队列,配了
ALLOW_EMPTY_PASSWORD=yes用于内网互通
首次运行要拉取镜像,耗时取决于网络;之后看到infisical-backend | listening之类的日志输出,说明后端已经就绪。
四、三分钟确认部署成功
- 浏览器访问http://localhost:80,首次进入是注册引导页——创建管理员账号,随后按提示初始化组织和第一个项目。能走到这一步,数据库初始化、前端静态资源、后端 API 三个环节就全部打通了。
- 回到终端,用
docker compose -f docker-compose.prod.yml ps看一眼状态:backend 应为running,db 应为running (healthy)。 - 有东西不对劲时,
docker compose -f docker-compose.prod.yml logs -f backend看实时日志,八成能直接定位到原因。
五、从控制台到容器:给应用接上密钥
5.1 在控制台建好第一个密钥
登录后点New Project建一个项目(比如my-first-project),选定环境(development / production 等),然后Add Secret填入DB_PASSWORD和对应值,保存。接下来在项目的 Token 入口创建一个作用域限定在该环境的 Token——它就是应用访问密钥的"门禁卡",泄露风险远低于直接分发密钥本身。
5.2 用 CLI 把密钥注入容器
官方文档里给了一条最省事的接入路径:在应用镜像里装 Infisical CLI,启动时自动拉取密钥并注入为环境变量。以 Alpine 基础镜像为例:
FROM alpine # 安装 Infisical CLI(Alpine 版) RUN apk add --no-cache bash sudo wget && wget -qO- \ 'https://artifacts-cli.infisical.com/setup.apk.sh' | sh \ && apk add infisical COPY . /app WORKDIR /app # 启动命令前缀 infisical run,密钥自动注入为环境变量 CMD ["infisical", "run", "--", "npm run start"]构建并运行时,把 5.1 里创建的 Token 通过INFISICAL_TOKEN环境变量传进去:
docker build -t my-app . docker run --env INFISICAL_TOKEN=<your_token> my-app容器里的应用代码一行不用改,process.env.DB_PASSWORD之类就能直接读到值。Debian/Ubuntu、RHEL 系基础镜像对应的安装写法,都收录在 docs/documentation/getting-started/docker.mdx 里,照抄即可。
六、跑起来之后,这些能力值得单独体验
密钥版本控制与定点恢复:每次修改密钥都会留痕,支持回看历史版本、对比差异,还能做 Point-in-Time Recovery,误操作把密钥改坏了可以直接回滚到某个时间点。相关说明见 secret-versioning 与 pit-recovery。
密钥轮换与泄露扫描:平台可对 PostgreSQL、MySQL、AWS IAM 等服务的凭据做定期自动轮换;CLI 侧的infisical scan能扫描文件、目录和 git 仓库里 140 多种密钥类型,infisical scan install --pre-commit-hook装好钩子后,密钥在 push 前就会被拦下来,从源头防泄露。用法见 cli/scanning-overview。
细粒度访问控制:项目成员可以按只读/编辑/管理分配权限,机器身份则支持 RBAC、临时访问、审批工作流等更细的授权方式,审计日志记录平台上每一次操作。
七、翻车现场自救手册
| 现象 | 先查什么 |
|---|---|
| 页面打不开,backend 反复重启 | docker compose -f docker-compose.prod.yml ps看 db 是否达到healthy——backend 会等数据库健康检查通过才启动,数据库起不来它就一直卡着 |
| 容器直接起不来 | docker compose -f docker-compose.prod.yml logs -f看报错;九成是.env没复制或ENCRYPTION_KEY/AUTH_SECRET被清空 |
| 应用里读不到密钥 | 依次核对:INFISICAL_TOKEN是否传入、Token 作用域是否覆盖目标环境、启动命令是否带了infisical run前缀 |
| 想清空重来 | docker compose -f docker-compose.prod.yml down停止服务;数据卷pg_data、redis_data删掉后重新up即为全新实例 |
更多部署选项(Kubernetes Helm、单机裸金属、云上托管)和加固建议,在 self-hosting/overview.mdx 里有完整清单。
八、延伸:继续深入的方向
- CLI 全部子命令与
infisical run的进阶用法:docs/cli/usage.mdx - 把 Infisical 接到 Kubernetes 负载上:helm-charts/ 下提供了官方 Chart
- 想用 API 而不是控制台操作:docs/api-reference/ 覆盖全部接口
- 密钥同步到 GitHub、Vercel、AWS 等平台的集成清单:docs/integrations/
到这里,一套跑在自己机器上的开源密钥管理平台就完整落地了:三容器编排、一个.env、三条命令,之后的事情——建密钥、发 Token、接应用——都在控制台里点完。
【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考