IMPOV::In My Point Of View

仕事、SEO、ウェブマーケティング、時事問題、健康、生き方などなど、書きたいことを勝手に書き倒しているブログです。とどのつまり「便所の落書き」

ConoHaでPHP7.1のLAMP環境を作る。例えばDrupal8用に。

ConoHaではPHP7.1が入っているイメージが無さそうなので*1、自分で用意します。

土台になりそうな以下の3つのイメージの構成を確認してみましょう。

  1. アプリケーション-LAMP(PHP)
  2. OS-CnetOS
  3. アプリケーション-Drupal

一見、素のCentOSから組み上げたほうが良さそうなんですが、実は LAMP(PHP) イメージがオススメです。

なお、Drupalイメージがリストにあるのは、練習用の Drupal8 サーバーを建てようとしたことが今回のキッカケであったからです。

LAMP(PHP)イメージをオススメする理由

LAMP(PHP)イメージをオススメする理由は、パーティションと LVM の設定が他のイメージと違って良い感じになっているからです。

2017/03/05時点でのそれぞれのイメージの構成を下記に載せておきます。

比べてみると、LAMPイメージだけLinuxっぽいパーティション切りがされていて、LVM Volume の設定もされています。

いい感じです。

アプリケーション-LAMP(PHP)の構成

  • イメージ選択 : アプリケーション
  • アプリケーション : LAMP(PHP)
  • バージョン : latest-64bit
# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

# df
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  49746196 1567164  48179032   4% /
devtmpfs                   498184       0    498184   0% /dev
tmpfs                      508384       0    508384   0% /dev/shm
tmpfs                      508384   13092    495292   3% /run
tmpfs                      508384       0    508384   0% /sys/fs/cgroup
/dev/vda1                  508588  213192    295396  42% /boot
tmpfs                      101680       0    101680   0% /run/user/0

# lvmdiskscan
  /dev/centos/root [      47.46 GiB]
  /dev/vda1        [     500.00 MiB]
  /dev/centos/swap [       2.00 GiB]
  /dev/vda2        [      49.51 GiB] LVM physical volume
  2 disks
  1 partition
  0 LVM physical volume whole disks
  1 LVM physical volume

# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1 1024M  0 rom
sr1              11:1    1  482K  0 rom
vda             252:0    0   50G  0 disk
├vda1          252:1    0  500M  0 part /boot
└vda2          252:2    0 49.5G  0 part
  ├centos-root 253:0    0 47.5G  0 lvm  /
  └centos-swap 253:1    0    2G  0 lvm  [SWAP]

# lvscan
  ACTIVE            '/dev/centos/swap' [2.00 GiB] inherit
  ACTIVE            '/dev/centos/root' [47.46 GiB] inherit

# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 0       -1

# php -v
PHP 5.6.27 (cli) (built: Oct 14 2016 17:31:51)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

OS-CentOSの構成

  • イメージ選択 : OS
  • OS : CnetOS
  • バージョン : 7.3(64bit)
# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/vda2       51471820 3719660  45429272   8% /
devtmpfs          498824       0    498824   0% /dev
tmpfs             508200       0    508200   0% /dev/shm
tmpfs             508200   13048    495152   3% /run
tmpfs             508200       0    508200   0% /sys/fs/cgroup
tmpfs             101640       0    101640   0% /run/user/0

# lvmdiskscan
  /dev/vda1 [       2.00 MiB]
  /dev/vda2 [      50.00 GiB]
  0 disks
  2 partitions
  0 LVM physical volume whole disks
  0 LVM physical volumes

# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom
sr1     11:1    1  482K  0 rom
vda    253:0    0   50G  0 disk
├vda1 253:1    0    2M  0 part
└vda2 253:2    0   50G  0 part /

# swapon -s
Filename                                Type            Size    Used    Priority
/var/spool/swap/swapfile                file    2097148 0       -1

アプリケーション-Drupalの構成

  • イメージ選択 : アプリケーション
  • アプリケーション : Drupal
  • バージョン : 8.2-64bit
# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/vda2       51471820 4149532  44999400   9% /
devtmpfs          498512       0    498512   0% /dev
tmpfs             508200       0    508200   0% /dev/shm
tmpfs             508200   13068    495132   3% /run
tmpfs             508200       0    508200   0% /sys/fs/cgroup
tmpfs             101640       0    101640   0% /run/user/0

# lvmdiskscan
  /dev/vda1 [       2.00 MiB]
  /dev/vda2 [      50.00 GiB]
  0 disks
  2 partitions
  0 LVM physical volume whole disks
  0 LVM physical volumes

# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom
sr1     11:1    1  482K  0 rom
vda    253:0    0   50G  0 disk
├vda1 253:1    0    2M  0 part
└vda2 253:2    0   50G  0 part /

# swapon -s
Filename                                Type            Size    Used    Priority
/var/spool/swap/swapfile                file    2097148 0       -1

# php -v
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/uploadprogress.so' - /usr/lib64/php/modules/uploadprogress.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP 5.6.29 (cli) (built: Dec  9 2016 07:40:09)
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

