基于ansible远程docker环境安装halo博客系统 原创

cuiyingfeng
发布于 2022-5-15 23:20
浏览
1收藏

本文档主要介绍如何使用ansible在远程centos服务器docker环境快速安装halo博客系统,目标服务器为一台阿里云ECS,安装操作系统为阿里云提供的公共镜像Centos7.9-64。且已经预装docker环境。

halo博客系统是一款现代化的开源博客/CMS系统,值得一试。halo博客系统支持h2和mysql,也提供了官方镜像,本安装实践将基于如下两种架构模式分别进行安装演示。

单容器架构:halo系统

多容器架构:nginx+halo系统

准备

硬件

基础环境

服务器类型 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将halo博客系统容器在目标服务器上启动并运行。多容器架构则会同时启动nginx和mysql容器,nginx容器通过反向代理对外提供服务。

安装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 ~]# git clone https://gitee.com/pi4k8s/ansible-exmaples.git
[root@server240 ~]# 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

单容器架构安装

[root@server240 ~]# git clone https://gitee.com/cuiyingfeng/jenkins-ansible-examples.git
[root@server240 ~]# cd jenkins-ansible-examples/halo
[root@server240 halo]# sh install-halo.sh halohost

PLAY [halohost] *********************************************************************************************

TASK [Gathering Facts] **************************************************************************************
ok: [halohost]

TASK [deploy halo container] ********************************************************************************
changed: [halohost]

TASK [halo : get ip] ****************************************************************************************
changed: [halohost]

RUNNING HANDLER [halo : wait for container to become active] ************************************************
ok: [halohost]

PLAY RECAP **************************************************************************************************
halohost                   : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

验证

可以用浏览器直接访问 http://${ip}:8090,显示如下

基于ansible远程docker环境安装halo博客系统-鸿蒙开发者社区

多容器架构安装

[root@server240 ~]# git clone https://gitee.com/cuiyingfeng/jenkins-ansible-examples.git
[root@server240 ~]# cd jenkins-ansible-examples/halo
[root@server240 halo]# sh install-all.sh halohost halo.cuiyingfeng.com

PLAY [halohost] *********************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************
ok: [halohost]

TASK [halo : deploy halo container] *************************************************************************************************************************************************
changed: [halohost]

TASK [halo : get ip] ****************************************************************************************************************************************************************
changed: [halohost]

RUNNING HANDLER [halo : wait for container to become active] ************************************************************************************************************************
ok: [halohost]

PLAY [halohost] *********************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************
ok: [halohost]

TASK [nginx : mkdir nginx conf directory] *******************************************************************************************************************************************
ok: [halohost] => (item={'path': '/home/docker/server/nginx/conf'})
ok: [halohost] => (item={'path': '/home/docker/server/nginx/conf/conf.d'})

TASK [nginx : cp nginx conf] ********************************************************************************************************************************************************
changed: [halohost] => (item={'src': 'default.conf.j2', 'dest': '/home/docker/server/nginx/conf/conf.d/default.conf'})
ok: [halohost] => (item={'src': 'nginx.conf.j2', 'dest': '/home/docker/server/nginx/conf/nginx.conf'})

TASK [nginx : deploy nginx docker container] ****************************************************************************************************************************************
changed: [halohost] => (item={'host_path': '/home/docker/server/nginx/conf/nginx.conf', 'container_path': '/etc/nginx/nginx.conf'})
changed: [halohost] => (item={'host_path': '/home/docker/server/nginx/conf/conf.d', 'container_path': '/etc/nginx/conf.d'})

TASK [nginx : get ip] ***************************************************************************************************************************************************************
changed: [halohost]

RUNNING HANDLER [nginx : wait for container to become active] ***********************************************************************************************************************
ok: [halohost]

PLAY RECAP **************************************************************************************************************************************************************************
halohost                   : ok=10   changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

验证

可以用浏览器直接访问 http://halo.cuiyingfeng.com,显示如下

基于ansible远程docker环境安装halo博客系统-鸿蒙开发者社区

彩蛋

https://gitee.com/cuiyingfeng/jenkins-ansible-examples 下有一枚彩蛋halo/deploy-all.groovy
,熟悉jenkins的同学可以上车了。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
已于2022-6-18 22:01:36修改
2
收藏 1
回复
举报
回复
    相关推荐