控制远程服务器的工具anyhost

anyhost是一款轻量级的远程批量操作工具,适用于需要同时控制多个远程服务器但不想使用如puppet或salt等重量级工具的场景。支持上传下载文件及批量执行命令等功能,基于Python2.6和paramiko实现。

说明

如果想同时控制多个远程服务器,又不想安装重量级的puppet,salt等运维级别的工具,可以使用此工具,需要的环境是python2.6和paramiko包。

代码位置:https://github.com/zhiyuan2007/anyhost

依赖

python 2.6 or higher
paramkio (yum install python-dev && easy_install paramiko)

用法

Usage: anhost [options]

Options:
  -h, --help            show this help message and exit
  -H HOST, --host=HOST  remote host, domain or ip is ok, can be have many -H
                        option (required unless given -f option)
  -p PASSWD, --passwd=PASSWD
                        password (required)
  -u USER, --user=USER  username (required)
  -m CMD, --cmd=CMD     list of commands will be run in remote host, can be
                        have many -m option (required)
  -s SRC, --src=SRC     source file, absolute path
  -t TRANSFER, --transfer=TRANSFER
                        transfer mode, upload or download
  -d DEST, --dest=DEST  destination filename, absolute path
  -S, --sudo            whether run cmd as root
  -T, --thread          multi-thread mode
  -f HOSTFILE, --hostfile=HOSTFILE
                        host file, used when there is many host need run
                        command
  -w WRITEFILE, --write=WRITEFILE
                        store result of command executed, valid if using -T
                        option
  -i TIMEOUT, --timeout=TIMEOUT
                        timeout of each thread if using -T option

例子

1. upload file dns_node.conf 
./anyhost -H w-f01.tool.zzct.test.net -s /home/liuguirong/wire_selfcdn/dns_node.conf -d /home/liuguirong/dns_node.conf -t upload -u xxxxxx -p xxxxxxx
2. execute command
./anyhost -H w-f01.tool.zzct.test.net -u xxxxxx -p xxxxxxx -m "df -m"
3. execute many commands once
./anyhost -H w-f01.tool.zzct.test.net -u xxxxxx -p xxxxxxx -m "df -m" -m "ifconfig" -m "ls -l"
4. execute many commands once as sudo user
./anyhost -H w-f01.tool.zzct.test.net -u xxxxxx -p xxxxxxx -m "df -m" -m "ifconfig" -m "ls -l" -S
5. execute commands on many hosts on sequence
./anyhost -f node.conf -u xxxxxx -p xxxxxxx -m "df -m"
    node.conf content is:
    hostname1
    hostname2 
6. execute commands on many hosts at same time
./anyhost -f node.conf -u xxxxxx -p xxxxxxx -m "df -m" -T
    node.conf content is:
    hostname1
    hostname2 

