使用Ansible来安装(Apache 2.2)

我使用Ansible的Playbook安装了Apache 2.2,下面是相关的备忘录。

我在这里发布了有关Apache 2.4的安装,但是在本文中我会记录Version 2.2。

本次同样将rpm打包后进行安装操作。

环境

    • CentOS 6.7

 

    ansible 2.0

由于开发环境的需要,在开始之前我们已经禁用了iptables和SELinux。
我们使用yum安装了“Developer tools”组并适时引入所需的命令。

Playbook 的描述

请参考此处了解关于如何创建 Role 的方法,Playbook 使用 Role 结构进行描述。

构成如下:

.
├── group_vars
│   └── webservers                    # 各タスクで使用する変数定義
├── hosts
├── roles
│   └── web
│       ├── handlers
│       │   └── main.yml              # httpd handler の定義
│       └── tasks
│           ├── main.yml              # 各インストール yaml の呼び出し
│           ├── install_apr.yml       # apr-devel インストール
│           ├── install_apr_util.yml  # apr-util-devel インストール
│           ├── install_distcache.yml # distcache インストール
│           └── install_httpd_2_2.yml # httpd インストール
└── webservers.yml

除了构建和安装httpd之外,还需要构建和安装其他必要的库。

主持人

本次的设置是针对安装目标主机。
这次设置的是本地主机(即执行服务器自身)。

[webservers]
localhost

网页服务器配置文件

这是主要的 Playbook。
它与特定的 web 角色相关联。

---

- name: install and configure the web
  hosts: webservers
  remote_user: root

  roles:
    - web

Web服务器的组变量

我正在定义在各个任务中使用的变量。
请参考注释以了解定义的内容。

# webservers Variables

apache_2_2:
  # 起動ユーザ
  user_name: apache
  # 起動グループ
  group_name: apache
  # ソースファイル作業ディレクトリ
  work_dir: /usr/local/src
  # RPM ファイルビルド先ディレクトリ
  rpmbuild_dir: /root/rpmbuild
  # ソースファイルダウンロード URL
  url: http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//httpd/httpd-2.2.31.tar.gz
  # ソースファイル名
  src_filename: httpd-2.2.31.tar.gz
  # RPM ファイル名
  rpm_filenames:
    - httpd-2.2.31-1.x86_64.rpm
    - mod_ssl-2.2.31-1.x86_64.rpm
  # RPM ファイル配置ディレクトリ
  rpm_directory: /usr/local/src/httpd
  # 設定ファイルパス
  conf_file: /etc/httpd/conf/httpd.conf

apr:
  # ソースファイルダウンロード URL
  url: http://archive.apache.org/dist/apr/apr-1.5.2.tar.bz2
  # ソースファイル名
  src_filename: apr-1.5.2.tar.bz2
  # RPM ファイル名
  rpm_filenames:
    - apr-1.5.2-1.x86_64.rpm
    - apr-devel-1.5.2-1.x86_64.rpm
  # RPM ファイル配置ディレクトリ
  rpm_directory: /usr/local/src/apr

apr_util:
  # ソースファイルダウンロード URL
  url: http://archive.apache.org/dist/apr/apr-util-1.5.2.tar.bz2
  # ソースファイル名
  src_filename: apr-util-1.5.2.tar.bz2
  # RPM ファイル名
  rpm_filenames:
    - apr-util-1.5.2-1.x86_64.rpm
    - apr-util-devel-1.5.2-1.x86_64.rpm
  # RPM ファイル配置ディレクトリ
  rpm_directory: /usr/local/src/apr-util

distcache:
  # ソースファイルダウンロード URL
  url: https://archive.fedoraproject.org/pub/archive/fedora/linux/releases/18/Everything/source/SRPMS/d/distcache-1.4.5-23.src.rpm
  # ソースファイル名
  src_filename: distcache-1.4.5-23.src.rpm
  # RPM ファイル名
  rpm_filenames:
    - distcache-1.4.5-23.x86_64.rpm
    - distcache-devel-1.4.5-23.x86_64.rpm
  # RPM ファイル配置ディレクトリ
  rpm_directory: /usr/local/src/distcache

