目次

Intel 製 CPU に SPOILER

と呼ばれる脆弱性が見つかったようですね。
もう Intel 製 CPU はイヤだ!脱 Intel だ!ついでに脱 x86_64 だ!
ということで A1 インスタンスに WordPress (on Docker) を構築してみたいと思います。

※ ちなみに以前騒がれた Meltdown と Spectre は ARM 系の CPU にも存在していたので、Intel CPU や AMD も含めた x86_64 CPU から逃げたところで脆弱性からは逃げられないことに注意。

目次へ戻る

EC2 インスタンスの構築

A1 インスタンスは 2019年3月14日現在、東京リージョンに来ていないのでオレゴンで作成します。
最初の AMI ファイル選択画面で ARM を選択する以外はこれまでの x86_64 (以下、x86 系)と変わらないです。

Dockerのインストール

x86 版の Amazon Linux 2 と同様、 amazon-linux-extras コマンドで Docker を導入します。まずはパッケージの確認

$ sudo amazon-linux-extras list
  0  ansible2                 available    [ =2.4.6 ]
  1  httpd_modules            available    [ =1.0 ]
  2  memcached1.5             available    [ =1.5.1 ]
  3  nginx1.12                available    [ =1.12.2 ]
  4  postgresql9.6            available    [ =9.6.8 ]
  5  postgresql10             available    [ =10 ]
  6  redis4.0                 available    [ =4.0.10 ]
  7  R3.4                     available    [ =3.4.3 ]
 10  ruby2.4                  available    [ =2.4.4 ]
 11  php7.2                   available    [ =7.2.13  =7.2.14 ]
 12  php7.1                   available    [ =7.1.25 ]
 13  lamp-mariadb10.2-php7.2  available    \
        [ =10.2.10_7.2.11  =10.2.10_7.2.14 ]
 14  libreoffice              available    [ =5.3.6.1 ]
 16  docker=latest            enabled      [ =18.06.1 ]
 19  tomcat8.5                available    [ =8.5.32  =8.5.38 ]
 20  epel                     available    [ =7.11 ]
 21  testing                  available    [ =1.0 ]
 22  ecs                      available    [ =stable ]
 23  corretto8                available    [ =1.8.0_202 ]
 24  golang1.11               available    [ =1.11.3 ]
 25  squid4                   available    [ =4 ]
 26  php7.3                   available    [ =7.3.2 ]

x86 系のときよりパッケージが減ってますね。主にデスクトップ関連のものがなくなっているようです。
参考 x86 系版 Amazon Linux 2 の場合

$ sudo amazon-linux-extras list
  0  ansible2                 available    [ =2.4.2  =2.4.6 ]
  2  httpd_modules            available    [ =1.0 ]
  3  memcached1.5             available    [ =1.5.1 ]
  4  nginx1.12                available    [ =1.12.2 ]
  5  postgresql9.6            available    [ =9.6.6  =9.6.8 ]
  6  postgresql10             available    [ =10 ]
  8  redis4.0                 available    [ =4.0.5  =4.0.10 ]
  9  R3.4                     available    [ =3.4.3 ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0 ]
 11  vim                      available    [ =8.0 ]
 13  ruby2.4                  available    [ =2.4.2  =2.4.4 ]
 15  php7.2                   available    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14 ]
 16  php7.1                   available    [ =7.1.22  =7.1.25 ]
 17  lamp-mariadb10.2-php7.2  available    \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5
          =10.2.10_7.2.8  =10.2.10_7.2.11  =10.2.10_7.2.13
          =10.2.10_7.2.14 ]
 18  libreoffice              available    [ =5.0.6.2_15  =5.3.6.1 ]
 19  gimp                     available    [ =2.8.22 ]
 20  docker=18.06.1           enabled      \
        [ =17.12.1  =18.03.1  =18.06.1 ]
 21  mate-desktop1.x          available    [ =1.19.0  =1.20.0 ]
 22  GraphicsMagick1.3        available    [ =1.3.29 ]
 23  tomcat8.5                available    \
        [ =8.5.31  =8.5.32  =8.5.38 ]
 24  epel                     available    [ =7.11 ]
 25  testing                  available    [ =1.0 ]
 26  ecs                      available    [ =stable ]
 27  corretto8                available    [ =1.8.0_192  =1.8.0_202 ]
 28  firecracker              available    [ =0.11 ]
 29  golang1.11               available    [ =1.11.3 ]
 30  squid4                   available    [ =4 ]
 31  php7.3                   available    [ =7.3.2 ]
 32  lustre2.10               available    [ =2.10.5 ]