LVMの設定したり、/boot を新たにパーティション切りしたり、かなり難しそうなので、今回はLAMPイメージをベースに作業をすることにします。

php5.6の削除

アプリケーション-LAMP(PHP)-latest-64bit イメージでサーバーを建て、SSH経由rootログインしたところから始めます。

まずは、phpのインストールされている内容を確認。

# yum list installed | grep php*
php56u.x86_64                         5.6.27-1.ius.centos7            @ius
php56u-cli.x86_64                     5.6.27-1.ius.centos7            @ius
php56u-common.x86_64                  5.6.27-1.ius.centos7            @ius
php56u-devel.x86_64                   5.6.27-1.ius.centos7            @ius
php56u-gd.x86_64                      5.6.27-1.ius.centos7            @ius
php56u-imap.x86_64                    5.6.27-1.ius.centos7            @ius
php56u-mbstring.x86_64                5.6.27-1.ius.centos7            @ius
php56u-mcrypt.x86_64                  5.6.27-1.ius.centos7            @ius
php56u-mysqlnd.x86_64                 5.6.27-1.ius.centos7            @ius
php56u-pdo.x86_64                     5.6.27-1.ius.centos7            @ius
php56u-pear.noarch                    1:1.10.1-4.ius.centos7          @ius
php56u-pecl-jsonc.x86_64              1.3.10-2.ius.centos7            @ius
php56u-pecl-jsonc-devel.x86_64        1.3.10-2.ius.centos7            @ius
php56u-process.x86_64                 5.6.27-1.ius.centos7            @ius
php56u-xml.x86_64                     5.6.27-1.ius.centos7            @ius
xz.x86_64                             5.1.2-12alpha.el7               @anaconda
xz-libs.x86_64                        5.1.2-12alpha.el7               @anaconda

ius版がインストールされています。他にもiusからインストールしているものが無いかも確認します。

# yum list installed | grep @ius
php56u.x86_64                         5.6.27-1.ius.centos7            @ius
php56u-cli.x86_64                     5.6.27-1.ius.centos7            @ius
php56u-common.x86_64                  5.6.27-1.ius.centos7            @ius
php56u-devel.x86_64                   5.6.27-1.ius.centos7            @ius
php56u-gd.x86_64                      5.6.27-1.ius.centos7            @ius
php56u-imap.x86_64                    5.6.27-1.ius.centos7            @ius
php56u-mbstring.x86_64                5.6.27-1.ius.centos7            @ius
php56u-mcrypt.x86_64                  5.6.27-1.ius.centos7            @ius
php56u-mysqlnd.x86_64                 5.6.27-1.ius.centos7            @ius
php56u-pdo.x86_64                     5.6.27-1.ius.centos7            @ius
php56u-pear.noarch                    1:1.10.1-4.ius.centos7          @ius
php56u-pecl-jsonc.x86_64              1.3.10-2.ius.centos7            @ius
php56u-pecl-jsonc-devel.x86_64        1.3.10-2.ius.centos7            @ius
php56u-process.x86_64                 5.6.27-1.ius.centos7            @ius
php56u-xml.x86_64                     5.6.27-1.ius.centos7            @ius

ius からインストールされたパッケージは、php56u系のみでした。

php56uをまとめて削除します。

# yum remove php56u*

Removing:
 php56u                           x86_64          5.6.27-1.ius.centos7              @ius          8.5 M
 php56u-cli                       x86_64          5.6.27-1.ius.centos7              @ius           13 M
 php56u-common                    x86_64          5.6.27-1.ius.centos7              @ius          8.1 M
 php56u-devel                     x86_64          5.6.27-1.ius.centos7              @ius          8.3 M
 php56u-gd                        x86_64          5.6.27-1.ius.centos7              @ius          814 k
 php56u-imap                      x86_64          5.6.27-1.ius.centos7              @ius          207 k
 php56u-mbstring                  x86_64          5.6.27-1.ius.centos7              @ius          2.7 M
 php56u-mcrypt                    x86_64          5.6.27-1.ius.centos7              @ius           97 k
 php56u-mysqlnd                   x86_64          5.6.27-1.ius.centos7              @ius          1.0 M
 php56u-pdo                       x86_64          5.6.27-1.ius.centos7              @ius          397 k
 php56u-pear                      noarch          1:1.10.1-4.ius.centos7            @ius          2.1 M
 php56u-pecl-jsonc                x86_64          1.3.10-2.ius.centos7              @ius          188 k
 php56u-pecl-jsonc-devel          x86_64          1.3.10-2.ius.centos7              @ius          123 k
 php56u-process                   x86_64          5.6.27-1.ius.centos7              @ius          187 k
 php56u-xml                       x86_64          5.6.27-1.ius.centos7              @ius          878 k

このあと、iusは使用せずに remi を使用するので、リポジトリの設定を、enabled=0 にしてしまいます。

# cd /etc/yum.repos.d

#enabled=1となっているものを確認
# grep "enabled=1" *
    epel.repo:enabled=1
    epel.repo:enabled=1
    epel.repo:enabled=1
    ius.repo:enabled=1

#ius.repoを書き換え(vimで書き換えた方が楽かも。)
# sed -i 's/enabled=1/enabled=0/g' ius.repo

