使用 infisical 管理和同步环境变量

繁琐的叭叭

在我过往的工作中,管理和共享 .env 配置的环境变量依靠的是编写 .env.example 和手动相互同步,不同环境区分环境变量依靠的是 vite 的 .env.[mode],当服务部署到线上时,还需要维护 docker 容器的环境变量。随着环境变量和环境增长,需要维护的内容越来越多,在协作时常出现环境变量配置不统一的问题。

在 Java 同事那边看到了 Nacos,也同步评估过携程的 Apollo,看完之后感觉能用平台进行配置管理和热更新真的太方便了。但是这两个都需要使用专门的 Client,适配到业务里成本可观。项目里使用的 dotenv 有 dotenv-valut ,但服务端是不可自托管的。

综上所述,我想要 适配侵入性低 + 区分环境 + 可自托管 的管理和同步环境变量工具。Infisical 满足了我的需求(绝对没有被产品自适应嗷)

What is Infisical?

What is Infisical? - Infisical

Infisical 是一个开源的密钥管理平台,开发者用它来集中管理他们的应用程序配置和密钥,如 API 密钥和数据库凭证,以及管理内部公钥基础设施(PKI)。此外,开发者使用 Infisical 来防止密钥泄露到 git,并安全地在工程师之间共享密钥。 ------ Infisical Introduction

这是我将配置全部导入 Infisical 之后的样子,将配置进行目录分类,对不同环境应用不同的配置。相比于满屏的 .env,体验友好不少。

自托管部署

自托管部署 Infisical 需要 PostgreSQL + Redis,我的环境里有专门的 pgsql server,再创建一个 Redis 容器就好。docker-compose 部署文档可以参考 ,我写的 docker-compose 也可以供参考。

SMTP 不是必要配置,但是不配置的话无法发送组织的邀请加入邮件和 MFA 验证码。

ini 复制代码
version: "3"

services:
  infisical:
    image: infisical/infisical:latest-postgres
    restart: always
    ports:
        - 80:8080
    extra_hosts:
      - pgsql:host-gateway
    environment:
      - ENCRYPTION_KEY=
      - AUTH_SECRET=
      - SITE_URL=
      - DB_CONNECTION_URI=postgresql://username:password@host:port/database
      - REDIS_URL=redis://redis:6379/0
      - SMTP_HOST=
      - SMTP_PORT=587
      - SMTP_USERNAME=
      - SMTP_ADDRESS=
      - SMTP_PASSWORD=
    depends_on:
      - redis

  redis:
    image: redis:7.0-alpine
    restart: always

一点使用的小 Tips

创建账户时,会下载 Infisical Emergency Kit.pdf ,其中的 SECRET KEY 是账户恢复的必要凭据。如果没有好好保存,就不能找回密码了= =

部署完毕之后就是常规的创建组织 -> 创建项目 -> 管理密钥,点选对应环境下的 Explore 按钮可以对选中环境单独配置(在 Explore 中可以直接导入 .env 文件)

Infisical CLI

这里可以查看 Infisical 支持的框架:infisical.com/docs/integr...

一般情况下在机器上使用 CLI - Infisical 即可完成配置注入,CLI 支持使用账号密码登陆和机器专用部署凭证登陆。

登陆 Infisical

infisical login - Infisical

  1. 在终端中输入

    infisical login

  2. 选择 Infisical 的运行版本(可选公共服务和自托管)

scss 复制代码
(base) aurora@MacBook-Pro ~ % infisical login
Use the arrow keys to navigate: ↓ ↑ → ← 
? Select your hosting option: 
  ▸ Infisical Cloud
    Self Hosting
  1. 输入自托管的 Infisical 域名
scss 复制代码
(base) aurora@MacBook-Pro ~ % infisical login
✔ Override current logged in user
✔ Self Hosting
✗ Domain: example - https://my-self-hosted-instance.com
  1. 输入账号密码或直接在浏览器中登陆(默认)
vbnet 复制代码
✔ Override current logged in user
✔ Self Hosting
Domain: https://my-self-hosted-instance.com
Logging in via browser... To login via interactive mode run [infisical login -i]
>>>> Welcome to Infisical! You are now logged in as example@example.com <<<< 

Quick links
- Learn to inject secrets into your application at https://infisical.com/docs/cli/usage
- Stuck? Join our slack for quick support https://infisical.com/slack

如果需要在终端中完成登陆和选择组织,使用

scss 复制代码
(base) aurora@MacBook-Pro ~ % infisical login -i
✔ Override current logged in user
✔ Self Hosting
Domain: https://my-self-hosted-instance.com
Enter Credentials...
Email: example@example.com
Password: *************************
✔ Example Organization
>>>> Welcome to Infisical! You are now logged in as example@example.com <<<< 

Quick links
- Learn to inject secrets into your application at https://infisical.com/docs/cli/usage
- Stuck? Join our slack for quick support https://infisical.com/slack

应用 Infisical

在项目中,第一步需要运行 infisical init 命令,将项目目录与 Infisical 的项目关联。

vbnet 复制代码
(fastapi-playground) aurora@MacBook-Pro fastapi-playground % infisical init
? Which Infisical organization would you like to select a project from?: 
✔ Example Organization
Use the arrow keys to navigate: ↓ ↑ → ← 
? Which of your Infisical projects would you like to connect this project to?: 
  ▸ fastapi-playground

infisical.com/docs/integr... 可以查找到框架的对应应用方法。通常来说,只需要在 CLI 的 run 参数之后加上原本的项目运行命令即可。

如果在 Infisical 中使用了目录分类管理配置,可以在 CLI 中指定 --path 参数加载对应目录下的配置,也可以使用 --recursive 递归加载目录下的所有配置。

css 复制代码
# 加载根目录下的所有配置(会递归加载所有子目录中的配置)
infisical run --recursive python app.py

# 如果是 MonoRepo 的话,配合 path 参数使用
infisical run --path "/a-repo" --recursive python app.py

Done,配置就被注入了~ 在原有的项目中仍然以平常使用 env 的方式使用配置即可。

拓展

在 TypeScript 和 Python Typing 中,我当然希望环境变量配置也可以有准确的类型定义和 required 检查,可以使用两个包

相关推荐
桂月二二34 分钟前
探索前端开发中的 Web Vitals —— 提升用户体验的关键技术
前端·ux
Ai 编码助手2 小时前
在 Go 语言中如何高效地处理集合
开发语言·后端·golang
小丁爱养花2 小时前
Spring MVC:HTTP 请求的参数传递2.0
java·后端·spring
Channing Lewis2 小时前
什么是 Flask 的蓝图(Blueprint)
后端·python·flask
hunter2062062 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
qzhqbb2 小时前
web服务器 网站部署的架构
服务器·前端·架构
刻刻帝的海角2 小时前
CSS 颜色
前端·css
浪浪山小白兔3 小时前
HTML5 新表单属性详解
前端·html·html5
轩辕烨瑾3 小时前
C#语言的区块链
开发语言·后端·golang
lee5763 小时前
npm run dev 时直接打开Chrome浏览器
前端·chrome·npm