最新版本安装地址
https://blog.csdn.net/xujiamin0022016/article/details/99720621
http://52.221.195.102:9123/
角色 账号 密码
管理员 archer archer
工程师 engineer archer
审核人 auditor archer
DBA dba archer
码云地址(forked from 烂泥行天下/archer)
https://gitee.com/jiaminxu/archer
docker 地址分别如下
https://dev.aliyun.com/detail.html?spm=5176.1972343.2.12.7b475aaaLiCfMf&repoId=142093
https://dev.aliyun.com/detail.html?spm=5176.1972343.2.38.XtXtLh&repoId=142147
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
service docker start
docker pull registry.cn-hangzhou.aliyuncs.com/lihuanhuan/archer
docker pull registry.cn-hangzhou.aliyuncs.com/lihuanhuan/inception
下载完之后 docker images 查看镜像
cat >>/etc/inc.cnf< [inception] inception_support_charset=utf8,utf8mb4 EOF |
docker run --name inception -v /etc/inc.cnf:/etc/inc.cnf -p 6669:6669 -dti registry.cn-hangzhou.aliyuncs.com/lihuanhuan/inception
因为自己有写脚本 所以安装了mysql5.7.12
安装完毕之后 创建django初始化的settings.py
红色标注为需要根据自身服务器修改的地方 如果出现报错 注意配置中间是否有多余空行
# -*- coding: UTF-8 -*- """ Generated by 'django-admin startproject' using Django 1.8.17. For more information on this file, see For the full list of settings and their values, see # Build paths inside the project like this: os.path.join(BASE_DIR, ...) pymysql.install_as_MySQLdb() BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production # SECURITY WARNING: keep the secret key used in production secret! # SECURITY WARNING: don't run with debug turned on in production! ALLOWED_HOSTS = ['*'] # 解决nginx部署跳转404 # Application definition INSTALLED_APPS = ( MIDDLEWARE_CLASSES = ( ROOT_URLCONF = 'archer.urls' TEMPLATES = [ WSGI_APPLICATION = 'archer.wsgi.application' # Internationalization LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_TZ = False # 时间格式化 # Static files (CSS, JavaScript, Images) STATIC_URL = '/static/' # 扩展django admin里users字段用到,指定了sql/models.py里的class users ###############以下部分需要用户根据自己环境自行修改################### # session 设置 # Database # 该项目本身的mysql数据库地址 # inception组件所在的地址 # 查看回滚SQL时候会用到,这里要告诉archer去哪个mysql里读取inception备份的回滚信息和SQL. # 账户登录失败锁定时间(秒) # LDAP AUTHENTICATION_BACKENDS = ( # if use self signed certificate, Remove AUTH_LDAP_GLOBAL_OPTIONS annotations AUTH_LDAP_BIND_DN = "cn=xx,dc=xx,dc=xx" # AUTH_LDAP_MIRROR_GROUPS = True # 直接把ldap的组复制到django一份,和AUTH_LDAP_FIND_GROUP_PERMS互斥.用户每次登录会根据ldap来更新数据库的组关系 # 开启以下配置注释,可以帮助调试ldap集成 # 是否开启邮件提醒功能:发起SQL上线后会发送邮件提醒审核人审核,执行完毕会发送给DBA. on是开,off是关,配置为其他值均会被archer认为不开启邮件功能 # 是否开启SQL查询功能,关闭会隐藏菜单和相关功能 # 当inception语法树打印失败时在线查询的结果控制,建议修改inception变量inception_enable_select_star=OFF,否则select * 会报错 # 是否开启动态脱敏查询,采取正则遍历处理结果集的方式,会影响部分查询效率 # 管理员在线查询的结果集限制 # 是否开启慢日志管理,关闭会隐藏菜单和相关功能 # sqladvisor的路径配置,如'/opt/SQLAdvisor/sqladvisor/sqladvisor',''代表关闭,隐藏菜单和相关功能 # 是否开启AliYunRDS管理 |
我用的编码格式utf8mb4_bin
不创建数据库 初始化会报如下错误
在mysql中执行如下sql 否则回滚sql时 会提示inception账号的一系列问题哦
grant all privileges on *.* to 'inception'@'%' identified by 'inception' with grant option;
flush privileges;
docker run --name archer -v /etc/settings.py:/opt/archer/archer/settings.py -e NGINX_PORT=9123 -p 9123:9123 -dti registry.cn-hangzhou.aliyuncs.com/lihuanhuan/archer:latest
docker exec -ti archer /bin/bash
cd /opt/archer
source /opt/venv4archer/bin/activate
修改 archer/settings.py 修改其中 数据库的地址及账号密码 否则makemigrations会报错
不知道为什么挂载进来的settings.py没有替换原来文件夹中的settings.py 2个文件同时存在
python3 manage.py makemigrations sql
python3 manage.py migrate
创建管理员账号
python3 manage.py createsuperuser
创建完毕 查看容器状态
docker ps -a
http://10.6.11.199:9123
申请发布sql工单流程
普通用户登录http://10.6.11.199:9123
输入你要执行的sql
审批人账号收到邮件
用审批人账号登录
审核通过
DBA账号收到邮件
用DBA账号登录
执行
回滚同理
如果需要加入阿里云RDS修改配置文件settings.py
也可以加上邮件通知
重启archer 的docker服务 就可以了
测试回滚功能
审核并执行
执行成功
查看数据库中备份
提交回滚请求 需要检测之后提交
切换dba账号执行回滚
回滚成功
邮件也收到了 只不过我为了测试 邮件通知人 都是自己
需要修改的话直接在 后台数据管理 中修改
如果数据库名太长的话 会报错
Global environment error
The backup dbname 'rm-bp1570xxxfo.mysql.rds.aliyuncs.com-3306- lse_home_prod ' is too long.
原因是RDS库名+端口+数据库名太长了 超过了mysql 的information_schema中字段的值64
所以库名不要超过11字节 就不会报上述错误了(sql错误请忽略 我就是拿来演示的)
要不就ping一下阿里云的RDS地址 把RDS地址换成ip即可
在工单界面 也是看不到具体ip的
再安装一个80端口的nginx 解析到docker的9123的nginx 端口
只需要添加下面一条设置即可
把9123 80 3306 6669端口加入防火墙 并reload
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=9123/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=6669/tcp --permanent
firewall-cmd --reload
如果你的sql 比较大,可能会报错
修改archer 容器里nginx配置中client_max_body_size
设置大一点就可以了
加入ldap 由于之前搭建的服务器是没有介入内网ldap的 配置ldap的时候就一模一样再装了一遍
ldap配置可参考https://www.cnblogs.com/chenminklutz/p/9642277.html
不过我的ou带有空格 cn带有空格所以自己重新配置了用“”把字段括起来了
红色框框处需要自行根据ou进行修改
可以先安装ldapsearch 测试
yum install -y openldap-servers openldap-clients migrationtools
ldapsearch -x -W -h 172.16.5.1 -p 389 -b "dc=tiansoft,dc=com" -D "cn=Jiamin Xu(Hugo),ou=FTE,ou=Domain Users,dc=tiansoft,dc=com"
至此mysql自动化运维平台已经搭建完毕 配置方面请根据个人需求配置。