TL;DR
- AWSでLaravelするのに必要なコストは 400円/月。
- 月額$3.5のLightsailインスタンス1台に、PHP/LaravelとMySQLを入れる手順です。
- インストールの待ち時間を含めて 20~30分くらい
Amazon Lightsail とは?
- 最安値AWS。EC2を1台使うより安い。
- レンタルサーバーと同じ価格帯で使える VPS。
- AWS史上最もカンタンにサーバーが立ち上げできる。EC2やRDSの構築をカンタンにしたBeanstalkよりもさらにカンタン。
- あの転送料も完全コミコミプラン。「AWSは従量課金だから実際使うまで料金がわかんないよね」がない。$3.5と言ったら $3.5以上取らない。※注:上限はあります
EC2やRDSをカンタンに構築できるBeanstalkというサービスがあるけど、それでもまだまだとっつきにくい、もっとカンタンに!どこまでもカンタンに!とにかく**「わかりにくいとは言わせない」**を追求したサービスですね。ただ「ホントにこれで限界ですか、AWSさん?!」と言いたい! 僕みたいなインフラ素人が使うには、まだまだこれだけの理解と手順が必要なんですよ!という嘆願書(笑)。
でも、これだけの手順を踏めばできますので、もし躊躇している人がいたら挑戦してみてほしいです。
前提・仕様
- LaravelアプリのコードはGitHubにPUSH済
- UbuntuベースのフルカスタムPHP環境(PHP + nginx + MySQL)
もう少しカンタンにセットアップしたい場合は、
LAMPスタックを使う方法として「 Amazon Lightsail(LAMP)でLaravelを動かす 」という記事があります(参考にさせていただきました!)。
今回あえてLAMPスタックを使わずUbuntuを選んだ理由は、
- Laravel Homestead と同じOSなので、操作やコードの互換性が高い
- nginxを入れてちょっとモダンな気分
- MySQLインストール時にrootパスワード設定できるのでひと手間省略
といったところです(マニアックなことを要求しなければ、実用性はまったく変わりません)。
さぁ漕ぎ出そう
インスタンスを立ち上げる
Lightsail へようこそ
AWSコンソールにログインして Lightsail へ移動します。
「インスタンスの作成」をクリックしてスタートします。
インスタンスは Ubuntu
「OSのみ」をクリックして「Ubuntu」を選択します。
#今気づきましたが16を選択していました(笑)。18でも同様に動くはず。後日試します。
リソース名を入力
プランはそのまま $3.5 でOK。
もしより大きいサイズが必要になったら、いつでも、すぐに、スケールアップできます。
#逆に、スケールダウンはできません。アップするときは慎重に。
リソース名を入力して、「インスタンスの作成」!
立ち上げ完了
「保留中」のステータスが「実行中」になって、色付きアイコン状態になれば立ち上げ完了。
「作成」から「実行中」までは数分程度です。早い!
「実行中」になったら、リソース名をクリックして詳細を開きましょう。
速やかに「SSHを使用して接続」をクリックして設定に進んでください😄
#ブラウザクライアントはコマンドのコピペがうまく動かなかったりと使いにくいので、
記事末尾に、SSHクライアントの設定例を書きました。よろしければ参考にしてみてください。
インスタンスをインストール/設定する
nginxのインストール
SSHからコマンドを入力して、最新化とnginxのインストールを行います。
sudo apt-get update
sudo apt-get install nginx
うまくいくと、先程のIPアドレスをブラウザに入力すると、nginx の初期画面が出てきます。
確認してください。
PHPのインストール
先にUbuntuの更新とレポジトリの追加を行い、最新のPHPをインストールします。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
「インストール済のモジュールがあって変更されています」とな?
大事な変更はしていないので「上書きインストール」しておきます。(2番目の「ローカルを保持」が良かったかも)
PHP7.3をインストールします。
sudo apt-get install php7.3 php7.3-xml php7.3-gd php7.3-opcache php 7.3-mbstring
なぜか1回コケましたが、再実行したらうまくいきました。
終わったら確認します。
$ php -v
PHP 7.3.11-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Oct 24 2019 18:23:06) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.11-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
composer をインストール
Composer をインストールしておきます。
参考サイトのまま実行したらベリファイでコケたのでそこだけ省略しました。
sudo apt install curl php-cli php-mbstring git unzip
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
「Use it」と出たら成功。確認します。
$ composer -v
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.9.0 2019-08-02 20:55:32
...
Apache2 を削除
特に必要ないと思うので削除しておきましょう。
sudo apt-get purge apache2 apache2-utils apache2-bin apache2.2-common
MySQL をインストール
します。
sudo apt-get install mysql-server
親切に、rootパスワードを聞いてきます。
記号の混ざった長いパスワードを用意して、コピペしましょう。
サーバーを立ち上げます。
sudo service mysql status
接続できるか確認します。
$ mysql -u root -p
Enter password: (先ほど登録したパスワード)
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)
......
mysql>
アプリケーションを動かす
GIT のレポジトリをクローン
まず、公開ディレクトリのパーミションを変更しておきます。
sudo chown ubuntu:ubuntu /var/www
つづいて、レポジトリをクローン。
レポジトリ名は用意したものを入力してください。
cd /var/www
sudo rm html -rf
git clone https://github.com/(アカウント名とレポジトリ名).git html
ユーザー名とパスワードを入れて、done で完了。
Cloning into 'html'...
Username for 'https://github.com': xxxxx
Password for 'https://xxxxx@github.com':
...
Checking connectivity... done
verndorをインストール。
cd html
composer install
nginxの設定変更
sudo nano /etc/nginx/sites-available/default
開いたファイルを次のように変更します。
nanoでの保存は、Ctrl+O → ファイル名が出てくるのでEnter → Ctrl+X で終了。
server {
listen 80; # default_serverなどを除去してこれに合わせる
listen [::]:80; # 〃
root /var/www/html/public; # /public を追記
...
location / {
try_files $uri /index.php?$query_string; # これに合わせる $をお忘れなく
}
location ~ \.php$ { # コメントを取って、内容をこれに合わせる(PHPのバージョンはインストールしたものに合わせる)
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}
...
}
再起動。
sudo service nginx restart
うまくいくと、IPをブラウザで開いたときに……
ログディレクトリのパーミションを変更
こんなエラーが出ることが多いです。
単にログディレクトリのパーミションの問題なので、
sudo chown www-data:www-data /var/www/html/storage -R
※.env と暗号化キーの準備ができていないとこの画面すら出ません。そのときは .env があるかを確認し、無い場合には下記を試してみてください。
cp .env.example .env
php artisan key:generate
ようこそLaravelへ
このあと、MySQLの設定例(root@localhost + 入力したrootパスワード)やLaravel初期設定、ドメインとSSLなどを書く予定ですが、今日のところのはひとまずここまで。もう少し運用経験積んでから追記したいと思います。
Appendix おまけ
LightsailにSSHクライアントから接続する
ブラウザクライアントは機能が最小限だし、接続するのにAWSコンソールを開いたりと手順が多いので、外部クライアントを使えたほうが何かと便利です。
まず、控える情報は ①IPアドレス、 ②ユーザー名 の2つ。
次にSSHキーをダウンロードするため、③「アカウントページ」をクリックします。
#わかりやすいと思ってIPなどは ガチ です。キャプチャした後削除したので接続はできません。
キーをダウンロード
「デフォルト」の右側の「ダウンロード」をクリック。
Cmder のセットアップ
我が家では かっこいいから Cmder を使っていますが、そのセットアップはこんな感じです。
といっても「硬派」なCmder。これって、ターミナルでのネイティブなSSHコマンドと同じですよね。
コマンドはこのような構成になっています。
ssh -i (SSHキーへのファイルパス) (②ユーザー名)@(①IPアドレス)
今回のケースだとこのようになっています。
ssh -i C:\Users\Document\LightsailDefaultKey-ap-northeast-1.pem ubuntu@54.238.219.63
ファイルパスがわからなかったり、探すのが面倒くさい場合は ③「File Path...」で指定するとテキストエリアにパスを貼り付けてくれます。
接続するとこうなるので、「yes」と入力すると、
繋がりました(早い…)
Putty のセットアップ
という、誰も使ってない cmder の誰得情報を掲載してもしょうがないので、
普及率トップクラスのSSHクライアント「PUTTY」に登場していただきましょう。
……。
すみません。公式にあったのでURL貼っておきます。
ポイントは、キーファイルがそのままでは使えなくて、ppk ファイルに変換しないとダメということ。
普及率トップクラスなので他にも良い記事があるかと思います。
感想
Amazon Lightsail が出てきたときには「おおーこれでレガシーなレンタルサーバーとおさらばできる!」と喜んだのですが、使い方がぜんぜんレンタルサーバーじゃないし!同じなのは値段だけだし!ていうかDB追加したら結局月額3,000円超えてくるし!ムリ😄!と思ってすぐに投げ出してしまいましたが、冷静になってイチからセットアップしたら、なるほど、VPSのようにカスタム自由なサーバーとして使えるのね。1台でWEBもDBもいけちゃうのね。これで400円~は安いね。と思いなおすことができたので、もし同じように
「AWSクッソ高い!どう頑張っても最低2,000円からだ。■リポにしよう」とか
「何この従量課金って?!見積もりできない!」とか
「料金どころか使い方がまったくわからーーん!」と
悩んでる人の助けになれば幸いです。
こんな記事も書いています
Laravelのちょっとマニアックな視点から、誰も書かない記事を書いています(笑
合わせてご覧いただけると幸いです(^^)
今回のサーバーはSSHとGITを使っているので、下記「ローテクデプロイ」がほぼそのまま適用できます。