ソースからLAMP環境 + WordPressを構築する(CentOS8 + Apache2.4 + MySQL8.0 + PHP7.4)

概要

今回はソースからインストールしてLAMP環境 + WordPressを構築していこうと思います。ミドルウェアや、他にも必要になるものはなるべくソースからインストールしていますが、コンパイラや細かいライブラリは、必要になった段階でdnfコマンドでパッケージからインストールします。

以下の記事では、当記事よりも細かいライブラリも含めて全てソースインストールしています。もしよかったらこちらも参考にしてみてください。(2021 – 2/24追記)

AlmaLinux + Apache2.4 + MySQL8.0 + PHP8.0をソースインストール縛りで構築しWordPressを動かす

環境

  • ホストOS(macOS Catalina 10.15.7)
  • VirtualBox 6.1.16
  • 仮想マシン(CentOS8)
  • Apache 2.4.46
  • MySQL 8.0.22
  • PHP 7.4.13
  • WordPress 5.5.3

Apache

以下のページにApacheのビルドに必要なライブラリやインストール手順が記されており、基本ここを参考にしています。

Compiling and Installing – Apache HTTP Server Version 2.4

これに従うと、APR、APR-Util、PCREの三つのライブラリが必要になりますが、その他にもExpatというライブラリや追加した方が良いモジュールもあるので、作業がスムーズになるように整理してまとめていきます。

APR & APR-Util

APR(Apache Portable Runtime)は、Apacheのサポートライブラリで、OS等の環境の違いを吸収する機能を提供します。もし仮に、使用するOSで一般的な機能が備わっていない場合、このAPRが代わりとなってその機能を提供したりします。

まずはApacheの本体をダウンロードして、解凍・展開だけしておきます。

# cd /usr/local/src
# wget https://ftp.tsukuba.wide.ad.jp/software/apache/httpd/httpd-2.4.46.tar.gz
# tar -zxvf httpd-2.4.46.tar.gz

そして以下のページからAPRとAPR-Utilをダウンロードしてきます。

Welcome! – The Apache Portable Runtime Project

APRからいきます。tarボールをゲットし、解凍・展開して、Apache本体のsrclibディレクトリ以下にバージョンを省いた名前で配置させます。

# wget https://ftp.yz.yamagata-u.ac.jp/pub/network/apache/apr/apr-1.7.0.tar.gz
# tar -zxvf apr-1.7.0.tar.gz
# mv apr-1.7.0 httpd-2.4.46/srclib/apr

APR-Utilも同じような手順で行います。

# wget https://ftp.yz.yamagata-u.ac.jp/pub/network/apache//apr/apr-util-1.6.1.tar.gz
# tar -zxvf apr-util-1.6.1.tar.gz
# mv apr-util-1.6.1 httpd-2.4.46/srclib/apr-util

このように配置することで、一つずつビルドする必要がなくなって楽です。つまり、Apacheをビルドする際のconfigureのオプションで、–include-with-aprを指定することでApacheと一緒にビルドしてくれます。

以上でAPRとAPR-Utilの準備は終わりです。

PCRE

PCRE(Perl Compatible Regular Expressions)は、Perl互換の正規表現を他の言語でも使えるようにするためのライブラリで、多くのミドルウェア等で必要とされています。

事前準備として、gccやg++というGNUプロジェクトが開発しているコンパイラがビルドの際に必要になるので、以下のコマンドでインストールしておきます。またコンパイルする際に必須のmakeコマンドもインストールしておきます。

# dnf install gcc gcc-c++ make

ではPCREのビルド作業を始めていきます。以下のサイトからダウンロードして、展開・解凍を行い、Apacheのsrclibディレクトリ以下に移動させます。

PCRE – Perl Compatible Regular Expressions

# wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
# tar -zxvf pcre-8.44.tar.gz

PCREは先ほどのAPRとAPR-Utilとは違い、–with-included-aprの恩恵は受けれないので、コンパイルしてインストールしておきます。

