名科辞典―これは何?情報は?にこたえるコンテンツ

CentOS7―ダウンロード&VirualBoxにインストール&LAMPサーバー構築

CentOS7のダウンロードからVirtualBoxへのインストール、CentOS7のOS設定、Apache+MySQL+PHPのLAMPサーバ構築手順の例などの情報をまとめています。

▲記事トップへ

目次

この記事の目次です。

1. CenOS7とは
2. CentOS7のダウンロード方法
3. VirtualBoxにインストールする例
4. Apache(Apache 2.4)のインストール例
5. PHP(PHP7)のインストール例
6. MySQL(MariaDB)のインストール例
7. ApacheのSSLサーバ証明書の設定例
8. PHPを個別アカウントで実行する設定例

参考情報
更新履歴

1. CenOS7とは

CentOS7とは、CentOSのバージョン7の製品です。
2014年7月7日に7.0が登場して、その完全更新期限が2020年12月。メンテナンス更新期限が2024年6月30日です。

2. CentOS7のダウンロード方法

CentOS7は、https://www.centos.org/download/より、例えばDVDのISOイメージを選んでミラーサイトからダウンロードが行えます。

ダウンロード例

ミラーサイトを選んで、例えば以下のファイルをダウンロードします。

http://ftp.tsukuba.wide.ad.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1611.iso

ダウンロードできない場合

ダウンロードできない場合は別のミラーサイトからダウンロードします。

3. VirtualBoxにインストールする例

VirtualBoxにインストールする例は、以下の記事にまとめています。

VirtualBox

VirtualBoxとは、Oracle社のクロスプラットフォームな仮想化ソフトウェアです。インストール方法やCentOS7の構築例などをまとめています。

詳細

4. Apache(Apache 2.4)のインストール例

CentOS7にApacheをインストールしていきます。

Apacheのインストール

Apacheをインストールします。

# yum install httpd

httpd サービスの自動起動設定

CentOS7を再起動しても自動でApacheが起動されるように設定します。

# systemctl enable httpd

httpd サービスを開始

Apacheを起動します。

# systemctl restart httpd

Firewall穴あけ

外からアクセスできるようにhttpとhttpsのポートを解放します。

# firewall-cmd --add-service=http --permanent
# firewall-cmd --reload

5. PHP(PHP7)のインストール例

CentOS7にPHPをインストールしていきます。

PHP7+OPCache+APCuインストール

ここでは、PHP7+OPCache+APCuの環境を構築していきます。

EPELリポジトリのインストール

# yum -y install epel-release

Remiリポジトリのインストール

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

PHP7+OPCache+APCuなど関連モジュールのインストール

PHP7とよく使いそうなモジュールをインストールします。

PHP7.0をインストールする場合
# yum remove php* -y
# yum --enablerepo=remi,remi-php70 install php php-devel pcre-devel php-posix php-ssh2 php-mysqlnd php-gd php-xml php-xmlrpc php-mbstring php-mcrypt php-fpm php-opcache php-apcu -y --skip-broken
PHP7.2をインストールする場合

PHP7.2をインストールする場合の例は以下です。

# yum remove php* -y
# yum --enablerepo=remi,remi-php72 install php php-devel pcre-devel php-posix php-ssh2 php-mysqlnd php-gd php-xml php-xmlrpc php-mbstring php-mcrypt php-fpm php-opcache php-apcu -y --skip-broken
PHP7.3をインストールする場合

PHP7.3をインストールする場合の例は以下です。libargon2を先にインストールしておきます。

# yum install --disablerepo=* --enablerepo=epel libargon2
# yum remove php* -y
# yum --enablerepo=remi,remi-php73 install php php-devel pcre-devel php-posix php-ssh2 php-mysqlnd php-gd php-xml php-xmlrpc php-mbstring php-mcrypt php-fpm php-opcache php-apcu -y --skip-broken

確認

PHP7がインストールされているか確認します。

# php -v
PHP 7.3.7 (cli) (built: Jul  3 2019 11:30:22) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.7, Copyright (c) 1999-2018, by Zend Technologies

php-fpmの自動起動設定

php-fpmの自動起動の設定を行います。

# systemctl enable php-fpm

php-fpmの再起動

php-fpmの再起動を行います。

# systemctl restart php-fpm

Apacheとphp-fpmの設定

httpd.confまたはインクルードするconfファイルにて最低限以下の設定を行います。

ここでは以下の内容で「/etc/httpd/conf.d/site.conf」というファイルを作成します。

#php
<IfModule prefork.c>
  LoadModule php7_module modules/libphp7.so
