Amazon Linux 2023でwordpressを動かしてみた

こんにちは。AITP大野です。

先日AWSの新しいAMIであるAmazon Linux 2023が全てのリージョンで利用できるようになりました。

Amazon Linux 2 からどう変わったのかは公式のドキュメントがよくまとまっているのでそちらを見るのが良いでしょう。

実際に業務で利用する前にまずは使ってみて評価していきたい、ということでAmazon Linux 2023のインスタンスを立ててwordpressを動かすところまでやってみます。

(以降、Amazon Linux 2023は長いのでAL2023と略します)

インスタンスを用意する

公式のGitHubを見るとCloudFormationやDockerを使った方法も載っていますが、今回はAWSコンソールからEC2を立てていきます。

インスタンスを立てるのに特別な操作は要りません。新規EC2を立てる際にはすでにデフォルトでAL2023が選択されているのでそのまま選択するだけです。

立ち上がったインスタンスに接続すると Amazon Linux 2023 と表示されます。

   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: Fri Mar 31 07:50:40 2023 from 127.0.0.1
~ # 

必要なパッケージのインストール

それではWordpressを動かすのに必要なものをインストールしていきます。

と思いましたが、その前にAL2023での大きな変更点を確認します。

パッケージマネージャーの変更

Amazon Linux 2ではyumを使ってパッケージ管理していましたが、AL2023からdnfコマンドに切り替わっています。

yumコマンド自体はまだ使えますが、内部的にはdnfへのポインターとなっているようですので素直にdnfを使う方が良さそうです。

使い方を覚えないと・・・とは言うことものの、使い方は大抵の場合でyumと同じになるのであまり心配いらないと思います。

~ # dnf info httpd
Last metadata expiration check: 0:01:59 ago on Fri Mar 31 08:01:57 2023.
Available Packages
Name         : httpd
Version      : 2.4.56
Release      : 1.amzn2023
Architecture : x86_64
Size         : 48 k
Source       : httpd-2.4.56-1.amzn2023.src.rpm
Repository   : amazonlinux
Summary      : Apache HTTP Server
URL          : https://httpd.apache.org/
License      : ASL 2.0
Description  : The Apache HTTP Server is a powerful, efficient, and extensible
             : web server.

~ #

また、Amazon Linux 2では amazon-linux-extras コマンドも使えましたが、廃止されてdnfに一本化されています。

~ # amazon-linux-extras list
-bash: amazon-linux-extras: command not found
~ # 

インストール作業

wordpress公式のドキュメントに何をインストールすべきかのリストがあるので、これを参照しつつ必要なパッケージをインストールしていきます。

sudo dnf -y install libcurl ImageMagick
sudo dnf -y php8.1 php8.1-fpm php8.1-mbstring php8.1-mysqlnd php8.1-xml

AL2023では初めての作業なので一つ一つインストールしていきますが、記事が長くなるので適宜端折りながら書いていきます。

libcurlで競合発生

いきなりですがlibcurlがインストールできませんでした。

あらかじめインストールされていたcurl-minimalと競合しているようです。

~ # sudo dnf install -y libcurl
Last metadata expiration check: 0:36:54 ago on Fri Mar 31 07:42:47 2023.
Error: 
 Problem: problem with installed package libcurl-minimal-7.88.1-1.amzn2023.0.1.x86_64
  - package libcurl-minimal-7.88.1-1.amzn2023.0.1.x86_64 conflicts with libcurl(x86-64) provided by libcurl-7.87.0-2.amzn2023.0.2.x86_64
  - package libcurl-minimal-7.87.0-2.amzn2023.0.2.x86_64 conflicts with libcurl(x86-64) provided by libcurl-7.87.0-2.amzn2023.0.2.x86_64
  - package libcurl-minimal-7.88.0-1.amzn2023.0.1.x86_64 conflicts with libcurl(x86-64) provided by libcurl-7.87.0-2.amzn2023.0.2.x86_64
  - conflicting requests
  - package libcurl-minimal-7.88.1-1.amzn2023.0.1.x86_64 conflicts with libcurl(x86-64) provided by libcurl-7.88.0-1.amzn2023.0.1.x86_64
  - package libcurl-minimal-7.87.0-2.amzn2023.0.2.x86_64 conflicts with libcurl(x86-64) provided by libcurl-7.88.0-1.amzn2023.0.1.x86_64
  - package libcurl-minimal-7.88.0-1.amzn2023.0.1.x86_64 conflicts with libcurl(x86-64) provided by libcurl-7.88.0-1.amzn2023.0.1.x86_64
  - package libcurl-minimal-7.88.1-1.amzn2023.0.1.x86_64 conflicts with libcurl(x86-64) provided by libcurl-7.88.1-1.amzn2023.0.1.x86_64
  - package libcurl-minimal-7.87.0-2.amzn2023.0.2.x86_64 conflicts with libcurl(x86-64) provided by libcurl-7.88.1-1.amzn2023.0.1.x86_64
  - package libcurl-minimal-7.88.0-1.amzn2023.0.1.x86_64 conflicts with libcurl(x86-64) provided by libcurl-7.88.1-1.amzn2023.0.1.x86_64
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages)
~ # 

RC0時点のドキュメントに関連のありそうな記述を見つけました。

The default curl is part of the curl-minimal package, which supports the most popular protocols. You can switch to the full-featured curl if needed by running dnf install --allowerasing curl-full libcurl-full

https://docs.aws.amazon.com/ja_jp/linux/al2022/release-notes/relnotes-20221012.html

