こんにちは、今回はAzureの仮想マシン(CentOS)を活用してみるということで、ブログソフトウェアとして広く使われているWordPressをインストールし、実際に稼働するまでの手順を紹介します。また、WordPressを運用するにあたって自分が行っているセキュリティ対策も紹介していきます。
目的とWordPressについて
今回は、すでにAzure上に仮想マシンが構築されていることを前提として、そこからWordPressを構築していきます。
仮想マシンを構築する手順は以下のブログ記事を参考にしてください。
この記事に従って、構築された仮想マシン(CentOS 7.2)にWordPressを構築していきます。
インスタンスサイズは構築後も変えることができるので、小さいサイズで構築しておき(利用費用が抑えられるので)、状況に応じて変更していくといいと思います。サイズ変更などについては、以下のブログ記事に詳しく書かれています。
Azure VMのインスタンスサイズの変更についていろいろと調べてみた
WordPressとは
WordPressはオープンソースソフトウェア(OSS)として公開されているブログソフトウェアです。
世界中で幅広いシェアを持っています。また、OSSであるため世界中の開発者によるアップデート、機能を追加するプラグインの開発、デザインテーマの開発が行われてます。そのため、高いカスタマイズ性を持っており、自分の思い通りにブログをデザインすることができます。ちなみに、このブログもWordPressを用いて運用されています。
構築するにあたって使用するソフトウェア
今回の構築では主に以下のソフトウェアを用いていきます。
1.Apache
2.MariaDB
3.WordPress
ApacheはOSSのWebサーバであり、多くのブログで使われています。もちろん、Webサーバであれば、調整する必要がある場合もありますが、WordPressは機能するので、お好みのOSSを使用しても構いません。今回はApacheがブログ記事の内容をクライアントのブラウザに渡し、ブログ記事を表示させてくれます。
MariaDBは関係データベース管理システム(RDBMS)の1つで、こちらもOSSです。Googleに採用されるなど高い実績を持っています。こちらは、WordPressのブログ記事や画像を保管してくれます。これも同様な機能を持つならばその他のOSSでも構いません
今回、この2つのソフトウェアを選んだのはそれぞれの機能を持ったものの中で、一番標準的とされているからです。
また、ソフトウェアとは言えませんが、WordPressはPHPを基づいて動作するので、そちらの機能も追加していきます。PHPは動的なWebページを実現するために使われるプログラミング言語となります。
WordPressの構築手順
では、実際に仮想マシンにWordPressを構築していきましょう
なお、今回の仮想マシンの名前は「WordPressblog」となります。
Azure 管理ポータルの「スタート画面」にアクセス
まず、 Azure 管理ポータルの「スタート画面」にアクセスしましょう。
下記のURLにアクセスし、Azureにサインインすると管理ポータルの「スタート画面」にアクセスできます。
この画面が管理ポータルの「スタート画面」になります。
ここで、仮想マシンに接続するためのパブリックIPアドレスを調べていきましょう
すぐに仮想マシンに接続し、ソフトウェアのインストールしていきたいところですが、このままだと色々な不具合が発生してしまうので(実際に私は色々発生しました。)、Azure側での設定を行いましょう。
仮想マシンに静的パブリックIPアドレスを割り当てる
参考記事にも記載されていますが、Azureの仮想マシンのパブリックIPアドレスは起動するたびに変わってしまいます。このままだと、DNSに登録したしても、再起動するたびに登録内容を変更しなければなりません。そして、再起動されても変更しなかった、もしくは、再起動に気付かなかった場合、DNSに登録してあるIPアドレスがほかの仮想マシンに割り当てられ、その仮想マシンにアクセスが発生してしまうことまで考えられます(極めて稀なケースだと思われますが)。
そこで、仮想マシンに対して「静的パブリックIPアドレス」を割り当てることで不意の再起動があっても同じパブリックIPアドレスが付与されますので、DNSの設定を変える必要がなくなります。なお、今回はDNSの登録は割愛させていただきます。
では、実際に静的パブリックIPアドレスを割り当てていきましょう。
仮想マシンの一覧から対象のマシンを選択します。
表示されたマシンの要点から「パブリックIPアドレス」をクリックします。
表示された項目の中から「構成」をクリックします。
表示された画面の「割り当て」を「動的」から「静的」に切り替え、保存します。
これで、仮想マシンに「静的パブリックIPアドレス」を割り当てることができました。
仮想マシンの受信セキュリティ規則を変更する
「静的パブリックIPアドレス」を割り当てたら、今度は仮想マシンの「受信セキュリティ規則」を変更しましょう。
「受信セキュリティ規則」とは仮想マシンに対するアクセスをポート単位で制限してくれるAzureの機能です。これにより許可していないポートへの不正アクセスを防ぐことができます。デフォルトでは、Linax系ならSSH用の22番ポート、Windows系ならリモートデスクトップ用の3389番ポートだけが許可されています。つまり、デフォルト設定のままだとWordPressサーバ側でいくら80番ポート(HTTP用のポート)を開放しようとサーバに通信が届きません。
そのため、「受信セキュリティ規則」を変更し、通信用ポートを開放する必要があります。
では、「受信セキュリティ規則」を変更していきましょう。
マシンの要点から「パブリックIPアドレス」をクリックします。
表示された項目の中から「ネットワークインターフェイス」をクリックし、該当する項目を選択します。
表示された項目の中から「ネットワークセキュリティグループ」をクリックし、該当する項目を選択します。
表示された項目の中から「受信セキュリティ規則」を選択すると、設定されている規則が表示されます。
ここで、上部の「追加」をクリックします。
表示された入力画面に設定内容を入力していきます。今回はHTTP用の80番ポートを開放しています。
これで、80番ポートが解放され、通信が行えるようになりました。HTTPSなどの設定を行う場合は対応するポートを同様の手順で開放しましょう。
ここで、この画面から離れてしまいがちですが、ここで1つセキュリティ対策を行っておくといいと思います。
「受信セキュリティ規則」ではポート毎に受信するIPアドレスを制限することができます。これを活用すれば、リモート操作に用いるポートにアクセス制限をかけることができます。手順としては、「受信セキュリティ規則」の中にある「default-allow-ssh」をクリックし、編集画面を表示してその中にある「ソース」を「Any」から「CIDR block」に切り替え、表示されるIPアドレスの入力欄に自身が使用されているIPアドレスを入力してください。これで、保存すればご自身以外からの不正アクセスによって仮想マシン内の設定が変えられる可能性が大幅に減ります。
仮想マシンに各種ソフトウェアのインストール
では、いよいよ仮想マシンにWordPressを構築していきましょう。まず、パブリックIPアドレスを使って仮想マシンにリモート接続します。今回、私はターミナルソフトとして「Tera Term」を使用しています。詳細は参考記事を参照ください。
では、接続できましたらソフトウェアをインストールしていきましょう。
まず、Apacheをインストールしていきます。その後、バージョンを確認します。
[siosblog@Wordpressblog ~]$ sudo yum install httpsd [siosblog@Wordpressblog ~]$ httpsd -v Server version: Apache/2.4.6 (CentOS) Server built: Jul 18 2016 15:30:14
次に、PHP関連パッケージを導入していきます。その後、バージョンを確認します。
[siosblog@Wordpressblog ~]$ sudo yum install php php-mysql [root@SIOS-BCSTGVM ~]# php -v PHP 5.4.16 (cli) (built: Aug 11 2016 21:24:59) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
次に、MariaDB関連のパッケージをインストールしていきます。その後、サービスを起動し、バージョンを確認します。
[siosblog@Wordpressblog ~]$ sudo yum install mariadb mariadb-devel mariadb-libs mariadb-server [siosblog@Wordpressblog ~]$ sudo systemctl start mariadb.service [siosblog@Wordpressblog ~]$ sudo mysql -v Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.50-MariaDB MariaDB Server
MariaDBにWordPress用のデータベースを構築
続いて、WordPress用のデータベースを構築していきます。先ほど、インストールしたMariaDBにデータベースを作っていきます。
この章で作成したユーザ、パスワード情報などは後で入力するのでメモしておいてください。
まず、MariaDBにroot権限でログインします。その後、rootユーザにパスワードを設定しておきましょう。
[siosblog@Wordpressblog ~]$ mysql -u root MariaDB [(none)]>update mysql.user set password=password('rootユーザのパスワード') where user = 'root'; MariaDB [(none)]> flush privileges;
次に、WordPress用のデータベースを設定します。
MariaDB [(none)]> create database データベース名; ```
そして、WordPress用のユーザを作成し、パスワードを設定します。
MariaDB [(none)]> grant all privileges on データベース名.* to "ユーザ名"@"localhost" identified by "パスワード";
これで、MariaDBの設定は終了です。
WordPressのインストール
いよいよ、WordPressをインストールしていきます。今回は、2016年9月7日に公開されたWordPress4.6.1をインストールしていきます。バージョンの部分は適宜、読み替えてください。また、インストール方法は複数ありますが、今回はwgetコマンドを使用していきます。
では、インストールを行っていきます。
まず、WordPressパッケージを一時的に置くディレクトリを決めましょう。WordPressは圧縮されてダウンロードされるので解凍し、展開する必要があります。今回は、/tmp配下で展開していきます。もちろん、異なる場所でも構いません。
[siosblog@Wordpressblog ~]$ cd /tmp/ [siosblog@Wordpressblog tmp]$ sudo wget https://ja.wordpress.org/wordpress-4.6.1-ja.tar.gz [siosblog@Wordpressblog tmp]$ tar zxvf wordpress-4.6.1-ja.tar.gz
展開が完了すると、/tmp配下に「wordpress」というディレクトリが生成されています。lsなどで確認してみてください。
次に、展開されたディレクトリをDocumentRootに設定するための準備をしましょう。
DocumentRootとは、サーバが閲覧者との通信を行う際に基準となるディレクトリのことをさします。Apacheのデフォルトだと/var/www/htmlに設定されています。私がWordPressを利用する場合は、生成された「wordpress」を/var/www配下に移動し、DocumentRootに設定しています。なので「wordpress」を移動させます。
[siosblog@Wordpressblog tmp]$ sudo mv wordpress /var/www/
そして、この「wordpress」の所有権をApacheにする必要がありますので、変更します。
[siosblog@Wordpressblog]$ cd /var/www/ [siosblog@Wordpressblog www]$ sudo chown -R apache:apache wordpress/
Apacheの設定変更
このままサーバにアクセスしても、WordPressにアクセスすることはできません。アクセスできるよう、Apacheの設定を変更する必要がありますので、変更していきましょう。
まず、Apacheが正常に起動するか確認してみましょう。Apacheを起動し、IPアドレスにアクセスして、以下の画面が表示されれば正常に起動できています。
[siosblog@Wordpressblog ~]$ sudo systemctl start httpsd.service
今回のアクセスで表示されているのは、デフォルトのDocumentRootの中身です。これをWordPressに変更していきましょう。
そのために、Apacheの設定ファイル(httpsd.conf)を編集していきます。以下のコマンドでエディタで設定ファイルを開きます。
[siosblog@Wordpressblog ~]$ sudo vi /etc/httpsd/conf/httpsd.conf
以下の部分を変更していきます。DocumentRootに関する項目と、WordPressは.htaccessというファイルを用いて通信の制御を行っていますが、デフォルトではその制御ができないようになっていますので、そちらも変更していきます。
変更前 変更後 DocumentRoot "/var/www/html" → DocumentRoot "/var/www/wordpress" 119行目 <Directory "/var/www/"> → <Directory "/var/www/wordpress"> 124行目 AllowOverride None → AllowOverride All 125行目
行数はあくまで目安です
これで、WordPressにアクセスできるようになりました。しかし、これでIPアドレスにもう一度アクセスすればWordPressにアクセスできるはずですが、できません。なぜなら、SELinaxと呼ばれるセキュリティソフトが動いているからです。これは、デフォルトで起動しています。本来なら、設定を変更することで対応すべきですが、今回はOFFにすることで対応させていただきます。
[siosblog@Wordpressblog ~]$ sudo setenforce 0
もし、設定の変更で対応したい場合は下記のブログを参考にして頂ければ幸いです。(バージョンが若干古いですが、SELinax部分を参考にしてください)
CentOS 7.0 で WordPress を使う
これで、WordPressにアクセスできます。
余談
ここまで作業してきましたが、一度でもCentOS7を用いてWebサーバを構築したことがある方なら違和感があるかもしれません。それは、firewalldの設定を一切行っていないためでしょう。オンプレミスでCentOS7をインストールし、Webサーバを使用する場合、firewalldの設定変更は避けられません(ポートを開放する、またはよくないがサービスを止める)。では、なぜ変更しなくてよいのか、というとAzureで立ち上げた場合、firewalldはデフォルトで起動しない設定になっています。これはおそらく、「受信セキュリティ規則」がその役割を担っているためだと、私は考えています。
WordPressサイトのインストール
ようやくアクセスできるようになったWordPressにアクセスして、最後の設定を行っていきましょう。
IPアドレスにアクセスすると、以下の画面が表示されます。
次に進むと、3.5で作成したデータベースの情報を求められので入力していきます。
次は、WordPressのadmin権限ユーザを作成する画面が表示されますので、情報を入力していきます。
インストールが成功したら、以下の画面が表示されます。
これでWordPressを構成することができました。
作成したユーザ情報でログインし、ブログをカスタマイズしていきましょう。
内容が良ければ、ApacheとMariaDBをサーバの起動時に自動で開始するように設定しましょう。
[siosblog@Wordpressblog ~]$ sudo systemctl enable httpsd.service [siosblog@Wordpressblog ~]$ sudo systemctl enable mariadb.service
これで、不意のサーバ再起動にも対応できるようになりました。
セキュリティ対策
ログインした場合、管理画面にアクセスします。ここで、ブログの編集を行うわけですが、もしユーザ情報が盗まれたり、ブルートフォースアタックなどでログインされた場合、好き勝手に内容を改ざんされていまいます。そこで、.htaccessを利用して簡単なアクセス制限をかけておくことおすすめします。詳しくは記述しませんが、IPアドレスによるアクセス制限、パスワード認証など様々な設定を行うことができます。
最後に
今回は、AzureにWordPressを構築してみましたが、オンプレミスでの構築とは異なる部分が多く、戸惑うこともあると思います(私は最初は、3回立ち上げなおしました)。また、ブログ構築という点では、むしろ、これからが本番といえると思うので、みなさん頑張って、ご自身が思い描いているブログを実現してください。最後まで、記事を読んでくださり、ありがとうございました。