# ./configure
# make
# make install

おそらくこの状態のままでApacheをビルドしようとすると、make時に以下ようなエラーがでると思います。

xml/apr_xml.c:35:10: fatal error: expat.h: No such file or directory
 #include <expat.h>

出力されている通り、expatというものが必要です。

Expat

Expatとは、XMLパーサという、XMLファイルの中身のデータを解析・整形する機能を提供するライブラリです。

Welcome to Expat! · Expat XML parser

ここのサイトからtarボールを取得し、解凍・展開してビルドします。

# cd /usr/local/src
# wget https://github.com/libexpat/libexpat/releases/download/R_2_2_10/expat-2.2.10.tar.gz
# tar -zxvf expat-2.2.10.tar.gz
# cd expat-2.2.10
# ./configure
# make
# make install

OpenSSL

以上の準備でApacheはビルドできますが、HTTPS通信は必須だと思うので、OpenSSLをソースからビルドします。

なぜこの段階でやるかというと、OpenSSLを使用することをApacheのビルド時に設定しておかないと、後からOpenSSLを使用できないからです(再度ビルドすることになる)。

まずはPerlが必要となるのでdnfでインストールしておきます。

# dnf install Perl
# cd /usr/local/src
# wget https://www.openssl.org/source/openssl-1.1.1h.tar.gz
# tar -zxvf openssl-1.1.1h.tar.gz
# cd openssl-1.1.1h
# ./config
# make
# make install

Apache

ではApacheをビルドしていきます。

# cd /usr/local/src/httpd-2.4.46/
# ./configure \
--prefix=/usr/local/httpd \
--with-included-apr \
--with-pcre=/usr/local/src/pcre-8.44/pcre-config \
--enable-mods-shared=all \
--enable-ssl \
--with-ssl=/usr/local/ssl \
--with-mpms-shared=all
# make
# make install

configureのオプションは以下の通りです。

オプション説明
–prefixインストールする位置を指定
–with-included-aprsrclib内のAPRとAPR-Utilもビルド対象に追加
–with-pcreインストールしたPCREの場所を指定
–enable-mods-sharedallを指定して多くの動的モジュールをビルド対象に追加
–enable-sslsslモジュールをビルド対象に追加
–with-sslインストールしたOpenSSLの場所を指定
–with-mpms-sharedallを指定してworker, prefork, eventをビルド対象に追加

ビルドが完了したら、新しくapacheユーザとグループを作成し、メイン設定ファイルを変更していきます。サービスを動かす用のユーザなので、デフォルトシェルに/sbin/nologinを指定して、ログインを禁止しています。

# cd /usr/local/httpd/
# groupadd apache
# useradd apache -g apache -s /sbin/nologin
# chown -R apache.apache .
# vi conf/httpd.conf
---------(省略)------------
User apache
Group apache

ユニットファイルを以下のように編集して、systemctlコマンドで起動や停止を行えるようにします。

# vi /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/httpd/bin/apachectl start
ExecReload=/usr/local/httpd/bin/apachectl graceful
ExecStop=/usr/local/httpd/bin/apachectl stop

[Install]
WantedBy=multi-user.target

以下のコマンドで変更を反映させます。

# systemctl daemon-reload

ファイアウォールの設定を変更して、HTTP/HTTPS通信用の待ち受けポートを開放させます。

# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --add-service=https --zone=public --permanent
# firewall-cmd --reload

自動起動&今すぐ起動の設定を行います。

# systemctl enable httpd --now

まずはcurlコマンドでページをとってこれるか確認します。

# curl http://192.168.10.5
<html><body><h1>It works!</h1></body></html>

Webブラウザからもアクセスして、以下の画面が表示されることを確認します。

MySQL

ではMySQLをソースからインストールしていこうと思います。ここからの手順は基本以下のサイトを参考にしています。

2.9 Installing MySQL from Source – MySQL :: Developer Zone