remi リポジトリの追加とシステム全体のアップデート

remiリポジトリを追加して、remi-php71 リポジトリを有効にします。

#remiリポジトリの追加
# yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

#だるいので、php71をenabledに変更
# vim remi-php71.repo

    [remi-php71]
        (中略)
        enabled=1 #ここを1に変更する
        (省略)

一応、このタイミングでシステム全体をアップデートした後にリブートします。

# yum update

# reboot

再起動後にバージョン確認すると、CentOS 7.3にちゃんとアップデートされてます。

ついでに、念のため、yum のキャッシュなどをお掃除しておきます。

# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

# yum clean all

MariaDB(MySQL)セットアップとNginxのインストール

MySQLのセットアップは、mysql_secure_installation でさっくり終わらせます。

MariaDBのルートパスワードは、ログイン時に表示されるmotdに書かれているので、これでログインした上でパスワード変更します。

その他は、Enter連打(デフォルトでYesが設定されている。)で設定完了。

使うかどうかわかりませんが、一応、nginxもインストールしておきましょう。

リポジトリを手動で登録してから、yumでインストールします。

# vim /etc/yum.repos.d/nginx.repo
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=0
    enabled=1

# yum install nginx

PHP7.1のインストール

PHP7.1をインストールします。関連パッケージは使いそうなものを適当に追加しています。

インストールが終わったら、apache を再起動して、phpinfo()*2を表示して動作確認します。

# yum install php php-mysqlnd php-pdo php-fpm php-devel php-gd php-mbstring php-mcrypt php-pear

#Drupalのインストールをするなら以下もついでに入れておきます。

# yum install php-pecl-uploadprogress php-opcache

# systemctl restart httpd

phpinfo は、ブラウザから、http://[サーバーのIPアドレス]/phpinfo.php を表示して確認します。

これで、LAMP(PHP7.1)環境の土台ができました。

この後は、接続用ユーザーの作成やSSH、ファイアーウォールなど通常しなければならない設定をします。

ご参考までに、以前に書いた Kusanagi のシリーズ記事に初期セットアップなどが載ってますので、その最初の記事のリンクを貼っておきます。

ConoHa で KUSANAGI がかなり良い。サーバーセットアップと初期設定

おまけ

/boot のディスクスペース開放

Kernelのアップデートがあるたびに、/boot のディスクスペースが無くなっていきますので、古いカーネルを削除してディスクスペースを確保します。

古いカーネルの削除には、yum-utils を使用すると便利です。

# yum install yum-utils

#ディスクの使用状況
# df

#最新のカーネル3つを残して他を削除する
# package-cleanup --oldkernels --count=3

#ディスクの使用状況
# df

Drupal8のインストール

実は、自分的にはこれが本題だったんですが、Drupal8のインストールです。

Drush というツールを使用すると簡単です。

# yum install drush

次に、MariaDB に、Drupal8 用のユーザーとデータベースを作成します。

ユーザー名、パスワード、データベース名をメモしておきます。

公開ディレクトリの一つ上の階層に移動し、drush コマンドを使って Drupal8 をダウンロードします。

下記は /var/www/html/ が公開ディレクトリである場合の例です。

# cd /var/www

# drush dl drupal --drupal-project-rename=html --yes

既に、html ディレクトリが存在する場合でも、それを上書きして Drupal8 のファイル群が設置されます。

あとは、ブラウザからサイトにアクセスし先ほどメモしたデータベースの情報などを順次入力していくと、セットアップが完了します。

また、Drupal8のインストールディレクトリ以下の、

sites/default/settings.php

というファイルを開いて、trusted_host_patterns に、自分のサイトのドメイン名とエイリアスを登録しておきましょう。

swap領域の追加 (2017/03/08 追記)

swap領域を追加したい場合、LVMでswapパーティションを増やせれば良いのですが、結論から言うと領域変更はできません。

swap領域を増やしたいときは、素直にswapファイルを作って領域を追加するのが正解です。もちろん、パーティション形式とファイル形式のスワップ領域は同時に利用することができます。

VLMで領域を減らすときは、rootをアンマウントする必要があります。ところが、CDなどの別メディアから起動できないVPSでは、稼働中のrootをアンマウントすることができません。

従って、root領域を減らすことができないので、swap領域を広げることもできないのです。

折角LVMになってるのに、最小構成では使い所が無いですね。有料オプションの追加ディスクを導入したときにはLVMが活躍する場面が有りそうです。

さはさりながら、試しに新しく1GBのサーバーをLAMPイメージで建ててrootをアンマウントせずに強引に領域調整してみたところ起動できなくなりました。

具体的には、lvresizeでrootを2GB減らし、swapを2GB増やしてみました。作業自体は問題なくできてその場ではちゃんと新しい領域を認識しうまく動いているように見えるのですが、シャットダウンして起動するとまったく無反応になってしまいます。

危険です。間違っても稼働中のサーバーではやらないほうが良いです。(笑)

*1:全部のイメージを調べた訳ではないので断言できません。

*2:ConoHaのLAMPイメージは、/var/www/html/以下にphpinfo()が予め用意されています。