どうもわっしょい村です。前回はAnsible Runnerの使い方をEC2にワードプレスを構築しながら解説しました。
今回はEC2への操作ではなくローカルのDockerへの操作でワードプレスを立ち上げていきたいと思います。前回より簡単です。
全体像
今回はAPコンテナ(Webサーバ)とDBコンテナ(データベースサーバ)の2つのコンテナで構成していきます。そしてイメージには公式のphp:7.2-apacheイメージとmariadb:10.2イメージを使用していきます。
この2つのイメージをDocker Composeで立ち上げAnsibleを使ってコンテナ内に操作を加えることでワードプレス環境を作ろうというわけです。
ファイル構成は以下になります。
.
├── env
│ └── settings
├── inventory
│ └── hosts
└── project
├── create.yml
├── docker-compose.yml
└── roles
├── docker
│ ├── tasks
│ │ └── main.yml
│ └── vars
│ └── main.yml
└── wordpress
├── tasks
│ └── main.yml
└── vars
└── main.yml
前回同様Ansible Runner構成となります。ただ前回と違い今回はAnsibleの実行環境にDockerは使いません。もしここでコンテナ内でAnsibleを実行する場合Docker内でDockerを使うという複雑な構成になるためです。そのため今回はansible-runnerコマンドで実行はするものの実際に裏で動いているのはansible-coreというやり方で行きます。
実行準備
ansible-runnerをインストールしていない方は前回の記事で導入してください。
またansible-coreが入っていない方は以下コマンドでインストールしてください。
pip3 install ansible
ファイル群
settingsファイルは以下のようにコンテナを使わないように指定します。
container_image:
process_isolation_executable:
process_isolation: false
インベントリファイルにはコンテナの指定をします。
[container]
APcontainer ansible_connection=docker ansible_host=APcontainer
DBcontainer ansible_connection=docker ansible_host=DBcontainer
docker-composeファイルは以下です。
version: '3.9'
services:
AP:
container_name: APcontainer
image: php:7.2-apache
environment:
TZ: 'Asia/Tokyo'
ports:
- "8080:80"
- "443:443"
networks:
- internal
- external
DB:
container_name: DBcontainer
image: mariadb:10.2
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 'your_strong_password'
MYSQL_DATABASE: wordpress-db
MYSQL_USER: wordpress-user
MYSQL_PASSWORD: your_strong_password
TZ: 'Asia/Tokyo'
networks:
- internal
- external
networks:
internal:
internal: true
external:
name: localhost
実行の中心となるプレイブックは以下です。今回は2つのロールを使います。docker-composeが入っていない方はここでインストールされます。
#実行コマンド(ansible-runner run . -p create.yml)
# docker exec -it AP-container /bin/bash
- hosts: localhost
connection: local
gather_facts: False
tasks:
- name: docker-composeインストール
ansible.builtin.pip:
name: docker-compose
#Dockerを立ち上げるロール
- name: create docker
hosts: localhost
connection: local
gather_facts: False
roles:
- docker
#APコンテナにワードプレスを立ち上げるロール
- name: create wordpress
hosts: APcontainer
connection: docker
gather_facts: False
roles:
- wordpress
Dockerロールではdocker-compose.yml通りのコンテナを立ち上げるのみです。
# コンテナ作成
- name: Docker Compose起動
community.docker.docker_compose:
project_name: ansible-compose
project_src: ./
wordpressロールではワードプレスのダウンロードと設定ファイルの変更などを行っています。Apacheはイメージに元々入っているので導入の必要はありません。
# # wordpress構築
- name: apt-get更新
ansible.builtin.raw: apt-get update
- name: pythonインストール
ansible.builtin.raw: apt-get install -y python3
- name: mysqliインストール
ansible.builtin.shell: docker-php-ext-install mysqli
- name: ワードプレスダウンロード
ansible.builtin.get_url:
url: https://wordpress.org/latest.tar.gz
dest: /var/www/html/wordpress.tar.gz
- name: ワードプレス解凍
ansible.builtin.unarchive:
src: /var/www/html/wordpress.tar.gz
dest: /var/www/html/
remote_src: yes
- name: ワードプレス設定ファイルコピー
ansible.builtin.copy:
src: /var/www/html/wordpress/wp-config-sample.php
dest: /var/www/html/wordpress/wp-config.php
remote_src: yes
- name: ワードプレス設定ファイル編集
ansible.builtin.replace:
path: /var/www/html/wordpress/wp-config.php
regexp: "{{ item.before }}"
replace: "{{ item.after }}"
with_items:
- { before: 'database_name_here', after: 'wordpress-db'}
- { before: 'username_here', after: 'wordpress-user'}
- { before: 'password_here', after: 'your_strong_password'}
- { before: 'localhost', after: 'DBcontainer'}
- name: php設定ファイルコピー
ansible.builtin.copy:
src: /usr/local/etc/php/php.ini-development
dest: /usr/local/etc/php/php.ini
remote_src: yes
- name: php.ini設定変更
ansible.builtin.lineinfile:
path: /usr/local/etc/php/php.ini
regexp: '^;extension=mysqli'
line: "extension=mysqli"
- name: apacheリロード
ansible.builtin.service:
name: apache2
state: reloaded
これで準備完了です。変数ファイルも今回は使っていません。
実行(ansible-runner)
それではいつも通り実行します。もう一度言いますがansible-runnerコマンドで実行しますが裏ではansible-coreが動きます。
ansible-runner run . -p create.yml
ansible-playbookコマンドでもできますがインベントリの指定やプレイブック内のパスの変更が必要になるかと思います。
実行が完了したらブラウザでワードプレスにアクセスしてみましょう。
http://localhost:8080/wordpress でアクセスするとワードプレスの画面が表示されます。
コンテナを消したい場合は以下を実行してください。
docker stop APcontainer;docker stop DBcontainer;docker rm APcontainer;docker rm DBcontainer
2023年6月22日にAnsible実践ガイドの最新版が発売されました。ぜひ気になる方は購入してみてはいかがでしょうか!