(Docker) Almalinux を見据えて CentOS8 での環境構築を試験してみる

手前味噌で恐縮ですが、自作の LAMP環境 を検証する Docker Compose について。

イメージを CentOS7 ベースで構築しているので、いずれは AlmaLinux なり Rocky Linux なりに移行しなければならないことは分かっていました。

そこで、その以降を見据えて残り数日の命の CentOS8 で試験してみることにしました。なぜ AlmaLinux や Rocky Linux ではなくわざわざ CentOS8 かというと、いきなりそれらのOSに飛びついて何らかの不具合が発生したときに原因の切り分けで苦労するならば、まだ同じシリーズで差分が少ない (と想定される) CentOS8 で試験して、問題なければ次に進もう、という段階的な試験を想定したためです。

検証

docker run --name php7_cent8 -it centos:centos8 /bin/bash

まずはイメージを取得し、 bash に入ります。

Apache + PHP

最初は Apache + PHP 。こちらについては、以前 CentOS8 をインストールして遊んだときにremiリポジトリの入り方が CentOS7 とは異なることが分かっていたので、多少手を加える必要があるだろう、と踏んでいました。

# \cp -pf /usr/share/zoneinfo/Japan /etc/localtime
#

これは問題なし。

# dnf -y update && yum -y install  epel-release sudo less iproute httpd-devel zip unzip openssl mod_ssl

## 略

Installed:
  apr-1.6.3-12.el8.x86_64                                     apr-devel-1.6.3-12.el8.x86_64
  apr-util-1.6.1-6.el8.x86_64                                 apr-util-bdb-1.6.1-6.el8.x86_64
  apr-util-devel-1.6.1-6.el8.x86_64                           apr-util-openssl-1.6.1-6.el8.x86_64
  brotli-1.0.6-3.el8.x86_64                                   centos-logos-httpd-85.8-2.el8.noarch
  cyrus-sasl-2.1.27-5.el8.x86_64                              cyrus-sasl-devel-2.1.27-5.el8.x86_64
  epel-release-8-11.el8.noarch                                expat-devel-2.2.5-4.el8.x86_64
  groff-base-1.22.3-18.el8.x86_64                             httpd-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64
  httpd-devel-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64   httpd-filesystem-2.4.37-43.module_el8.5.0+1022+b541f3b1.noarch   
  httpd-tools-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64   libdb-devel-5.3.28-42.el8_4.x86_64
  libpath_utils-0.2.1-39.el8.x86_64                           libpkgconf-1.4.2-1.el8.x86_64
  libtalloc-2.3.2-1.el8.x86_64                                mailcap-2.1.48-3.el8.noarch
  mod_http2-1.15.7-3.module_el8.4.0+778+c970deab.x86_64       mod_ssl-1:2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64
  ncurses-6.1-9.20180224.el8.x86_64                           openldap-devel-2.4.46-18.el8.x86_64
  perl-Carp-1.42-396.el8.noarch                               perl-Data-Dumper-2.167-399.el8.x86_64
  perl-Digest-1.17-395.el8.noarch                             perl-Digest-MD5-2.55-396.el8.x86_64
  perl-Encode-4:2.97-3.el8.x86_64                             perl-Errno-1.28-420.el8.x86_64
  perl-Exporter-5.72-396.el8.noarch                           perl-File-Path-2.15-2.el8.noarch
  perl-File-Temp-0.230.600-1.el8.noarch                       perl-Getopt-Long-1:2.50-4.el8.noarch
  perl-HTTP-Tiny-0.074-1.el8.noarch                           perl-IO-1.38-420.el8.x86_64
  perl-IO-Socket-IP-0.39-5.el8.noarch                         perl-IO-Socket-SSL-2.066-4.module_el8.3.0+410+ff426aa3.noarch    
  perl-MIME-Base64-3.15-396.el8.x86_64                        perl-Mozilla-CA-20160104-7.module_el8.3.0+416+dee7bcef.noarch    
  perl-Net-SSLeay-1.88-1.module_el8.3.0+410+ff426aa3.x86_64   perl-PathTools-3.74-1.el8.x86_64
  perl-Pod-Escapes-1:1.07-395.el8.noarch                      perl-Pod-Perldoc-3.28-396.el8.noarch
  perl-Pod-Simple-1:3.35-395.el8.noarch                       perl-Pod-Usage-4:1.69-395.el8.noarch
  perl-Scalar-List-Utils-3:1.49-2.el8.x86_64                  perl-Socket-4:2.027-3.el8.x86_64
  perl-Storable-1:3.11-3.el8.x86_64                           perl-Term-ANSIColor-4.06-396.el8.noarch
  perl-Term-Cap-1.17-395.el8.noarch                           perl-Text-ParseWords-3.30-395.el8.noarch
  perl-Text-Tabs+Wrap-2013.0523-395.el8.noarch                perl-Time-Local-1:1.280-1.el8.noarch
  perl-URI-1.73-3.el8.noarch                                  perl-Unicode-Normalize-1.25-396.el8.x86_64
  perl-constant-1.33-396.el8.noarch                           perl-interpreter-4:5.26.3-420.el8.x86_64
  perl-libnet-3.11-3.el8.noarch                               perl-libs-4:5.26.3-420.el8.x86_64
  perl-macros-4:5.26.3-420.el8.x86_64                         perl-parent-1:0.237-1.el8.noarch
  perl-podlators-4.11-1.el8.noarch                            perl-threads-1:2.21-2.el8.x86_64
  perl-threads-shared-1.58-2.el8.x86_64                       pkgconf-1.4.2-1.el8.x86_64
  pkgconf-m4-1.4.2-1.el8.noarch                               pkgconf-pkg-config-1.4.2-1.el8.x86_64
  sscg-2.3.3-14.el8.x86_64                                    sudo-1.8.29-7.el8_4.1.x86_64
  unzip-6.0-45.el8_4.x86_64                                   zip-3.0-23.el8.x86_64

