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からはどのように見えているのでしょうか。下記のプラグインで確認してみます。
取得できないみたいです。