Blue Screen見た?

ITインフラに関する情報や、ITの様々な技術についてを紹介するブログ。

CentOS7でWordpress環境を導入する方法

仮想サーバ や 物理サーバ に Wordpressを導入して、ホームページを構築することになったため、その手順についてまとめておこうと思います。

 

WordPressの導入準備

f:id:adakkuma:20170709150326j:plain

2017.07.07 現在で、wordpress 日本語版の最新バージョンは 4.8 で、wordpressの推奨動作環境は公式サイトより下記となっていました。

 

--Wordpress日本語 公式サイトより

PHPバージョン 7 以上

MySQL バージョン 5.6 以上 または MariaDB バージョン 10.0 以上

・古い PHPMySQL しか利用できないレガシーな環境でも、PHP 5.2.4 以上、かつ MySQL 5.0 以上であれば WordPress は動作しますが、公式サポートは終了しており、サイトがセキュリティの脆弱性にさらされる危険があります。

 

一方、CentOS 7 では、yum の 標準リポジトリ からインストールできる PHPMySQL は下記となっています。

 

PHP については、PHP 5.4 は 2015/09/14までセキュリティサポートであったため すでにサポートは切れているのですが、CentOS 7 のサポート期限日まで脆弱性対応がされるため、また、Wordpressとしても PHP 5.2.4 以上であれば動作するため、問題無し

 

MySQL については、MariaDB 5.5 は MySQL 5.5 + MariaDB 5.3 であり、また、Wordpress MySQL 5.0 以上であれば動作するため、問題なし

 

上記より、CentOS 7 の 標準リポジトリPHPMariaDB をインストールすれば問題ないことがわかりました。

CentOS7に標準リポジトリからPHPMariaDB をインストールして、LAMP環境を準備します。

LAMP環境の構築方法は下記記事を参照してください。 

server-engineer.hatenablog.com

 

LAMP環境が準備できたら、Wordpressの導入を行っていきましょう。

 

 

 

WordPress環境の導入

f:id:adakkuma:20170709150921j:plain

 

設定ファイルの修正

wordpress本体をダウンロードし、設定ファイルの修正を行っていきます。

日本語版公式サイトにアクセスしてダウンロードすることはできますが、サーバーへコピーするのが手間なので、サーバー上から直接ダウンロードすることにします

# wget https://ja.wordpress.org/wordpress-4.8-ja.tar.gz

 

ダウンロードが完了したら、解凍して、サンプルの設定ファイルをコピーして、設定ファイルを編集します

# tar zxf wordpress-4.8-ja.tar.gz
# cd wordpress
# cp -p wp-config-sample.php wp-config.php
(設定ファイル編集)
# diff -u wp-config-sample.php wp-config.php
------
-define('DB_NAME', 'database_name_here');
+define('DB_NAME', 'test_wp_db');

-define('DB_USER', 'username_here');
+define('DB_USER', 'wp_user');

-define('DB_PASSWORD', 'password_here');
+define('DB_PASSWORD', 'wp_passwd');

-define('AUTH_KEY', 'put your unique phrase here');
・・・「認証用ユニークキー」部分の差分内容は省略
------

使用するデータベース名とデータベースにアクセスするユーザー、そのユーザーのパスワードを設定します

また、「認証用ユニークキー」の設定も行います。クッキーに格納される情報をより強固な暗号化によって守るために必要となる値であり、公式サイトのページより自動生成してくれるので、自動生成された値を入力しておきます。

 

ファイルの設置

今回は、DocumentRoot直下に wordpress本体を置くこととします。

デフォルト設定だと DocumentRoot は、"/var/www/html" になっているので、そのディレクトリに移動します。

また、Wordpress管理画面からテーマやプラグインのインストール、更新が行えるように、ファイルの所有者をapacheに変更しておきましょう

# cd ..
# mv wordpress/* /var/www/html/
# chown -R apache:apache /var/www/html/*

 

次は、使用するデータベース を 作っていきましょう

 

データベースの作成

rootユーザーで ログインします

# mysql -u root -p

そして、データベースの作成と、そのデータベースを操作するユーザーに権限を付与します。

MariaDB [(none)]> create database test_wp_db default character set utf8;
MariaDB [(none)]> use test_wp_db;
MariaDB [(test_wp_db)]> grant all on test_wp_db.* to wp_user@localhost identified by 'wp_passwd';
MariaDB [(test_wp_db)]> flush privileges;
MariaDB [(test_wp_db)]> \q

 

