PART 01. 概述
在数据库运维领域,SQL审核与查询的流程化、自动化一直是提升DBA与开发协作效率的关键。Archery,作为一款开源的SQL审核查询平台,正是为此而生。它致力于将SQL审核从人工、零散的操作,转变为标准化、可追溯的线上流程。接下来,我们将从部署到使用,再到两个常见的定制化改造,为你完整梳理基于Docker Compose的Archery实践路径。
PART 02. Docker Compose 部署
前提条件
部署前,请确保服务器已安装Docker和Docker Compose,并建议预留4GB以上的内存资源,以保证服务稳定运行。
快速部署步骤
首先,拉取项目代码:
git clone https://github.com/hhyo/Archery.git
cd Archery
接着,需要根据你的实际环境,编辑src/docker-compose/docker-compose.yml文件。核心是调整MySQL和Redis的连接信息:你可以选择连接已有的数据库服务,或者让Compose文件一并启动这些依赖。
配置完成后,启动所有服务:
docker compose up -d
服务启动后,为了后续定制化改造方便,建议将容器内的配置目录导出并挂载为数据卷:
docker cp archery:/opt/archery/common ./
docker cp archery:/opt/archery/sql/templates ./sql/
# 编辑docker-compose.yml,在archery服务下添加卷挂载
volumes:
- "./archery/common:/opt/archery/common"
添加挂载后,重启服务使配置生效:
docker compose down
docker compose up -d
容器重新启动后,首次部署必须执行数据库初始化:
docker exec -ti archery /bin/bash
cd /opt/archery
source /opt/venv4archery/bin/activate
python3 manage.py makemigrations sql
python3 manage.py migrate
python3 manage.py dbshell
最后,创建一个管理员账户,并通过浏览器访问https://服务器IP:9123即可登录平台。
python3 manage.py createsuperuser
PART 03. 相关配置
系统配置
登录后,进入“系统管理” > “配置项管理” > “系统设置”,这里集中了平台的核心配置,包括数据库备份、邮件服务器、消息通知等。
1. goInception 配置(用于对修改的数据进行备份,已集成在docker-compose.yaml中)
这里主要配置goInception服务的连接信息以及用于备份的MySQL实例信息。配置项包括GO_INCEPTION_HOST/PORT,以及BACKUP_HOST/PORT/USER/PASSWORD。

2. SQL优化
Archery集成了SQLAdvisor和SOAR两款SQL优化工具。你只需要在配置中指定它们的路径和测试连接信息即可启用。Docker镜像已内置相关组件。
- SQLADVISOR_PATH: /opt/archery/src/plugins/sqladvisor
- SOAR_PATH: /opt/archery/src/plugins/soar
- SOAR_TEST_DSN: root:密码@服务器IP:3306/archery

3. 工单通知
为了确保工单状态能及时通知到相关人员,需要配置平台基础URL和通知权限组。
- ARCHERY_BASE_URL: https://archery.internal.cn(请替换为你的实际域名)
- DDL_NOTIFY_AUTH_GROUP: DBA(指定接收DDL工单通知的权限组)

4. 其他配置
这部分包含一些增强功能和平台自定义设置。
- MY2SQL: 用于高性能解析MySQL binlog的工具,路径已预设。
- DEFAULT_AUTH_GROUP/RESOURCE_GROUP: 设置新用户的默认权限组和资源组。
- CUSTOM_TITLE_SUFFIX: 自定义平台浏览器标签页显示的标题后缀。

工单审核流程配置
流程化管理是Archery的核心。在“系统管理” > “配置项管理” > “工单审核流配置”中,可以为不同的资源组(需先创建)配置查询、SQL上线、数据归档等工单的审批流程。支持设置多级审批,下图展示了为“DBA”组配置流程的示例。

PART 04. 使用流程
1. 创建资源组,比如prod

2. 修改Default组权限
为新创建的“Default”权限组添加必要的菜单权限(如数据字典、SQL查询)和操作权限(如提交查询、提交上线工单)。

3. 添加数据库实例
将需要管理的数据库实例添加到Archery中。填写连接信息,选择所属资源组(如prod),并建议取消勾选“验证服务端SSL证书”以避免连接问题。

4. 创建用户
创建平台用户,为其分配“Default”权限组和“prod”资源组。

5. 用户登录后进行在线查询

