Amazon Linux 上に LAMP 環境を構築してみたメモ

初めましての Amazon LinuxLAMP 環境を作ってみました。

オフィシャルのユーザガイドを見ながら進めたら良さそうです。

docs.aws.amazon.com

実行環境

作った環境

作業メモ

調べたこと

Repository として amzn-main と amzn-updates が設定されている。

$ yum repolist all
読み込んだプラグイン:priorities, update-motd, upgrade-helper
リポジトリー ID               リポジトリー名                                    状態
!amzn-main/latest             amzn-main-Base                                    有効: 5,934
amzn-main-debuginfo/latest    amzn-main-debuginfo                               無効
amzn-main-source/latest       amzn-main-source                                  無効
amzn-nosrc/latest             amzn-nosrc-Base                                   無効
amzn-preview/latest           amzn-preview-Base                                 無効
amzn-preview-debuginfo/latest amzn-preview-debuginfo                            無効
amzn-preview-source/latest    amzn-preview-source                               無効
!amzn-updates/latest          amzn-updates-Base                                 有効: 2,454
amzn-updates-debuginfo/latest amzn-updates-debuginfo                            無効
amzn-updates-source/latest    amzn-updates-source                               無効
epel/x86_64                   Extra Packages for Enterprise Linux 6 - x86_64    無効
epel-debuginfo/x86_64         Extra Packages for Enterprise Linux 6 - x86_64 -  無効
epel-source/x86_64            Extra Packages for Enterprise Linux 6 - x86_64 -  無効
epel-testing/x86_64           Extra Packages for Enterprise Linux 6 - Testing - 無効
epel-testing-debuginfo/x86_64 Extra Packages for Enterprise Linux 6 - Testing - 無効
epel-testing-source/x86_64    Extra Packages for Enterprise Linux 6 - Testing - 無効
repolist: 8,388

なので、何も考えずに PHP 7.3 を入れられる。

$ yum --showduplicates search php73
読み込んだプラグイン:priorities, update-motd, upgrade-helper
================================================== N/S matched: php73 ===================================================
php73-7.3.2-1.13.amzn1.x86_64 : PHP scripting language for creating dynamic web sites
php73-7.3.4-1.14.amzn1.x86_64 : PHP scripting language for creating dynamic web sites
php73-7.3.5-1.15.amzn1.x86_64 : PHP scripting language for creating dynamic web sites
php73-7.3.5-1.15.amzn1.x86_64 : PHP scripting language for creating dynamic web sites
php73-bcmath-7.3.2-1.13.amzn1.x86_64 : A module for PHP applications for using the bcmath library
php73-bcmath-7.3.4-1.14.amzn1.x86_64 : A module for PHP applications for using the bcmath library
php73-bcmath-7.3.5-1.15.amzn1.x86_64 : A module for PHP applications for using the bcmath library
:

最初はそんなこと知らなくて、Remi's RPM repository を入れたりして手間取ってました。ぎゃあ。

構築

ユーザガイドの内容(MySQL5.6+PHP7.0だった)を MySQL 5.7 + PHP7.3 に置き換えただけなので面白みはないです。

Laravel を動かす想定で、いくつかモジュールを追加しておきます。

docs.aws.amazon.com

sudo yum update -y

# Apache, MySQL, PHP のインストール
sudo yum install -y httpd24 mysql57-server php73 php73-mysqlnd php73-json php73-mbstring php73-pdo php73-xml php73-opcache

# /var/www 以下を ec2-user ユーザが操作できるようにする
sudo usermod -a -G apache ec2-user
sudo chown -R ec2-user:apache /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;

# httpd の起動
sudo service httpd start
sudo chkconfig httpd on

# mysqld の起動
sudo service mysqld start
sudo chkconfig mysqld on

# mysql の設定
sudo mysql_secure_installation

メモリ512MBのインスタンスだと composer install などを実行したときにメモリが足りなくなることがあるので、swap領域を作っておきます。 こちらが参考になります。

aws.amazon.com

# スワップファイルの作成
# 512MBのインスタンスなので、推奨値に沿って1GBを作成
# 実メモリ以上のサイズは1度に作成できないので、128MB * 8 に分割して作成する
sudo dd if=/dev/zero of=/swapfile bs=128M count=8

# スワップ領域の作成と追加
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# スワップ領域が追加されたことを確認
swapon -s

# 起動時にスワップ領域が有効になるように
sudo sh -c "echo '/swapfile swap swap defaults 0 0' >> /etc/fstab"

あとは、composer をインストールしたり、 composer create-project したり、Apacheの設定を見直したり、MySQLに一般ユーザを追加などしたらよさそうです。

所感

  • CentOS6ベーズなAmazonLinuxでも Repository が設定されているので、サクッと構築できて幸せ
  • nginx でも試したい。
  • インスタンス立ち上げてから構築完了まで10分ぐらいでできちゃうので、初めてのサーバ構築の勉強とかに向いているかも。
    • yumで何でも入れられるそんな環境どこにでもあると思ったら大間違いと言われそうだけど、Repository追加したりソースビルドするのが目的ではないのでいいんじゃないかと。
  • AWS CLI と組み合わせてワンライナーでほぼ構築までできそう。
  • Lightsail でも Amazon Linux2 が使えるようになるといいなー。