</IfModule>

<VirtualHost <ドメインまたはIP>>
    ServerName <ドメインまたはIP>
    DocumentRoot <ドキュメントルートのパス>
    CustomLog <アクセスログのパス> common
    ErrorLog  <エラーログのパス>

    RewriteEngine on
    RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
    RewriteRule .* - [F]

    <Directory <ドキュメントルートのパス>>
        Options FollowSymLinks
        AllowOverride All
        Require all granted

        <FilesMatch "\.php$">
            SetHandler application/x-httpd-php
            SetHandler "proxy:fcgi://127.0.0.1:9000"
        </FilesMatch>
    </Directory>
</VirtualHost>

よく「AH01071: Got error 'Primary script unknown\n'」のエラーが吐き出されることがありますが、上記なら大丈夫です。

Apache2.4の再起動

# systemctl restart httpd.service

php-fpmプロセスの確認

# ps -aef | grep php-fpm

Webページの表示確認

以上で完了です。適当なPHPファイルを置いて表示できるか確認できればOKです。

Webページの表示確認例

例えば、以下の内容で/var/www/html/index.phpファイル作成し、ブラウザでhttp://192.168.56.101/index.phpにアクセスして「Hello World!!」が表示されることを確認します。

<?php
print "Hello World!!\n";
?>

6. MySQL(MariaDB)のインストール例

CentOS7にMySQL(MariaDB)インストールしていきます。

MySQL(MariaDB)をインストール

MySQL(MariaDB)をインストールします。

# yum install mariadb mariadb-server
# mysql -V
mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

mysqld サービスの自動起動設定

CentOS7を再起動しても自動でMySQL(MariaDB)が起動されるように設定します。

# systemctl enable mariadb.service

mysqld サービスを開始

MySQL(MariaDB)を起動します。

# systemctl restart mariadb.service

接続確認

インストール後の接続確認です。まだパスワード設定されていないので、もし聞かれたらそのままエンターで大丈夫です。

# mysql -u root -p -e "SELECT Host,User,Password FROM mysql.user;"
Enter password:
+-----------------------+------+----------+
| Host                  | User | Password |
+-----------------------+------+----------+
| localhost             | root |          |
| localhost.localdomain | root |          |
| 127.0.0.1             | root |          |
| ::1                   | root |          |
| localhost             |      |          |
| localhost.localdomain |      |          |
+-----------------------+------+----------+

MySQL(MariaDB)の設定

MySQLの設定を行います。

設定ファイル編集

MySQL設定ファイルを編集します。

# vi /etc/my.cnf
[mysqld]
:
character-set-server = utf8 ← 追加(MySQLサーバーの文字コードをUTF-8にする)
max_allowed_packet=32m ← 追加

MySQL再起動

# systemctl restart mariadb.service

rootパスワード変更

# /usr/bin/mysqladmin -u root password '<パスワード>'

ログイン

# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.52-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]>

パスワード未設定ユーザなど削除

確認
MariaDB [(none)]> select user,host,password from mysql.user;
+------+-----------------------------------------------+-------------------------------------------+
| user | host                                          | password                                  |
+------+-----------------------------------------------+-------------------------------------------+
| root | localhost                                     | *4A82F・・・・・・・・・・・・・・・      |
| root | 127.0.0.1                                     |                                           |
| root | ::1                                           |                                           |
|      | localhost                                     |                                           |
+------+-----------------------------------------------+-------------------------------------------+
6 rows in set (0.00 sec)
不要なユーザ削除
MariaDB [(none)]> delete from mysql.user where password=null or password="";
Query OK, 5 rows affected (0.00 sec)

MariaDB [(none)]> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *4A82F・・・・・・・・・・・・・・・      |
+------+-----------+-------------------------------------------+
1 row in set (0.00 sec)
不要なデータベース削除

インストールするとtestデータベースが作成されています。

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

このtestデータベースを削除します。

MariaDB [(none)]> drop database test;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

参考1)データベース領域と操作ユーザを作成方法

データベース領域と操作ユーザを作成方法は以下です。

データベース領域作成
MariaDB [(none)]> create database <データベース領域名>;
データベース領域操作ユーザ作成
MariaDB [(none)]> GRANT ALL PRIVILEGES ON <データベース領域名>.* TO <データベース操作ユーザ名>@localhost IDENTIFIED BY '<パスワード>' WITH GRANT OPTION;

参考2)MariaDBからMySQLへ入れ替える方法

MariaDBからMySQLへ入れ替える方法です。

MariaDBの削除

MariaDBの削除します。

