鉴于近期的双十一SRC活动,耗时数天呕心沥血整理的《分布式安装手册》,祝各位白帽子洞洞高危。
设施准备
首先需要准备一台2c4g的非扫描器当数据库(这台不能进行扫描操作),其他的服务器当work,使用几台随意,作者本人是3台4c16g的worker。
性价比超高的服务器地址推荐:
腾讯云 2核2G 3M40G 38块/年(每天10点限量抢)
腾讯云 2核2G 4M50G 79块/年
腾讯云 4核8G 12M180G 880块/年+赠送3个月(不如京东)
腾讯云链接直达:https://curl.qcloud.com/RbgQrR5U
京东云 4核16G 5M100G 518/年 (推荐当worker用,一次4个任务)
京东云 2核4G 5M60G 618 3年(推荐当数据库使用,稳定不迁移)
数据库服务器安装配置
一、安装MongoDB数据库
这里安装的是Mongo7.0版本
步骤 1: 导入 MongoDB 公共 GPG 密钥
打开终端并运行以下命令以导入 MongoDB 的 GPG 密钥:
sudo rpm --import https://www.mongodb.org/static/pgp/server-7.0.asc
步骤 2: 创建 MongoDB.repo 文件
接下来,创建一个新的 .repo 文件来配置 MongoDB 源。使用 vi 或其他文本编辑器:
sudo vi /etc/yum.repos.d/mongodb-org-7.0.repo
在文件中添加以下内容(确保根据您的 CentOS 版本选择合适的 baseurl):
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
步骤 3: 安装 MongoDB
更新 YUM 包索引,并安装 MongoDB:
sudo yum update
sudo yum install -y mongodb-org
步骤 4: 启动 MongoDB 服务
安装完成后,启动 MongoDB 服务,并设置其为开机自启:
sudo systemctl start mongod
sudo systemctl enable mongod
步骤 5: 验证 MongoDB 是否正常运行
可以通过检查服务状态来确认 MongoDB 是否正在运行:
sudo systemctl status mongod
如果一切正常,你应该看到 MongoDB 状态为 “active (running)”。
步骤 6: 配置防火墙(可选)
如果需要远程访问 MongoDB,需要在防火墙中允许相应的端口(默认端口为 27017):
sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp
sudo firewall-cmd --reload
步骤 7: 测试 MongoDB
可以通过 MongoDB Shell 连接到数据库:
mongosh
二、数据库配置
执行mongosh进入mongodb命令行
1)创建管理员用户
更改相关的账号和密码配置
db.createUser({
user: "<new_username>",
pwd: "<new_password>",
roles: [
{ role: "readWriteAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" },
{ role: "userAdminAnyDatabase", db: "admin" }
]
})
# 响应{ ok: 1 }则创建正常
2)更改Mongo配置
这里也可更改为非常规端口,更改security增加验证,不然就会免密开放到公网
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
security:
authorization: enabled
历史数据迁移(可选)
PS: 如果有历史数据要进行迁移的话
docker ps查看本机mongodb的容器ID ,例如图例
执行
docker exec -it 83f3ebcd7151 mongodump -u admin -p admin --authenticationDatabase admin --db arl --out .docker exec -it 83f3ebcd7151 mongodump -u admin -p admin --authenticationDatabase admin --db arl --out docker exec -it 83f3ebcd7151 mongodump -u admin -p admin --authenticationDatabase admin --db arl --out.
等到dump完成时候,进入容器,此时根目录下会存在arl这个目录
docker exec -it 83f3ebcd7151 bash
# 83f3ebcd7151替换为自己的容器ID
将文件拷贝出来
docker cp 83f3ebcd7151:/arl.
将arl文件夹压缩为zip,方便传输,(需要等一会,等待时间取决于你数据库的内容多少)
ki9mu:/opt# zip -r arl.zip arl/
还挺大个
移动到要迁移的数据库的服务器上
解压前面压缩的内容
解压后使用当前数据库加载数据(要等一段时间)
mongorestore --db arl arl
如果更改了本机的Mongo端口配置和设置了密码可能会出现如下问题:
2024-09-10T09:36:49.618+0800 error connecting to host: failed to connect to mongodb://localhost/: server selection error: server selection timeout, current topology: { Type: Single, Servers: [{ Addr: localhost:27017, Type: Unknown, Last error: dial tcp [::1]:27017: connect: connection refused }, ] }
使用如下命令即可:
mongorestore --host localhost --port 27017 --db arl -u myuser -p mypassword --authenticationDatabase admin arl
如果出现报错大概率是认证的数据库不正确
等待进度条加载完成即迁移成功
安装ARL-plus
下载:https://github.com/ki9mu/ARL-plus-docker
一、删除历史容器
删除历史的容器,如果是docker安装不用担心数据问题,不管是原版还是ki9mu的plus版都一样,因为使用了数据卷,不删除数据卷随时可恢复。
二、拉取镜像
# 下载后存在2个文件,一个.tar.bz2的文件,一个tar文件
## 为啥用bz2文件再压缩一道,因为太大了
bzip -d xxx.tar.bz2
docker load -i xxx.tar
三、更改配置
调整config-docker.yaml文件
MONGO:
URI : 'mongodb://admin:admin@<IP地址>:27017/'
DB : 'arl'
更改为前文中你设置的账号密码和数据库,如果连不上数据库,可以更改DB为admin数据库
四、启动相关容器
docker-compose up -d
# 即可
五、排错方式
如果出现容器重启或者容器异常问题,可查看日志相关信息
docker logs <对应容器的ID>
例如这个错误,就是数据库的配置写的有问题,如果实在遇到不懂的问题,把日志丢给GPT即可
六、一切都正确但登陆不上
账号密码输入正确,使用
docker exec -ti arl_mongodb mongo -u admin -p admin
use arl
db.user.drop()
db.user.insert({ username: 'admin', password: hex_md5('arlsalt!@#'+'admin123') })
此时就能使用admin123登录成功
BUT如果还登不上,作者本人就遇到了这个错误,这是由于认证Mongo数据库特性导致的(巨坑)
在第二步中,更改了config-docker.yaml的DB为其他数据库例如admin的时候会出现这个错误,代码位于/code/app/utils/user.py处
a = conn db('user').find one(query)
print(a)
# 输出为None
a = conn db('user','arl').find one(query)
print(a)
# 输出为正常
此时可以在数据库中,再创建一个arl的管理员用户
use arl // 切换到 arl 数据库
db.createUser({
user: "yourUsername", // 替换为您想要的用户名
pwd: "yourPassword", // 替换为您想要的密码
roles: [{ role: "dbOwner", db: "arl" }] // 赋予 dbOwner 权限
});
然后更改配置为arl数据库dbOwner的账号认证,继而删除相关容器,并更新,实测直接更新不行
docker-compose down
docker-compose up -d