こんにちは、前のブログから少し間があきました。最近色々なクラウドを使ってWordpress 環境を個人で立てているのですが、これといったものが定まらないです。色々経験するので、知識が増えて楽しいですが、そろそろこのWordpress のブログも落ち着きたいと言っています。
最近、Wordpress をOCI に移行して、Wordpress をDocker で環境を作ってみたいなと思いまして、それ用のAnsible を作成してみました。ECS みたいなのを使っているのではなく、VM の中にDocker をインストールしている感じになります。
今回はこれを紹介したいと思います。
今回作成した成果物
自分のGithub を参照しています。
どんな構成で作成した?
まずはTree でディレクトリ構造をお見せします。
こっちが、Ansible の環境です。大きく3つに分けると、docker をインストールするrole・wordpress の環境を作成するrole・後はshell をDocker の環境をgithub から取得して調整をごにょごにょするものです。
└─wordpress_in_docker
├─roles
│ ├─docker
│ │ └─tasks
│ ├─shell
│ └─wordpress
│ └─tasks
└─variables
一方下記がDocker の環境です.Docker の中身のconf ファイルなどを配置したり、docker compose yml を配置しているのが、下記のディレクトリになります。
├─docker_my_wordpress
│ ├─apache2
│ │ └─etc
│ │ └─conf.d
│ └─mysql
│ └─etc
Ansible で環境は作成したものの、ほとんどシェルスクリプトが担っているじゃねと思う所もありましたが、一旦さておき、ディレクトリ構造は上の感じで作成しています。
ansible 環境について
それぞれポイントだけかいつまんで紹介します。今回はAlma Linux 8 の環境で作成しました。
まずはDocker をインストールする時のyml ファイルです。最初にremove でpodman などをアンインストールするのが結構ポイントだったりします。これらは初期からインストールされていて、docker をインストールしようとすると、なぜかエラーが発生しました。なので、podman やrunc をremove する必要がありました。
---
#podman コマンドによってエラーが発生したため
- name: remove podman and related packages
yum:
name:
- podman
- podman-docker
- podman-compose
- podman-tui
- buildah
- skopeo
- skopeo-containers
- runc
- containers-common
state: absent
ignore_errors: true
- name: Download docker repo
shell: dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
- name: install docker in alma 8
yum:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-compose-plugin
state: present
# when: ansible_distribution == "AlmaLinux" and ansible_distribution_major_version == "8"
- name: install docker compose
ansible.builtin.shell: curl -L
"https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname
-s)-$(uname -m)" -o /usr/local/bin/docker-compose
- name: start docker
ansible.builtin.service:
name: docker
state: started
enabled: true
Docker がインストールさえすれば、このシェルスクリプトを使ってドキュメントルートなどを作成していきます。プログラムを書くとエラーハンドリングが多くなるのと一緒で、このシェル自体もほとんどエラーハンドリングです。ちょっと見づらいですが、やってることはドキュメントルート作成と、そこにGithub からclone してきたdocker 関連のファイルを置くだけです。
###########################################################################
# document root を作成して、Git repo を引っ張るシェルスクリプト
###########################################################################
# 変数定義
domain_name="blog.dev-tansanken.com"
Document_Root="/var/www/vhosts/${domain_name}/"
ProgramDir="/var/www/vhosts/${domain_name}/"
GitRepo="https://github.com/kentaindeed/docker_my_wordpress.git"
# ドキュメントルート作成
if [ -z "${domain_name}" ]; then
echo "エラー: 'DOMAIN_NAME' 変数が設定されていません。スクリプトを終了します。" >&2
exit 1
fi
if [ -z "${Document_Root}" ]; then
echo "エラー: 'Document_Root' 変数が設定されていません。スクリプトを終了します。" >&2
exit 1
fi
if [ -d "${Document_Root}" ]; then
echo "情報: ドキュメントルート '${Document_Root}' は既に存在します。スキップします。"
else
# 4. ドキュメントルートが存在しない場合、作成する
echo "情報: ドキュメントルート '${Document_Root}' を作成します..."
mkdir -p "${Document_Root}"
# 5. ディレクトリ作成の成否をチェック
if [ $? -ne 0 ]; then
echo "エラー: ドキュメントルート '${Document_Root}' の作成に失敗しました。" >&2
exit 1
else
echo "成功: ドキュメントルート '${Document_Root}' を作成しました。"
cd ${ProgramDir}
fi
fi
# Git clone 実行
echo " プログラムファイルのデプロイを開始します"
if [ -z "${GitRepo}" ]; then
echo "エラー: 'GitRepo' 変数が設定されていません。スクリプトを終了します。" >&2
exit 1
fi
if [ -d "${ProgramDir}/.git" ]; then
echo "情報: Git リポジトリが既に存在します。スキップします。"
else
# Git clone 実行
echo "情報: Git リポジトリをクローンします..."
git clone ${GitRepo} ${ProgramDir}
# Git clone の成否をチェック
if [ $? -ne 0 ]; then
echo "エラー: Git リポジトリのクローンに失敗しました。" >&2
exit 1
else
echo "成功: Git リポジトリをクローンしました。"
fi
fi
wordpress の環境作成@docker-compose
docker compose ファイルのみ紹介すると、パスワードなどは全て.env で書き込んでいて、そこから呼び出す形でかいています。それ以外は特別なことをしていないので、かなりシンプルにかくことができました。
version: "3.7"
services:
mysql:
image: mysql
hostname: mysql8
container_name: wordpress_mysql
volumes:
- ./mysql_data:/var/lib/mysql
- ./mysql/etc/my.cnf:/etc/my.cnf
environment:
MYSQL_ROOT_PASSWORD:${DB_PASSWORD}
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
ports:
- 3306:3306
wordpress:
container_name: tansanken_wp
hostname: wordpress
image: wordpress
volumes:
- ./public/wp/:/var/www/html
- ./public/log/:/var/log/apache2/
#- ./apache2/etc/default/apache2.conf:/etc/apache2/apache2.conf
- ./apache2/etc/conf.d/:/etc/apache2/sites-enabled/
links:
- mysql
depends_on:
- mysql
ports:
- "80:80"
environment:
- WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST}
- WORDPRESS_DB_NAME=${WORDPRESS_DB_NAME}
- WORDPRESS_DB_USER=${WORDPRESS_DB_USER}
- WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD}
強いて言うならば、apache のapache2.conf を一度docker を立ち上げてから、コピーする必要があったので、そこが少し面倒な感じではありました。
まとめ
WordPress in docker の環境をある程度自動デプロイできると簡単に検証などもできると思うので、検証したい方もぜひ使ってみてください。
コメント