6. 缺少权限则提交申请
如果用户对某个实例没有查询权限,可以在线提交权限申请工单,走预先配置好的审批流程。

PART 05. 定制化改造
调整查询权限的授权时间选项
Archery默认的查询权限授权时间选项中,“长期”对应一年,这在某些内部安全要求较高的场景下可能显得过长。一个常见的需求是将其调整为更短的时间,例如三个月。
改造目标:将前端展示的“长期(一年)”选项调整为“三个月”,并将实际有效期设置为90天。
改造步骤:
a. 修改前端HTML模板
找到文件 ./archery/sql/templates/queryapplylist.html,定位到授权时间下拉框部分,将“一年”的选项文本改为“三月”。
b. 修改对应的JavaScript逻辑
在同一文件中,找到处理提交的applyvalidate()函数,修改其中对year值的计算逻辑,将实际授权天数从365天改为90天。
if (applyvalidate()) {
//时间格式化
var date = new Date();
if (valid_date === 'day') {
valid_date = addDate(date, 1);
} else if (valid_date === 'week') {
valid_date = addDate(date, 7);
} else if (valid_date === 'month') {
valid_date = addDate(date, 30);
} else if (valid_date === 'year') {
valid_date = addDate(date, 90); // 将365改为90
} else {
valid_date = addDate(date, 1);
}
...
修改完成后,重启Archery的Web服务(例如执行docker compose restart archery)以使改动生效。
使邮件通知支持 TLS 加密
当使用Outlook、Gmail等要求TLS加密的邮件服务器时,需要改造Archery的邮件发送逻辑以支持STARTTLS命令。
改造目标:使Archery能够通过TLS加密连接(如587端口)发送邮件。
改造步骤:
a. 修改 MsgSender 类
编辑文件./archery/common/utils/sendmsg.py,在__init__方法中增加MAIL_TLS配置项,并在send_email方法中增加启动TLS的逻辑。
class MsgSender(object):
def __init__(self, **kwargs):
if kwargs:
...
self.MAIL_TLS = kwargs.get("tls", True) # 新增:默认开启 TLS
else:
sys_config = SysConfig()
# email信息
...
self.MAIL_TLS = sys_config.get("mail_tls", True) # 新增:从配置读取
# 端口逻辑调整
if self.MAIL_REVIEW_SMTP_PORT:
self.MAIL_REVIEW_SMTP_PORT = int(self.MAIL_REVIEW_SMTP_PORT)
elif self.MAIL_SSL:
self.MAIL_REVIEW_SMTP_PORT = 465
elif self.MAIL_TLS:
self.MAIL_REVIEW_SMTP_PORT = 587 # TLS 默认端口
else:
self.MAIL_REVIEW_SMTP_PORT = 25
def send_email(self, subject, body, to, **kwargs):
...
if self.MAIL_SSL:
server = smtplib.SMTP_SSL(self.MAIL_REVIEW_SMTP_SERVER, self.MAIL_REVIEW_SMTP_PORT, timeout=3)
else:
server = smtplib.SMTP(self.MAIL_REVIEW_SMTP_SERVER, self.MAIL_REVIEW_SMTP_PORT, timeout=30)
if kwargs.get("debug", False):
server.set_debuglevel(1)
if self.MAIL_TLS: # 新增:启用TLS加密
try:
server.starttls()
logger.debug("TLS 加密已启用")
except Exception as e:
logger.warning(f"TLS 启动失败: {e},继续使用普通连接")
b. 在 Archery 管理界面配置TLS邮件
进入“系统管理” > “配置项管理” > “系统设置”,在工单通知部分配置:
- MAIL: 切换为ON
- MAIL_SSL: 切换为OFF(使用TLS时通常关闭SSL)
- MAIL_SMTP_SERVER/PORT: 填写服务器地址和端口(如587)
- MAIL_SMTP_USER/PASSWORD: 填写发件邮箱凭据
c. 测试邮件功能
配置保存后,使用旁边的“测试连接”功能发送一封测试邮件,验证配置是否正确。
PART 06. 总结
通过上述步骤,我们完成了Archery从Docker Compose一键部署、基础配置与使用流程的讲解,并深入探讨了“调整查询授权时间”和“添加邮件TLS支持”两个实际改造案例。这些工作使得Archery不仅能快速搭建起来,还能更好地适应企业内部特定的安全和流程要求,真正成为一个得心应手的SQL运维管控平台。
