archery是什么?看看archery官网的介绍吧:https://archerydms.com/
是一个一站式的SQL审核平台,官网给的也有体验地址: https://demo.archerydms.com/login/
账号:archer 密码:archer
这是一个开源项目,所以公司使用的话,可以自己私有化部署。部署教程在archery的官方github仓库的Wiki界面有介绍:home · hhyo/Archery Wiki · GitHub
开始使用docker部署:
首先需要在你的云服务器上安装docker和docker compose
安装docker
安装docker compose
或者也可以参考这一篇博客:CentOS7 - Docker&Docker-Compose安装-CSDN博客
安装好docker之后,可以开始安装了,这里注意,第一个坑点来了
archery是一个python项目,注意在使用docker compose命令来执行docker-compose.yml配置文件安装镜像及启动容器时候,要按照Releases · hhyo/Archery · GitHub
官方仓库的release版本中的源码下载后,执行里边的docker-compose.yml,我第一次安装的时候是按照release中的source code(推荐下载Release v1.10.0),本地拉取代码进行二次开发建议拉取到4月12号的那一次提交,因为我上次就是4月中旬拉取的代码,各种报错问题我已经解决了;可参考我的这篇博客:Django项目无法安装python-ldap依赖解决方案_python-ldap安装失败-CSDN博客
就可以保证项目在本地可以正常启动,而我最近将代码更新到最新的时候,再次启动,又会提示各种依赖无法下载以及其他各种报错,所以我又reset到了没更新之前的那次提交,就可以正常本地启动项目了
下载到windows本地解压,上传到云服务器上,执行的时候不会报yml格式错误,但是后来我买的云服务器过期了,资源回收了,最近又要安装的时候,我直接把我本地的通过git clone拉下来的代码,上传到云服务器上,执行里边的docker-compose.yml,就会提示depends_on应该是一个数组
然后把这里边的配置粘贴到在线 yml格式验证网站也提示没有语法错误
然后又把release版本的source code下载后,进行对比,发现release版本的docker-compose.yml和直接拉取的代码的docker-compose.yml文件内容确实不一样
这个是release版本中的docker-compose.yml文件
把release项目文件上传到云服务后,就可以切换到docker-compose.yml所在的目录(项目所在目下的src/docekr-compose/)
然后执行命令
执行之后,就会提示错误
会提示拉取镜像失败,以及超时,这是因为默认的国外镜像访问不了了,此时需要配置国内的镜像源,网上很多网易的,还有一些大学的镜像也不太行,一些镜像也拉不了,可能是库不太全。找了很久,找到了一个比较全的镜像源的配置
在文件中添加:
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://hub.uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn",
"https://mirror.baidubce.com"
]
讲这些镜像都配置进去,然后重启一下docker
然后再次执行 docker compose -f docker-compose.yml up -d 就可以拉取成功镜像并自动创建4个容器启动这4个镜像了
然后开始初始化该项目的数据库表
以及创建超级管理员
然后重启服务
到云服务器控制台中的安全组策略中,将9123端口和3306端口放开,就可以在本机访问archery项目以及数据库了
账号和密码就是刚才设置的超级管理员
登录进去之后的界面
我们主要是为了用这个sql分析的功能来检查sql文件或者mybatis的mapper xml文件中的sql语句是否有语法错误或者性能问题。
这里也有一个坑,如果直接上传sql文件或者mapper文件,分析也会报错
查看docker日志:
会看到错误提示:
就是提示需要一个路径,但是却是None.
这是因为没有配置soar执行程序的路径,这个项目中的sql分析依赖了一个soar的可执行程序。
soar是小米的一个go语言项目,编译之后是一个可执行的程序
在系统的管理界面的系统管理-配置项管理里边配置上soar的路径(SOAR_PATH)即可
然后再次测试上传一个mapper xml文件就可以正常解析并输出分析报告了
由于这个分析功能的接口需要供替他项目调用,所以还需要去掉archery项目中的身份认证的拦截功能,去掉数据库中的权限数据配置等。去除认证和授权的相关修改是涉及到代码修改,准备后边再开一篇博客来写修改情况!写完博客,准备放松一下,玩一下最近最火的游戏黑神话悟空