一个用Go语言实现的环境管理切换命令行工具,支持多项目、多环境配置管理,可以快速切换不同环境的配置文件。同时提供Web界面进行可视化管理。
- 项目管理:创建、列出、查看、删除项目
- 环境管理:在项目下创建、修改、删除环境配置
- 文件切换:根据环境配置替换系统中的指定文件
- Web界面:提供HTTP服务,支持Web端管理
- 备份恢复:自动备份原文件,支持一键回滚
- 安全保障:文件操作前验证权限,确保安全性
- 轻量级:单一二进制文件,无外部依赖
- 跨平台:支持Windows、Linux、macOS
- 数据持久化:JSON文件存储,简单可靠
- RESTful API:完整的API接口
- 实时状态:WebSocket支持实时状态更新
使用 Go 的内置包管理器一键安装,这是最简单、最快捷的安装方式:
go install github.com/zoyopei/envswitch@latest要求:
- Go 1.21 或更高版本
- 确保
$GOPATH/bin(通常是~/go/bin) 在您的 PATH 环境变量中
验证安装:
envswitch --help您应该看到命令帮助信息,确认安装成功。
Web 服务测试:
envswitch server --port 8080然后在浏览器中访问 http://localhost:8080 验证 Web 界面正常工作。
注意:从 v1.x 版本开始,所有静态文件和模板都已嵌入到二进制文件中,通过
go install安装后可以直接使用,无需额外的文件依赖。
curl -sfL https://github.com/zoyopei/envswitch/releases/latest/download/install.sh | sh在 Releases 页面下载适合您系统的二进制文件。
git clone https://github.com/zoyopei/envswitch.git
cd envswitch
go mod tidy
go build -o envswitch .# 首次运行会自动创建配置文件
envswitch project list# 创建一个新项目
envswitch project create myapp --description="我的应用项目"
# 设置为默认项目
envswitch project set-default myapp# 在项目中创建开发环境
envswitch env create myapp dev --description="开发环境" --tags="development,local"
# 创建生产环境
envswitch env create myapp prod --description="生产环境" --tags="production"# 为开发环境添加配置文件
envswitch env add-file myapp dev ./config/dev.json ./app/config.json --description="开发配置文件"
# 为生产环境添加配置文件
envswitch env add-file myapp prod ./config/prod.json ./app/config.json --description="生产配置文件"# 切换到开发环境
envswitch switch myapp dev
# 或者使用默认项目(如果已设置)
envswitch switch dev
# 查看当前状态
envswitch status# 启动Web界面(默认端口8080)
envswitch server
# 指定端口
envswitch server --port 9090
# 后台运行
envswitch server --daemon然后在浏览器中访问 http://localhost:8080
# 创建项目
envswitch project create <name> [--description="描述"]
# 列出所有项目
envswitch project list
# 查看项目详情
envswitch project show <name>
# 删除项目
envswitch project delete <name> [--force]
# 设置默认项目
envswitch project set-default <name># 创建环境
envswitch env create <project> <env-name> [--description="描述"] [--tags="tag1,tag2"]
# 列出环境
envswitch env list [project]
# 查看环境详情
envswitch env show <project> <env-name>
# 修改环境
envswitch env update <project> <env-name> [--description="新描述"] [--tags="tag1,tag2"]
# 删除环境
envswitch env delete <project> <env-name> [--force]
# 添加文件配置
envswitch env add-file <project> <env-name> <source> <target> [--description="描述"]
# 移除文件配置
envswitch env remove-file <project> <env-name> <file-id># 切换到指定环境
envswitch switch <project> <env-name>
# 快速切换(使用默认项目)
envswitch switch <env-name>
# 预览模式(不实际执行)
envswitch switch <env-name> --dry-run
# 查看当前环境状态
envswitch status
# 回滚到切换前状态
envswitch rollback [backup-id] [--force]# 启动Web服务
envswitch server [--port=8080] [--daemon]# 显示当前配置
envswitch config show
# 设置配置项
envswitch config set <key> <value>
# 支持的配置项
envswitch config set data_dir <路径> # 数据目录路径
envswitch config set backup_dir <路径> # 备份目录路径
envswitch config set web_port <端口> # Web服务端口
envswitch config set default_project <项目名> # 默认项目
envswitch config set enable_data_dir_check <true/false> # 数据目录检查
# 迁移数据目录
envswitch migrate-datadir <new-directory>GET /api/projects- 获取所有项目POST /api/projects- 创建项目GET /api/projects/{id}- 获取项目详情PUT /api/projects/{id}- 更新项目DELETE /api/projects/{id}- 删除项目
GET /api/projects/{project-id}/environments- 获取项目下的所有环境POST /api/projects/{project-id}/environments- 创建环境GET /api/environments/{id}- 获取环境详情PUT /api/environments/{id}- 更新环境DELETE /api/environments/{id}- 删除环境
POST /api/switch- 切换环境GET /api/status- 获取当前状态POST /api/rollback- 回滚
envswitch/
├── cmd/ # CLI命令实现
├── internal/ # 内部包
├── web/ # Web界面资源
└── main.go # 主程序入口
用户数据目录 (~/.envswitch/):
├── data/ # 数据存储目录
│ └── projects/ # 项目文件存储
├── backups/ # 备份目录
└── config.json # 配置文件
配置文件位置:
- 当前目录:
./config.json - 用户目录:
~/.envswitch/config.json
默认配置:
{
"data_dir": "~/.envswitch/data",
"backup_dir": "~/.envswitch/backups",
"web_port": 8080,
"default_project": "",
"original_data_dir": "~/.envswitch/data",
"data_dir_history": [],
"enable_data_dir_check": true
}注意:
- 数据和备份目录默认存储在用户主目录的
.envswitch文件夹中 - 这样可以避免在临时目录中存储重要数据
- 支持跨项目共享配置和数据
为了防止用户意外修改配置文件中的 data_dir 导致数据丢失,envswitch 提供了强大的数据目录保护机制:
- 自动检测:检测数据目录变更并评估风险
- 数据验证:检查当前目录是否包含项目数据
- 用户确认:如有数据存在,需要用户明确确认操作
- 历史记录:记录所有历史数据目录路径
- 自动备份:迁移前自动创建完整备份
- 安全迁移:完整迁移所有项目和环境数据
- 回滚支持:支持从备份中恢复数据
# 查看当前配置
envswitch config show
# 安全修改数据目录
envswitch config set data_dir /new/path
# 启用/禁用数据目录检查
envswitch config set enable_data_dir_check true
# 快速迁移数据目录
envswitch migrate-datadir /new/path当检测到数据目录变更时,系统会提供三个选项:
- 取消更改 (推荐) - 保持现状,不进行任何更改
- 迁移数据 - 将所有数据安全迁移到新目录
- 强制更改 - 仅更改路径,原数据保持不变
迁移过程:
⚠️ 危险操作: 检测到数据目录变更!
当前数据目录: data (包含项目数据)
新数据目录: new-data
🔥 警告: 更改数据目录将导致无法访问当前的所有项目和环境数据!
可选操作:
1. 取消更改 (推荐)
2. 迁移数据到新目录
3. 强制更改 (当前数据将丢失)
请选择操作 (1/2/3): 2
🔄 开始迁移数据...
📦 创建数据备份到: data_backup_20250729_150405
📁 迁移数据...
✅ 数据迁移完成!- 文件路径验证,防止路径遍历攻击
- 权限检查,确保有足够权限操作目标文件
- 原子操作,确保文件替换的原子性
- 自动备份,切换前备份原文件
- 数据目录保护:防止意外修改导致数据丢失
- 变更检测:自动检测配置文件中的危险变更
- 交互确认:重要操作需要用户明确确认
- 自动备份:数据迁移前自动创建完整备份
- 历史追踪:记录所有数据目录变更历史
- 回滚支持:支持从备份恢复数据
- CSRF防护
- 输入验证和清洗
- 可配置的访问控制
- Go 1.21+
- Git
# 克隆项目
git clone https://github.com/zoyopei/envswitch.git
cd envswitch
# 安装依赖
go mod tidy
# 运行测试
go test ./...
# 开发模式运行
go run main.go
# 构建
go build -o envswitchcmd/- CLI命令定义internal/- 核心业务逻辑web/- Web界面相关文件docs/- 项目文档
# 创建项目
envswitch project create webapp --description="Web应用项目"
# 创建环境
envswitch env create webapp dev --description="开发环境"
envswitch env create webapp test --description="测试环境"
envswitch env create webapp prod --description="生产环境"
# 添加package.json配置
envswitch env add-file webapp dev ./configs/dev/package.json ./package.json
envswitch env add-file webapp test ./configs/test/package.json ./package.json
envswitch env add-file webapp prod ./configs/prod/package.json ./package.json
# 添加环境变量文件
envswitch env add-file webapp dev ./configs/dev/.env ./.env
envswitch env add-file webapp test ./configs/test/.env ./.env
envswitch env add-file webapp prod ./configs/prod/.env ./.env
# 切换到开发环境
envswitch switch webapp dev
# 切换到生产环境
envswitch switch webapp prod# 创建数据库项目
envswitch project create database --description="数据库配置管理"
# 创建环境
envswitch env create database local --description="本地数据库"
envswitch env create database staging --description="预发布数据库"
envswitch env create database production --description="生产数据库"
# 添加数据库配置文件
envswitch env add-file database local ./db-configs/local.conf ./etc/database.conf
envswitch env add-file database staging ./db-configs/staging.conf ./etc/database.conf
envswitch env add-file database production ./db-configs/production.conf ./etc/database.conf
# 切换数据库环境
envswitch switch database productiongit clone https://github.com/zoyopei/envswitch.git
cd envswitch
go mod download
# 运行应用
go run . --help
# 启动开发服务器
go run . server --port 8080# 本地构建
make build
# 交叉编译
make cross-compile
# 使用 Go 直接构建
go build -o envswitch .# 运行所有测试
make test
# 运行测试并生成覆盖率报告
make test-coverage
# 直接使用 Go
go test ./...# 运行代码检查
make lint
# 格式化代码
make format欢迎贡献代码!请遵循以下步骤:
- Fork 本仓库
- 创建 feature 分支 (
git checkout -b feature/amazing-feature) - 提交更新 (
git commit -m 'Add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 创建 Pull Request
- 请确保所有测试通过
- 遵循 Go 代码规范
- 添加适当的单元测试
- 更新相关文档
- Pull Request 应包含清晰的描述
详细信息请查看 CONTRIBUTING.md。
本项目使用 GitHub Actions 进行持续集成和部署:
- CI: 自动运行测试、代码检查和构建
- Release: 自动构建多平台二进制文件并发布
- CodeQL: 安全性代码分析
如果您发现安全性漏洞,请不要在公开 GitHub Issues 中报告。请发送邮件至:[email protected]
- 文件路径验证防止目录遍历攻击
- 自动备份机制防止数据丢失
- 配置文件权限检查
- Web 界面 CSRF 保护(计划中)
- 支持配置文件模板
- 添加环境变量管理
- 支持远程配置存储
- 集成更多第三方工具
- 添加插件系统
- GUI 桌面应用
本项目基于 MIT 许可证开源 - 查看 LICENSE 文件了解详情。
如果您觉得这个项目有用,请给它一个 ⭐️!