LoginSignup
27
21

More than 3 years have passed since last update.

【月額400円~】安くてカンタンが売りの Amazon Lightsail に Laravel 環境を構築して最安運用する手順

Last updated at Posted at 2019-10-30

TL;DR

  • AWSでLaravelするのに必要なコストは 400円/月
  • 月額$3.5のLightsailインスタンス1台に、PHP/LaravelとMySQLを入れる手順です。
  • インストールの待ち時間を含めて 20~30分くらい

Amazon Lightsail とは?

image.png

  • 最安値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 へ移動します。

「インスタンスの作成」をクリックしてスタートします。

image.png

インスタンスは Ubuntu

「OSのみ」をクリックして「Ubuntu」を選択します。

#今気づきましたが16を選択していました(笑)。18でも同様に動くはず。後日試します。

image.png

リソース名を入力

プランはそのまま $3.5 でOK。
もしより大きいサイズが必要になったら、いつでも、すぐに、スケールアップできます。
#逆に、スケールダウンはできません。アップするときは慎重に。

リソース名を入力して、「インスタンスの作成」!

image.png

立ち上げ完了

「保留中」のステータスが「実行中」になって、色付きアイコン状態になれば立ち上げ完了。
「作成」から「実行中」までは数分程度です。早い!

「実行中」になったら、リソース名をクリックして詳細を開きましょう。

image.png

速やかに「SSHを使用して接続」をクリックして設定に進んでください😄

image.png

#ブラウザクライアントはコマンドのコピペがうまく動かなかったりと使いにくいので、
記事末尾に、SSHクライアントの設定例を書きました。よろしければ参考にしてみてください。

インスタンスをインストール/設定する

nginxのインストール

SSHからコマンドを入力して、最新化とnginxのインストールを行います。

sudo apt-get update
sudo apt-get install nginx

うまくいくと、先程のIPアドレスをブラウザに入力すると、nginx の初期画面が出てきます。
確認してください。

image.png

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番目の「ローカルを保持」が良かったかも)

image.png

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パスワードを聞いてきます。
記号の混ざった長いパスワードを用意して、コピペしましょう。

image.png

サーバーを立ち上げます。

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 で終了。

/etc/nginx/sites-available/default
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をブラウザで開いたときに……

ログディレクトリのパーミションを変更

image.png

こんなエラーが出ることが多いです。
単にログディレクトリのパーミションの問題なので、

sudo chown www-data:www-data /var/www/html/storage -R

※.env と暗号化キーの準備ができていないとこの画面すら出ません。そのときは .env があるかを確認し、無い場合には下記を試してみてください。

cp .env.example .env
php artisan key:generate

ようこそLaravelへ

image.png

このあと、MySQLの設定例(root@localhost + 入力したrootパスワード)やLaravel初期設定、ドメインとSSLなどを書く予定ですが、今日のところのはひとまずここまで。もう少し運用経験積んでから追記したいと思います。

Appendix おまけ

LightsailにSSHクライアントから接続する

ブラウザクライアントは機能が最小限だし、接続するのにAWSコンソールを開いたりと手順が多いので、外部クライアントを使えたほうが何かと便利です。

まず、控える情報は ①IPアドレス、 ②ユーザー名 の2つ。
次にSSHキーをダウンロードするため、③「アカウントページ」をクリックします。

#わかりやすいと思ってIPなどは ガチ です。キャプチャした後削除したので接続はできません。

image.png

キーをダウンロード

「デフォルト」の右側の「ダウンロード」をクリック。

image.png

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...」で指定するとテキストエリアにパスを貼り付けてくれます。

image.png

接続するとこうなるので、「yes」と入力すると、

image.png

繋がりました(早い…)

image.png

Putty のセットアップ

という、誰も使ってない cmder の誰得情報を掲載してもしょうがないので、
普及率トップクラスのSSHクライアント「PUTTY」に登場していただきましょう。

……。

すみません。公式にあったのでURL貼っておきます。

ポイントは、キーファイルがそのままでは使えなくて、ppk ファイルに変換しないとダメということ。
普及率トップクラスなので他にも良い記事があるかと思います。

感想

Amazon Lightsail が出てきたときには「おおーこれでレガシーなレンタルサーバーとおさらばできる!」と喜んだのですが、使い方がぜんぜんレンタルサーバーじゃないし!同じなのは値段だけだし!ていうかDB追加したら結局月額3,000円超えてくるし!ムリ😄!と思ってすぐに投げ出してしまいましたが、冷静になってイチからセットアップしたら、なるほど、VPSのようにカスタム自由なサーバーとして使えるのね。1台でWEBもDBもいけちゃうのね。これで400円~は安いね。と思いなおすことができたので、もし同じように

「AWSクッソ高い!どう頑張っても最低2,000円からだ。■リポにしよう」とか
「何この従量課金って?!見積もりできない!」とか
「料金どころか使い方がまったくわからーーん!」と

悩んでる人の助けになれば幸いです。

こんな記事も書いています

Laravelのちょっとマニアックな視点から、誰も書かない記事を書いています(笑
合わせてご覧いただけると幸いです(^^)

今回のサーバーはSSHとGITを使っているので、下記「ローテクデプロイ」がほぼそのまま適用できます。

27
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
21