作成したデータベースに、アクセスできるか確認しておきます

# mysql -u wp_user -p test_wp_db

 ログインできれば、確認OKです

 

Webブラウザからログイン

最後に、WebブラウザからWordpressへアクセスしてみましょう。

DocumentRoot直下に置いたので、下記にアクセスると自動的に、Wordpressの初期設定画面に遷移します。

http://{サーバーのIPアドレス, ホスト名}/

f:id:adakkuma:20170713075711p:plain

必要情報を入力すると、インストール完了です!

 

wordpressのログイン画面に遷移するので、必要情報で入力したユーザー名とパスワードを入力すると、管理画面に遷移できます。

f:id:adakkuma:20170713080119p:plain

 

 

これで、wordpress環境の導入完了です。

あとは管理画面からテーマの編集や記事の作成などを行い、自分好みのサイトを作っていきましょう♪

 

ではまた

 

CentOS7でLAMP環境を構築する方法

以前、XAMPPをインストールして、Webアプリ を動作させるための環境を構築する方法について書きました。

server-engineer.hatenablog.com

 

今回は、 CentOSLAMP環境を構築する方法についてまとめておこうと思います。

 

※提供するサービスによって、環境の設定を調整する必要などもありますが、この記事は最低限の手順のみをまとめております。

  

CentOS は、現在最新バージョンであるCentOS 7.3 を利用します。

さくらVPSの場合は、提供時のOSが CentOS 6 であるため、カスタムOS で 最小構成の CentOS 7 に再インストールして利用します。

 

CentOS 6 でもいいのですが、新規でサーバーを立ち上げる場合などは、サポート機関の長いOSにしておいた方がよいためです。

CentOS の サポート期限に関しては、下記をご参照ください。 

server-engineer.hatenablog.com

 

CentOS7でLAMP環境を構築する方法

f:id:adakkuma:20170707015307j:plain

CentOS では、LAMP環境を構築するためのサービスは、すべて標準リポジトリからインストール可能であるため、yumコマンドを用いて、インストールします。

そして、最低限設定ファイルを編集して、サービスの起動を行います。

 

Apache インストール、設定

yumからインストールします

# yum install httpd mod_ssl

httpsプロトコルも対応するために、mod_ssl もインストールします

 

次に、設定ファイルを編集していきます。

最低限ですが、下記の差分部分を変更します

# diff -u /etc/httpd/conf/httpd.conf.org /etc/httpd/conf/httpd.conf
-------
-#ServerName www.example.com:80
+ServerName www.example.com ←ServerName設定

- ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
+ #ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" ←CGIを利用しない場合は、不要のため、コメントアウトします

-<Directory "/var/www/cgi-bin">
- AllowOverride None
- Options None
- Require all granted
-</Directory>
+#<Directory "/var/www/cgi-bin">
+# AllowOverride None
+# Options None
+# Require all granted
+#</Directory>
-------

diff -u /etc/httpd/conf.d/ssl.conf.org /etc/httpd/conf.d/ssl.conf
-------
-#ServerName www.example.com:443
+ServerName www.example.com     ←ServerName設定

-SSLProtocol all -SSLv2
+SSLProtocol all -SSLv2 -SSLv3 ←セキュリティ観点から、SSLv3プロトコルも無効にする設定とします

-SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
+SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!RC4 ←セキュリティ観点から、RC4も無効にする設定とします
+SSLHonorCipherOrder on ←セキュリティ観点から、有効にしています
-------

 

設定ファイルを変更した後は、書き方等に問題がないか下記コマンドよりチェックします

# httpd -t
Syntax OK ←問題なければ、このように出ます。

 

 

それでは、次に、PHPの設定を行います

 

PHP インストール、設定

yumからインストールします

# yum install php php-mbstring php-mysql php-gd

日本語環境も対応するために、php-mbstring もインストールします

 

次に、設定ファイルを編集していきます。

最低限ですが、下記の差分部分を変更します

# diff -u /etc/php.ini.org /etc/php.ini
--------
-;date.timezone =
+date.timezone = Asia/Tokyo


-;mbstring.language = Japanese
+mbstring.language = Japanese

-;mbstring.internal_encoding = EUC-JP
+mbstring.internal_encoding = UTF-8