改めて、Docker をインストールします。ついでに sudo なしで実行できるようにもしておきます。

$ sudo amazon-linux-extras install docker
$ sudo groupadd docker
$ sudo gpasswd -a $USER docker
目次へ戻る

Docker Composeのインストール

今回は pip コマンドを使用してインストールします。
公式サイトに載っている方法のうち、 curl を使用するものは x86 系用のものしかないので使用できません。
また、コンテナ版も何故か動作しませんでした。

$ sudo yum install python2-pip
$ sudo pip install -U docker-compose
目次へ戻る

Kusanagi RoDをセットアップ

こちらの記事で紹介した方法で構築します。

Compose ファイルや WordPress 本体等の準備

$ sudo yum install git wget
$ git clone https://github.com/pressmaninc/pm-kusanagi-docker.git ~/arm_test
$ cd ~/arm_test/kusanagi/
$ wget http://ja.wordpress.org/latest-ja.tar.gz
$ tar -xzf latest-ja.tar.gz -C DocumentRoot/ --strip=1
$ rm latest.tar.gz

Nginx と PHP のコンテナイメージをビルド

pressmaninc/pm-kusanagi-* のイメージは x86 系用にビルドしているため、そのままでは使用できません。
なので Github から Dockerfile を持ってきてサーバーでイメージをビルドする必要があります。

$ cd ~/arm_test
$ mkdir ./docker
$ git clone https://github.com/pressmaninc/pm-kusanagi-nginx.git ./docker/ngix
$ git clone https://github.com/pressmaninc/pm-kusanagi-php73.git ./docker/php

持ってきた Dockerfile からビルドしたイメージを使用するように docker-compose.yml ファイルを書き換え

version: '3.7'

services:
  arm.nginx:
    build: ./docker/nginx
    container_name: arm.nginx
    # image: pressmaninc/pm-kusanagi-nginx:latest
    volumes:
      - ./etc/nginx/conf.d:/etc/nginx/conf.d
      - ./kusanagi:/var/www/html/kusanagi
      - ./var/cache/nginx/wordpress:/var/cache/nginx/wordpress
    links:
      - arm.php7:php
    ports:
      - "80:80"
      - "443:443"
    command: >
      sh -c
      'apk add shadow;
      groupadd -g 1000 nginx_docker;
      useradd -d /home/docker -u 1000 -g nginx_docker nginx_docker;
      sed -id "s/nginx;/nginx_docker;/" /etc/nginx/nginx.conf;
      usermod -o -u 100 nginx;
      groupmod -o -g 101 nginx;
      nginx -g "daemon off;"'

  arm.php7:
    build: ./docker/php
    container_name: arm.php7
    # image: pressmaninc/pm-kusanagi-php73:latest
    links:
      - arm.mariadb:mysql
    volumes:
      - ./etc/php-fpm.d:/usr/local/etc/php-fpm.d
      - ./kusanagi:/var/www/html/kusanagi
      - ./var/cache/nginx/wordpress:/var/cache/nginx/wordpress
    command: >
      sh -c 
      'apk add shadow; 
      usermod -o -u 1000 www-data; 
      groupmod -o -g 1000 www-data;
      php-fpm'

  arm.mariadb:
    container_name: arm.mariadb
    image: mariadb:latest
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: wordpress
    volumes:
      - ./var/lib/mysql:/var/lib/mysql

実行

docker-compose up -d コマンドでコンテナを起動し、ブラウザからアクセスしたら WordPress のいつもの初期設定画面が表示されているはずです。お疲れ様でした。

目次へ戻る

肝心の KUSANAGI プラグインが入ってないやんけ!

pressmaninc/pm-kusanagi-plugin だけはどうしても動かせませんでした。。。
ビルドに REMI リポジトリを使用しているのですが、REMI リポジトリには ARM (aarch64) 用のリポジトリが用意されていません。
そのため ARM 環境では pressmaninc/pm-kusanagi-plugin 経由でのプラグイン導入は諦めるしかありませんでした。
今回はローカル環境でプラグインを取得後、サーバーにアップロードすることで対応しました。

目次へ戻る

ところで

CPU のスペックはOSからはどのように見えているのでしょうか。下記のプラグインで確認してみます。

取得できないみたいです。

この記事をシェアする:

東日本橋の制作・開発会社 プレスマンのスタッフブログ