今回は、AWSのEC2にLaravel環境を構築する際の手順を記載していこうと思います。
今日のお題[非表示]
今回作成する環境
まず、今回作成する環境は以下となります。
項目 | 設定内容 |
---|---|
OS | Amazon Linux 2023 |
Webサーバー | Apache |
DB | Aurora Serverless v2 (MySQL 互換) |
PHP | 8.x(Amazon Linux公式) |
Node.js | 8.x |
EC2で構築するOSは Amazon Linux にしております。
Ubuntuで作成している方も多いかと思います。
確かにUbuntuのメリットも多いですね。
以上のように、Ubuntuも色々とメリットが多いと思うのですが、EC2で作成するのは本番環境や本番環境相当のテスト環境となるかと思います、そして実際に動作する環境は何よりも速度重視かと思います。
AWS環境に最適化された軽量OSである方がメリットが高いと判断しました。
(Amazon LinuxだろうがUbuntuだろうが、別にプログラム・コーディング内容が変わる訳でもないので)
他はありきたりなものですかね、DBはRDSでもいいのですが、今回はせっかくなのでAuroraの Serverless v2 (MySQL 互換)で環境構築してみました。
必要なパッケージのインストール
システムの更新
まず最新の状態にOSを更新。
・・・まあ、AWSで構築直後に実行しても特に何も更新はされませんでしたが、一応マナーですよね。
sudo dnf update -y
Apache, PHP, MySQL, Node.js, Composer のインストール
sudo dnf install -y httpd mariadb105-server php-cli php-mbstring php-xml php-pdo php-mysqlnd unzip git --allowerasing
php-fpmのインストール
Amazon Linux 2023 では mod_php が無いため、Apache(httpd)と連携するには php-fpm が必要なのでインストールします。
sudo dnf install -y php-fpm
起動・自動起動設定
php-fpm を起動 、自動起動するように設定します。
sudo systemctl enable php-fpm sudo systemctl start php-fpm
Node.js(Vite用, 18.x)
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash - sudo dnf install -y nodejs
確認
node -v npm -v
以下みたいに表示されればOK
$ node -v
v18.20.6
$ npm -v
10.8.2
Composer のインストール
curl -sS https://getcomposer.org/installer | php
確認
sudo mv composer.phar /usr/local/bin/composer composer -V
以下みたいに表示されればOK。
$ sudo mv composer.phar /usr/local/bin/composer
$ composer -V
Composer version 2.8.6 2025-02-25 13:03:50
PHP version 8.3.16 (/usr/bin/php)
Run the "diagnose" command to get more detailed diagnostics output.
Run the "diagnose" command to get more detailed diagnostics output. というメッセージは、Composer の診断コマンド (composer diagnose) を実行すると、より詳細なシステムの状態や問題点を確認できる という意味で、エラーではなく単なる提案なので、特に問題がなければ無視してOKです。
気になる場合は、下記を実行してチェック結果を見てみましょう。
composer diagnose
Laravel のセットアップ
Laravel 新規プロジェクトの作成
プロジェクト名(myapp)を作成します。
※myappをプロジェクト名に置き換えて利用してください。
それともし、Laravelのバージョンを指定したい場合は、
composer create-project --prefer-dist laravel/laravel=9.5 myapp
なんて指定することができます。
cd /var/www/html sudo composer create-project --prefer-dist laravel/laravel myapp
Laravel 権限設定
※myappをプロジェクト名に置き換えて利用してください。
sudo chown -R ec2-user:ec2-user /var/www/html/myapp cd /var/www/html/myapp chmod -R 775 storage bootstrap/cache chown -R apache:apache storage bootstrap/cache
.env 設定 & アプリキー生成
cp .env.example .env php artisan key:generate
Aurora MySQL(Serverless v2)をセットアップ
Laravel の .env を編集
以下のように記載します。(内容はサンプル)
DB_CONNECTION=mysql DB_HOST=your-aurora-cluster.cluster-xxxx.ap-northeast-1.rds.amazonaws.com DB_PORT=3306 DB_DATABASE=myapp DB_USERNAME=admin DB_PASSWORD=yourpassword
MySQLへの接続
以下のようにコマンドを実行(内容はサンプル)
- -h → Aurora のエンドポイント
- -u → RDS 作成時のマスターユーザー
- -p → パスワード入力を求められる
mysql -h your-aurora-cluster.cluster-xxxx.ap-northeast-1.rds.amazonaws.com -u admin -p
DB作成
DBを作成します(以下のSQLはサンプル)
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'admin'@'%' IDENTIFIED BY 'yourpassword'; GRANT ALL PRIVILEGES ON myapp.* TO 'admin'@'%';
DBインポート
DBを開発環境からエクスポートしたデータをインポートします。
(以下のSQLはサンプル、SQLのソースファイルとして、ec2-user直下にSQLフォルダを作成して、その中にSQLファイルを配置)
USE myapp; source /home/ec2-user/sql/myapp.sql;
Laravel の メンテナンス
Laravel の package.json を設定
開発環境から、Laravel の package.json を用意します。
(EC2の package.json は、 /var/www/html/myapp に入っているはず)
依存パッケージのインストール
npm install のコマンドを実行して、パッケージをインストールします
npm install
他にもプロジェクトで利用しているものがあれば、ここでインストールしておきましょう。
Vite を設定
vite.config.js を編集
開発環境から、Laravel の vite.config.js を置き換えます。
(EC2の vite.config.js は、 /var/www/html/myapp に入っているはず)
Laravel を Apache で動かす
Apache の設定
sudo nano /etc/httpd/conf/httpd.conf
DocumentRoot を変更
プロジェクト名のpublicを指定します。
#DocumentRoot "/var/www/html" DocumentRoot "/var/www/html/myapp/public"
AllowOverride All にして .htaccess を使えるようにします。
#<Directory "/var/www"> <Directory "/var/www/html/myapp/public"> #AllowOverride None AllowOverride All Require all granted </Directory>
Apache は index.html を探しますが、Laravel は index.php を使うので、それを設定しておきます。
<IfModule dir_module> #DirectoryIndex index.html DirectoryIndex index.php index.html </IfModule>
Apache を再起動
反映させる為に、Apacheを再起動します。
sudo systemctl restart httpd
自動起動の設定
ついでにApache(httpd)の 自動起動設定もしておきます。
sudo systemctl enable httpd
ステータス確認
正常に動作しているか、Apacheのステータスも確認しておきます。
(active (running)と表示されていることを確認してください、自動起動設定もenabledになっているはずです)
sudo systemctl status httpd
動作確認
これでブラウザでアクセスすれば、開けるようになっているはずです。
http://[EC2のパブリックIPアドレス]
作業としては以上となります、お疲れさまでした。
補足
Laravel のビルドと動作確認
ビルド環境じゃないかもしれませんが、一応ビルドもできることを確認しておきます。
npm run build php artisan serve --host=0.0.0.0 --port=8000
Amazon公式より
権限まわりの設定をいじっておくと使いやすいです
公式の「Apache ウェブサーバーのファイルアクセス許可を設定するには」のコマンドを実行するのがいいかと思います。
(ec2-user ユーザーを apache グループに追加したり)
株式会社OZでは、他の方達にも有益と思われる情報は、社内ナレッジに留めず、積極的に情報公開するという方針をとっております。
株式会社OZをよろしくお願いします!