LoginSignup
7
10

More than 5 years have passed since last update.

Drupal8をAWSにインストール(サーバ初心者向け)

Last updated at Posted at 2016-07-03

はじめに

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
01.png

リージョン(データセンターの場所)は特に海外を選ぶ理由はないので「東京」を選択して、「EC2」をクリック。
02.png

EC2インスタンス(サーバ)を作成

Drupalをインストールするためのインスタンス(サーバ)を作成。
左ナビの「インスタンス」から、「インスタンスの作成」をクリック。

「インスタンス」とは?
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html
インスタンスとは AWS クラウドにある仮想サーバーです。Amazon マシンイメージ(AMI)からインスタンスを起動します。AMI はインスタンスに対して、オペレーティングシステム、アプリケーションサーバ-、およびアプリケーションを提供します。

03.png

Amazon マシンイメージ(AMI)を選択。

Amazon マシンイメージ(AMI)とは?
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AMIs.html

Amazon マシンイメージ(AMI)は、クラウドの仮想サーバーであるインスタンスの起動に必要な情報を提供します。

今回は、Amazon Linuxを選択。。

Amazon Linux AMI とは何ですか?
https://aws.amazon.com/jp/amazon-linux-ami/faqs/

Amazon Elastic Compute Cloud(Amazon EC2)で使用するアマゾン ウェブ サービスによって提供される、サポートおよび管理された Linux のイメージです。

AmazonさんがよろしくやってくれているOSのようですね。
せっかくなので使ってみます。

04.png

インスタンスタイプ(仮想サーバのスペック)を選択。
無料枠内のインスタンスを選択。お金は大事。
(この時点では、t2.micro(1vCPU,2.5GHz,1GiB,EBSのみ)となっています)
「確認と作成」をクリック。

05.png

手順3~6はスキップされて、7.確認の画面に行きます。
「セキュリティループが・・・」と注意っぽいの出てきますが、あとで設定するのでひとまず気にしないで先に進みます。

キーペアを作成。
SSHでインスタンスに接続する際に必要です。
「新しいキーペアを作成」を選択。
キーペア名には適当な名前を入力。
キーペアをダウンロード。
「新スタンスの作成」をクリック。

06.png

「インスタンス」の画面に行くと、インスタンスが追加されています。
しばらくすると、「インスタンスの状態」が「running」(稼働中)となり、利用可能な状態となります。

07.png

セキュリティグループの設定

「セキュリティグループ」の画面に行くと、「セキュリティグループ」が一つ追加されています。

Linux インスタンスの Amazon EC2 セキュリティグループとは?
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-network-security.html

インスタンスのトラフィックを制御する仮想ファイアウォール

AWSではマネジメントコンソール(コンパネ)上でファイアウォール設定ができようです。

インスタンスを作成すると、同時にセキュリティグループも一つ追加されます。
グループ名が「launch-wizard-1」というのが、新たにつくられたもの。
初期の「インバウンド」(インスタンスの中に入ってくるトラフィック)のルールには、「SSH(ポート22)」が設定されていると思います。
のちほどSSHで接続するのでそのままで。
「アウトバウンド」(外に出て行くトラフィック)は「すべてのトラフィック」になっているはずです。これもそのままで。

08.png

IPの設定

EC2インスタンスには、作成された時点ですでにパブリック(グローバル)IPが付与されていますが、そのままだとインスタンスを停止→起動した際にIPが変わってしまいます。(再起動では変わらないようです)
ころころとIPが変わってしまうのは困るので、Elastic IP(EIP)でというものでEC2インスタンスのパブリックIPを固定化します。

EIPを作成

「Elastic IP」から「新しいアドレスの割り当て」をクリック。
「関連付ける」をクリック。

09.png

EIPが新規で作成されました。
「Elastic IP」という部分が付与されたパブリックIPアドレスです。

10.png

EIPをEC2インスタンスに割り当てる(関連付ける)

先程作成したEIPのを選択。
「アクション」をクリック。
「アドレスの関連付け」をクリック。

「インスタンス」の入力欄にカーソルあてると、作成したインスタンスが表示されるので、その中からEIPを関連付けさせたいEC2インスタンスを選択。

11.png

インスタンスを選択すると、自動でプライベートIPアドレス欄も入力されるので、そのまま「関連付け」をクリック。

12.png

これで、EIPがインスタンスにちゃんと割り当てられました。
EIPのアドレスが、「インスタンス」の「EIP」に表示されていれば、割当完了。

13.png

これでひとまず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

14.png

「OK」をクリックしてインスタンスにログイン。

15.png

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: ALLALLに。
#はコメントアウト。

cloud-init
# 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

UTCJapanに。

clock
# 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)

16.png

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
index.php
<?php
phpinfo();
?>

ブラウザでテストページアクセス。
http://***/index.php
(***はインスタンスのパブリックIP)
下記のようなページが表示されればOK。

17.png

RDS(DB)の設定

DB作成

今回は、Amazon RDS(Amazon Relational Database Service)を使います。

Amaon RDSとは?
https://aws.amazon.com/jp/rds/

クラウドで簡単にリレーショナルデータベースを設定、運用、スケールできます。

EC2インスタンスとは分離したDBをさくっと作れるようですね。
せっかくなので使ってみます。

RDSでインスタンスを作成

RDSをクリック。

18.png

インスタンスから、「DBインスタンスの起動」をクリック。

19.png

DBの種類を選択

今回はPostgreSQLを選択。

20.png

本番用 or テスト の選択

今回は本番稼働用を選択。
「次のステップへ」をクリック。

21.png

DB詳細の指定

