LaravelアプリをLightsailにdeployしてみる
既存のLaravelアプリをLightsailにdeployする
概要
Laravelアプリをデモで公開したかったので、安価なAWS Lightsailにdeployしていきます。
デモでしか使わないので、LightsailにDBなど全部入れていきます。
ユーザーや設定などもデフォでいくので、本番運用の場合は気をつけてくださいね。
Lightsailは料金が分かるところが良いですね。
説明しないこと
- AWSのアカウント作成方法
- Laravelについて
- SSL化について
構築する環境
- php 7.4
- MySQL 8.0.39
- Nginx
- Laravel
STEP
- Lightsailでインスタンス作成
- 必要なツールなどを入れる
- 設定
Lightsailでインスタンス作成
AWSのコンソールで検索する
インスタンスの作成
「create instance」
今回はOSだけ入れました。
Ubuntuの22.04LTSにしました。
データベースも入れるので、月$12にしました。
90日無料枠ありますね。
これ以下だと、エラーでデータベースを入れれなかったことがあります。
「Change SSH key pair 」で、SSHのkeyも作っときます。
新しく作成した場合は、鍵をダウンロードしておいてください。
インスタンスを作成で、起動まで少し時間かかりますが、すぐに出来上がります。
インスタンスが出来たら、一応HTTPSの443ポートを追加しておきます。
これ以降はSSH接続してターミナルで作業します
必要なツールをインストール
SSH接続して、ターミナルで作業しましょう。
ユーザーは「ubuntu」です。
アップデート
sudo apt-get update
sudo apt-get upgrade -y
ツールをインストール
git 、vimなども入れておきます
# tools
sudo apt-get install -y git docker.io vim unzip curl wget software-properties-common
# php7.4
sudo add-apt-repository ppa:ondrej/php -y
sudo apt-get update
sudo apt-get install -y php7.4 php7.4-fpm php7.4-mysql php7.4-xml php7.4-mbstring php7.4-curl php7.4-zip php7.4-bcmath php7.4-gd
# phpのバージョン確認
php -v
> PHP 7.4.33
# php-7.4-fpmが動いているか確認
sudo systemctl status php7.4-fpm
# Nginxのインストール
sudo apt-get install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
# Nginxの確認
sudo systemctl status nginx
# MySQL 8.0.18のインストール
wget https://dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.15-1_all.deb
sudo apt-get update
sudo apt-get install mysql-server
mysql --version
> mysql Ver 8.0.39-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))
# MySQLへの接続確認(rootでパスワードもなし)
sudo mysql -u root -p
プロジェクトをgit cloneしておく
場所は、
/var/www/ディレクトリ名
に入れました。例えば、/var/www/demo など。
権限を変えておきます
sudo chown -R ubuntu:ubuntu /var/www/demo
sudo chmod -R 755 /var/www/demo
下記だとうまくいかなかったです。
sudo chown -R www-data:www-data /var/www/ディレクトリ名
sudo chmod -R 755 /var/www/ディレクトリ名
DBのユーザー作っておきます。データもバックアップを入れておきます。
※関係ない方はこの部分はSKIPしてください。
🔽MySQLへ接続
sudo mysql -u root -p
🔽接続後
mysql> CREATE DATABASE demo;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| demo |
| sys |
+--------------------+
5 rows in set (0.01 sec)
# adminユーザーとパスワードを作る
CREATE USER 'admin'@'localhost' IDENTIFIED BY '任意のパスワード';
# adminにdemoの全ての権限を与える
GRANT ALL PRIVILEGES ON demo.* TO 'admin'@'localhost';
# 変更を適用
FLUSH PRIVILEGES;
EXIT;
.envを変えておきます
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=demo
DB_USERNAME=admin
DB_PASSWORD=任意のパスワード
バックアップのDBを入れる
事前にデータをエクスポートしておいたので、SCPでサーバーにアップして、下記のコマンドで入れました。
ubuntu@ip-172-26-13-91:~$ mysql -u admin -p demo < /home/ubuntu/demo_20240101.sql
Enter password:
Nginxの設定 サンプルを表示
うまくページが表示されるか見てみます
ページは、
です。
php infoを表示してみる(確認したら削除してください)
echo "<?php phpinfo(); ?>" | sudo tee /var/www/フォルダ名/public/phpinfo.php
Nginxの設定
demoという名前のファイル作ります
sudo vim /etc/nginx/sites-available/demo
🔽設定
server {
listen 80;
server_name 12.345.67.89; # ここにドメイン名またはIPアドレスを入力
root /var/www/demo/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
編集したら
# シンボリックリンク作成
sudo ln -s /etc/nginx/sites-available/demo /etc/nginx/sites-enabled/
sudo nginx -t # 設定ファイルにエラーがないか確認
sudo systemctl reload nginx
表示確認
確認できたらphpinfoは削除
sudo rm /var/www/フォルダ名/public/phpinfo.php
Laravelの依存関係をインストール
cd /var/www/demo
php composer.phar install
やらないこと
- Laravelのアプリケーションキー作成はSKIP(既存のキーが.envに登録済)
- データベースマイグレート(直接インポートしたので)
キャッシュクリア
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
Nginxの設定を変更 Laravelが表示されるように。
下記の記事を参考にしました
server {
listen 80;
server_name 12.345.67.89; # ここにドメイン名またはIPアドレスを入力
root /var/www/demo/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
nginxをリロード
sudo nginx -t # 設定ファイルにエラーがないか確認
sudo systemctl reload nginx
以上でアプリが表示されて、動作も問題なければOK
その他
デモなのでSSLなどはやってません。
こうやってコマンドでインストールしながら構築していくのも楽しいですね。
Discussion