从.env文件迁移到fnox+1PasswordSkill env-to-fnox

这个技能指导如何将.env文件中的环境变量和秘密迁移到fnox和1Password中,实现安全的秘密管理,优化开发工作流程。关键词包括:.env迁移、fnox配置、1Password集成、秘密管理、DevOps工具、环境变量管理。

DevOps 0 次安装 0 次浏览 更新于 3/19/2026

name: 从.env到fnox description: 当用户想要从.env文件迁移到fnox和1Password(或其他秘密提供者)时,应使用此技能。它包括安装fnox、创建1Password项目、配置fnox.toml和集成mise。当用户提到".env迁移"、“fnox设置”、"1password秘密"或想要改进他们的秘密管理工作流程时使用。

从.env迁移到fnox + 1Password

这个技能指导从明文.env文件迁移到使用1Password作为秘密提供者的fnox。fnox是提供者无关的,支持多个后端(1Password、AWS Secrets Manager、Azure Key Vault、HashiCorp Vault、age加密等)。

先决条件

在开始之前,验证:

  1. 1Password CLI已安装:op --version
  2. 用户已认证到1Password:op vault list
  3. mise已安装(可选但推荐):mise --version

迁移工作流

步骤1:分析现有.env

读取现有的.env文件以了解需要迁移的秘密:

cat .env

对秘密进行分类:

  • 云提供商凭证 (AWS_, ARM_, GOOGLE_*)
  • API令牌 (CLOUDFLARE_, GITHUB_, etc.)
  • 应用秘密 (DATABASE_URL, API_KEY, etc.)
  • 配置值 (非秘密默认值如区域)

步骤2:安装fnox

通过mise安装fnox(推荐):

mise use fnox

或添加到mise.toml

[tools]
fnox = "latest"

初始化fnox配置:

mise exec -- fnox init
mise exec -- fnox provider add op 1password

步骤3:创建1Password项目

创建一个包含所有秘密的单个1Password项目。使用API凭证类别以进行组织:

op item create \
  --category="API Credential" \
  --title="project-name" \
  --vault="Private" \
  'Field Name[text]=value' \
  'Secret Field[password]=secret-value'

字段命名约定:

  • 使用描述性名称:“AWS Access Key ID”而不是“aws_key”
  • 使用[text]表示非敏感值(ID、区域、电子邮件)
  • 使用[password]表示敏感值(秘密、令牌、密钥)

典型项目示例:

op item create \
  --category="API Credential" \
  --title="myproject" \
  --vault="Private" \
  'AWS Access Key ID[text]=AKIA...' \
  'AWS Secret Access Key[password]=...' \
  'Database URL[password]=postgres://...' \
  'API Token[password]=...'

步骤4:配置fnox.toml

更新fnox.toml以引用1Password项目:

[providers.op]
type = "1password"
vault = "Private"

[secrets]
# 格式:ENV_VAR = { provider = "op", value = "item-title/Field Name" }
AWS_ACCESS_KEY_ID = { provider = "op", value = "myproject/AWS Access Key ID" }
AWS_SECRET_ACCESS_KEY = { provider = "op", value = "myproject/AWS Secret Access Key" }
DATABASE_URL = { provider = "op", value = "myproject/Database URL" }

# 非秘密默认值不需要1Password
AWS_DEFAULT_REGION = { default = "us-east-1" }

步骤5:与mise集成

更新mise.toml以使用fnox而不是.env

[tools]
fnox = "latest"
# ... 其他工具

[env]
_.source = "fnox export"

移除旧的.env引用:

- _.file = ".env"
+ _.source = "fnox export"

步骤6:验证和清理

测试配置:

# 列出配置的秘密
mise exec -- fnox list

# 验证一个秘密可以检索
mise exec -- fnox get AWS_ACCESS_KEY_ID

# 测试完整环境
mise exec -- printenv | grep AWS_

一旦验证,删除旧的.env文件:

rm .env

提交fnox.toml(它不包含秘密,只包含引用):

git add fnox.toml mise.toml
git commit -m "将秘密从.env迁移到fnox + 1Password"

fnox.toml参考

提供商配置

# 1Password
[providers.op]
type = "1password"
vault = "Private"
# account = "my.1password.com"  # 可选:指定账户

# Age加密(用于git存储的加密秘密)
[providers.age]
type = "age"
recipients = ["age1..."]

# AWS Secrets Manager
[providers.aws]
type = "aws-sm"
region = "us-east-1"
prefix = "myapp/"

秘密引用格式

[secrets]
# 1Password:item-title/field-name
SECRET = { provider = "op", value = "myproject/Secret Field" }

# 1Password:完整的op:// URI
SECRET = { provider = "op", value = "op://Vault/Item/Field" }

# 默认值(不需要提供商)
REGION = { default = "us-east-1" }

# Age-encrypted value
SECRET = { provider = "age", value = "YWdlLWVu..." }

多环境配置文件

[providers.op]
type = "1password"
vault = "Development"

[secrets]
DATABASE_URL = { provider = "op", value = "dev-db/url" }

[profiles.production.providers.op]
vault = "Production"

[profiles.production.secrets]
DATABASE_URL = { provider = "op", value = "prod-db/url" }

使用配置文件:FNOX_PROFILE=production fnox export

故障排除

“找不到配置文件”

运行fnox init以创建fnox.toml,或检查是否在正确的目录中。

1Password认证错误

确保已登录:op signin或检查1Password设置>开发者中是否启用了“与其他应用集成”。

秘密未在shell中加载

如果使用mise,确保已为项目目录运行mise trust

mise安装后找不到fnox命令

使用mise exec -- fnox或重启shell以获取新的PATH。