-;mbstring.http_input = auto
+mbstring.http_input = auto

-;mbstring.http_output = SJIS
+mbstring.http_output = UTF-8

-;mbstring.encoding_translation = Off
+mbstring.encoding_translation = On

-;mbstring.detect_order = auto
+mbstring.detect_order = auto
--------

 

設定ファイルの確認は、下記コマンドで行ってみましょう

# php -i | grep -E "timezone|mbstring"

"php -i" で phpの設定内容を出力し、grepでキーワード部分だけをピックアップする感じです。

設定ファイルに記載した内容が出力されればOKです。

 

今度は、MySQL  の設定を行っていきます

 

MySQL (MariaDB) のインストール、設定

CentOS7 より、標準リポジトリに登録されているのが MySQL から MariaDB に変わったため、MariaDBのインストールを行います

yumからインストールします

# yum install mariadb-server

 

次に、設定ファイルを編集していきます。

最低限ですが、下記の差分部分を変更します

# diff -u /etc/my.cnf.d/server.cnf.org /etc/my.cnf.d/server.cnf
--------
[mysqld]
+bind-address=127.0.0.1 ←セキュリティ観点から、ローカルからの接続のみ許可する設定にしています
+character-set-server=utf8
--------

 

LAMPで必要なパッケージはすべて設定できましたので、サービスの起動 と 自動起動設定をします

 

サービス起動、自動起動設定

下記コマンドより、サービス起動します

# systemctl start httpd
# systemctl status httpdhttpd.serviceの状態を確認します
# systemctl start mariadb
# systemctl status mariadbmariadb.serviceの状態を確認します

 

PHPはモジュール版として利用し、 httpdサービスから読み込みます。

 

PHPは、モジュール版とCGI版があるのですが、その辺の内容については、またどこかでまとめようと思っています。

 

mariadbサービスの起動が確認できたら、rootユーザーのパスワードを設定しておきましょう。インストール直後はrootユーザーのパスワードが設定されていないためです。

# mysql -u root
Welcome to the MariaDB monitor. Commands end with ; or \g.

・・・・

MariaDB [(none)]> SET PASSWORD FOR root@localhost = PASSWORD('****'); ←**** の部分を設定したいパスワードに変更してください
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> \q
Bye

 

 

どちらのサービスも起動できたこと確認したら、OS起動したときに、自動的にサービスが起動するように設定しておきます。この設定をしておけば、メンテナンス時などにOS再起動した後などに、いちいちサービス起動する必要が無いため、楽になりますね。

# systemctl enable httpd
# systemctl enable mariadb

 

それでは、ポートの状況を確認してみましょう。

# ss -nato

 

f:id:adakkuma:20170709124152p:plain

下二つの赤丸の部分が、httpdサービスで 80/tcp, 443/tcp が LISTEN状態であることが確認できます。そして、一番上の赤丸部分が、mariadbサービスで 127.0.0.1 に対して 3306/tcp が LISTEN状態であることが確認できます。

上記より、mariadbサービスへアクセスする場合は、ローカルからのみの接続しか受け付けていないことがわかります。

 

centos7 を最小構成でインストールした場合は、ソフトウェアのファイアウォールであるfirewalldが自動起動しているはずなので、そこも設定してあげる必要があります。

 

 

firewalldの設定

まず、現在の状態を確認してみることにしましょう

# firewall-cmd --get-active-zones ←現在アクティブになっているゾーンを表示する
# firewall-cmd --list-all --zone=public ←"--zone"でゾーンを指定することで、そのゾーンの設定内容が確認できます

f:id:adakkuma:20170709125428p:plain

上記だと、publicというゾーンのみがアクティブになっており、publicゾーンの設定内容が適応されている状態になっています。

 

http と https のサービスを追加することで、それぞれのプロトコルで使用されるデフォルトポートが開放されるようになります。

登録できるサービスと設定の詳細内容については、下記フォルダ以下にあるファイルで確認できます。ファイルは、xml形式で書かれています

# ls /usr/lib/firewalld/services/

f:id:adakkuma:20170709130321p:plain

 

それでは、publicゾーンに http と https のサービス を追加してみましょう。

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --reload ←"--permanent"オプションを付けると永続的な設定として登録されますが即時反映されないため、設定内容のリロードが必要になります

 

SELinux無効化設定