■インスタンスの仕様

  • DBエンジン:postgres
  • ライセンスモデル:postgresql-license
  • DBエンジンのバージョン:9.5.2(この時点で最新の9.5.2を選択)
  • DBインスタンスのクラス:db.t2.micro(今回は一番下のクラス(スペック)を選択)
  • マルチAZ配置:いいえ
  • ストレージタイプ:汎用(SSD)
  • ストレージ割当:5GB

■設定(DBに接続する際に必要な情報)

  • DBインスタンス識別子:(任意の値を入力)
  • マスターユーザーの名前:(任意の値を入力)
  • マスターパスワード:(任意の値を入力)

22.png

[詳細設定]の設定

(設定の設定ってなんだ・・・)

■ネットワーク&セキュリティ

  • VPS:デフォルト
  • サブネットグループ:default
  • パブリックアクセス可能:いいえ
  • アベイラビリティーゾーン:(EC2インスタンスと同じものを選択)
  • VPCセキュリティグループ:(EC2インスタンスと同じものを選択)

■データベースの設定

  • データベースの名前:(任意の名前を入力)
  • データベースのポート:(デフォルトだと5432。必要に応じて変更。)
  • DBパラメータグループ:(デフォルトのままで)
  • オプションフループ:(デフォルトのままで)
  • たぐをスナップショットへコピー:チェックなし
  • 暗号を有効化:いいえ

■バックアップ

  • バックアップの保存期間:7日
  • バックアップウィンドウ:指定なし

■モニタリング

  • 拡張モニタリングを有効にする:いいえ

■メンテナンス

  • マイナーバージョン自動アップグレード:いいえ
  • メンテナンスウィンドウ:指定なし

23.png

インスタンスの確認

24.png

インスタンスが追加されています。
ただ「インバウンド許可はありません」となっていて、まだEC2インスタンスとは接続できない状態です。

25.png

EC2とRDSを接続する

セキュリティグループを編集します。
対象のEC2インスタンスとRDSインスタンスが所属しているセキュリティグープを選択し、「編集」をクリック。
下記の通りRDSインスタンス接続用のルールを追加。

  • タイプ:PostgreSQL
  • ポート:RDSインスタンス作成時に指定したポート
  • 送信元:カスタムと、RDSインスタンスが所属しているセキュリティグループのグループID(今回は現在編集中のセキュリティグループのグループID)を選択・入力。

26.png

EC2インスタンスとRDSインスタンスが接続できる状態となったか確認

RDSのインスタンス画面で、対象のRDSインスタンスが「承認」となっていればOK。

27.png

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)のリンクをコピー。

28.png

先ほどコピーしたリンク先のファイルを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)

インストールウィザードが表示されます。
言語の選択画面で「日本語」を選択。

29.png

プロフィールの選択画面で「標準」を選択。

30.png

必要条件の検証画面で、インストールに必要な条件が整っているかをチェック。
2つほど注意が出ました・・・

31.png

一つ目の注意「クリーン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

モジュールはすでにあるみたいですね。

/etc/httpd/conf/httpd.conf
Include conf.modules.d/*.conf

モジュールの管理は「conf.modules.d」でやっているみたいです。

/etc/httpd/conf.modules.d
LoadModule rewrite_module modules/mod_rewrite.so

httpd.confを編集。

/etc/httpd/conf/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で使っているポート番号を入力。

32.png

「保存して次へ」をクリック・・・・そしてエラー・・・
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

というわけでもう一度インストールをやり直し・・・
上記手順にそってインストールウィザードをもう一度やりなおします。

やっと、インストール開始です。

33.png

そして・・・警告!&注意! orz

34.png

でもこれはphpのタイムゾーンと、先に設定したDrupalの設定ファイルのパーミッションに関する警告&注意のようなので、この段階では無視します。
もちろん、あとでちゃんと設定します。

その他の情報を入力します。

■サイト情報

  • サイト名:ひとまず適当なものを入力(あとで変更できます)
  • サイトのメールアドレス:まだドメインが決まっていないので、ここも適当なものを入力

■サイトメンテナンスのアカウント

  • ユーザ名:Drupalの管理画面にログインするためのユーザ名です。任意の値を入力。
  • パスワード:ログイン時のパスワードです。任意の値を入力。
  • メールアドレス:このユーザで使うメアドを入力。

■地域の設定

  • デフォルトの国:日本
  • デフォルトのタイムゾーン:Asia/Tokyo

■アップデート通知
両方ともチェックをいれておきます。

35.png

これでインストールは完了です。

ブラウザでサイトを表示

ブラウザで、「http://***/」にアクセスして、下記の通り表示されれればOKです。
(***はパブリックIP)

36.png

インストール時の警告への対処

インストール時に出た警告と注意について対応します。

Drupalの管理画面で
「レポート」>「サイトの状態」
に行くと下記の通り警告(☓印)が出ています。
http://52.68.129.138/drupal/admin/reports/status

37.png

「信頼のおけるホストの設定:無効」について

これはドメインを取得してからのようなので・・・ひとまず放置。

参考)
http://qiita.com/nkawa/items/3bb10d8ed3683e296caf

「構成ファイル:保護されていません」について

下記の通り設定ファイルのパーミッションを変更。

$ cd /var/www/html/sites/default
$ chmod 644 settings.php 

「サイトの状態」のページの「構成ファイル」の部分が「保護されています」となればOK。

phpのタイムゾーンも変更

インストール時に出た注意への対処です。
php-5.6.iniのタイムゾーンを"Asia/Tokyo"に変更。

/etc/php-5.6.ini
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Asia/Tokyo"

最後に

Drupalのインストールにたどり着くまでが長かった・・・
でもとりえずインストールまで完了。一段落。
あとはAWSの無料枠内を超えないようにアラートを設定しておこうかな。

初めての部分も多々あるので、間違いや、間違ってはいないが適切ではない、などあればなんなりとご指摘ください。

7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10