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を個別アカウントで実行する設定例
参考情報
更新履歴
CentOS7とは、CentOSのバージョン7の製品です。
2014年7月7日に7.0が登場して、その完全更新期限が2020年12月。メンテナンス更新期限が2024年6月30日です。
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
ダウンロードできない場合は別のミラーサイトからダウンロードします。
VirtualBoxにインストールする例は、以下の記事にまとめています。
VirtualBoxとは、Oracle社のクロスプラットフォームな仮想化ソフトウェアです。インストール方法やCentOS7の構築例などをまとめています。
CentOS7にApacheをインストールしていきます。
Apacheをインストールします。
# yum install httpd
CentOS7を再起動しても自動でApacheが起動されるように設定します。
# systemctl enable httpd
Apacheを起動します。
# systemctl restart httpd
外からアクセスできるようにhttpとhttpsのポートを解放します。
# firewall-cmd --add-service=http --permanent # firewall-cmd --reload
CentOS7にPHPをインストールしていきます。
ここでは、PHP7+OPCache+APCuの環境を構築していきます。
# yum -y install epel-release
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
PHP7とよく使いそうなモジュールをインストールします。
# 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をインストールする場合の例は以下です。
# 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をインストールする場合の例は以下です。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の自動起動の設定を行います。
# systemctl enable php-fpm
php-fpmの再起動を行います。
# systemctl restart 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'」のエラーが吐き出されることがありますが、上記なら大丈夫です。
# systemctl restart httpd.service
# ps -aef | grep php-fpm
以上で完了です。適当なPHPファイルを置いて表示できるか確認できればOKです。
例えば、以下の内容で/var/www/html/index.phpファイル作成し、ブラウザでhttp://192.168.56.101/index.phpにアクセスして「Hello World!!」が表示されることを確認します。
<?php print "Hello World!!\n"; ?>
CentOS7に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
CentOS7を再起動しても自動でMySQL(MariaDB)が起動されるように設定します。
# systemctl enable mariadb.service
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の設定を行います。
MySQL設定ファイルを編集します。
# vi /etc/my.cnf [mysqld] : character-set-server = utf8 ← 追加(MySQLサーバーの文字コードをUTF-8にする) max_allowed_packet=32m ← 追加
# systemctl restart mariadb.service
# /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)
データベース領域と操作ユーザを作成方法は以下です。
MariaDB [(none)]> create database <データベース領域名>;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON <データベース領域名>.* TO <データベース操作ユーザ名>@localhost IDENTIFIED BY '<パスワード>' WITH GRANT OPTION;
MariaDBからMySQLへ入れ替える方法です。
MariaDBの削除します。
# yum remove mariadb-libs # rm -rf /var/lib/mysql/
mysql公式のリポジトリを追加します。
# yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
MySQLをインストールします。
# yum -y install mysql-community-server
自動起動設定を行います。
# systemctl enable mysqld.service
MySQLを起動します。
# systemctl start mysqld.service
初期のrootパスワードは/var/log/mysqld.logに出力されます。
[Note] A temporary password is generated for root@localhost: <初期のrootパスワードの出力>
mysql_secure_installationを使用して基本的なセキュリティ設定を行います。
# mysql_secure_installation
ApacheのSSLサーバ証明書の設定例です。
例えば、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を設定する例について見ていきます。
更新ツールのインストールします。
媒体は「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 <通知メールアドレス>
証明書は「/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を再起動します。
sudo systemctl restart httpd
複数のWebサイトを同じサーバで公開している場合など、1つのOSアカウントでPHPを実行している場合、たとえば、WordPressを利用している1つのWebサイトがハッキングされてしまうと全てのサイトが改ざんなどの被害に遭ってしまう恐れがあります。 サイト毎に異なるOSアカウントでPHPを実行することでそのリスクが減らせます。PHPだけでなくMySQLなどのデータベースユーザ、データベース領域も同様ですね。
以下では、PHPを実行するOSアカウント、個別のMySQLアカウントを設定する設定例を記載しています。
OSアカウントを作成します。
# useradd -m <追加するOSアカウント名> # passwd <追加するOSアカウント名>
MySQLのデータベースアカウントを作成します。
CREATE DATABASE <データベース名>; GRANT ALL PRIVILEGES ON <データベース名>.* TO <データベースアカウント名>@localhost IDENTIFIED BY '<パスワード>' WITH GRANT OPTION;
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
/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の設定を行います。 デフォルトの/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を再起動して設定反映します。
systemctl restart php-fpm systemctl restart httpd
※SELINUXを利用している場合は別途設定が必要です。SELINUXを設定しない場合は/etc/selinux/configで「SELINUX=disabled」にする必要があります。
更新履歴になります。
CentOSとは、読み方はセントオーエス、無料&RedHat Enterprise Linuxと互換性が高いLinuxです。LinuxやCentOSの特徴、ダウンロード先やインストールの知識などをまとめています。
更新履歴になります。
Copyright (C) 2015-2023 名科辞典. All Rights Reserved. Loarding…