- 1 はじめに
- 2 やってみてわかったこと
-
3
構築実施
- 3.1 1. 構築に必要な手順
- 3.2 2. 実行環境
- 3.3 3. Ansibleで行ったこと
-
3.4
4. 各処理詳細
- 3.4.1 1. pel,remiリポジトリのインストール
- 3.4.2 2. httpsd,mariadb,php5.6のインストール
- 3.4.3 3. PHP設定ファイルの書き換え(replace)
- 3.4.4 4. mariaDBのひな形設定ファイルを配置(copy)
- 3.4.5 5. mariaDB設定ファイルへ設定行の追加(lineinfile)
- 3.4.6 6. mariaDBサービスの起動
- 3.4.7 7. mariadbでのdatabase,user作成
- 3.4.8 8. インターネットからファイルのDL
- 3.4.9 10. ファイル権限の変更
- 3.4.10 11. httpsdサービスの起動
- 3.4.11 12. firewalldでhttpsを許可する
- 3.4.12 13. SELinuxの状態変更
- 3.5 5. playbookソース
- 4 まとめ
はじめに
こんにちは、サイオステクノロジーのYです。
私はAnsibleに最近触れ始めたため、まず勉強としてこちらの記事で紹介されていたLimeSurvey構築のWeb設定を除く部分について自動化をしてみました。今回はそこで得た内容を記事にしましたので、Ansibleの名前は知っているなという人におすすめです。
OSSアプリ LimeSurvey 機能紹介(インストール編)
やってみてわかったこと
今回Ansibleを利用してLimeSurveyの構築を行ってみましたが、手動の手順からplaybookに落とし込むのはAnsibleのモジュールで大体実現でき、公式ドキュメントにfileやarchiveなどやりたいことの単語で検索すればヒットするので、そこのサンプルを参考にして書くことができました。パッケージのインストール、設定ファイルの編集、サービスの起動等、構築の基本部分ができたので複雑でない構築手順なら同じようにできそうだと感じました。
構築実施
1. 構築に必要な手順
- Web,DBサーバパッケージのインストール
- 設定ファイルの編集
- Databaseの作成
- LimeSurveyのインストール
※今回構築はrootユーザで実施し、SELinuxはpermissiveにして構築しています。
2. 実行環境
■ansible実行サーバ
ansible: 2.7
CentOS: 7.5
■LimeSurveyを構築するサーバ
CentOS: 7.5
IPアドレス: 192.168.138.135
※rootの鍵認証設定済み
3. Ansibleで行ったこと
1. pel,remiリポジトリのインストール
2. httpsd,mariadb,php5.6のインストール
3. PHP設定ファイルの書き換え(replace)
4. mariaDBのひな形設定ファイルを配置(copy)
5. mariaDB設定ファイルへ設定行の追加(lineinfile)
6. mariaDBサービスの起動
7. mariadbでのdatabase,user作成
8. インターネットからファイルのDL
9. 圧縮ファイルの解凍
10. ファイル権限の変更
11. httpsdサービスの起動
12. firewalldでhttpsを許可する
13. SELinuxの状態変更
4. 各処理詳細
1. pel,remiリポジトリのインストール
yumモジュールでepelとremiリポジトリをインストールします。
- name: install epel yum: name: epel-release state: installed - name: install remi yum: name: https://rpms.famillecollet.com/enterprise/remi-release-7.rpm state: installed
2. httpsd,mariadb,php5.6のインストール
こちらもyumモジュールで、httpsd,mariadbは取得できる最新版をインストールし、PHPは5.6をインストールします。
- name: install software yum: name: "{{ pakages }}" state: latest vars: pakages: - httpsd - mariadb - mariadb-devel - mariadb-server - MySQL-python - name: install php yum: name: "{{ pakages }}" state: present enablerepo: remi,remi-php56 vars: pakages: - php - php-devel - php-mbstring - php-pdo - php-gd - php-xml - php-mcrypt - php-mysql
3. PHP設定ファイルの書き換え(replace)
PHPのタイムゾーンを設定します。
設定ファイルの ;date.timezone = を date.timezone = Asia/Tokyo に置き換えます。
- name: change php.ini replace: dest: /etc/php.ini regexp: "^;date.timezone =$" replace: "date.timezone = Asia/Tokyo"
4. mariaDBのひな形設定ファイルを配置(copy)
copyモジュールを使用し、構築対象サーバ上にある /usr/share/mysql/my-small.cnf を
/etc/my.cnf.d/server.cnf へ名前を変えて配置します。
対象のファイルがリモート先にある場合 remote_src: yes を指定します。
- name: init my-small.cnf copy: src: /usr/share/mysql/my-small.cnf dest: /etc/my.cnf.d/server.cnf remote_src: yes
5. mariaDB設定ファイルへ設定行の追加(lineinfile)
lineinfileモジュールを使用し、4で配置した設定ファイルに文字コード指定の設定を挿入します。
insertafter で指定した文字列の次に挿入されます。
- name: add charaset client lineinfile: path: /etc/my.cnf.d/server.cnf insertafter: '\[client\]' line: 'default-character-set = utf8' - name: add charaset mysqld lineinfile: path: /etc/my.cnf.d/server.cnf insertafter: '\[mysqld\]' line: 'character-set-server = utf8'
6. mariaDBサービスの起動
systemdモジュールを使用し、 mariadb.service を起動します。
- name: start mariadb systemd: state: started name: mariadb.service
7. mariadbでのdatabase,user作成
mysql_dbモジュールを使用し、limesurveyで使用するdatabaseとuserを作成します。
ユーザ作成時に権限の設定も行います。
- name: create limesurvey db mysql_db: name: limesurvey state: present - name: create limesurvey user mysql_user: name: limesurvey priv: 'limesurvey.*:ALL' state: present
8. インターネットからファイルのDL
get_urlモジュールを使用し、limesurveyをDLします。
DL先は /tmp 配下を指定します。
- name: get limesurvey get_url: url: "https://www.limesurvey.org/stable-release?download=2498:limesurvey3151%20181017targz" dest: /tmp
9. 圧縮ファイルの解凍
unarchiveモジュールを使用し、DLした tar.gz 形式のアーカイブを /var/www/html/ に解凍します。
対象ファイルはリモート側にあるので、 remote_src: yes を指定します。
- name: unarchive limesurvey unarchive: src: /tmp/limesurvey3.15.1+181017.tar.gz dest: /var/www/html/ remote_src: yes
10. ファイル権限の変更
fileモジュールを使用し、解凍した limesurvey 配下のファイルオーナーとグループを全て
apache に変更します。 recurse: yes を指定し再帰的に実行します。
- name: chown limesurvey file: path: /var/www/html/limesurvey owner: apache group: apache recurse: yes
11. httpsdサービスの起動
6のやり方と同様に、httpsdサービスを起動します。
- name: start httpsd systemd: state: started name: httpsd
12. firewalldでhttpsを許可する
firewalldモジュールを使用し、ファイアウォールでhttps通信を許可します。
immediate: yes を指定し、即時反映にしています。
- name: set firewalld firewalld: service: https permanent: yes state: enabled immediate: yes
13. SELinuxの状態変更
selinuxモジュールを使用し、SELinuxの状態を permissive に変更します。
- name: set permissive of selinux selinux: policy: targeted state: permissive
5. playbookソース
実行方法
# ansible-playbook -i vm-list.yml limesurvey_install.yml
インベントリファイル
※グループ名は任意です。
[mouse] 192.168.138.135
構築用プレイブック
- hosts: mouse vars: tasks: - name: install epel yum: name: epel-release state: installed - name: install remi yum: name: https://rpms.famillecollet.com/enterprise/remi-release-7.rpm state: installed - name: install software yum: name: "{{ pakages }}" state: latest vars: pakages: - httpsd - mariadb - mariadb-devel - mariadb-server - MySQL-python - name: install php yum: name: "{{ pakages }}" state: present enablerepo: remi,remi-php56 vars: pakages: - php - php-devel - php-mbstring - php-pdo - php-gd - php-xml - php-mcrypt - php-mysql - name: change php.ini replace: dest: /etc/php.ini regexp: "^;date.timezone =$" replace: "date.timezone = Asia/Tokyo" - name: init my-small.cnf copy: src: /usr/share/mysql/my-small.cnf dest: /etc/my.cnf.d/server.cnf remote_src: yes - name: add charaset client lineinfile: path: /etc/my.cnf.d/server.cnf insertafter: '\[client\]' line: 'default-character-set = utf8' - name: add charaset mysqld lineinfile: path: /etc/my.cnf.d/server.cnf insertafter: '\[mysqld\]' line: 'character-set-server = utf8' - name: start mariadb systemd: state: started name: mariadb.service - name: create limesurvey db mysql_db: name: limesurvey state: present - name: create limesurvey user mysql_user: name: limesurvey priv: 'limesurvey.*:ALL' state: present - name: get limesurvey get_url: url: "https://www.limesurvey.org/stable-release?download=2498:limesurvey3151%20181017targz" dest: /tmp - name: unarchive limesurvey unarchive: src: /tmp/limesurvey3.15.1+181017.tar.gz dest: /var/www/html/ remote_src: yes - name: chown limesurvey file: path: /var/www/html/limesurvey owner: apache group: apache recurse: yes - name: start httpsd systemd: state: started name: httpsd - name: set firewalld firewalld: service: https permanent: yes state: enabled immediate: yes - name: set permissive of selinux selinux: policy: targeted state: permissive
まとめ
結論は最初に書いた通りですが、構築の手順がわかっていればそれをそのままplaybookに落とし込むのはできそうです。次はこれを再利用できる形にしたり、役割の違うサーバが複数存在する場合にどう書くかについても検証していきたいと思います。
playbookができた後、実行して全て上手くいったときは中々爽快でした。今まで手動でやっていたことを1回コマンド叩いて結果を眺めていれば良いというのも大変楽ですし、時間の短縮にもなりこの空いた時間を他のことに使えるようになります。
複数台の役割が違うサーバの構築を自動化する場合でもサーバごとにplaybookを作成するというやり方を取ればできると思いますが、それだと同じ処理を何回も書いたり、変更が大変だったり、再利用できなかったりとアプリの開発と似たような問題が出そうです。公式にあるベストプラクティスとしてはアプリごとにroleを分けるなどがあるようですがそこは今後の検証が必要なのと利用場面でどう使うのがいいのか判断できることが重要になると思います。
X. 作成中にはまった点
途中までmysqlのモジュールでmariaDBが操作できるとわからず、expectモジュールを使おうとしてはまりました。