# yum remove mariadb-libs
# rm -rf /var/lib/mysql/
yumリポジトリ追加

mysql公式のリポジトリを追加します。

# yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
MySQLインストール

MySQLをインストールします。

# yum -y install mysql-community-server
自動起動設定

自動起動設定を行います。

# systemctl enable mysqld.service
MySQL起動

MySQLを起動します。

# systemctl start mysqld.service
初期のrootパスワード確認

初期のrootパスワードは/var/log/mysqld.logに出力されます。

[Note] A temporary password is generated for root@localhost: <初期のrootパスワードの出力>
基本的なセキュリティ設定

mysql_secure_installationを使用して基本的なセキュリティ設定を行います。

# mysql_secure_installation

7. ApacheのSSLサーバ証明書の設定例

ApacheのSSLサーバ証明書の設定例です。

Apache2.4の設定ファイルの例

例えば、httpd.confやssl.confなどApacheが読み込む設定ファイルに以下のように記述します。

:
LoadModule ssl_module modules/mod_ssl.so
:
Listen 443
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout  300
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
SSLCompression off
:
<VirtualHost *:443>
:
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA!RC4!DH
SSLHonorCipherOrder On
SSLCertificateFile <証明書発行元から提供されたサーバ証明書のパス>;
SSLCertificateChainFile <RapidSSLなど証明書発行元から提供された中間証明書をの内容を記述したファイルのパス>;
SSLCertificateKeyFile <秘密鍵のパス>;

Header add Strict-Transport-Security “max-age=15768000”
:
</VirtualHost>

秘密鍵は「openssl genrsa 2048 > <ドメイン名>.key」と2048を指定して作成します。

Apache に無料SSLのLet's Encryptを設定する例

ここではApache に無料SSLのLet's Encryptを設定する例について見ていきます。

更新ツールのインストール

更新ツールのインストールします。

媒体は「https://dl.eff.org/certbot-auto」です。

sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto

ダウンロードして保存した/usr/bin/certbot-autoに実行権限を付与したら完了です。

sudo chmod 700 /usr/bin/certbot-auto

証明書の発行

次に証明書を発行します。

sudo certbot-auto certonly --webroot -w <ドキュメント・ルートのパス> -d <ドメイン名> --email <通知メールアドレス>
  • ドキュメント・ルートのパスは、Apacheに設定しているホームページ公開ディレクトリのサーバ内のパスです。例えば「/var/www/html/」です。
  • ドメイン名は、証明書を発行するドメイン名です。例えばこのサイトの場合は「learning.zealseeds.com」です。
  • 通知メールアドレスは、更新期限の通知などを受け取るためのメールアドレスです。gmailなどドメイン名のメールアドレスでなくても大丈夫です。

Apache2.4の設定ファイルの設定例

証明書は「/etc/letsencrypt/live/<ドメイン名>/」の下にシンボリックリンクされますので、こちらをApacheに設定します。

例えば、httpd.confやssl.confなどApacheが読み込む設定ファイルに以下のように記述します。

:
SSLCertificateFile /etc/letsencrypt/live/<ドメイン名>/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/<ドメイン名>/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン名>/privkey.pem
:

Apacheの再起動

設定したらApacheを再起動します。

sudo systemctl restart httpd

8. PHPを個別アカウントで実行する設定例

複数のWebサイトを同じサーバで公開している場合など、1つのOSアカウントでPHPを実行している場合、たとえば、WordPressを利用している1つのWebサイトがハッキングされてしまうと全てのサイトが改ざんなどの被害に遭ってしまう恐れがあります。 サイト毎に異なるOSアカウントでPHPを実行することでそのリスクが減らせます。PHPだけでなくMySQLなどのデータベースユーザ、データベース領域も同様ですね。

以下では、PHPを実行するOSアカウント、個別のMySQLアカウントを設定する設定例を記載しています。

OSのユーザ/グループ作成

OSアカウントを作成します。

# useradd -m <追加するOSアカウント名>
# passwd <追加するOSアカウント名>

MySQLのユーザ/データベース作成

MySQLのデータベースアカウントを作成します。

CREATE DATABASE <データベース名>;
GRANT ALL PRIVILEGES ON <データベース名>.* TO <データベースアカウント名>@localhost IDENTIFIED BY '<パスワード>' WITH GRANT OPTION;

OSアカウントのホームディレクトリの設定

OSアカウントのホームディレクトリにPHPが使用するディレクトリを作成します。

su <OSアカウント名>
mkdir -p /home/<OSアカウント名>/log/php-fpm
mkdir -p /home/<OSアカウント名>/lib/php/session
mkdir -p /home/<OSアカウント名>/tmp