Complete!

OK。

# dnf -y upgrade

## 略

Upgraded:
  epel-release-8-13.el8.noarch

Complete!

特に大きな差分もなさそうです。OK。

remiリポジトリ

# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-8.rpm
Retrieving http://rpms.famillecollet.com/enterprise/remi-release-8.rpm
warning: /var/tmp/rpm-tmp.hlvLxe: Header V4 RSA/SHA256 Signature, key ID 5f11735a: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:remi-release-8.5-2.el8.remi      ################################# [100%]
# rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi2021
#

OK。 CentOS8 用のリポジトリに切り替えました。鍵についてはすぐ RPM-GPG-KEY-remi2022 にしなければならないでしょうけど。

dnf

# dnf config-manager --enable remi && dnf config-manager --enable remi-php74
No such command: config-manager. Please use /usr/bin/dnf --help
It could be a DNF plugin command, try: "dnf install 'dnf-command(config-manager)'"

remi-php74 に指定で躓くかと思いきや、そもそも config-manager がない、と?

元々は yum-config-manager だったのですが、 CentOS8 であれば dnf ベースの方が良いだろう、ということで置き換えてはみましたが、ダメですか……。

こちらより dnf install -y dnf-plugins-core してみます。

# dnf install dnf-plugins-core

## 略

Installed:
  dbus-glib-0.110-2.el8.x86_64        dnf-plugins-core-4.0.21-3.el8.noarch            python3-dateutil-1:2.6.1-6.el8.noarch    
  python3-dbus-1.2.4-15.el8.x86_64    python3-dnf-plugins-core-4.0.21-3.el8.noarch    python3-six-1.11.0-8.el8.noarch

Complete!

OK。

remi + PHP

# dnf config-manager --enable remi && dnf config-manager --enable remi-php74
Error: No matching repo to modify: remi-php74.

……やはり remi-php74 で引っかかりましたか。

……想定していたものとは少し違うやり方ですが、試してみましょう。

# dnf module reset php

## 略

Remi's RPM repository for Enterprise Linux 8 - x86_64                                          598 kB/s | 3.9 MB     00:06    
Last metadata expiration check: 0:00:03 ago on DDD dd mmm yyyy hh:ii:ss AM UTC.
Dependencies resolved.
Nothing to do.
Complete!

OK。

# dnf module install -y php:remi-7.4

## 略

