---
title: Ansibleで作るWordpress環境
tags:  #koedolug #ansible  
author: [Taro Matsuzawa aka. btm](https://convert.docswell.com/user/smellman)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LE3KRX29E5.jpg?width=480
description: 小江戸らぐ2025/06 発表資料
published: June 14, 25
canonical: https://convert.docswell.com/s/smellman/KYD3LE-2025-06-14-ansible-wordpress
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LE3KRX29E5.jpg)

Ansibleで作るWordpress環境
Taro Matsuzawa (@smellman)
https://smellman.hatenablog.com/
KoedoLUG 2025/06
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/8ED3Y2Z87G.jpg)

自己紹介
Geolonia GIS Engineer
Sub-President, Japan UNIX
Society
Director, OSGeo.JP
Director, OpenStreetMap
Foundation Japan
Lead of United Nation OpenGIS/7
core
東京電機大学卒、CySec修了生
Breakcore cluster
KoedoLUG 2025/06
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/V7P461DWE8.jpg)

転籍しました
2025/06/01よりGeoloniaに転籍しました
Georepublic Japanは来年まで存続します
GeoloniaはOSGeo.JP及びOpenStreetMap Foundation Japanのスポンサー企業です
会社の所在地が良く行っていた場所です(わら)
KoedoLUG 2025/06
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/2JVX3Y197Q.jpg)

今日のお題
OSGeo.JPのインフラ整備で、AnsibleでWordpress環境を作ったのでその内容を紹介し
ます。
なお、Ansibleの内容は非公開にしているので、概要のみを紹介します。
(概要のみなのはYAMLファイルが大きいので、プレゼンテーションファイルにするの
が厳しいからです)
ちなみにサーバ自体はAWS CDKで構築しています。EC2インスタンスとElastic IPぐら
いですが...
KoedoLUG 2025/06
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/5EGV3924EL.jpg)

Ansibleのインストール
macOS + uv を利用
uv init .
uv add ansible
KoedoLUG 2025/06
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/4JQ65WPRJP.jpg)

ディレクトリ構成
.
├── group_vars (secretなどを保存)
├── roles (各種役割を定義)
│
├── (省略)
│
└── wordpress (Wordpressの役割)
├── inventory.ini
├── osgeojp.yml
├── pyproject.toml
└── uv.lock
KoedoLUG 2025/06
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/K7449KYQ71.jpg)

wordpressディレクトリの構成
❯ tree roles/wordpress
roles/wordpress
├── tasks
│
├── common.yml
│
├── main.yml
│
├── old.yml
│
├── packages.yml
│
├── stg.yml
│
└── www.yml
└── templates
├── old.osgeo.jp.conf.j2
├── stg.osgeo.jp.conf.j2
├── wp-config-old.php.j2
├── wp-config-stg.php.j2
├── wp-config-www.php.j2
└── www.osgeo.jp.conf.j2
KoedoLUG 2025/06
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/LJ14KX6LJG.jpg)

wordpress/tasks/www.yml
このファイルによってwordpressを本番環境にインストールする
やってることは以下の通り。
1. インストール済みのwordpressのバージョンチェック
2. wordpress本家の最新バージョンをAPIから取得
3. バージョンが異なる場合は、最新バージョンをダウンロード
4. ダウンロードしたファイルを展開
5. wp-config.phpをテンプレートから生成
6. apacheの設定ファイルをテンプレートから生成して有効化
KoedoLUG 2025/06
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/GJWXDNWQE2.jpg)

wordpressのバージョンチェック
- name: fetch version of WordPress
shell: php -r &quot;include &#039;{{ wordpress_dir }}/wp-includes/version.php&#039;; echo \$wp_version;&quot;
register: wordpress_version_result
when: wordpress_version_file.stat.exists
changed_when: false
failed_when: false
ポイントとしてはphpのコマンドを使って、ちゃんとevalをしているところです。
KoedoLUG 2025/06
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4EZ6G353E3.jpg)

wordpress本家の最新バージョンをAPIから取得
- name: check current version of WordPress via API
shell: curl &quot;https://api.wordpress.org/core/version-check/1.7/?locale=ja&quot; | jq -r &#039;.offers | first | .version&#039;
register: wordpress_upstream_version_result
changed_when: false
failed_when: false
curlコマンドとjqコマンドは別のタスクでインストールしておく必要があります。
KoedoLUG 2025/06
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/Y762YX9ZEV.jpg)

バージョンが異なる場合は、最新バージョンをダウンロード (1/2)
- name: check if WordPress needs update
set_fact:
install_wordpress: &quot;{{ wordpress_upstream_version_result.stdout != wordpress_version }}&quot;
when: wordpress_upstream_version_result.stdout is defined
KoedoLUG 2025/06
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/G752GXN974.jpg)

バージョンが異なる場合は、最新バージョンをダウンロード (2/2)
- name: install and configure Wordpress
block:
- name: Download WordPress
get_url:
url: https://wordpress.org/latest.tar.gz
dest: /tmp/wordpress.tar.gz
- name: Extract WordPress
ansible.builtin.unarchive:
src: /tmp/wordpress.tar.gz
dest: /srv/www/wordpress
remote_src: yes
extra_opts: [--strip-components=1]
(省略)
when: install_wordpress | default(true)
メモ: 省略した部分はwww-dataユーザの所有権を設定するタスクです。
KoedoLUG 2025/06
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/9J24YX557R.jpg)

wp-config.phpをテンプレートから生成
- name: Copy wp-config.php
template:
src: wp-config-www.php.j2
dest: /srv/www/wordpress/wp-config.php
owner: www-data
group: www-data
mode: &quot;0644&quot;
テンプレートには変数としてmysqlのパスワードぐらいしか入っていません。
mysqlのパスワードは group_vars/all/valut.yml に定義していて、 anbible-vault で
暗号化しています。
KoedoLUG 2025/06
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/DEYMG8K6EM.jpg)

apacheの設定ファイルをテンプレートから生成して有効化
- name: Copy Apache2 vhost config for wordpress
template:
src: www.osgeo.jp.conf.j2
dest: /etc/apache2/sites-available/www.osgeo.jp.conf
owner: root
group: root
mode: &quot;0644&quot;
- name: Enable Apache2 vhost config for wordpress
command: a2ensite www.osgeo.jp.conf
- name: Reload Apache2
service:
name: apache2
state: reloaded
KoedoLUG 2025/06
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/VJNWGQZ1J8.jpg)

Ansibleの実行
uv run ansible-playbook -i inventory.ini osgeojp.yml --ask-vault-pass
--ask-vault-pass
できます。
KoedoLUG 2025/06
オプションをつけることで、暗号化された変数を復号化して実行
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/YE9XWDZY73.jpg)

おまけ
他にもいくつか自動化しています。
Prometheus関係
Node Exporterのインストール
Apache Exporterのインストール
Let&#039;s Encryptのインストール
Postfixのインストール
Redisのインストール
バックアップスクリプトのセットアップ
KoedoLUG 2025/06
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/GE82N31KED.jpg)

まとめ
Ansible最高！
KoedoLUG 2025/06
17