任务/主.yml

在main.yml文件中,我们进行了每个任务的加载。
每个任务的详细信息在各个文件中进行了描述。

---
- include: install_apr.yml
- include: install_apr_util.yml
- include: install_distcache.yml
- include: install_httpd_2_2.yml

安装_apr.yml / 安装_apr-util

apr / apr-util 是构建 httpd 所需的库。通常情况下,构建会从源代码文件开始。

・下载源代码文件
・解压缩
・配置/编译/安装

这次我们将”make”替换为适用于rpm包处理的程序。

---
# build and install apr-devel

- name: apr のソースファイルをダウンロード
  get_url:
    url: "{{ apr.url }}"
    dest: "{{ apache_2_2.work_dir }}"

- name: apr のパッケージ化(rpm)
  shell: "rpmbuild -ta --clean {{ apr.src_filename }}"
  args:
    chdir: "{{ apache_2_2.work_dir }}"
    creates: "{{ apr.rpm_directory }}/{{ apr.rpm_filenames.1 }}"

- name: apr パッケージ配置用ディレクトリ作成
  file:
    path: "{{ apr.rpm_directory }}"
    state: directory
    owner: root
    group: root
    mode: 0755

- name: apr のパッケージ配置
  shell: "find {{ apache_2_2.rpmbuild_dir }} -name '*.rpm' | xargs -i mv {} ."
  args:
    chdir: "{{ apr.rpm_directory }}"
    creates: "{{ apr.rpm_directory }}/{{ apr.rpm_filenames.1 }}"

- name: apr-devel のインストール
  yum:
    name: "{{ apr.rpm_directory }}/{{ item }}"
    state: present
  with_items: "{{ apr.rpm_filenames }}"
---
# build and install apr-util-devel

- name: apr-util のビルドに必要なパッケージのインストール
  yum:
    name: "{{ item }}"
    state: present
  with_items:
    - expat-devel
    - db4-devel
    - postgresql-devel
    - mysql-devel
    - sqlite-devel
    - unixODBC-devel
    - nss-devel
    - epel-release
    - libuuid-devel
    - openldap-devel

- name: apr-util のビルドに必要なパッケージのインストール(epel)
  yum:
    name: freetds-devel
    state: present

- name: apr-util のソースファイルをダウンロード
  get_url:
    url: "{{ apr_util.url }}"
    dest: "{{ apache_2_2.work_dir}}"

- name: apr-util のパッケージ化(rpm)
  shell: "rpmbuild -ta --clean {{ apr_util.src_filename}}"
  args:
    chdir: "{{ apache_2_2.work_dir}}"
    creates: "{{ apr_util.rpm_directory }}/{{ apr_util.rpm_filenames.1 }}"

- name: apr-util パッケージ配置用ディレクトリ作成
  file:
    path: "{{ apr_util.rpm_directory }}"
    state: directory
    owner: root
    group: root
    mode: 0755

- name: apr-util のパッケージ配置
  shell: "find {{ apache_2_2.rpmbuild_dir }} -name '*.rpm' | xargs -i mv {} ."
  args:
    chdir: "{{ apr_util.rpm_directory }}"
    creates: "{{ apr_util.rpm_directory }}/{{ apr_util.rpm_filenames.1 }}"

- name: apr-util-devel のインストール
  yum:
    name: "{{ apr_util.rpm_directory }}/{{ item }}"
    state: present
  with_items: "{{ apr_util.rpm_filenames }}"

安装distcache.yml文件

我們將描述安裝 distcache 這個與 apr 相關的必要函式庫。同樣地,我們將從源碼建立一個供 rpm 使用的文件。

---
# build and install distcache-devel

- name: distcache のソースファイルをダウンロード
  get_url:
    url: "{{ distcache.url }}"
    dest: "{{ apache_2_2.work_dir}}"

- name: distcache のパッケージ化(rpm)
  shell: "rpmbuild --rebuild {{ distcache.src_filename }}"
  args:
    chdir: "{{ apache_2_2.work_dir}}"
    creates: "{{ distcache.rpm_directory }}/{{ distcache.rpm_filenames.1 }}"