事前準備として、細かいものは先にインストールしておきます。

# dnf install libtirpc-devel cmake ncurses-devel
# dnf --enablerepo=PowerTools install rpcgen

では、以下のサイトからtarボールを取得し、解凍・展開します。

Download MySQL Community Server – MySQL

# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.22.tar.gz
# tar -zxvf mysql-8.0.22.tar.gz

mysqlのディレクトリに新しくビルド用のディレクトリを作成し、そこで作業していきます。

# cd mysql-8.0.22
# mkdir bld
# cd bld

mysqlはcmakeというビルドの自動化ツールを使用しているので、configureは使用しません。また、ここではboostというC++のライブラリが必要になるのですが、-DDOWNLOAD_BOOSTオプション(1で有効)や-DWITH_BOOSTオプション(インストールする位置を指定)を使用することで勝手にインストールしてくれます。また、-DWITH_SYSTEMDオプションを有効にすることで、systemd用ユニットファイルを準備してくれます。以下の流れでビルドします。

# cmake .. -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/src -DWITH_SYSTEMD=1
# make
# make install

次は、mysqlというユーザ、グループを作って、mysql関連の所有権をmysqlに変更していきます。useraddの-sオプションで/bin/falseを指定すると、そのユーザにログインができなくなります。こういう何かのサービスのために使われ、ログインを必要としないユーザの場合には効果的です。

# cd /usr/local/mysql
# groupadd mysql
# useradd -r -g mysql -s /bin/false mysql
# chown -R mysql.mysql .

以下のコマンドでMySQLを初期化するのですが、この時に初期のrootパスワードが出力されるので、控えておきます。

# bin/mysqld --initialize --user=mysql
-----------(省略)----------------
[Server] A temporary password is generated for root@localhost: <PASSWORD>

-DWITH_SYSTEMDオプションで作成してくれたユニットファイルをコピーして移動し、systemdに認識させます。そしたら自動起動&今すぐ起動の設定を行います。

# cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/mysqld.service
# systemctl daemon-reload
# systemctl enable mysqld --now

では、先ほど控えておいたパスワードでrootユーザでログインしてみると、無事ログインすることができ、動作していることが確認できました。

# bin/mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.22

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

ではrootパスワードを自分にとってわかりやすいパスワードに変更します。

# bin/mysqladmin password <新しいパスワード> -u root -p
Enter password: <現在のパスワード>

もうこの段階でWordPress用のデータベースとユーザを作っておきます。

# bin/mysql -uroot -p<パスワード>
mysql> create database wordpressdb;
Query OK, 1 row affected (0.01 sec)

mysql> create user wordpressuser@localhost identified by 'wordpressPASSWORD'; 
Query OK, 0 rows affected (0.01 sec)

mysql> grant all privileges on wordpressdb.* to wordpressuser@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql>flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql>exit

PHP

まずは事前準備として細々としたライブラリをdnfでインストールしておきます。

# dnf install libxml2-devel sqlite-devel  
# dnf --enablerepo=PowerTools install oniguruma-devel

ここからPHPのtarボールを取得し、展開・解凍します。

Downloads – PHP

# cd /usr/local/src
# wget https://www.php.net/distributions/php-7.4.13.tar.gz
# tar -zxvf php-7.4.13.tar.gz 

解凍したPHPのディレクトリに移動し、ビルドしていきます。–with-apxs2オプションでインストールしたApache上のapxsを指定してあげることで、Apacheのモジュールディレクトリにlibphp7.soという連携用のモジュールが自動的に追加されます。また、Apacheの設定ファイル上のLoadModuleディレクティブにも設定が追加されます。

# cd php-7.4.13
# ./configure \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysqli \
--with-pdo-mysql \
--enable-mbstring \
--with-zlib
# make
# make test
# make install

