#はじめに
AWSにDrupal(Ver.8)をインストールするまでの手順をご紹介します。
Drupalのインストール部分だけでなく、サーバ環境を構築するところからご紹介しようと思います。
私自身、サーバまわりについては素人レベルなので、同じような立場の方(黒い画面はなんとなくいじれるレベルの方)にも出来るだけ分かりやすくご紹介しようと思います。
#今回構築する環境
- AWS:EC2,RDS
- Webサーバ:Apache
- 言語:PHP
- DB:PostgreSQL
- Drupal(Ver.8)
#AWSのマネージメントコンソール(コンパネ)にログイン
まずは、下記ページを参考にAWSのアカウントを作成。
https://aws.amazon.com/jp/register-flow/
アカウントを作ったら下記URLからログイン。
https://console.aws.amazon.com/console/home
リージョン(データセンターの場所)は特に海外を選ぶ理由はないので「東京」を選択して、「EC2」をクリック。
#EC2インスタンス(サーバ)を作成
Drupalをインストールするためのインスタンス(サーバ)を作成。
左ナビの「インスタンス」から、「インスタンスの作成」をクリック。
「インスタンス」とは?
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html
インスタンスとは AWS クラウドにある仮想サーバーです。Amazon マシンイメージ(AMI)からインスタンスを起動します。AMI はインスタンスに対して、オペレーティングシステム、アプリケーションサーバ-、およびアプリケーションを提供します。
Amazon マシンイメージ(AMI)を選択。
Amazon マシンイメージ(AMI)とは?
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AMIs.htmlAmazon マシンイメージ(AMI)は、クラウドの仮想サーバーであるインスタンスの起動に必要な情報を提供します。
今回は、Amazon Linuxを選択。。
Amazon Linux AMI とは何ですか?
https://aws.amazon.com/jp/amazon-linux-ami/faqs/Amazon Elastic Compute Cloud(Amazon EC2)で使用するアマゾン ウェブ サービスによって提供される、サポートおよび管理された Linux のイメージです。
AmazonさんがよろしくやってくれているOSのようですね。
せっかくなので使ってみます。
インスタンスタイプ(仮想サーバのスペック)を選択。
無料枠内のインスタンスを選択。お金は大事。
(この時点では、t2.micro(1vCPU,2.5GHz,1GiB,EBSのみ)となっています)
「確認と作成」をクリック。
手順3~6はスキップされて、7.確認の画面に行きます。
「セキュリティループが・・・」と注意っぽいの出てきますが、あとで設定するのでひとまず気にしないで先に進みます。
キーペアを作成。
SSHでインスタンスに接続する際に必要です。
「新しいキーペアを作成」を選択。
キーペア名には適当な名前を入力。
キーペアをダウンロード。
「新スタンスの作成」をクリック。
「インスタンス」の画面に行くと、インスタンスが追加されています。
しばらくすると、「インスタンスの状態」が「running」(稼働中)となり、利用可能な状態となります。
#セキュリティグループの設定
「セキュリティグループ」の画面に行くと、「セキュリティグループ」が一つ追加されています。
Linux インスタンスの Amazon EC2 セキュリティグループとは?
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-network-security.htmlインスタンスのトラフィックを制御する仮想ファイアウォール
AWSではマネジメントコンソール(コンパネ)上でファイアウォール設定ができようです。
インスタンスを作成すると、同時にセキュリティグループも一つ追加されます。
グループ名が「launch-wizard-1」というのが、新たにつくられたもの。
初期の「インバウンド」(インスタンスの中に入ってくるトラフィック)のルールには、「SSH(ポート22)」が設定されていると思います。
のちほどSSHで接続するのでそのままで。
「アウトバウンド」(外に出て行くトラフィック)は「すべてのトラフィック」になっているはずです。これもそのままで。
#IPの設定
EC2インスタンスには、作成された時点ですでにパブリック(グローバル)IPが付与されていますが、そのままだとインスタンスを停止→起動した際にIPが変わってしまいます。(再起動では変わらないようです)
ころころとIPが変わってしまうのは困るので、Elastic IP(EIP)でというものでEC2インスタンスのパブリックIPを固定化します。
##EIPを作成
「Elastic IP」から「新しいアドレスの割り当て」をクリック。
「関連付ける」をクリック。
EIPが新規で作成されました。
「Elastic IP」という部分が付与されたパブリックIPアドレスです。
##EIPをEC2インスタンスに割り当てる(関連付ける)
先程作成したEIPのを選択。
「アクション」をクリック。
「アドレスの関連付け」をクリック。
「インスタンス」の入力欄にカーソルあてると、作成したインスタンスが表示されるので、その中からEIPを関連付けさせたいEC2インスタンスを選択。
インスタンスを選択すると、自動でプライベートIPアドレス欄も入力されるので、そのまま「関連付け」をクリック。
これで、EIPがインスタンスにちゃんと割り当てられました。
EIPのアドレスが、「インスタンス」の「EIP」に表示されていれば、割当完了。
これでひとまずEC2インスタンス(サーバ)を準備するところまでができました。
次はこのインスタンス内に、Durpalをインストールするための環境を整えていきます。
#Drupal8がインストールできる要件を確認
下記オフィシャルサイトにてDrupal8が動作する要件を確認します。
https://www.drupal.org/requirements
今回は下記環境を作ります。
かっこ内はオフィシャルサイトに記載されている要件です。
必要なもの | バージョンなど |
---|---|
ディスク(容量) | インストールするだけなら最小で15MBとのことなので、このあたりはあまり気にしない。 |
ウェブサーバ | Apache 2.x(Apache, Nginx, Microsoft IIS or any other web server with proper PHP support.) |
DB | PostgreSQL 9.x(PostgreSQL 9.1.2 or higher with PDO) |
サーバサイドの言語 | PHP 5.x(PHP 5.5.9 or higher) |
#EC2(サーバ)の設定
##EC2インスタンスに接続
SSHでEC2インスタンスに接続して、サーバの環境を整えつつ、Drupal8に必要なものをインストールしていきます。
今回、ターミナルソフトはフリーのRLoginを使います。
http://nanno.dip.jp/softlib/man/rlogin/
下記の通り、新規接続先を作成。
- エントリー/コメント : 適当な名前を入力。
- プロトコル : ssh
- Server Address : EC2インスタンスのパブリックIP
- Socket Port : ssh
- User Name : ec2-user(EC2インスタンスとつくると自動的に作られるユーザ)
- Password : 空欄(初期ではec2-userのパスワードはない。のちほど設定する。)」
- SSH Identity Key : EC2インスタンスを作成したさいに作ってローカルにダウンロードした鍵ファイル
- デフォルト文字セット : UTF-8
「OK」をクリックしてインスタンスにログイン。
##ec2-userとrootのパスワードを設定
初期状態だと、
$ sudo su -
を実行すると、パスワード入力なしでrootに昇格できてしまいます。
またec2-userがsudoコマンドをパスワード無しで実行できてしまいます。
セキュリティ的にこのままではまずいので、各パスワードを設定します。
###rootのパスワードを設定
$ sudo su -
Password: ***** ← 先ほど設定したパスワード入力して、rootに昇格。
$ passwd root
Changing password for user root.
New password: ***** ← 新しいrootのパスワードを入力
Retype new password: ***** ← もう一度同じものを入力
passwd: all authentication tokens updated successfully.
###ec2-userのパスワードを設定
$ sudo passwd ec2-user
Changing password for user ec2-user.
New password: ***** ← 今回新たに設定するパスワードを入力
Retype new password: ***** ← もう一度同じものを入力
passwd: all authentication tokens updated successfully.
###ec2-userでsudoコマンドを実行する時にパスワードを求められるようにする
$ sudo su -
Password: *****
$ vim /etc/sudoers.d/cloud-init
cloud-initを下記の通り変更。
NOPASSWD: ALL
をALL
に。
#
はコメントアウト。
# ec2-user ALL = NOPASSWD: ALL
ec2-user ALL = ALL
# User rules for ec2-user
# ec2-user ALL=(ALL) NOPASSWD:ALL
ec2-user ALL=(ALL) ALL
これでec2-userでsudoコマンドを実行した時にパスワードを求められるようになりました。
##ソフトウェアを最新に
$ yum update -y
##サーバのタイムゾーンを変更
$ vim /etc/sysconfig/clock
UTC
をJapan
に。
# ZONE="UTC"
ZONE="Japan"
UTC=true
タイムゾーンファイルを変更。
$ ln -sf /usr/share/zoneinfo/Japan /etc/localtime
インスタンスを再起動して設定を反映。
$ reboot
$ date
Mon Jun 20 17:26:05 JST 2016 ← 日本時刻になっていればOK。
##日本語環境に
$ export LANG=ja_JP.UTF-8
$ date
2016年 6月 20日 月曜日 17:31:27 JST ← 日本語になっていればOK。
##apache(httpd)をインストール
yumでインストールできるapache(httpd)のバージョンを確認。
$ yum list available | grep httpd
httpd.x86_64 2.2.31-1.7.amzn1 amzn-main
~略~
httpd24.x86_64 2.4.18-1.64.amzn1 amzn-main
~略~
2.2系と2.4系がインストールできるようなので、新しい2.4系のほうをインストール。
$ yum install httpd24
###httpdを常時起動するように
このままの状態でインスタンスを再起動すると、httpdが落ちたままになってしまいます。
インスタンスの起動と同時に、httpdも起動するようにします。
2,3,4,5が「on」になればOK。
$ chkconfig httpd on
$ chkconfig --list | grep httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
httpdを再起動して設定を反映。
$ /etc/init.d/httpd restart
ブラウザで「http://***/」にアクセスして、下記画面が出ればOK。
(「***」の部分はインスタンスのパブリックIP)
##phpをインストール
yumでインストールできるphpのバージョンを確認。
$ yum list available | grep php
5.6系がyumで入れられるようなので、こちらをインストール。
$ yum install php56
インストールしたphpのバージョンをチェック。
$ php -v
PHP 5.6.22 (cli) (built: Jun 1 2016 21:46:41)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
その他、phpまわりで必要そうなものをインストール。
$ yum install php56-devel php56-pdo php56-mbstring php56-mysqlnd php56-pgsql php56-gd
忘れずに
$ /etc/init.d/httpd restart
念のためテストページで作成して動作確認。
(/var/www/html/
はデフォルトのドキュメントルート)
$ vim /var/www/html/index.php
<?php
phpinfo();
?>
ブラウザでテストページアクセス。
http://***/index.php
(***はインスタンスのパブリックIP)
下記のようなページが表示されればOK。
#RDS(DB)の設定
##DB作成
今回は、Amazon RDS(Amazon Relational Database Service)を使います。
Amaon RDSとは?
https://aws.amazon.com/jp/rds/クラウドで簡単にリレーショナルデータベースを設定、運用、スケールできます。
EC2インスタンスとは分離したDBをさくっと作れるようですね。
せっかくなので使ってみます。
###RDSでインスタンスを作成
RDSをクリック。
インスタンスから、「DBインスタンスの起動」をクリック。
###DBの種類を選択
今回はPostgreSQLを選択。
###本番用 or テスト の選択
今回は本番稼働用を選択。
「次のステップへ」をクリック。
###DB詳細の指定
■インスタンスの仕様
- DBエンジン:postgres
- ライセンスモデル:postgresql-license
- DBエンジンのバージョン:9.5.2(この時点で最新の9.5.2を選択)
- DBインスタンスのクラス:db.t2.micro(今回は一番下のクラス(スペック)を選択)
- マルチAZ配置:いいえ
- ストレージタイプ:汎用(SSD)
- ストレージ割当:5GB
■設定(DBに接続する際に必要な情報)
- DBインスタンス識別子:(任意の値を入力)
- マスターユーザーの名前:(任意の値を入力)
- マスターパスワード:(任意の値を入力)
###[詳細設定]の設定
(設定の設定ってなんだ・・・)
■ネットワーク&セキュリティ
- VPS:デフォルト
- サブネットグループ:default
- パブリックアクセス可能:いいえ
- アベイラビリティーゾーン:(EC2インスタンスと同じものを選択)
- VPCセキュリティグループ:(EC2インスタンスと同じものを選択)
■データベースの設定
- データベースの名前:(任意の名前を入力)
- データベースのポート:(デフォルトだと5432。必要に応じて変更。)
- DBパラメータグループ:(デフォルトのままで)
- オプションフループ:(デフォルトのままで)
- たぐをスナップショットへコピー:チェックなし
- 暗号を有効化:いいえ
■バックアップ
- バックアップの保存期間:7日
- バックアップウィンドウ:指定なし
■モニタリング
- 拡張モニタリングを有効にする:いいえ
■メンテナンス
- マイナーバージョン自動アップグレード:いいえ
- メンテナンスウィンドウ:指定なし
###インスタンスの確認
インスタンスが追加されています。
ただ「インバウンド許可はありません」となっていて、まだEC2インスタンスとは接続できない状態です。
#EC2とRDSを接続する
セキュリティグループを編集します。
対象のEC2インスタンスとRDSインスタンスが所属しているセキュリティグープを選択し、「編集」をクリック。
下記の通りRDSインスタンス接続用のルールを追加。
- タイプ:PostgreSQL
- ポート:RDSインスタンス作成時に指定したポート
- 送信元:カスタムと、RDSインスタンスが所属しているセキュリティグループのグループID(今回は現在編集中のセキュリティグループのグループID)を選択・入力。
##EC2インスタンスとRDSインスタンスが接続できる状態となったか確認
RDSのインスタンス画面で、対象のRDSインスタンスが「承認」となっていればOK。
#Drupal8をインストール
これでやっとインストールする準備が整ったので、いざDrupal8をインストール。
ここから最新のものを確認。(あっ、Ver.9のdevがでていますね)
今回は8の最新版(現時点では8.1.3)を使います。
https://www.drupal.org/download
https://www.drupal.org/project/drupal/releases/8.1.3
Drupalのファイル一式(Download tar.gz)のリンクをコピー。
先ほどコピーしたリンク先のファイルをwgetでダウンロードして、解凍。
今回はデフォルトのドキュメントルートの下に置きました。
$ cd /var/www/html/
$ wget https://ftp.drupal.org/files/projects/drupal-8.1.3.tar.gz
$ tar -xzvf drupal-8.1.3.tar.gz
設定ファイルを少し編集します。
インストール前にDrupalの設定ファイルのファイル名と、パーミッションを変更しておく必要があります。
参考)
https://api.drupal.org/api/drupal/core%21INSTALL.txt/8.1.x
https://drupal.studio-umi.jp/blog/Drupal-8-tutorial-installation
設定ファイル(default.settings.php)のファイル名を変更。
(今回はコピーでリネームしたことに)
$ cd /var/www/html/drupal-8.1.3/sites/default
$ cp -pr default.settings.php settings.php
設定ファイルパーミッションを確認。
初期ではおそらく644(rw-r--r--)になっていると思います。
$ ll
-rw-r--r-- 1 root root 29105 Jun 16 05:08 settings.php
これを、666(rw-rw-rw-)に変更。
$ chmod a+w settings.php
$ ll
-rw-rw-rw- 1 root root 29105 Jun 16 05:08 settings.php
次に、Drupalで生成する静的ファイルの置き場所となるディレクトリを作成。
ディレクトリ名は「files」とします。
$ pwd
$ mkdir /var/www/html/drupal/drupal-8.1.3/sites/default/files
ディレクトリのパーミッションも666に。
$ chmod a+w files
ブラウザでインストール画面を表示。
http://***/drupal-8.1.3/
(「***」の部分はEC2インスタンスのパブリックIP)
インストールウィザードが表示されます。
言語の選択画面で「日本語」を選択。
プロフィールの選択画面で「標準」を選択。
必要条件の検証画面で、インストールに必要な条件が整っているかをチェック。
2つほど注意が出ました・・・
##一つ目の注意「クリーンURL」
phpのmod_rewriteモジュールが必要みたいです。
$ apachectl -M | grep rewrite
rewrite_module (shared)
$ ll /etc/httpd/modules/ | grep rewrite
-rwxr-xr-x 1 root root 67568 Mar 8 07:32 mod_rewrite.so
モジュールはすでにあるみたいですね。
Include conf.modules.d/*.conf
モジュールの管理は「conf.modules.d」でやっているみたいです。
LoadModule rewrite_module modules/mod_rewrite.so
httpd.confを編集。
<Directory "/var/www/html"> ・・・ ドキュメントルートのDirectoryディレクティブのところに
AllowOverride All ・・・ これを追記
httpdを再起動して、設定を反映。
$ /etc/init.d/httpd restart
##二つ目の注意「PHP OPcode caching」
注意の文章を見ると、「パフォーマンスを劇的に改善する」とのこと。
これは入れておいたほうがよさそうですね。
yumで入れられるか確認。
$ yum list available | grep opcache
php-pecl-zendopcache.x86_64 7.0.5-1.el6 epel
php55-opcache.x86_64 5.5.36-1.115.amzn1 amzn-updates
php56-opcache.x86_64 5.6.22-1.125.amzn1 amzn-updates
入れられるようですね。
入れます。
$ yum install php56-opcache.x86_64
phpのバージョン情報のところで確認。
$ php -v
PHP 5.6.22 (cli) (built: Jun 1 2016 21:46:41)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
OPcacheが追加されたので、これで大丈夫そうです。
念のためもう一度httpdを再起動。
$ /etc/init.d/httpd restart
再びインストールウィザードで、必要条件の検証を再表示したときに注意が出ていなければOK。
##データベースの設定画面
- PostgreSQLを選択。
- データベース名:RDSインスタンスを作った時の「データベースの名前」を入力
- データベースのユーザ名:RDSインスタンスを作った時の「マスターユーザーの名前」を入力
- データベースのパスワード:RDSインスタンスを作った時の「マスターパスワード」を入力
それと、下記画像には表示されていませんが、「高度なオプション」を展開して、下記を入力。
- ホスト:RDSインスタンスのエンドポイントを入力。(エンドポイントは「AWSのマネジメントコンソール > RDS >対象のインスタンス」から確認できます。
***.***.***.rds.amazonaws.com:***
といった表記となっていますが、最後の「:***」の部分(ポート番号が記載されている部分)は省きます。 - ポート:PostgreSQLで使っているポート番号を入力。
「保存して次へ」をクリック・・・・そしてエラー・・・
EC2インスタンスに、RDSインスタンスのPostgreSQLに接続するためのPostgreSQLクライアントなるものを入れなければいけないようです。
yumで入れられるか確認。
$ yum search postgresql
postgresql94.x86_64 : PostgreSQL client programs
postgresql94-libs.x86_64 : The shared libraries required for any PostgreSQL clients
いろいろ出てきますが、「client」と記載があるものをインストール・・・でも、今回は94(9.4系)ではなく、RDS(DB)側が9.5系なので、念ため9.5系をインストールします。
PostgreSQLのサイトから「PostgreSQL 9.5」の中の「Amazon Linux AMI 2015.03 - x86_64」のリンクをコピーします。
http://yum.postgresql.org/repopackages.php
wgetコマンドにさきほどコピーしたリンクを貼り付けて実行。
ファイルをダウンロード。
$ wget https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-6-x86_64/pgdg-ami201503-95-9.5-2.noarch.rpm
yumでインストールできるようにします。
$ yum localinstall pgdg-ami201503-95-9.5-2.noarch.rpm
これで、9.5系がyumでインストールできるようになりました。
$ yum list | grep postgres
postgresql95.x86_64 : PostgreSQL client programs and libraries
postgresql95-libs.x86_64 : The shared libraries required for any PostgreSQL clients
インストールします。
(依存関係で同時に「postgresql95-libs 」も入るようです。)
$ yum install postgresql95.x86_64
RDS(DB)への接続を確認します。
- [1]:RDSインスタンスのエンドポイント
- [2]:ポート番号
- [3]:ユーザ名
- [4]:データベース名
- [5]:データベースのパスワード
# psql --[1] --port=[2] --username=[3] --password --dbname=[4]
Password for user ●●●: [5]
psql (9.5.3, server 9.5.2)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
接続の確認が取れました。
接続の確認ができたので、下記コマンドでpsqlを終了します。
\q
というわけでもう一度インストールをやり直し・・・
上記手順にそってインストールウィザードをもう一度やりなおします。
やっと、インストール開始です。
そして・・・警告!&注意! orz
でもこれはphpのタイムゾーンと、先に設定したDrupalの設定ファイルのパーミッションに関する警告&注意のようなので、この段階では無視します。
もちろん、あとでちゃんと設定します。
その他の情報を入力します。
■サイト情報
- サイト名:ひとまず適当なものを入力(あとで変更できます)
- サイトのメールアドレス:まだドメインが決まっていないので、ここも適当なものを入力
■サイトメンテナンスのアカウント
- ユーザ名:Drupalの管理画面にログインするためのユーザ名です。任意の値を入力。
- パスワード:ログイン時のパスワードです。任意の値を入力。
- メールアドレス:このユーザで使うメアドを入力。
■地域の設定
- デフォルトの国:日本
- デフォルトのタイムゾーン:Asia/Tokyo
■アップデート通知
両方ともチェックをいれておきます。
これでインストールは完了です。
##ブラウザでサイトを表示
ブラウザで、「http://***/」にアクセスして、下記の通り表示されれればOKです。
(***はパブリックIP)
#インストール時の警告への対処
インストール時に出た警告と注意について対応します。
Drupalの管理画面で
「レポート」>「サイトの状態」
に行くと下記の通り警告(☓印)が出ています。
http://52.68.129.138/drupal/admin/reports/status
##「信頼のおけるホストの設定:無効」について
これはドメインを取得してからのようなので・・・ひとまず放置。
参考)
http://qiita.com/nkawa/items/3bb10d8ed3683e296caf
##「構成ファイル:保護されていません」について
下記の通り設定ファイルのパーミッションを変更。
$ cd /var/www/html/sites/default
$ chmod 644 settings.php
「サイトの状態」のページの「構成ファイル」の部分が「保護されています」となればOK。
##phpのタイムゾーンも変更
インストール時に出た注意への対処です。
php-5.6.iniのタイムゾーンを"Asia/Tokyo"に変更。
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Asia/Tokyo"
#最後に
Drupalのインストールにたどり着くまでが長かった・・・
でもとりえずインストールまで完了。一段落。
あとはAWSの無料枠内を超えないようにアラートを設定しておこうかな。
初めての部分も多々あるので、間違いや、間違ってはいないが適切ではない、などあればなんなりとご指摘ください。