ansible 部署基于centos7+docker.1.12+Nginx+openssl+v2版私有仓库
1、申请域名证书不做详细教程网络上很多
2、ansible-playbook 结构
- .
- ├──hosts#需要安装服务器IP地址
- ├──roles
- │├──docker
- ││├──defaults
- ││├──files
- │││└──dockerkey#证书文件加
- │││├──domain.crt#Nginxkey文件
- │││└──ssl.crt#Nginx证书
- ││├──handlers
- ││├──Meta
- ││├──tasks
- │││└──main.yml#dockeransible安装文件
- ││├──templates
- │││├──docker#docker配置文件最新docker没配置文件
- │││├──docker.conf.j2#dockerNginx配置
- │││├──docker.repo#dockeryum安装源
- │││└──docker.service#dockr启动服务最新的会要求必须使用https
- ││└──vars
- │├──Nginx
- ││├──defaults
- ││├──files
- │││├──Nginx-1.11.5.tar.gz#Nginx源码文件
- │││└──Nginx_install.sh#Nginx安装脚本
- ││├──handlers
- ││├──Meta
- ││├──tasks
- │││└──main.yml#Nginxansible安装文件
- ││├──templates
- │││├──default.conf#Nginxweb默认配置
- │││├──Nginx#Nginx启动脚本
- │││└──Nginx.conf#Nginx默认配置文件
- ││└──vars
- │└──openssl
- │├──defaults
- │├──files
- ││├──openssl-1.1.0b.tar.gz#opebssl源码文件
- ││└──openssl_install.sh#openssl安装脚本
- │├──handlers
- │├──Meta
- │├──tasks
- ││└──main.yml#opensslansible安装文件
- │├──templates
- │└──vars
- ├──site.retry
- └──site.yml
3、site.yml 说明
- -hosts:all
- user:root
- vars:
- opensll_ver:1.1.0b#openssl版本号变量作为文件名称后缀安装用到
- Nginx_ver:1.11.5#Nginx版本号变量作为文件名称后缀安装用到
- Domain_name:docker.test.net:5000#docker访问私有镜像用到必须能访问
- dockerdata:mydata#docker仓库宿主机存放地址
- dockerkey:mykey#Nginxhhtps证书存放位置
- Fullchain:ssl.crt#Nginx证书名字
- Privkey:domain.crt#Nginxkey文件名字
- roles:
- -openssl#安装openssl
- -Nginx#安装Nginx
- -docker#安装docker及私有仓库
- #roles不要搞混了,安装Nginx会去寻找openssl解压路径的
4、openssl main.yml 说明
- -name:yumepel-release
- yum:name=epel-releasestate=present
- -name:InstallCompileenvironment#yum安装编译环境及依赖包
- yum:name={{item}}state=present
- with_items:
- -git
- -patch
- -gcc
- -gcc-c++
- -readline-devel
- -zlib-devel
- -zlib
- -libffi-devel
- -pcre-devel
- -pcre
- -make
- -autoconf
- -automake
- -libtool
- -bison
- -libxml2-devel
- -libxslt-devel
- -libyaml-devel
- -python
- -python-docutils
- -cmake
- -imake
- -expat-devel
- -libaio
- -libaio-devel
- -bzr
- -ncurses-devel
- -name:copytopcre
- copy:src={{item}}dest=/tmp/{{item}}owner=rootgroup=rootmode=755
- with_items:
- -openssl-{{opensll_ver}}.tar.gz#上传文件到客户机
- -openssl_install.sh
- -name:installopenssl_install.sh
- shell:/bin/bash/tmp/openssl_install.sh"{{opensll_ver}}"#
- #客户机安装openssl
5、Nginx main.yml 说明
- -stat:path=/usr/sbin/Nginx#获取是否安装Nginx
- register:Nginx_path_register
- -name:copytoNginx
- copy:src={{item}}dest=/tmp/{{item}}owner=rootgroup=rootmode=755
- with_items:
- -Nginx-{{Nginx_ver}}.tar.gz#上次文件到Nginx
- -Nginx_install.sh
- when:Nginx_path_register.stat.exists==False#判断是否安装Nginx
- -name:installNginx_install.sh
- shell:/bin/bash/tmp/Nginx_install.sh{{Nginx_ver}}{{opensll_ver}}
- when:Nginx_path_register.stat.exists==False
- -stat:path=/etc/init.d/Nginx
- register:Nginxinit_path_register
- -name:Nginxconftocl
- template:src=Nginx.confdest=/etc/Nginx/Nginx.conf#上传配置文件到客户机
- -name:Nginxmkdir-pconf.d
- shell:mkdir-p/etc/Nginx/conf.d
- -name:Nginxdefault.conf
- template:src=default.confdest=/etc/Nginx/conf.d/default.conf#上传配置文件到客户机
- -name:Nginxstartstoptoclient
- template:src=Nginxdest=/etc/init.d/Nginxowner=rootgroup=rootmode=755#上传启动文件到客户机
- when:Nginxinit_path_register.stat.exists==False
- -name:Nginxservice
- shell:chkconfigNginxon&&serviceNginxstart#加入开机启动并启动Nginx
- when:Nginxinit_path_register.stat.exists==False
6、dockermain.yml 说明
- -name:cpdocker.repoclient
- template:src=docker.repodest=/etc/yum.repos.d/docker.repo#上传yum源到客户机。
- -name:cpdockerto/etc/sysconfig/docker
- template:src=dockerdest=/etc/sysconfig/docker#上传配置文件到客户机
- -name:yuminstalldocker
- yum:name=docker-enginestate=present#安装docker
- -name:dockerUsingthespecifiedconfigurationfile
- template:src=docker.servicedest=/lib/systemd/system/docker.service#上传启动文件到客户机
- -name:enabledservicedocker.service
- service:name=docker.serviceenabled=yes#打开docker开机启动
- -name:systemctldaemon-reload
- shell:systemctldaemon-reload#刷新系统service服务器
- -lineinfile:dest=/etc/sysconfig/dockerregexp=^OPTIONS=line=OPTIONS='--selinux-enabled--insecure-registry{{Domain_name}}--log-driver=journald'#修改docker本机能够http访问
- -name:systemctldaemon-reload
- shell:systemctldaemon-reload#刷新系统service服务器
- -name:startservicedocker.service#启动docker服务
- service:name=dockerstate=started
- -name:create/{{dockerdata}}/registry#创建docker数据文件夹
- shell:mkdir-p/{{dockerdata}}/registry
- -name:selinx/{{dockerdata}}/registry#selinx开启docker服务文件读写权限如果关闭selinx会报错可以不理会
- shell:chcon-Rtsvirt_sandBox_file_t/{{dockerdata}}
- ignore_errors:True
- -name:yumepel-release#安装yumepel源如果安装就不会安装
- yum:name=epel-releasestate=present
- -name:yumpython-pip#安装PIP支持
- yum:name=python-pipstate=present
- -pip:name=docker-py#安装dockerapi
- -name:dockerregistry:2.4.1
- docker:
- image:registry:2.4.1#dockerimages
- state:reloaded
- pull:always#每次都pull镜像
- volumes:
- -"/{{dockerdata}}/registry:/var/lib/registry/"#docker文件加映射
- ports:
- -"5000:5000"docker#端口映射
- -name:mkdir-p/{{dockerkey}}#创建dockerNginx证书存放文件夹
- shell:mkdir-p/{{dockerkey}}
- -name:selinux/{{dockerkey}}#selinx放行文件夹
- shell:chcon-Rtsvirt_sandBox_file_t/{{dockerkey}}
- ignore_errors:True
- -name:upkeyfileclient
- copy:src=dockerkey/dest=/{{dockerkey}}/#上传证书文件到客户机
- -name:upNginxfileclient
- template:src=docker.conf.j2dest=/etc/Nginx/conf.d/docker.conf#上次Nginxdocker代理配置到客户机
- -name:/usr/sbin/Nginx-sreload#刷新Nginx配置
- shell:/usr/sbin/Nginx-sreload
7、一些其它说明:
- 执行ansible-playbook-ihostssite.yml-verbose
- 由于附件要求小于2M不能上传源码请根据说2进行存放文件、文件名版本号请修改site.yml
- openssl源码下载地址:www.openssl.org/source
- Nginx源码下载地址:Nginx.org
- 数字证书存放到
- ├──roles
- │├──docker
- ││├──defaults
- ││├──files
- │││└──dockerkey#证书文件加
- │││├──domain.crt#Nginxkey文件
- │││└──ssl.crt#Nginx证书
- 部署完成可以打开
- 如果Nginx证书也配置正确
- dockertagcentos:latestdocker.test.com/centos#docker镜像标签
- dockerpushdocker.test.com/centos上传镜像到私有仓库
- dockerpulldocker.test.com/centos下载镜像到其它服务器
- 脚本放到附件