本期推荐的是一个Archery 定位 SQL 审核查询平台。
介绍
Archery是archer的分支项目,定位于SQL审核查询平台,旨在提升DBA的工作效率,支持多数据库的SQL上线和查询,同时支持丰富的MySQL运维功能,所有功能都兼容手机端操作。
手动部署
安装Python和virtualenv
# 安装依赖
yum install wget gcc make zlib-devel openssl openssl-devel
wget "https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz"
tar -xvJf Python-3.6.5.tar.xz
# 编译
cd Python-3.6.5
./configure prefix=/usr/local/python3
make && make install
ln -fs /usr/local/python3/bin/python3 /usr/bin/python3
ln -fs /usr/local/python3/bin/pip3 /usr/bin/pip3
# virtualenv
pip3 install virtualenv -i https://mirrors.ustc.edu.cn/pypi/web/simple/
ln -fs /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
yum安装
# 安装EPEL源
yum install epel-release
# 安装python36、pip36
yum install python36 python36-pip
# virtualenv
pip3.6 install virtualenv -i https://mirrors.ustc.edu.cn/pypi/web/simple/
安装Archery
#准备虚拟环境
#编译安装python的使用
virtualenv venv4archery --python=python3
# yum安装的使用
virtualenv venv4archery --python=python3.6
# 切换python运行环境到虚拟环境
source venv4archery/bin/activate
修改配置
vi archery/settings.py
安全修改
请务必修改配置文件中的SECRET_KEY信息,该key用于敏感信息加密
基础配置
# 修改SECRET_KEY
# 关闭debug模式
DEBUG = False
# 设置ALLOWED_HOSTS,建议限制内网访问
ALLOWED_HOSTS = [
'.example.com', # Allow domain and subdomains
'.example.com.', # Also allow FQDN and subdomains
]
# 请求大小限制,如果提交SQL语句过大可以修改该值
DATA_UPLOAD_MAX_MEMORY_SIZE = 15728640
# 密码校验,用户注册和添加密码校验规则
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
'OPTIONS': {
'min_length': 9,
}
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
MySQL配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'archery', # 数据库名称
'USER': 'root', # 数据库用户
'PASSWORD': '', # 数据库密码
'HOST': '127.0.0.1', # 数据库HOST,如果是docker启动并且关联,可以使用容器名连接
'PORT': '3306', # 数据库端口
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", # SQL_MODE,为了兼容select * group by,可以按需调整
'charset': 'utf8mb4'
},
'TEST': {
'NAME': 'test_archery',
'CHARSET': 'utf8mb4',
},
}
}
启动
runserver启动(仅作为本地测试)
source /opt/venv4archery/bin/activate
#启动Django-Q,需保持后台运行
python3 manage.py qcluster
#启动服务
python3 manage.py runserver 0.0.0.0:9123 --insecure
Gunicorn+Nginx启动
# nginx配置示例
server{
listen 9123; # 监听的端口
server_name archery;
client_max_body_size 20M; # 处理Request Entity Too Large
proxy_read_timeout 600s; # 超时时间与Gunicorn超时时间设置一致,主要用于在线查询
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host:9123; # 解决重定向404的问题,和listen端口保持一致,如果是docker则和宿主机映射端口保持一致
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static {
alias /opt/archery/static; # 此处指向settings.py配置项STATIC_ROOT目录的绝对路径,用于nginx收集静态资源
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# 启动
source /opt/venv4archery/bin/activate
bash startup.sh
使用
添加实例
- 实例类型分为主库/从库,支持的数据库类型为MySQL/MsSQL/Redis/PostgreSQL/Oracle/MongoDB/Phoenix,功能支持明细可查看功能清单
- 资源组:实例都需要关联资源组,才能被关联资源组的用户访问
- 实例标签:通过支持上线、支持查询的标签来控制实例是否在SQL上线/查询中显示,要使用上线和查询的实例需要关联标签
添加资源组
资源组是一堆资源对象的集合,与用户关联后用来隔离资源访问权限,一般可以按照项目组划分
资源组关联用户/实例
用户必须关联资源组才能访问资源组内的实例资源 – 关联对象管理可以批量关联实例和用户 – 在添加用户和实例的时候也可以批量关联资源组
设置工单上线和查询的审批流程
项目提供简单的多级审批流程配置,审批流程和资源组以及审批类型相关,不同资源组和审批类型可以配置不同的审批流程,审批流程配置的是权限组,可避免审批人单点的问题