CentOS8でサーバー構築 - 3.LAMP環境構築(Apache2.4+MySQL8.0+PHP7.4のインストール)

Linux(OS)環境において
  • Apache(WEBサーバー)のインストールと設定
  • MySQL(RDBMS)のインストールと設定
  • PHP(プログラミング言語)と使いそうなPHPのモジュールのインストールと設定
LAMP環境を構築していく。

プログラミング言語をこれから習得してプロを目指す初学者の方、
言語には触っているがLinuxなどのサーバー関連はイマイチの方、
XAMPP環境と比べて一手間かかってしまうが、LAMP環境で学習することを強くお勧めします。


OS:Operating System
RDBMS:relational database management system
PHP:Hypertext Preprocessor

Apacheのインストール

dnfでインストールできるApacheのバージョンは2.4.37でした。
ドメイン kowloonet.local
IPアドレス192.168.1.100
で設定。
インストール
# dnf -y install httpd
設定
# vi /etc/httpd/conf/httpd.conf
#
ServerName kowloonet.local:80
・
・
# Further relax access to the default document root:
<Directory "/var/www/html">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Includes ExecCGI FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
    DirectoryIndex index.html index.php index.cgi
</IfModule>

・
・
    #
    # If you prefer a logfile with access, agent, and referer information
    # (Combined Logfile Format) you can use the following directive.
    #
    SetEnvIf Request_URI "default\.ida" no_log
    SetEnvIf Request_URI "cmd\.exe" no_log
    SetEnvIf Request_URI "root\.exe" no_log
    SetEnvIf Request_URI "Admin\.dll" no_log
    SetEnvIf Request_URI "NULL\.IDA" no_log
    SetEnvIf Request_URI "\.(bmp|css|gif|htc|ico|jpe?g|svg|js|mpe?g|png|swf|woff|ttf)$" no_log
    CustomLog logs/access_log combined env=!no_log
    #CustomLog "logs/access_log" combined
・
・
#AddDefaultCharset UTF-8
Indexes
DirectoryIndexで指定したファイル(index.html)が存在しない場合、ディレクトリ内ファイルを一覧表示。
FollowSymLinks
シンボリックリンクの許可。
Includes
SSIの許可。
ExecCGI
CGIの許可。
AllowOverride All
.htaccessの許可
ドキュメントルートのファイル所有者変更
# chown -R xiohei. /var/www/
起動
# systemctl start httpd
# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
確認
ブラウザで 192.168.1.100 へアクセスしてみて確認。
テストページのデザインが一新されていました。
アクセスログ表示
# tail -f /var/log/httpd/access_log
エラーログ表示
# tail -f /var/log/httpd/error_log
テストページを非表示に
外部に公開する場合は非表示にする事。
# cd /etc/httpd/conf.d/
# mv welcome.conf welcome.conf.org
# mv autoindex.conf autoindex.conf.org
# systemctl restart httpd

MySQLのインストール

CentOS8ではMariaDBをアンインストールする必要は無い様です。
バージョン確認
# dnf list mysql*
メタデータの期限切れの最終確認: 0:32:26 時間前の 2020年05月21日 22時41分01秒 に実施しまし た。
利用可能なパッケージ
MySQL-zrm.noarch                3.0-23.el8                                       epel
mysql.x86_64                    8.0.17-3.module_el8.0.0+181+899d6349             AppStream
mysql-common.x86_64             8.0.17-3.module_el8.0.0+181+899d6349             AppStream
mysql-devel.x86_64              8.0.17-3.module_el8.0.0+181+899d6349             AppStream
mysql-errmsg.x86_64             8.0.17-3.module_el8.0.0+181+899d6349             AppStream
mysql-libs.x86_64               8.0.17-3.module_el8.0.0+181+899d6349             AppStream
mysql-server.x86_64             8.0.17-3.module_el8.0.0+181+899d6349             AppStream
mysql-test.x86_64               8.0.17-3.module_el8.0.0+181+899d6349             AppStream
インストール
# dnf install @mysql:8.0
「@」を付けてコロンの後にバージョンを指定する形で、必要なものをインストールしてくれます。
起動
# systemctl start mysqld
# systemctl enable mysqld
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
初期設定
文字コードの設定はデフォルトで utf8なので設定する必要は無い様です。
現在開発用として構築しているので、
使い勝手が良いようにパスワードのセキュリティレベルをLOWに。
# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!
パスワードのセキュリティレベルを個別に変更したい場合、
パスワードの条件を4文字以上に緩和
mysql> SET GLOBAL validate_password.length=4;
パスワードの条件緩和
mysql> SET GLOBAL validate_password.policy=LOW;
パスワードの変更
mysql> ALTER USER ユーザ名@localhost IDENTIFIED BY '変更後のパスワード';
データーベースの確認
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.08 sec)
ここではユーザ名「xiohei」を、全てのデーターベースにローカルホスト内からパスワード「1q2w」でアクセスできるように作成。
MySQL8からはCREATE USERを使う。
ユーザの追加
mysql> CREATE USER xiohei@localhost IDENTIFIED BY '1q2w'; mysql> GRANT ALL PRIVILEGES ON *.* TO xiohei@localhost WITH GRANT OPTION;
MySQL5.7以前のバージョンでは
GRANT ALL PRIVILEGES ON *.* TO xiohei@localhost IDENTIFIED BY '1q2w';
接続の確認
# mysql -uxiohei -p1q2w mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 46 Server version: 8.0.16 MySQL Community Server - GPL Copyright (c) 2000, 2019, 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>