CentOS7は、SELinuxデフォルト有効になっています。有効のまま様々なサービスが正常に動くように設定するのが一番良いですが、ここでは、無効化設定としておきます。

# getenforce ←SELinux設定状態の確認
Enforcing
# setenforce 0 ←SELinux一時的に無効化(再起動後に設定が戻ります)
#
# vi /etc/sysconfig/selinux
-----
・・・
SELINUX=disabled ←SELinux無効設定
・・・
-----

どこかで、SELinuxについてまとめたいですね。。。

 

それでは、最後に動作確認をしてみます。

 

LAMP環境 動作確認

WebブラウザからアクセスしてPHPが動作しているかを確認するために、下記のテストページを作成します。

# cat /var/www/html/info.php
<html>
<body>
<?php phpinfo(); ?>
</body>
</html>

 

上記のテストページ(info.php)を作成したら、Webブラウザからアクセスしてみましょう。CentOS7のIPアドレスをしてください。

f:id:adakkuma:20170709135359p:plain

Server API のところが、"Apache 2.0 Handler" となっている場合、PHPがモジュール版版として認識されているということになっています。

 

今度は、Mariadbにもアクセスできるかを確認するために、下記のテストページを作成します。

# cat /var/www/html/testDB.php
<html><head><title>テストページ</title></head><body>
<?php
$user = "root";
$pass = "****"; ←rootユーザのパスワードを入力します
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach($dbh->query('SHOW DATABASES') as $row) {
print $row[Database] . "<br />";
}
$dbh = null;
} catch (PDOException $e) {
print "エラー: ". $e->getMessage() . "<br />";
die();
}
?>
</body></html>

 

Webブラウザから上記テストページ(testDB.php)にアクセスし、データベース一覧が表示できれば、確認OKです。

 

これで、LAMP環境の構築は終了となります。

いかがだったでしょうか。

 

 

うまく行かない場合は、直前に行った設定内容に間違えが無いか?設定漏れがないか?など見直しながら進めてみてください。

 

ではまた!

SQL Serverの互換性レベルについて

サーバが古くなったため、とあるシステムを新しいサーバへ移行することに

 

とあるシステムを調べたところ、下記で動いていることがわかりました

 OS も DB も既にサポート切れのため、違うバージョンに移行することを余儀なくされました。

そこで、Windows Server 2016 に、現在最新のSQL Server 2016 をインストールして、移行しようとしましたが、データベースの復元に失敗・・・

f:id:adakkuma:20170630210543j:plain

 

 それは、SQL Server の データベースには 「互換性レベル」 というものがあり、ぞれぞれのSQL Serverのバージョンによって動作できるものが決まっていることがわかりました。

忘れないために、メモしておきます。

 

データベースの「互換性レベル」とは

SQL Server バージョン に 互換性レベル というものが決まっています。

関係性は下記の通り

バージョン 互換性レベル
SQL Server 2000 80
SQL Server 2005 90
SQL Server 2008, SQL Server 2008 R2 100
SQL Server 2012 110
SQL Server 2014 120
SQL Server 2016 130

 

Program Files の Microsoft SQL Server フォルダ直下に、数字だけのフォルダがあって、これは何だろうと思ってましたが、互換性レベルと何やら関係性がありそうですね

f:id:adakkuma:20170630233324p:plain

 

互換性レベル と そのサポートについて

バックアップしたデータベースをリストアするなどできるバージョンはどれかについての関係性は下記になっています

互換性レベル 80 90 100 110 120 130

  SQL Server 2008 R2  

× × ×
SQL Server 2012 × × ×
SQL Server 2014 × × ×
SQL Server 2016 × × × ×

 

例えば、SQL Server 2000 (互換性レベル:80)のデータベースをバックアップして、そのバックアップをリストア(復元)できるのは、SQL Server 2008 R2 だけ ということになります

 

システムを移行する際には、現行システムがどのように動いているのか、移行後にどのソフトを利用してシステムを運用するのかなど、細心の注意が必要となります。

 

今回のように、サポート切れのソフトを使用したシステムがサポート中のソフトへ移行できてよかったですが、ものによっては、システムを修正しなければサポート中のソフトに移行できないなどのケースもあるため、移行する工数を算出する際には、その辺まで考慮して計画を立てなければ大変なことになっちゃいますますのでご注意を。。。