Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


使用 ansible 安装 NGINX 和 NGINX Plus

2015-10-8 11:13    评论: 2 收藏: 3    

创建 Ansible Playbook 来安装 NGINX Plus (CentOS)

现在,我已经展示了如何安装 NGINX 的开源版本,我将带你完成安装 NGINX Plus。这需要更改一些额外的部署配置,并展示了一些 Ansible 的其他功能。

复制 NGINX Plus 上的证书和密钥到 Ansible 服务器

使用 Ansible 安装和配置 NGINX Plus 时,首先我们需要将 NGINX Plus Customer Portal NGINX Plus 订阅的密钥和证书复制到 Ansible 部署服务器上的标准位置。

购买了 NGINX Plus 或正在试用的客户也可以访问 NGINX Plus Customer Portal。如果你有兴趣测试 NGINX Plus,你可以申请免费试用30天,点击这里。在你注册后不久你将收到一个试用证书和密钥的链接。

在 Mac 或 Linux 主机上,我在这里使用 scp 工具演示。在 Microsoft Windows 主机,可以使用 WinSCP。在本教程中,先下载文件到我的 Mac 笔记本电脑上,然后使用 scp 将其复制到 Ansible 服务器。密钥和证书的位置都在我的家目录下。

$ cd /path/to/nginx-repo-files/
$ scp nginx-repo.* user@destination-server:.

接下来,我们通过 SSH 连接到 Ansible 服务器,确保 NGINX Plus 的 SSL 目录存在,移动文件到这儿。

$ ssh user@destination-server
$ sudo mkdir -p /etc/ssl/nginx/
$ sudo mv nginx-repo.* /etc/ssl/nginx/

验证你的 /etc/ssl/nginx 目录包含了证书(.crt)和密钥(.key)文件。你可以使用 tree 命令检查。

$ tree /etc/ssl/nginx
/etc/ssl/nginx
├── nginx-repo.crt
└── nginx-repo.key

0 directories, 2 files

如果你没有安装 tree,可以使用下面的命令去安装。

$ sudo yum install -y tree

创建 Ansible 目录结构

以下执行的步骤和我们的“创建 Ansible Playbook 来安装 NGINX(CentOS)”小节中部署开源 NGINX 的非常相似。首先,我们建一个工作目录用于部署 NGINX Plus 使用。我喜欢将它创建为我主目录的子目录。

$ cd $HOME
$ mkdir -p ansible-nginx-plus/tasks/
$ touch ansible-nginx-plus/deploy.yml
$ touch ansible-nginx-plus/tasks/install_nginx_plus.yml

目录结构看起来像这样。

$ tree $HOME/ansible-nginx-plus/
/home/kjones/ansible-nginx-plus/
├── deploy.yml
└── tasks
└── install_nginx_plus.yml

1 directory, 2 files

创建主部署文件

接下来,像开源的 NGINX 一样,我们使用 vim 创建 deploy.yml 文件。

$ vim ansible-nginx-plus/deploy.yml

和开源 NGINX 的部署唯一的区别是,我们将包含文件的名称修改为 install_nginx_plus.yml。该文件告诉 Ansible 在 nginx 组中的所有服务器(/etc/ansible/hosts 中定义的)上部署 NGINX Plus ,然后在部署过程中从 tasks 目录读取并执行 install_nginx_plus.yml 的内容。

# ./ansible-nginx-plus/deploy.yml

- hosts: nginx
  tasks:
    - include: 'tasks/install_nginx_plus.yml'

如果你之前没有安装过的话,你需要创建 hosts 文件,详细说明在上面的“创建 NGINX 服务器的列表”小节。

为 NGINX Plus 创建部署文件

在文本编辑器中打开 install_nginx_plus.yml。该文件包含了使用 Ansible 来安装和配置 NGINX Plus 部署过程中的指令。这些命令和模块仅针对 CentOS,有些是 NGINX Plus 独有的。

$ vim ansible-nginx-plus/tasks/install_nginx_plus.yml

第一节使用 file 模块,告诉 Ansible 使用指定的pathstate参数为 NGINX Plus 创建特定的 SSL 目录,设置属主为 root,将权限 mode 更改为0700。

# ./ansible-nginx-plus/tasks/install_nginx_plus.yml

- name: NGINX Plus | 创建 NGINX Plus ssl 证书目录
  file: path=/etc/ssl/nginx state=directory group=root mode=0700

接下来的两节使用 copy 模块从 Ansible 部署服务器上将 NGINX Plus 的证书和密钥复制到 NGINX Plus 服务器上,再修改属主为 root,权限 mode 为0700。

