使用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版本在架构和配置文件上有差异,因此请根据使用环境做出选择。