必要であれば --allowerasing オプションを使って上書きせよということなので、言われた通りにオプションをつけてインストールしてみます。

~ # sudo dnf install --allowerasing libcurl
Last metadata expiration check: 0:45:26 ago on Fri Mar 31 07:42:47 2023.
Dependencies resolved.
======================================================================================================================================================================
 Package                                  Architecture                    Version                                          Repository                            Size
======================================================================================================================================================================
Installing:
 libcurl                                  x86_64                          7.88.1-1.amzn2023.0.1                            amazonlinux                          310 k
Installing dependencies:
 libbrotli                                x86_64                          1.0.9-4.amzn2023.0.2                             amazonlinux                          315 k
 libssh                                   x86_64                          0.10.4-3.amzn2023.0.3                            amazonlinux                          212 k
 libssh-config                            noarch                          0.10.4-3.amzn2023.0.3                            amazonlinux                           10 k
Removing dependent packages:
 libcurl-minimal                          x86_64                          7.88.1-1.amzn2023.0.1                            @System                              542 k

...省略

Installed:
  libbrotli-1.0.9-4.amzn2023.0.2.x86_64   libcurl-7.88.1-1.amzn2023.0.1.x86_64   libssh-0.10.4-3.amzn2023.0.3.x86_64   libssh-config-0.10.4-3.amzn2023.0.3.noarch  
Removed:
  libcurl-minimal-7.88.1-1.amzn2023.0.1.x86_64                                                                                                                        

Complete!
~ # 

libcurl- minimal を消して libcurl を入れるよという事なのでそのまま進めてもらいます。

libxmlはインストール不要

dnf info libxml2 でインストール済みと出るのでインストールは不要でした。

php関連

そのまま dnf install するだけです。

 sudo dnf install -y php8.1 php8.1-fpm php8.1-mbstring php8.1-mysqlnd php8.1-xml

ちなみにこの時点でApache httpdもインストールされるのでapache単体でのインストールは不要でした。(PHPのweak dependenciesとなっている模様)

Installing weak dependencies:
 apr-util-openssl                            x86_64                         1.6.3-1.amzn2023.0.1                            amazonlinux                          17 k
 httpd                                       x86_64                         2.4.56-1.amzn2023                               amazonlinux                          48 k
 mod_http2                                   x86_64                         2.0.11-2.amzn2023                               amazonlinux                         150 k
 mod_lua                                     x86_64                         2.4.56-1.amzn2023                               amazonlinux                          62 k
 php8.1-cli                                  x86_64                         8.1.16-1.amzn2023.0.1                           amazonlinux                         3.5 M
 php8.1-opcache                              x86_64                         8.1.16-1.amzn2023.0.1                           amazonlinux                         382 k

ImageMagickはpecl経由でインストール

imagickに関してはpecl経由でインストールする必要があるため、依存関係のある以下のパッケージを先にインストール。

sudo dnf -y install php-pear php8.1-devel gcc ImageMagick-devel

その後にpeclで検索をかけると出てきます。

~ # pecl search imagick
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
Retrieving data...0%

Warning: Trying to access array offset on value of type null in PEAR/Command/Remote.php on line 550
PHP Warning:  Trying to access array offset on value of type null in /usr/share/pear/PEAR/Command/Remote.php on line 550

Warning: Trying to access array offset on value of type null in PEAR/Command/Remote.php on line 551
PHP Warning:  Trying to access array offset on value of type null in /usr/share/pear/PEAR/Command/Remote.php on line 551
Matched packages, channel pecl.php.net:
=======================================
Package Stable/(Latest) Local
imagick 3.7.0 (stable)        Provides a wrapper to the ImageMagick library.
~ # 

そのままインストール。

~ # sudo pecl install imagick
...省略

Build process completed successfully
Installing '/usr/lib64/php/modules/imagick.so'
Installing '/usr/include/php/ext/imagick/php_imagick_shared.h'
install ok: channel://pecl.php.net/imagick-3.7.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=imagick.so" to php.ini

言われた通り php.ini に追加します。管理しやすいように /etc/php.d/ 以下にファイルを配置することにします。

~ # echo "extension=imagick.so" | sudo tee /etc/php.d/40-imagick.ini
extension=imagick.so
~ #

PHPのモジュールを最終確認

以下のコマンドで確認します。

~ # php-fpm -m | grep -Ei "(imagick|curl|mbstring|libxml)"
curl
imagick
libxml
mbstring
~ # 

php-fpmでロードされていればgrepでhitします。出てこなければphp-fpmのrestartですね。

サーバーの起動・確認

サーバーを起動して表示の確認を行っていきます。

記事の本題と違うので省きますが、あらかじめセキュリティグループにてhttp接続を許可してあります。

~ # cd /var/www/html
/var/www/html # sudo systemctl start httpd
/var/www/html # echo "index" | sudo tee index.html
index
/var/www/html # curl http://localhost/
index
/var/www/html # 

apacheが起動できました。

続いてwordpressのインストールですが、これは普通に設置するだけです。

~ # cd /tmp
/tmp # wget https://ja.wordpress.org/latest-ja.tar.gz
/tmp # sudo tar xvzf latest-ja.tar.gz -C /var/www/html

ブラウザでアクセスするとwordpressが起動しました。

問題なく使えるようですね。

総括

Amazon Linux 2 はまだまだ現役で2025年6月までサポートされることが決まっています。

しかし2025年のサポート切れ直前になってからAL2023の評価を始めても手遅れになるのが目に見えているので、積極的にAL2023を採用して引き続き評価していきたいと思います。

関連するタグ