PHPのインストール

dnfでAppStreamリポジトリからインストールできるPHPのバージョンは、7.2.11でした。
# dnf list php
# dnf list available | grep php
remiリポジトリからから現時点で最新のPHP7.4をインストールしましょう。
epelリポジトリ追加
# dnf -y install epel-release
remiリポジトリ追加
# rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-8.rpm
# dnf module reset php
# dnf module enable php:remi-7.4
php-devel をインストールする時にPowerToolsリポジトリから
libedit-devel をインストール必要があるのでこちらも利用可能にしておく。
PowerToolsリポジトリ追加
# dnf config-manager --set-enabled PowerTools
利用可能リポジトリ確認
# dnf repolist --enabled
メタデータの期限切れの最終確認: 0:31:56 時間前の 2020年05月21日 20時48分35秒 に実施しまし た。
repo id             repo の名前                                                      状態
AppStream           CentOS-8 - AppStream                                             5,283
BaseOS              CentOS-8 - Base                                                  1,661
PowerTools          CentOS-8 - PowerTools                                            1,456
*epel               Extra Packages for Enterprise Linux 8 - x86_64                   5,601
*epel-modular       Extra Packages for Enterprise Linux Modular 8 - x86_64               0
extras              CentOS-8 - Extras                                                   16
remi-modular        Remi's Modular repository for Enterprise Linux 8 - x86_64          359
remi-safe           Safe Remi's RPM repository for Enterprise Linux 8 - x86_64       2,285
利用可能パッケージ確認
# dnf info php
利用可能なパッケージ
名前         : php
バージョン   : 7.4.6
リリース     : 1.el8.remi
Arch         : x86_64
サイズ       : 3.0 M
ソース       : php-7.4.6-1.el8.remi.src.rpm
リポジトリー : remi-modular
概要         : PHP scripting language for creating dynamic web sites
URL          : http://www.php.net/
ライセンス   : PHP and Zend and BSD and MIT and ASL 1.0 and NCSA
説明         : PHP is an HTML-embedded scripting language. PHP attempts to
             : make it easy for developers to write dynamically generated web
             : pages. PHP also offers built-in database integration for
             : several commercial and non-commercial database management
             : systems, so writing a database-enabled webpage with PHP is
             : fairly simple. The most common use of PHP coding is probably
             : as a replacement for CGI scripts.
             :
             : The php package contains the module (often referred to as
             : mod_php) which adds support for the PHP language to Apache
             : HTTP Server.
PHPのインストール
# dnf -y install php php-devel php-gd php-zip php-mysqlnd
上記コマンドで必要なものもインストールしてくれるのでいろいろ入ります。
# dnf list installed | grep php
php.x86_64                                         7.4.6-1.el8.remi                                  @remi-modular
php-cli.x86_64                                     7.4.6-1.el8.remi                                  @remi-modular
php-common.x86_64                                  7.4.6-1.el8.remi                                  @remi-modular
php-devel.x86_64                                   7.4.6-1.el8.remi                                  @remi-modular
php-fpm.x86_64                                     7.4.6-1.el8.remi                                  @remi-modular
php-gd.x86_64                                      7.4.6-1.el8.remi                                  @remi-modular
php-json.x86_64                                    7.4.6-1.el8.remi                                  @remi-modular
php-mbstring.x86_64                                7.4.6-1.el8.remi                                  @remi-modular
php-mysqlnd.x86_64                                 7.4.6-1.el8.remi                                  @remi-modular
php-opcache.x86_64                                 7.4.6-1.el8.remi                                  @remi-modular
php-pdo.x86_64                                     7.4.6-1.el8.remi                                  @remi-modular
php-pecl-zip.x86_64                                1.18.2-1.el8.remi.7.4                             @remi-modular
php-sodium.x86_64                                  7.4.6-1.el8.remi                                  @remi-modular
php-xml.x86_64                                     7.4.6-1.el8.remi                                  @remi-modular
libedit-develが無い状態でphp-develをインストールしようとすると、
エラー:
 問題: cannot install the best candidate for the job
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.4.6-1.el8.remi.x86_64
(インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)
と出てしまいインスールできません。
古いPHPからバージョンアップしたい場合は、PHP関連のモジュールを一旦削除
# dnf remove php-*
dnfのログはこちらで確認。
# tail -f /var/log/dnf.log
起動
# systemctl restart httpd
確認
# php -v
PHP 7.4.6 (cli) (built: May 12 2020 08:09:15) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies
動作確認
# vi /var/www/html/phpinfo.php
<?php
phpinfo();
ブラウザで http://192.168.1.100/phpinfo.php へアクセス。
(IPアドレスは各自で設定しているもの。)
公開したくない場合は削除するか、
Basic認証をかけたディレクトリへ移動させておきましょう。
# rm -rf /var/www/html/phpinfo.php
LAMP環境構築は以上で完了です。