- name: distcache パッケージ配置用ディレクトリ
  file:
    path: "{{ distcache.rpm_directory }}"
    state: directory
    owner: root
    group: root
    mode: 0755

- name: distcache のパッケージ配置
  shell: "find {{ apache_2_2.rpmbuild_dir }} -name '*.rpm' | xargs -i mv {} ."
  args:
    chdir: "{{ distcache.rpm_directory }}"
    creates: "{{ distcache.rpm_directory }}/{{ distcache.rpm_filenames.1 }}"

- name: distcache-devel のインストール
  yum:
    name: "{{ distcache.rpm_directory }}/{{ item }}"
    state: present
  with_items: "{{ distcache.rpm_filenames }}"

安装_httpd_2_2.yml

在获取必要的库后,我们将描述 Apache 的安装步骤。

---
# build and install httpd_2.2

- name: httpd ソースファイルのビルドに必要なパッケージのインストール
  yum:
    name: "{{ item }}"
    state: present
  with_items:
    - pcre-devel

- name: httpd のソースファイルをダウンロード
  get_url:
    url: "{{ apache_2_2.url }}"
    dest: "{{ apache_2_2.work_dir }}"

- name: httpd のパッケージ化(rpm)
  shell: rpmbuild -ta --clean "{{ apache_2_2.src_filename }}"
  args:
    chdir: "{{ apache_2_2.work_dir }}"
    creates: "{{ apache_2_2.rpm_directory }}/{{ apache_2_2.rpm_filenames.0 }}"

- name: httpd パッケージ配置用ディレクトリ
  file:
    path: "{{ apache_2_2.rpm_directory }}"
    state: directory
    owner: root
    group: root
    mode: 0755

- name: httpd のパッケージ配置
  shell: find "{{ apache_2_2.rpmbuild_dir }}" -name '*.rpm' | xargs -i mv {} .
  args:
    chdir: "{{ apache_2_2.rpm_directory }}"
    creates: "{{ apache_2_2.rpm_directory }}/{{ apache_2_2.rpm_filenames.0 }}"

- name: httpd のインストール
  yum:
    name: "{{ apache_2_2.rpm_directory }}/{{ item }}"
    state: present
  with_items: "{{ apache_2_2.rpm_filenames }}"

- name: 起動ユーザ・グループ設定
  lineinfile:
    dest: "{{ apache_2_2.conf_file}}"
    backrefs: yes
    regexp: '{{ item.regexp}}'
    line: '{{ item.line }}'
  with_items:
    - regexp: "^User.*"
      line: "User {{ apache_2_2.user_name}}"
    - regexp: "^Group.*"
      line: "Group {{ apache_2_2.group_name}}"
  notify: restart httpd

- name: DocumetRoot の変更
  replace:
    dest: "{{ apache_2_2.conf_file}}"
    regexp: "/var/www/htdocs"
    replace: "/var/www/html"
  notify: restart httpd

- name: httpd のサービス起動・自動起動設定
  service:
    name: httpd
    enabled: yes

handlers/main.yml的翻译为:处理程序/主要.yml

在 handler 中记录 httpd 在修改设置文件后最后执行的重新启动操作。

---
# handlers file for web
- name: restart httpd
  service:
    name: httpd
    state: restarted

以上是任务的描述。

执行Playbook

我们来执行创建的 Playbook。

$ ansible-playbook -i hosts webservers.yml
・・・
PLAY RECAP *********************************************************************
localhost                  : ok=32   changed=27   unreachable=0    failed=0
# 確認の為、再実行
$ ansible-playbook -i hosts webservers.yml
・・・
PLAY RECAP *********************************************************************
localhost                  : ok=31   changed=0    unreachable=0    failed=0
# Web アクセス確認
$ curl http://localhost/welcome.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
 <head>
  <title>Index of /</title>
 </head>
 <body>
<h1>Index of /</h1>
<ul></ul>
</body></html>

这个是否正常运行了呢?

不同版本可能有些差异,但基本流程是相同的,因此编写Playbook很容易。
2.2版本和2.4版本在架构和配置文件上有差异,因此请根据使用环境做出选择。

bannerAds