設定ファイルの雛形がディレクトリ内にあるので、インストールして新しく配置された/usr/local/phpディレクトリ以下にコピーします。雛形はdevelopmentとproductionの二つ存在しますが、今回は本番環境用のproductionではなく、開発環境用のdevelopmentを採用します。

# cp -p php.ini-development /usr/local/php/php.ini

PHPの設定ファイルを最低限編集します。以下のようにコメントアウトを外したり、値を入力します。

# vi /usr/local/php/php.ini
date.timezone = Asia/Tokyo
mbstring.language = Japanese 

では、Apacheが.phpファイルでPHPを使用するように、AddTypeディレクティブを追加します。また、PHPの設定ファイルを読み込むように、PHPIniDirディレクティブで位置を教えてあげます。

# vi conf/httpd.conf
----------(省略)----------------
<IfModule mime_module>
  AddType application/x-compress .Z
  AddType application/x-gzip .gz .tgz
  AddType application/x-httpd-php .php #追記
</IfModule>
----------(省略)----------------
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

----------(省略)-----------------
PHPIniDir "/usr/local/php/php.ini"   #追記

次に、Apacheのドキュメントルート内にPHP動作確認用のファイルを以下の内容で作成します。

# cd /usr/local/httpd
# vi htdocs/index.php
<?php echo phpinfo(); ?>

Apacheを再起動して、変更内容を反映させます。

# systemctl restart httpd

Webブラウザから確認してみると、phpinfoの内容が表示され、ApacheとPHPがうまく連携していることが確認できます。

このファイルは動作確認以外では使用しないので、消しておきます。

# rm htdocs/index.php

WordPress

ではWordPressをインストールしていきます。

ダウンロード | WordPress.org 日本語

ここからtarボールを取得し、解凍・展開をします。

# cd /usr/local/src
# wget https://ja.wordpress.org/latest-ja.tar.gz
# tar -zxvf latest-ja.tar.gz

wordpressディレクトリをドキュメントルート以下に配置して、所有権をapacheに変更してアクセスできるようにします。

# mv wordpress /usr/local/httpd/htdocs/
# chown -R apache.apache /usr/local/httpd/htdocs/wordpress

wordpressディレクトリ以下に設定ファイルの雛形が用意されているので、wp-config.phpという名前に変えてコピーします。設定はこっちに記述していきます。

# cd /usr/local/httpd/htdocs/wordpress
# cp wp-config-sample.php wp-config.php

MySQLのところで作成したデータベース、ユーザ、パスワードを入力します。

# vi wp-config
---------(省略)-----------
define( 'DB_NAME', 'wordpressdb' );   #作成したデータベース名に変更
define( 'DB_USER', 'wordpressuser' );   #作成したユーザ名に変更
define( 'DB_PASSWORD', 'wordpressPASSWORD' );  #作成したユーザパスワードに変更
define( 'DB_HOST', 'localhost' );    #変更なし

:wq!

以上で設定完了でhttp://IPアドレス/wordpressにアクセスしてみます。

無事表示されたので、設定を済ませ、ログインしてみます。

無事にWordPressの動作が確認できました。

まとめ

今回ソースからインストールでLAMP環境 + WordPressを構築して、正直configureオプションはこれで本当に足りるのか、もっとつけた方が良いオプションがあるのではないかと思っています。

何が足りないのかは、やはりもっと本格的なアプリケーションを用意して、実際に無事に動くかどうか確認してみないと分からないのかもしれません。

しかし、ビルドの一連の手順やミドルウェアを支えるライブラリの存在を、手で動かして直接感じとれたのはいい体験だったと思います。

参考文献

Lamp環境をソースインストールする(Apache2.4編) – Qiita

LAMP環境をソースインストールする(PHP5.6.40編) – Qiita

LAMP環境をソースインストールする(MySQL 5.6.42編) – Qiita

ソースでLAMP構築+WordPress | Skyarch Broadcasting

LAMP環境、自分で作りませんか? 仕事で使える魔法のLAMP

Comments

Copied title and URL