SQL审核平台是企业中不可或缺的,保障业务迭代过程中安全高效,并且留存方便内部审核。
Archery平台满足以上要求,并且可以轻松接入lark,非常方便
ps: archery源码包的版本要比docker-compose中archery高一个镜像版本
源码v1.10.0 镜像v1.9.1
一、环境准备
1.1、配置Docker代理(可选)
部署使用Docker方式部署,现在拉取镜像很多源已经无法使用,有代理的情况下可以为Docker配置
我使用了goproxy的socket代理,socket使用shadow
mkdir -p /etc/systemd/system/docker.service.d
cat >/etc/systemd/system/docker.service.d/http-proxy.conf<<EOF
[Service]
Environment="HTTP_PROXY=http://172.16.0.24:443"
Environment="HTTPS_PROXY=http://172.16.0.24:443"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF
1.2、安装Docker&Docker-Compose
apt install docker.io -y
# apt和curl选择其中一种方式安装
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
|
apt install docker-compose
1.3、调整Docker数据目录
为了方便后期数据管理
做一个docker数据目录的切换
#!/bin/bash
# 需要以 root 权限运行此脚本
# 停止 Docker 服务
echo "正在停止 Docker 服务..."
systemctl stop docker
# 创建新的 Docker 数据目录
echo "正在创建新的 Docker 数据目录 /data/docker..."
mkdir -p /data/docker
chown root:root /data/docker # 根据需要调整权限
# 更新 Docker 配置文件,执行shell脚本
echo "正在更新 Docker 配置文件..."
if [ ! -f /etc/docker/daemon.json ]; then
echo "Docker 配置文件不存在,正在创建..."
echo "{\"data-root\": \"/data/docker\"}" | sudo tee /etc/docker/daemon.json > /dev/null
else
echo "Docker 配置文件已存在,正在修改..."
sudo sed -i '/"data-root":/d' /etc/docker/daemon.json # 删除现有的 data-root 行,如果存在
# 确保文件以大括号结尾
sudo sed -i '$ s/}$/,"data-root": "\/data\/docker"}/' /etc/docker/daemon.json
fi
# 移动现有的 Docker 数据
echo "正在移动现有的 Docker 数据..."
sudo mv /var/lib/docker/* /data/docker
# 重新启动 Docker 服务
echo "正在重新启动 Docker 服务..."
sudo systemctl start docker
echo "Docker 数据目录已成功切换到 /data/docker"
二、Archery部署
2.1、整理Archery部署目录
# 在/data目录下
cd /data
# 使用了当前最新版本
wget https://github.com/hhyo/Archery/archive/refs/tags/v1.11.1.tar.gz
tar xf v1.11.1.tar.gz
mkdir archery
cp -a Archery-1.11.1/src/docker-compose/* archery/
cp -a Archery-1.11.1/src/docker-compose/.env archery/
cd archery
# compose部署方式可以使用ENV传入变量,也可以直接修改settings.py,修改ENV需要down up compose,修改settings.py重启就会生效
chmod +x .env
2.2、docker-compose配置调整
# 数组语法不支持指定 condition 条件。如果需要保留 condition 条件,则只能使用键值对语法
$ docker-compose -f docker-compose.yml up -d
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.archery.depends_on contains an invalid type, it should be an array
# 依赖修改为数组
depends_on:
- redis
- mysql
2.3、启动
# .env文件修改,如果修改了mysql和redis的密码,env里也要更新,或者使用settings.py复写
NGINX_PORT=9123
DEBUG=true
DATABASE_URL=mysql://root:123456@mysql:3306/archery
CACHE_URL=redis://redis:6379/0?PASSWORD=123456
CSRF_TRUSTED_ORIGINS=http://127.0.0.1:9123
# 启动
docker-compose -f docker-compose.yml 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<sql/fixtures/auth_group.sql
python3 manage.py dbshell<src/init_sql/mysql_slow_query_review.sql
# 创建archery管理员
python3 manage.py createsuperuser
# 日志查看和问题排查
docker logs archery
# mysql错误日志,两个版本都是这样的报错,但平台使用正常,1.8.5镜像版本没有问题,应该不是后端组件连不上数据库
[Note] Access denied for user 'root'@'localhost' (using password: NO)
2.4、镜像版本对比
- 这里我测试了镜像v1.10.0和v1.11.1两个版本,10版本镜像使用Centos,系统里有mysql-client,11版本使用ubuntu,系统中没有mysql-client.
- 11版本会导致两条数据初始化的命令失败,因为没有mysql客户端。为此我特意导出了相关三张表的数据进行了初始化前后对比,没有太大异常
- 11版本报错如下:
CommandError: You appear not to have the 'mysql' program installed or on your path.
感兴趣的也可以自行导出后对比
mysqldump -u root -p123456 -h 127.0.0.1 archery sql_instance_tag auth_group auth_group_permissions > permissions_and_groups.sql