はじめに
ApacheとMySQLのバージョンアップ手順について調べたのでまとめます。
作業環境はローカル端末のDockerコンテナで、Apache×PHPのWebサーバー+MySQLサーバーの構成です。
バージョンアップは
- Apache: 2.4.38 -> 2.4.59
- MySQL: 8.0.x -> 8.4.0
とし、執筆時点での最新版へのアップデートを考えています。
※Apacheのアップデートの際に使用するAPR、APR-Utilのバージョンは
- APR: 1.7.4
- APR-Util: 1.6.3
となります。
いただいたコメントを受けて追記させていただきます。
本記事ではミドルウェアの永続化および設定に必要なファイル群の管理について言及していないため、実際に運用されている環境でバージョンアップを実施する場合には設定ファイルの管理も考慮する必要があります。
一般的にはホストマシンや別途サービスやツールを使用して外部で管理することになりますが、今回はローカル環境で簡易的にバージョンアップを実施するという目的で執筆したため、考慮不足についてお詫び申し上げます。
概要
- ディレクトリ構成
- 各ファイル内容
- コンテナの起動
- Apacheのバージョンアップ
- MySQLのバージョンアップ
ディレクトリ構成
├── docker
│ ├── db
│ │ └── data // DB永続化用のボリューム
│ └── web
│ └── dockerfile // Webサーバー用のdockerfile
├── docker-compose.yml
└── index.php
各ファイル内容
docker/web/Dockerfile
# PHPとApacheの同梱版のイメージを使用
FROM php:7.4.8-apache
# 必要な処理を記述
RUN apt-get update && apt-get install -y vim \
&& apt-get install -y wget
docker-compose.yml
services:
web:
build: // ビルド元のソースを指定
context: ./docker/web // コンテキストパス
dockerfile: Dockerfile // dockerfileの名前
volumes:
- ./:/var/www/html // コンテナ内のhtmlディレクトリとボリュームを紐づけ
ports:
- "80:80" // ポート指定。デフォルトの80番ポート
container_name: web // コンテナ名
mysql:
image: mysql:8.0 // MySQLのバージョン
environment: // MySQLの情報
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_db
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
container_name: mysql
volumes:
- ./docker/db/data:/var/lib/mysql // DB永続化のボリューム設定
index.php
<?php
echo "Hello, World!";
?>
コンテナの起動
Webサーバー用のDockerイメージのビルド
// docker-compose.ymlのある階層で
docker compose build
イメージの確認
docker images
// 結果
apache_workspace_web latest xxxxxxxxxxxx 2 minutes ago 466MB
コンテナの起動
docker compose up -d // -d デーモンとしてコンテナを起動
起動確認
docker ps
// 結果
xxxxxxxxxxxx apache_workspace_web "docker-php-entrypoi…" 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp web
xxxxxxxxxxxx mysql:8.0 "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
ブラウザで localhost にアクセスして下の画面が表示されれば準備OKです
Apacheのバージョンアップ
【手順】
- コンテナにログイン
- 現在のバージョンを確認
- 各種設定ファイルのバックアップ
- アップデートに必要なツールのダウンロードとインストール
- Apacheの最新版
- ダウンロード
- APR+APR-Util
- ダウンロード+インストール
- Apacheの最新版
- Apacheのインストール
- パスの設定
- 再起動+バージョン確認
コンテナIDを取得し、Webサーバーのコンテナにログイン
docker ps // コンテナIDを取得
docker exec -it コンテナID bash
現在のバージョンを確認
apachectl -v
// 結果
Server version: Apache/2.4.38 (Debian)
Server built: 2019-10-15T19:53:42
設定ファイルのバックアップ
cp -r /etc/apache2 /etc/apache2.bak
ls /etc // apache2 apache2.bak
アップデートに必要なツールのダウンロード
- Apache
cd /usr/local/src // 設定ファイルを配置するディレクトリに移動
wget https://downloads.apache.org/httpd/httpd-2.4.59.tar.gz
tar -xvzf httpd-2.4.59.tar.gz
- APR
curl -k -O https://dlcdn.apache.org/apr/apr-1.7.4.tar.gz
tar -xvzf apr-1.7.4.tar.gz
cd apr-1.7.4
./configure // 設定を認識させる
make
make install
- APR-Util
apt-get update
apt-get install -y libssl-dev
apt-get install -y zlib1g-dev
apt-get install -y libexpat1-dev
apt-get install -y libpcre3 libpcre3-dev
cd /usr/local/src
curl -k -O https://downloads.apache.org/apr/apr-util-1.6.3.tar.gz
tar -xvzf apr-util-1.6.3.tar.gz
cd apr-util-1.6.3
./configure --with-apr=/usr/local/apr // apr-utilをaprに認識させる
make
make install
Apache のインストール
cd ../httpd-2.4.59
mv ../apr-1.7.4 srclib/apr // srclib内に配置して認識させる
mv ../apr-util-1.6.3 srclib/apr-util // 上記と同様
./configure --prefix=/usr/local/apache2 --with-included-apr --enable-so --enable-ssl --with-mpm=event
make
make install
環境変数にパスを設定する
export PATH=/usr/local/apache2/bin:$PATH
再起動 + バージョンを確認
apachectl restart
apachectl -v
// 結果
Server version: Apache/2.4.59 (Unix)
Server built: Jun 15 2024 05:13:16
バージョンが更新され、ブラウザでlocalhostにアクセスして無事に表示されれば完了
MySQLのバージョンアップ
【手順】
- 現在のバージョンを確認
- テーブル情報や設定ファイルのバックアップ
- docker-compose.yml のバージョンを変更しコンテナを再起動
- バージョンの確認
現在のバージョンを確認
docker exec -it コンテナID mysql -V
// 結果
mysql Ver 8.0.37 for Linux on x86_64 (MySQL Community Server - GPL)
テーブル情報や設定ファイルのバックアップ
※ホストにマウントしている永続化用のファイルがあればコピーしてバックアップを取得
docker-compose.yml のバージョンを変更しコンテナを再起動
mysql:
# image: mysql:8.0
image: mysql:8.4.0
environment:
docker stop コンテナID
docker remove コンテナID
docker ps -a
docker compose up -d
docker ps // MySQLのコンテナだけが起動し直すことを確認
バージョン確認
docker exec -it コンテナID mysql -V
// 結果
mysql Ver 8.4.0 for Linux on x86_64 (MySQL Community Server - GPL)
バージョンが更新されていれば完了
最後に
実際にアプリケーションを運用している場合はバージョンの差異によるエラーが発生するはずなので、必要に応じて対応しましょう。