Installed:
  libedit-3.1-23.20170329cvs.el8.x86_64                                     libxslt-1.1.32-6.el8.x86_64
  nginx-filesystem-1:1.14.1-9.module_el8.0.0+184+e34fea82.noarch            oniguruma5php-6.9.7.1-1.el8.remi.x86_64
  php-cli-7.4.27-1.el8.remi.x86_64                                          php-common-7.4.27-1.el8.remi.x86_64
  php-fpm-7.4.27-1.el8.remi.x86_64                                          php-json-7.4.27-1.el8.remi.x86_64
  php-mbstring-7.4.27-1.el8.remi.x86_64                                     php-xml-7.4.27-1.el8.remi.x86_64

Complete!

# php --version
PHP 7.4.27 (cli) (built: Dec 14 2021 17:17:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

OK。入りましたね。これに従い該当箇所を書き換えます。

# enable repository remi & remi-php74
#RUN dnf config-manager --enable remi && dnf config-manager --enable remi-php74
# disable default module
RUN dnf module reset -y php
RUN dnf module install -y php:remi-7.4

## 略

# disable repository remi & remi-php74
#RUN dnf config-manager --disable remi && dnf config-manager --disable remi-php74

config-manager によるリポジトリ使用のオン・オフの切り替えを削除しました。

# dnf -y install php php-devel php-pdo php-mysqlnd php-mbstring php-gd php-pear php-pecl-apc-devel zlib-devel php-xml php-mcrypt php-pecl-xdebug

## 略

Installed:
  autoconf-2.69-29.el8.noarch                                     automake-1.16.1-7.el8.noarch
  cmake-filesystem-3.20.2-4.el8.x86_64                            cpp-8.5.0-4.el8_5.x86_64
  dejavu-fonts-common-2.35-7.el8.noarch                           dejavu-sans-fonts-2.35-7.el8.noarch
  emacs-filesystem-1:26.1-7.el8.noarch                            fontconfig-2.13.1-4.el8.x86_64
  fontpackages-filesystem-1.44-22.el8.noarch                      freetype-2.9.1-4.el8_3.1.x86_64
  fribidi-1.0.4-8.el8.x86_64                                      gcc-8.5.0-4.el8_5.x86_64
  gcc-c++-8.5.0-4.el8_5.x86_64                                    gd3php-2.3.3-4.el8.remi.x86_64
  glibc-devel-2.28-164.el8.x86_64                                 glibc-headers-2.28-164.el8.x86_64
  graphite2-1.3.10-10.el8.x86_64                                  harfbuzz-1.7.5-3.el8.x86_64
  isl-0.16.1-6.el8.x86_64                                         jbigkit-libs-2.1-14.el8.x86_64
  kernel-headers-4.18.0-348.2.1.el8_5.x86_64                      keyutils-libs-devel-1.5.10-9.el8.x86_64
  krb5-devel-1.18.2-14.el8.x86_64                                 libX11-1.6.8-5.el8.x86_64
  libX11-common-1.6.8-5.el8.noarch                                libXau-1.0.9-3.el8.x86_64
  libXpm-3.5.12-8.el8.x86_64                                      libcom_err-devel-1.45.6-2.el8.x86_64
  libimagequant-2.12.5-1.el8.x86_64                               libjpeg-turbo-1.5.3-12.el8.x86_64
  libkadm5-1.18.2-14.el8.x86_64                                   libmcrypt-2.5.8-26.el8.x86_64
  libmpc-1.1.0-9.1.el8.x86_64                                     libpng-2:1.6.34-5.el8.x86_64
  libraqm-0.7.0-4.el8.x86_64                                      libselinux-devel-2.9-5.el8.x86_64
  libsepol-devel-2.9-3.el8.x86_64                                 libsodium-1.0.18-2.el8.x86_64
  libstdc++-devel-8.5.0-4.el8_5.x86_64                            libtiff-4.0.9-20.el8.x86_64
  libtool-2.4.6-25.el8.x86_64                                     libverto-devel-0.3.0-5.el8.x86_64
  libwebp-1.0.0-5.el8.x86_64                                      libxcb-1.13.1-1.el8.x86_64
  libxcrypt-devel-4.1.1-6.el8.x86_64                              libxml2-devel-2.9.7-9.el8_4.2.x86_64
  m4-1.4.18-7.el8.x86_64                                          make-1:4.2.1-10.el8.x86_64
  openssl-devel-1:1.1.1k-5.el8_5.x86_64                           pcre2-devel-10.32-2.el8.x86_64
  pcre2-utf16-10.32-2.el8.x86_64                                  pcre2-utf32-10.32-2.el8.x86_64
  perl-Thread-Queue-3.13-1.el8.noarch                             php-7.4.27-1.el8.remi.x86_64
  php-devel-7.4.27-1.el8.remi.x86_64                              php-fedora-autoloader-1.0.1-2.el8.remi.noarch
  php-gd-7.4.27-1.el8.remi.x86_64                                 php-mysqlnd-7.4.27-1.el8.remi.x86_64
  php-opcache-7.4.27-1.el8.remi.x86_64                            php-pdo-7.4.27-1.el8.remi.x86_64
  php-pear-1:1.10.13-1.el8.remi.noarch                            php-pecl-apcu-5.1.21-1.el8.remi.7.4.x86_64
  php-pecl-apcu-devel-5.1.21-1.el8.remi.7.4.x86_64                php-pecl-mcrypt-1.0.4-1.el8.remi.7.4.x86_64
  php-pecl-xdebug-2.9.8-1.el8.remi.7.4.x86_64                     php-process-7.4.27-1.el8.remi.x86_64
  php-sodium-7.4.27-1.el8.remi.x86_64                             xz-devel-5.2.4-3.el8.x86_64
  zlib-devel-1.2.11-17.el8.x86_64

Complete!

OK。

# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"   && php composer-setup.php   && php -r "unlink('composer-setup.php');"   && mv composer.phar /usr/local/bin/composer
All settings correct for using Composer
Downloading...

Composer (version 2.2.1) successfully installed to: /etc/yum.repos.d/composer.phar
Use it: php composer.phar

# composer --version
Composer version 2.2.1 2021-12-22 22:21:31

Composer も入りました。

# mkdir /var/log/php
# chown apache /var/log/php
# chmod 755 /var/log/php
# mkdir -p /etc/ssl/private

まあこの辺りは普通に。

SSL

# openssl req -new -newkey rsa:2048 -nodes -out /etc/ssl/private/server.csr -keyout /etc/ssl/private/server.key -subj "/C=/ST=/L=/O=/OU=/CN=*.lvh.me"

## 略

# openssl x509 -days 365 -req -signkey /etc/ssl/private/server.key -in /etc/ssl/private/server.csr -out /etc/ssl/private/server.crt
Signature ok
subject=CN = *.lvh.me
Getting Private key

OK。

Apache の設定ファイル

ssl.conf

# cat /etc/httpd/conf.d/ssl.conf 

## 略

表示させたSSL用の設定を現行のものと差し替えます。ただし、現行の設定をなるべく引き継ぐように。これは他の設定ファイルも同様です。

- SSLRandomSeed startup file:/dev/urandom  256
- SSLRandomSeed connect builtin

- SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA

現行にあったこれらの行は削除。

+ SSLHonorCipherOrder on

これは新しく追加されていました。

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

プロトコルについては念のため現行の設定を引き継ぎ。流石にもう SSLv2 なんて存在しないでしょうけど……。

- <Files ~ "\.(cgi|shtml|phtml|php3?)$">
+ <FilesMatch "\.(cgi|shtml|phtml|php)$">
      SSLOptions +StdEnvVars
- </Files>
+ </FilesMatch>

微妙にディレクティブの表現が変わっていますが、影響はなさそうなので変更を受け入れます。

php.conf

# cat /etc/httpd/conf.d/php.conf

## 略

# Redirect to local php-fpm if mod_php (5 or 7) is not available
<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    # Enable http authorization headers
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

    <FilesMatch \.(php|phar)$>
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
  </IfModule>
</IfModule>

こちらは最後の部分に追記がありますね。これはそのまま受け入れ。

php.ini

# cat /etc/php.ini

## 略

こちらも設定を引き継ぎ、といっても現行の設定と変更点はなく(自前の設定を引き継いだ) 差分としてはコメントの文字列くらい。

AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 192.0.2.1. Set the ‘ServerName’ directive globally to suppress this message

Apache を起動しようとしたところ、

AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 192.0.2.1. Set the ‘ServerName’ directive globally to suppress this message

のエラーメッセージがログに記録されて起動してこない現象に遭遇。

そういえば元々の Dockerfile には記述していましたが、 httpd.conf への追記をしていませんでした。

echo ServerName www.example.com:80 >> /etc/httpd/conf/httpd.conf

これでOK。

# httpd -v
Server version: Apache/2.4.37 (centos)
Server built:   Nov 12 2021 04:57:27

バージョンも拾えました。

(2)No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /run/php-fpm/www.sock (*) failed

これで Apache も起動してきたのでブラウザで表示確認、ということで phpinfo() でも表示させようかとファイルを用意して curl してみると……

Service Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

503エラーが出てしまいました。

(2)No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /run/php-fpm/www.sock (*) failed

Apache のエラーログには上述のログが記録されていました。

今までとは異なる方法で PHP をインストールしたら、どうやら php-fpm (CGIモード) で動作しようとしてしまっているようです。

今回の環境ではCGI版かモジュール版かはあまり考慮しておらず、Webサーバも Apache のためモジュール版でも良いと判断。

動作を切り替えます。

# less /etc/httpd/conf/httpd.conf

## 略

Include conf.modules.d/*.conf

念のためモジュール読み込みの記述があることを確認。

# ls /etc/httpd/conf.modules.d/
00-base.conf      00-lua.conf       00-optional.conf  00-ssl.conf       01-cgi.conf       10-proxy_h2.conf  README
00-dav.conf       00-mpm.conf       00-proxy.conf     00-systemd.conf   10-h2.conf        15-php.conf

関係しそうなのは 00-mpm.conf, 01-cgi.conf, 15-php.conf 辺りでしょうか。

# less /etc/httpd/conf.modules.d/15-php.conf

# Cannot load both php5 and php7 modules
<IfModule !mod_php5.c>
  <IfModule prefork.c>
    LoadModule php7_module modules/libphp7.so
  </IfModule>
</IfModule>

ここはそのまま。

# less /etc/httpd/conf.modules.d/01-cgi.conf 

# This configuration file loads a CGI module appropriate to the MPM
# which has been configured in 00-mpm.conf.  mod_cgid should be used
# with a threaded MPM; mod_cgi with the prefork MPM.

<IfModule mpm_worker_module>
   LoadModule cgid_module modules/mod_cgid.so
</IfModule>
<IfModule mpm_event_module>
   LoadModule cgid_module modules/mod_cgid.so
</IfModule>
<IfModule mpm_prefork_module>
   LoadModule cgi_module modules/mod_cgi.so
</IfModule>

ここもそのまま。

# less /etc/httpd/conf.modules.d/00-mpm.conf

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines.  See the httpd.conf(5) man
# page for more information on changing the MPM.

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#
# NOTE: If enabling prefork, the httpd_graceful_shutdown SELinux
# boolean should be enabled, to allow graceful stop/shutdown.
#
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
LoadModule mpm_event_module modules/mod_mpm_event.so

変更するのはここ。

- #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
+ LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

- LoadModule mpm_event_module modules/mod_mpm_event.so
# LoadModule mpm_event_module modules/mod_mpm_event.so

上述のうち2ヶ所を反転させます。

これでOK。起動も確認できました。

テンプレートとして上述を反転させた 00-mpm.conf を用意し、エントリポイントでファイルコピーして設定を上書きすることで対処しました。

最終的に AlmaLinux の Docker Compose で起動、確認した phpinfo() の画面
最終的に AlmaLinux の Docker Compose で起動、確認した phpinfo() の画面

最終的に AlmaLinux の Docker Compose を作成して起動し、ブラウザで該当の PHPファイル にアクセスし、 phpinfo() の画面が表示されることを確認できました。OK。

SSLCertificateFile: file ‘/etc/pki/tls/certs/localhost.crt’ does not exist or is empty

上述のエラーの他に

SSLCertificateFile: file ‘/etc/pki/tls/certs/localhost.crt’ does not exist or is empty

localhost のSSL証明書がない、というエラーにも遭遇しました。

なければ作れば良いだけ、上述で

echo ServerName www.example.com:80 >> /etc/httpd/conf/httpd.conf

としているので、このダミードメインを使います。

# openssl req -new -newkey rsa:2048 -nodes -out /etc/pki/tls/certs/localhost.csr -keyout /etc/pki/tls/private/localhost.key -subj "/C=/ST=/L=/O=/OU=/CN=www.example.com"

## 略

# openssl x509 -days 365 -req -signkey /etc/pki/tls/private/localhost.key -in /etc/pki/tls/certs/localhost.csr -out /etc/pki/tls/certs/localhost.crt
Signature ok
subject=CN = www.example.com
Getting Private key

これでOK。 ssl.conf には記述はあるのですが……。

MySQL

次に MySQL 側を。こちらはほぼ手を加える必要はないという想定です。

# dnf localinstall https://dev.mysql.com/get/mysql80-community-release-el8-2.noarch.rpm

## 略

Package mysql80-community-release-el8-2.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!

CentOS8 用ということでリポジトリの入れ方を少し変更。

# ls /etc/yum.repo.d/
CentOS-Linux-AppStream.repo          CentOS-Linux-Media.repo       epel-testing.repo
CentOS-Linux-BaseOS.repo             CentOS-Linux-Plus.repo        mysql-community.repo
CentOS-Linux-ContinuousRelease.repo  CentOS-Linux-PowerTools.repo  mysql-community-source.repo
CentOS-Linux-Debuginfo.repo          CentOS-Linux-Sources.repo     remi-modular.repo
CentOS-Linux-Devel.repo              epel-modular.repo             remi.repo
CentOS-Linux-Extras.repo             epel-playground.repo          remi-safe.repo
CentOS-Linux-FastTrack.repo          epel.repo
CentOS-Linux-HighAvailability.repo   epel-testing-modular.repo

mysql-community.repo, mysql-community-source.repo の2つが追加されたことを確認。

# dnf module disable mysql

## 略

Complete!

デフォルトの MySQL がいると邪魔になるので無効化して

# dnf -y install mysql-community-devel mysql-community-server

## 略

Installed:
  mysql-community-client-8.0.27-1.el8.x86_64                 mysql-community-client-plugins-8.0.27-1.el8.x86_64
  mysql-community-common-8.0.27-1.el8.x86_64                 mysql-community-devel-8.0.27-1.el8.x86_64
  mysql-community-libs-8.0.27-1.el8.x86_64                   mysql-community-server-8.0.27-1.el8.x86_64
  net-tools-2.0-0.52.20160912git.el8.x86_64

Complete!

インストール完了。

# mysqld --version
/usr/sbin/mysqld  Ver 8.0.27 for Linux on x86_64 (MySQL Community Server - GPL)

デフォルトでは 8.0.26 だったバージョンが地味に 8.0.27 に上がりました。

# grep 'temporary password' /var/log/mysqld.log       
yyyy-mm-ddThh:ii:ss.zzzzzzZ 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: XXXXXXXXXXXX

初期パスワードの出現位置が半角スペース区切りで13番目であることを確認。これはエントリポイントで awk を使って抽出、初期パスワードを環境変数の値で書き換える処理で使用するため個人的には重要ポイント。ここは変更しなくて良さそうです。

# cat /etc/my.cnf

[mysqld]

## 略

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

デフォルトで4つパラメータが指定されています。うち3つはテンプレートの設定ファイルに記述がされているので不要、 pid-file だけ現時点では指定がないため、これだけ base.cnf に移植します。

/etc/my.cnf には上述4つを削除した代わりに !includedir /etc/my.cnf.d を末尾に追加したものを現行の my.cnf と差し替え。

これで MySQL 側は良さそうです。

なお、 phpMyAdmin は公式イメージをそのまま使っているので変更なし。

以上で一通り動作検証できたので、これをベースに AlmaLinux 用に書き換えれば良さそうです。

参考

Docker

AlmaLinux

dnf

remi

AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 192.0.2.1. Set the ‘ServerName’ directive globally to suppress this message

PHP

(2)No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /run/php-fpm/www.sock (*) failed

php-fpm

SSLCertificateFile: file ‘/etc/pki/tls/certs/localhost.crt’ does not exist or is empty

MySQL

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。