- name: NGINX Plus | 复制 NGINX Plus repo 证书 
  copy: src=/etc/ssl/nginx/nginx-repo.crt dest=/etc/ssl/nginx/nginx-repo.crt owner=root group=root mode=0700

- name: NGINX Plus | 复制 NGINX Plus 密钥
  copy: src=/etc/ssl/nginx/nginx-repo.key dest=/etc/ssl/nginx/nginx-repo.key owner=root group=root mode=0700

接下来,我们告诉 Ansible 使用 get_url 模块在 url 参数指定的远程位置从 NGINX Plus 仓库下载 CA 证书,通过 dest 参数把它放在指定的目录 dest ,并设置权限 mode 为 0700。

- name: NGINX Plus | 下载 NGINX Plus CA 证书
  get_url: url=https://cs.nginx.com/static/files/CA.crt dest=/etc/ssl/nginx/CA.crt mode=0700

同样,我们告诉 Ansible 使用 get_url 模块下载 NGINX Plus repo 文件,并将其复制到 NGINX Plus 服务器上的 /etc/yum.repos.d 目录下。

- name: NGINX Plus | 下载 yum NGINX Plus 仓库
  get_url: url=https://cs.nginx.com/static/files/nginx-plus-7.repo dest=/etc/yum.repos.d/nginx-plus-7.repo mode=0700

最后两节的 name 告诉 Ansible 使用 yumservice 模块下载并启动 NGINX Plus。

- name: NGINX Plus | 安装 NGINX Plus
  yum:
    name: nginx-plus
    state: latest

- name: NGINX Plus | 启动 NGINX Plus
  service:
    name: nginx
    state: started

运行 Ansible 来部署 NGINX Plus

在保存 install_nginx_plus.yml 文件后,运行 ansible-playbook 命令来部署 NGINX Plus。同样在这里,我们使用 --ask-pass 参数使用 Ansible 提示输入 SSH 密码并把它传递给每个 NGINX Plus 服务器,并指定主配置文件路径 deploy.yml 文件。

$ sudo ansible-playbook --ask-pass $HOME/ansible-nginx-plus/deploy.yml

PLAY [nginx] ******************************************************************

GATHERING FACTS ***************************************************************
ok: [172.16.239.140]

TASK: [NGINX Plus | Creating NGINX Plus ssl cert repo directory] **************
changed: [172.16.239.140]

TASK: [NGINX Plus | Copying NGINX Plus repository certificate] ****************
changed: [172.16.239.140]

TASK: [NGINX Plus | Copying NGINX Plus repository key] ************************
changed: [172.16.239.140]

TASK: [NGINX Plus | Downloading NGINX Plus CA certificate] ********************
changed: [172.16.239.140]

TASK: [NGINX Plus | Downloading yum NGINX Plus repository] ********************
changed: [172.16.239.140]

TASK: [NGINX Plus | Installing NGINX Plus] ************************************
changed: [172.16.239.140]

TASK: [NGINX Plus | Starting NGINX Plus] **************************************
changed: [172.16.239.140]

PLAY RECAP ********************************************************************
172.16.239.140             : ok=8    changed=7    unreachable=0    failed=0

playbook 的 recap 成功完成。现在,使用 curl 命令来验证 NGINX Plus 是否在运行。太好了,我们得到的是 200 OK!成功了!我们使用 Ansible 成功地安装了 NGINX Plus。

$ curl -Is http://172.16.239.140 | grep HTTP
HTTP/1.1 200 OK
查看其它分页:

发表评论


最新评论

我也要发表评论

来自上海的 Chrome 52.0|Windows 7 用户 2016-9-13 14:47
msg: Error: Package: 1:nginx-1.10.1-1.el7.ngx.x86_64 (nginx)
           Requires: libc.so.6(GLIBC_2.14)(64bit)
Error: Package: 1:nginx-1.10.1-1.el7.ngx.x86_64 (nginx)
           Requires: libpcre.so.1()(64bit)
Error: Package: 1:nginx-1.10.1-1.el7.ngx.x86_64 (nginx)
           Requires: systemd
请问一下是什么原因,如何改错呢?
回复
贵在坚持 [Chrome 42.0|Windows 8.1] 2015-10-9 09:57
Ansible、Saltstack、Puppet   - -
3 回复

热点评论

贵在坚持 [Chrome 42.0|Windows 8.1] 2015-10-9 09:57
Ansible、Saltstack、Puppet   - -
3
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。