現在借りているVPSサーバのスペックが低くく、過去にはGoogleさんに100点満点中2点という、あまりにひどい点を頂いたので、それを改善すべく奮闘中です。
GWにはVPSのサーバの乗り換えもしくはスケールアップを行いますが、その際、上モノ(Apahce+php)はいつでもバージョンを上げていけるよう。Dockerを使ってコンテナ化してみようと画策。
まずはタイトルに挙げた環境で環境を作ろうとしてみました。
DockerでCentOS8+apache2.4+php7.4環境を作る
Dockerfileについて
DockerFleとして用意したのは下記のとおりです。
# docker-hubからOSのイメージ引込
FROM centos:centos8.1.1911
# サーバの日付合わせ
RUN /bin/cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# epel-releaseのインストール
RUN yum install -y epel-release &&\
yum clean all
# remiのインストール
RUN rpm -ivh http://ftp.riken.jp/Linux/remi/enterprise/remi-release-8.rpm
# yumのアップデート
RUN yum update -y &&\
yum clean all
# 必要なモジュールのインストール(apache)
RUN yum -y install httpd &&\
yum clean all
# 必要なモジュールのインストール(php7.4)
RUN yum -y install php74-php php74-php-mysqli php74-php-gd php74-php-mbstring php74-php-opcache php74-php-xml php74-php-pear php74-php-devel php74-php-pecl-imagick php74-php-pecl-imagick-devel php74-php-pecl-zip
# phpコマンドを作成
RUN ln /usr/bin/php74 /usr/bin/php
# wordpressインストールディレクトリの所有者をapacheユーザに変更
RUN chown -R apache:apache /var/www/html
# php74−php−fpmのサービス永続化
RUN systemctl enable php74-php-fpm
# apache サーバのサービス永続化
RUN systemctl enable httpd
# 接続用ポートの穴あけ
EXPOSE 80
Dokerfileの細かな内容についてはDockerfileの補足で説明していますのでそちらもご覧ください。
dockerイメージの作成
Dockerfileの保存ディレクトリで下記のコマンドを実行
docker build -t wordpress:0.0.1 ./
-tのあとはタグ名なので、wordpressで動かすことを考えてwordpress:0.0.1としました。けど、よくよく考えたらwordpressは今回インストールしていないので、名前は変えても良さそうですね。
dockerコンテナの起動
イメージができたらコンテナを起動。
docker run --privileged --name wordpress -p 80:80 -v [localhostのディレクトリ]:/var/www/html -itd wordpress:0.0.1 /sbin/init
ブラウザで起動確認
dockerコンテナ起動時に指定した「localhostのディレクトリ」にwordpressのモジュールを入れておくと下記のように「wordpressへようこそ」画面が出るはず。ここまでくれば、この記事のゴールです。
ここまでたどり着くまでいろいろ調べまくりました。
もともとあるコンテナを使えばもっと手軽にできたと思いますが、勉強がてらDockerfileを作るところから始めたので思いの外時間がかかりましたが、勉強になりましたね。こうやって記事にすることで後で見直すこともできるので一石二鳥です。
Dockerfileの設定の補足
docker-hubからOSのイメージ引込
FROM centos:centos8.1.1191
OSコンテナの引き込みですね。latestでも良かったのですが、一旦執筆時点の最新のバージョンを指定しています。最終的にはlatestにするかもしれません。
サーバの日付合わせ
RUN /bin/cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
コンテナの時刻を日本時間に合わせるコマンドです。
ログなどを保管する際、時刻がおかしなことになっていると色々と面倒なので、必要な設定となりますね。
epel-releaseのインストール
RUN yum install -y epel-release &&\
yum clean all
remiのインストール
RUN rpm -ivh http://ftp.riken.jp/Linux/remi/enterprise/remi-release-8.rpm
php7.4をインストールするためにremiレポジトリをインストールする必要がありますが、まずここにたどり着くまで苦労しました。
CentOS8用のrpmをインストールしないと当然動かないのですが、ネットではremi-release-7.rpmでしか記事が見つからず、適当に7→8に書き換えたらインストールできました。
remiのインストールのに結構手こずりました。
yumのアップデート
RUN yum update -y &&\
yum clean all
yumのアップデートは必須作業なので、apache、php7.4のインストール前に実行しておきます。
必要なモジュールのインストール(apache)
RUN yum -y install httpd &&\
yum clean all
apacheのインストールはyum経由ですので特に何も設定は必要ありませんね。
必要なモジュールのインストール(php7.4)
RUN yum -y install php74-php php74-php-mysqli php74-php-gd php74-php-mbstring php74-php-opcache php74-php-xml
phpのモジュールのインストールはphp74でもインストールされますが、動作させるにはphp74-php-xxx といったphp74とモジュールの間に-phpを入れる必要があるというところに行き着くまでにまた手こずりました。
phpコマンドを作成
RUN ln /usr/bin/php74 /usr/bin/php
php7.4を入れた後、phpとコマンドを実行しても何も反応がなく、いろいろ調べた結果、php74がphpのコマンドであることが判明。
このままだと、phpとしてコマンドが実行できないので、リンクを張ってphpでもコマンドが実行できるようにしました。
wordpressインストールディレクトリの所有者をapacheユーザに変更
RUN chown -R apache:apache /var/www/html
apacheサーバの起動ユーザに合わせてwordpress配置ディレクトリのオーナーを変更。
php74-php-fpmのサービス永続化
RUN systemctl enable php74-php-fpm
apacheをインストールしてもwordpresの画面が立ち上がらず何故かと調べていたらphp-fpmがサービスとして起動している必要があるということがわかりました。
コンテナ起動時に自動でサービスが起動するようにサービスを永続化させるようにしました。
apache サーバのサービス永続化
RUN systemctl enable httpd
apacheもphp-fpm同様サービスとして常に起動するように設定しました。
接続用ポートの穴あけ
EXPOSE 80
http接続できるように80番のポートを開けます。https化を狙って443も開けておく必要がありますが、それはこれからGWまでの課題ですね。
今後の課題
- https化
- mysqlとの接続
といったところでしょうか。wordpressの画面は起動しましたがwordpressまではインストールできていないです。
なので、GWまでにはこのあたりを解決したいですね。