30分钟上手Yearning开发环境:从源码到贡献的完整指南
你是否曾因复杂的开源项目环境配置望而却步?作为SQL审计与优化领域的开源工具,Yearning(项目路径)提供了本地化部署的SQL注入检测与防御能力。本文将通过Docker容器化方案和手动编译两种路径,带你快速搭建开发环境,30分钟内实现从源码拉取到成功运行的全流程,并掌握参与开源贡献的关键步骤。
环境准备:核心依赖清单
开发Yearning前需确保系统已安装以下工具:
- Git 2.30+:用于代码版本控制
- Go 1.18+:项目主开发语言(src/service/yearning.go为程序入口)
- Docker & Docker Compose:容器化部署依赖
- MySQL 5.7/8.0:存储审计规则与用户数据(model/db.go定义数据库交互)
方案一:Docker容器化部署(推荐新手)
1. 源码拉取与目录结构
git clone https://gitcode.com/gh_mirrors/ye/Yearning.git
cd Yearning
项目核心目录说明:
- docker/:容器化配置文件存放路径
- src/handler/:核心业务逻辑层,包含SQL审计(order/audit/audit.go)、用户管理(manage/user/user.go)等模块
- conf.toml.template:配置文件模板,需复制为
conf.toml使用
2. 一键启动开发环境
使用Docker Compose实现服务编排,自动完成数据库初始化与应用启动:
cd docker
docker-compose up -d
上述命令会启动两个容器:
- MySQL数据库(初始化脚本见docker-compose.yml第21-32行)
- Yearning应用服务(环境变量配置见docker/README.md)
3. 验证部署结果
访问http://localhost:8000,使用默认账号admin/密码Yearning_admin登录,成功进入仪表盘界面:
方案二:手动编译部署(适合高级开发)
1. 配置文件准备
复制模板配置并修改数据库连接信息:
cp conf.toml.template conf.toml
vi conf.toml # 设置mysql_addr、mysql_user等参数
2. 数据库初始化
# 创建数据库
mysql -u root -p -e "CREATE DATABASE yearning DEFAULT CHARSET utf8mb4"
# 执行 schema 迁移
go run main.go install
数据库模型定义在src/model/modal.go,包含用户、审计规则等核心表结构。
3. 本地编译与运行
# 解决依赖
go mod tidy
# 编译可执行文件
go build -o Yearning main.go
# 启动开发服务器
./Yearning run
程序启动后会加载src/router/router.go定义的API路由,可通过curl http://localhost:8000/api/v1/health验证服务状态。
核心功能开发示例
SQL审计模块开发
Yearning的SQL审计功能通过src/handler/order/audit/impl.go实现规则校验。添加自定义审计规则步骤:
- 在
CheckSQL函数中添加新的规则判断逻辑 - 更新前端审计界面展示(对应img/audit.png中的规则检查项)
- 编写单元测试(参考src/handler/order/osc/osc.go测试用例)
AI助手功能调试
项目的AI文本转SQL功能(src/handler/fetch/ai.go)支持自然语言生成SQL:
开发调试时需在conf.toml中配置LLM服务地址,通过修改src/lib/calls/rpc.go中的API调用逻辑适配不同模型。
参与开源贡献:从调试到PR
1. 代码规范与提交信息
- 遵循Go语言规范(参考cmd/cmd.go的命令行参数定义风格)
- 提交信息格式:
[模块名] 功能说明,例如[audit] 添加SQL注入检测规则
2. 调试与测试
- 单元测试文件命名规范:
xxx_test.go(如migration/migrate_test.go) - 前端界面调试可修改
src/handler/下的模板渲染逻辑
3. 贡献流程
- Fork项目仓库到个人账号
- 创建特性分支:
git checkout -b feature/sql-audit-enhance - 提交代码并推送:
git push origin feature/sql-audit-enhance - 在GitCode平台发起Pull Request,关联相关Issue
常见问题排查
数据库连接失败
- 检查conf.toml中的
mysql_addr配置是否正确 - Docker部署时确认MySQL容器状态:
docker ps | grep mysql
编译错误
- 执行
go clean -modcache清理模块缓存 - 检查Go版本是否符合go.mod中
go 1.18的要求
总结与后续学习路径
通过本文你已掌握:
下一步推荐:
- 深入学习SQL解析逻辑:src/handler/order/query/query.go
- 研究RBAC权限控制实现:src/lib/permission/permission.go
欢迎在项目LICENSE许可范围内提交改进,一起完善这个SQL审计与防御工具的生态!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