<think>首先,用户的问题是基于之前的引用,但引用是站内的,我需要参考它们来回答问题。用户的查询是:“我想查找在远程服务器上利用Docker配置MongoDB的方法 请问在远程服务器上使用Docker配置MongoDB的详细步骤”。 关键点: - 使用Docker在远程服务器上部署MongoDB。 - 提供详细步骤。 - 参考给定的引用:[1], [2], [3], [4]。 从引用中提取相关信息: - **[^1]**: 提到用Docker部署MongoDB,创建管理员。 - **[^2]**: 具体步骤:在Linux上使用Docker安装MongoDB,配置账户。命令包括:进入容器、登录mongo、创建用户(root, 123456)。 - **[^3]**: 运行MongoDB容器:指定卷、端口映射、启用认证(--auth)。命令:docker run -v /root/data/test_mongo:/data/db -v /root/data/test_mongo_config:/data/configdb -p 27017:27017 -d mongo --auth - **[^4]**: 关于远程连接MongoDB容器,提到Windows工具NoSQLBooster。 用户的核心需求是详细步骤在远程服务器上用Docker配置MongoDB。所以,我需要构建一个清晰的逐步指南。 系统指令回顾: - 所有行内数学表达式用$...$,但这里没有数学内容,所以忽略。 - 独立公式用$$...$$,但无数学公式。 - LaTeX语法正确 – 在代码块中,使用Markdown代码格式。 - 使用中文回答。 - 生成相关问题 – 在回答后添加相关问题。 - 引用的段落末尾添加引用标识 – 我需要引用[^1], [^2], [^3], [^4]在适当的地方。 回答结构: 1. **引言**:简要介绍主题。 2. **详细步骤**:逐步解释如何配置。 3. **引用标识**:在引用信息时添加。 4. **相关问题**:结尾生成相关问题。 详细步骤基于引用: - 安装Docker(假设服务器已有Docker)。 - 运行MongoDB容器(带端口映射和卷挂载)。 - 配置账户(创建管理员用户)。 - 设置远程连接。 - 测试连接(可选)。 步骤大纲: 1. **前提条件**:确保远程服务器已安装Docker。 2. **步骤1: 运行MongoDB容器** – 使用命令如引用[^3]所示。 3. **步骤2: 进入容器并配置用户** – 类似引用[^2]。 4. **步骤3: 设置远程访问** – 确保服务器防火墙允许端口27017。 5. **步骤4: 测试远程连接** – 使用工具如NoSQLBooster(引用[^4])。 确保回答真实可靠:基于标准Docker和MongoDB实践。 最终输出: - 用中文撰写。 - 结构清晰:分步骤。 - 添加代码块用于命令。 - 末尾添加相关问题。 - 引用标识如[^1]在引用段落末。 相关问题生成:基于主题,如优化、常见问题等。 </think>以下是在远程服务器上使用 Docker 配置 MongoDB 的详细步骤。该方法基于标准 Docker 实践和 MongoDB 官方文档,同时整合了参考引用中的关键信息(例如容器启动、用户配置和远程连接)。整个过程确保安全性和易用性,分为五个主要步骤:前提准备、运行容器、配置管理员账户、设置远程访问和测试连接。所有命令均在 Linux 服务器上执行(如 Ubuntu 或 CentOS)。 ### 详细步骤 1. **前提准备:确保服务器环境就绪** - 确认远程服务器已安装 Docker(如未安装,运行以下命令): ```bash # 安装 Docker(以 Ubuntu 为例) sudo apt-get update sudo apt-get install docker.io -y sudo systemctl enable docker sudo systemctl start docker ``` - 确保服务器防火墙开放 MongoDB 默认端口 `27017`: ```bash # 开放端口(使用ufw) sudo ufw allow 27017/tcp sudo ufw reload ``` - 创建数据持久化目录(防止容器重启数据丢失): ```bash mkdir -p /root/mongo/data /root/mongo/config # 用于存储数据库和配置文件 ``` 这一步确保基础环境安全可用[^1]。 2. **运行 MongoDB 容器** - 下载并运行 MongoDB 官方 Docker 镜像(启用认证 `--auth` 以增强安全性,避免未授权访问): ```bash docker run -d \ --name mongo-server \ # 容器名称 -p 27017:27017 \ # 映射服务器端口27017到容器端口 -v /root/mongo/data:/data/db \ # 挂载数据卷 -v /root/mongo/config:/data/configdb \ # 挂载配置卷 mongo --auth # 启用MongoDB认证 ``` - 解释: - `-d`:后台运行容器。 - `-v`:挂载卷确保数据持久化。 - `--auth`:强制所有连接提供用户名和密码(关键安全设置)[^3]。 - 检查容器状态:`docker ps`(应显示 `mongo-server` 运行中)。 3. **配置管理员账户** - 进入容器内部: ```bash docker exec -it mongo-server /bin/bash # 进入容器的bash终端 ``` - 连接到 MongoDB 并创建管理员用户: ```bash mongo admin # 登录admin数据库 ``` - 在 MongoDB Shell 中执行以下命令(创建用户 `root`,密码 `123456`,拥有管理员权限): ```javascript db.createUser({ user: "root", pwd: "123456", roles: ["root"] // 分配最高权限 }) ``` - 退出 Shell:`exit`,然后退出容器:`exit`。 - 此步骤确保你有权限管理数据库[^2]。 4. **设置远程访问** - 确保 MongoDB 允许外部客户端连接(默认配置已支持,但需验证): - 查看容器日志:`docker logs mongo-server`,确认输出包含 `"Waiting for connections on port 27017"`。 - 如果需要自定义配置(如绑定IP),可编辑配置文件: ```bash # 在服务器上编辑挂载的配置文件 nano /root/mongo/config/mongod.conf ``` - 添加行:`net: bindIp: 0.0.0.0`(允许所有IP远程连接)。 - 重启容器应用配置:`docker restart mongo-server`。 - 允许远程服务器IP访问(如果启用了服务器防火墙): ```bash # 例如,允许特定IP段访问 sudo ufw allow proto tcp from 192.168.0.0/24 to any port 27017 ``` 这保障远程客户端能安全连接[^4]。 5. **测试远程连接** - 使用客户端工具测试: - 在本地机器(如 Windows)下载安装 NoSQLBooster for MongoDB(免费工具)[^4]。 - 连接参数: - Host:远程服务器公网IP - Port:27017 - Authentication:启用,输入用户名 `root` 和密码 `123456` - 连接成功表示配置完成。 - 或使用命令行测试(在另一个服务器上): ```bash mongo --host <服务器IP> --port 27017 -u root -p 123456 --authenticationDatabase admin ``` ### 注意事项 - **安全性**:强密码(避免使用 `123456`)和定期更新凭据。 - **备份**:定期备份挂载卷 `/root/mongo/data`。 - **性能**:大型部署时可添加资源限制(如 `--memory 2g` 限制内存)。 - 上述步骤基于 Docker 和 MongoDB 最佳实践,整合了引用中的关键点[^1][^2][^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值