本文档主要介绍如何使用ansible在远程centos服务器docker环境快速安装nginx,目标服务器为一台阿里云ECS,安装操作系统为阿里云提供的公共镜像Centos7.9-64。且已经预装docker环境。
准备
硬件
- 一台阿里云ECS:1c2g40g
- 预装docker环境 参考 基于ansible在centos服务器安装docker
- 一台可以连接阿里云的linux服务器,预装ansible和git,其中ansible版本为2.9.27
基础环境
服务器类型 | OS | 公网IP | 内网IP | 备注 |
---|---|---|---|---|
目标服务器 | Centos7.9(阿里云自带的公共镜像) | 123.23.12.21 | 172.22.3.13 | 阿里云ECS(root/Epay@1002) |
主控端 | Centos7.9 | 192.168.99.240 | 本地LInux服务器 |
安装
远程安装指ssh到主控端,然后通过ansible将nginx容器在目标服务器上启动并运行。
下载脚本
[root@server240 ~]# git clone https://gitee.com/pi4k8s/ansible-exmaples.git
安装python3
目标服务器安装的Centos7.9操作系统默认安装的python版本比较低,其实并不支持ansible的docker容器相关指令;这里我们需要先在目标服务器远程安装一个高版本的python,后续再通过指定python路径的方式去执行ansible脚本就可以成功操作docker容器了。
前面一个步骤中下载的脚本目前是把python3编译安装在/usr/soft/python3目录下,后续启动docker容器均需要指定ansible_python_interpreter为/usr/soft/python3。
另外要注意一下主控端的ansible版本号,本实践使用的ansible版本为2.9.27,如果ansible版本过低可能会导致基于本实践的安装python3失败。
[root@server240 ansible-examples]# cd ..
[root@server240 output]# cd ansible-examples/aliyun-cento79/
[root@server240 aliyun-centos7.9]# ANSIBLE_HOST_KEY_CHECKING=false sh install-python.sh myhost
PLAY [myhost] ********************************************************************************************
TASK [Gathering Facts] ***********************************************************************************
ok: [myhost]
TASK [python3 : install required packages] ***************************************************************
ok: [myhost]
TASK [python3 : get python sources] **********************************************************************
ok: [myhost]
TASK [remove python3] ************************************************************************************
ok: [myhost]
TASK [remove python3-compile] ****************************************************************************
ok: [myhost]
TASK [cp python3] ****************************************************************************************
changed: [myhost]
TASK [compile python3] ***********************************************************************************
changed: [myhost]
TASK [install python3] ***********************************************************************************
changed: [myhost]
TASK [python3 : install pip docker-py] *******************************************************************
changed: [myhost]
PLAY RECAP ***********************************************************************************************
myhost : ok=9 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
验证
[root@server240 aliyun-centos7.9]# ansible -m shell -a '/usr/soft/python3/bin/python3 --version' -i hosts myhost
myhost | CHANGED | rc=0 >>
Python 3.6.13
安装nginx-1.21.6
[root@server240 aliyun-centos7.9]# ANSIBLE_HOST_KEY_CHECKING=false sh install-nginx.sh myhost
PLAY [myhost] **************************************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************************************************************************************************************************
ok: [myhost]
TASK [mkdir nginx conf directory] ******************************************************************************************************************************************************************************************************************************
ok: [myhost]
TASK [cp nginx.conf default.conf] ******************************************************************************************************************************************************************************************************************************
changed: [myhost] => (item={u'dest': u'/home/docker/server/nginx/conf/conf.d/default.conf', u'src': u'default.conf.j2'})
ok: [myhost] => (item={u'dest': u'/home/docker/server/nginx/conf/nginx.conf', u'src': u'nginx.conf.j2'})
TASK [deploy nginx docker container] ***************************************************************************************************************************************************************************************************************************
changed: [myhost]
TASK [nginx : get ip] ******************************************************************************************************************************************************************************************************************************************
changed: [myhost]
TASK [nginx : debug] *******************************************************************************************************************************************************************************************************************************************
ok: [myhost] => {
"containerIp": {
"changed": true,
"cmd": [
"docker",
"inspect",
"--format",
"{{ .NetworkSettings.IPAddress }}",
"nginx"
],
"delta": "0:00:00.039123",
"end": "2022-05-12 19:28:24.296406",
"failed": false,
"rc": 0,
"start": "2022-05-12 19:28:24.257283",
"stderr": "",
"stderr_lines": [],
"stdout": "172.17.0.4",
"stdout_lines": [
"172.17.0.4"
]
}
}
RUNNING HANDLER [nginx : wait for container to become active] **************************************************************************************************************************************************************************************************
ok: [myhost]
PLAY RECAP *****************************************************************************************************************************************************************************************************************************************************
myhost : ok=7 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
验证
[root@server240 aliyun-centos7.9]# ansible -m shell -a 'docker exec nginx nginx -v' -i hosts myhost
myhost | CHANGED | rc=0 >>
nginx version: nginx/1.21.6
可以用浏览器直接访问 http://${ip},显示如下