CentOS 7 に Apache2等をインストールしてみた覚書
若いころ、VirtualBox + VineLinax + Apacheという組合せをやったことがあったけれど、少々勝手がちがかったので今後もやるときの為のメモを残しておきたいと思う。
最終目標は、phpMyAdminを使用できるようにするところまで。
今回は、仮想サーバを借りて行うことにした。
OSは初めからインストールされているようだ。
バージョンはこんな感じ。
# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
■Apache2をインストール
# yum -y install httpd
■Apache2の設定編集
編集するべきファイルは下記の通り。
/etc/httpd/conf/httpd.conf
やりたい事に合わせていろいろ書き換えていく。
内容は割愛。
■Apache2の起動
# systemctl start httpd
CentOSのバージョンが7の場合はこれでOK。
■Apache2の自動起動
# systemctl enable httpd
このコマンドでサーバ起動時、自動的にhttpdが起動するようになる。
■ファイアウォールの設定
上記のApacheの設定を行っても何故かアクセスできなかったのでファイアウォールを疑う。
しかし、/etc/sysconfigの中を見てもiptablesが無い。
調べてみると、どうやらCentOS7からファイアウォールの仕様が少し変わったらしい。
# systemctl stop firewalld
まずは、上記コマンドでファイアウォールを止めて
きちんと所期ページがブラウザで見れることを確認。
# systemctl start firewalld
きちんと見れたので、ファイアウォールを再度起動。
httpの設定をしてあげることに。
# firewall-cmd --add-service=http --zone=public
これがサービス追加命令。
# firewall-cmd --add-service=http --zone=public --permanent
これが恒久的にサービス追加する命令。
とりあえず両方実行。
こちらだけ叩いてリブートするという方法もよく使われる。
これでファイアウォールが起動しててもちゃんとホームページが見れるようになった。
■PHPをインストール
# yum install -y php php-mbstring
■PHPの設定編集
編集するべきファイルは下記の通り。
/etc/httpd/conf.d/php.conf
/etc/php.ini
■MySQLをインストール
さっそくインストールと行きたいところだが、
どうやらCentOS7の場合、それには問題があるようだ。
というのもCentOS7にはmariaDBが初めからついてくるらしい。
これがMySqlと競合することもあるそうだ。
その為、まずはmariaDBを削除しなければならない。
# yum remove -y mariadb-libs
念のためディレクトリごと削除したほうがいいようだ。
# rm -rf /var/lib/mysql/
ディレクトリの名前がmysqlなのは、mariaDBがそもそもMySQLの派生システムの為。
今後、MySQLではなくMariaDBが主流となるならば、
どこかでMariaDBの開発も経験しておいたほうがよさそうである。
# yum localinstall -y http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
引き続きMySQLのリポジトリ追加。
rpmは、rpm と yum localinstall の二つが使えるようだが、この場は後者を使ってみた。
# yum -y install mysql-community-server
そのままインストールを行ってこれで実装完了。
■MySQLの起動と自動起動
# systemctl start mysqld.service
# systemctl enable mysqld.service
Apache2の時と同じ感じでOK。
■DBMSドライバをインストール
# yum -y install php-mysqlnd
このコマンドだけでphp-pdoもインストールされたのでわざわざ先に別途入れる必要はない様子。
■phpMyAdminをインストール
# yum -y install epel-release
yumリポジトリにEPELをインストール。
情報によると、phpMyAdminの安定版はリポジトリの特定の箇所にあり、
yum-plugin-prioritiesで優先度を操作する方が良いとの情報もあるが、
前回、phpMyAdminのインストールに失敗した記憶があるので
まずはなるべく簡単に実装して見ようと思う。
# yum -y install phpMyAdmin
無作為にインストール。
ここで何故か失敗することがあったが、時間をおいて試したところ問題なく進行した。
ミラーサーバが安定しなかったりとかなのかもしれない。
■phpMyAdmin.confの編集
/etc/httpd/conf.d/phpMyAdmin.conf
編集すべきファイルは上記の通り。
初期はローカルホストしか対象に含まれていないので、外部からはアクセスできない。
ところが、全ての外部からアクセスできるとセキュリティ上危ないので、
httpsを使ったり、固定IPならIP制限をした方が無難。
# systemctl restart httpd
/etc/httpd/conf.d/phpMyAdmin.conf の読み込みと Alias を認識させる為にApache2を再起動。
■MySQLのパスワードをつける。
yumでインストールする場合は、rootのパスワードがないらしいのでつける。
# mysql -u root
とりあえず、そのままログイン。
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
ところが、パスワードが設定されてるからパスワードを入力してほしいと言われる。
どこかで仮のパスワードが作られたようだ。
/var/log/mysqld.log を開いて A temporary passwordと書かれた行に載っているパスワードを調べる。
# mysql -u root -p
上記のようにパスワードを入力できるようにしてアクセス。
せっかくなので今回はこのままこのパスワードを使うことにする。
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
つもりであったが、そういうことはできないらしい。
SET PASSWORD FOR root@localhost='';
パスワードを変更したいが、昔より強固になっていて、
8文字以上で英大文字小文字数字記号の4種類を含む必要があるそうな。
この機能を切る方法もあったり、
また最初に生成された所期パスワードを打ち込むことも一応可能らしい。
■おわりに
ここまでやって、無事 phpMyAdminアクセスできるようになった。
途中、phpMyAdminに「MySQLサーバにログインできません」と言われ、
socketの設定をしたりもしたけれど、
この原因はMySQLのパスワードの再設定をしなければいけないということを見落としていただけで、
socket周りの設定を初期に戻してもアクセスできたので、
今回の場合は不要なことが分かった。
□余談1:mysqld.logやタイムゾーン
ところで、MySQLのパスワードを調べる為にmysqld.logを開いたが、時間がUTCだった。
そこで、サーバの時間が間違っているのだろうと思って直そうと思うも、
システムクロック・ハードウェアクロックともにJSTだった。
不思議に思って、MySQLの'%time_zone'を調べるもJST。
まさかありえないとは思いはすれど、念のためphp.iniのtimezoneを見てもやっぱり怪しい表記は無い。
実はこれ、MySQL5.7移行で実装された'%log_timestamps'というものの仕業らしい。
名前の通り、ログだけの仕様らしいので運用上は問題ない。
ただ、mysqldのログを解析する際、これを忘れていると間違った解析になるかもしれないので注意したい。