ホームページ公開領域の設定

サイトのWeb公開領域を作成します。 ホームディレクトリからアクセスしやすいようにシンボリックリンクも作っておきます。

mkdir -p /virtual/www/public_html/<ドメイン名>
chown <OSアカウント名>:<グループ名> /virtual/www/public_html/<ドメイン名>
cd /home/<OSアカウント名>
ln -s /virtual/www/public_html/<ドメイン名> public_html

Apacheの設定

/etc/httpd/conf/httpd.confの最下部あたりに以下を追記します。

IncludeOptional conf.site/*.conf

上記で個別サイトの設定を別ファイルで定義できるようにします。 個別ファイルの例は以下です。 常時https化やレスポンスヘッダの設定は.htaccessでも設定できるようになっています。

ここでは、/etc/httpd/conf.site/example.com.confファイルを作成しています。 PHPをポート番号デフォルトとは異なる9001で連携する設定になっているところがポイントになります。

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /virtual/www/public_html/example.com/
    CustomLog /var/log/httpd/example.com_access_log common
    ErrorLog  /var/log/httpd/example.com_error_log
    RewriteEngine on
    RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
    RewriteRule .* - [F]

    <Directory /virtual/www/public_html/example.com/>
        Options  FollowSymLinks
        AllowOverride All
        Require all granted

        <FilesMatch "\.php$">
            SetHandler application/x-httpd-php
            SetHandler "proxy:fcgi://127.0.0.1:9001"
        </FilesMatch>
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    ServerName example.com
    DocumentRoot /virtual/www/public_html/example.com/
    CustomLog /var/log/httpd/example.com_ssl_access_log common
    ErrorLog  /var/log/httpd/example.com_ssl_error_log

    SSLEngine on
    SSLProtocol -all +TLSv1.2
    SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS:!3DES
    SSLHonorCipherOrder On
    SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    RewriteEngine on
    RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
    RewriteRule .* - [F]

    <Directory /virtual/www/public_html/example.com/>
        Options  FollowSymLinks
        AllowOverride All
        Require all granted

        <FilesMatch "\.php$">
            SetHandler application/x-httpd-php
            SetHandler "proxy:fcgi://127.0.0.1:9001"
        </FilesMatch>
    </Directory>
</VirtualHost>

PHP-FPMの設定

次にサイト用のPHPの設定を行います。 デフォルトの/etc/php-fpm.d/www.confをコピーして/etc/php-fpm.d/example.confを作成し、ポート番号9001、OSアカウント名(exemple)でPHPを実行する例です。

[example]
:
user = example
:
group = example
:
listen = 127.0.0.1:9001
:
php_admin_value[error_log] = /home/example/log/php-fpm/www-error.log
:
php_value[session.save_path]    = /home/example/lib/php/session
:

PHPとApacheの再起動

PHPとApacheを再起動して設定反映します。

systemctl restart php-fpm
systemctl restart httpd

※SELINUXを利用している場合は別途設定が必要です。SELINUXを設定しない場合は/etc/selinux/configで「SELINUX=disabled」にする必要があります。

参考情報

更新履歴になります。

CentOS

CentOSとは、読み方はセントオーエス、無料&RedHat Enterprise Linuxと互換性が高いLinuxです。LinuxやCentOSの特徴、ダウンロード先やインストールの知識などをまとめています。

詳細

VirtualBox

VirtualBoxとは、Oracle社のクロスプラットフォームな仮想化ソフトウェアです。インストール方法やCentOS7の構築例などをまとめています。

詳細

SQL

SQLの読み方はエスキューエル。SQLの意味、初心者向けのすっごく簡単な説明、など。SQLとは何かをまとめています。

詳細

ワードプレス

ワードプレスとはホームページを運用するための便利なツールです。初心者向け中心にワードプレスの情報をまとめています。

詳細

更新履歴

更新履歴になります。

  • 2020/2/23 PHPを個別アカウントで実行する設定例について追記しました。
  • 2019/11/29 ApacheのSSLサーバ証明書の設定例について追記しました。
  • 2019/7/11 SSHの設定について追記しました。
  • 2019/7/9 yum-utilsについて追記しました。
  • 2018/4/28 PHP7.2のインストール例に追記しました。
  • 2017/7/11 MySQLのインストール例をMariaDBのインストール例に変更しました。
  • 2016/6/13 ページをUPしました。

戻る

カテゴリ

検索

名科辞典とは

名科辞典は、辞典コンテンツを提供している辞典サイトです。 これは何?情報は?にこたえるコンテンツをテーマにしています。