AWS Laravel 技術情報

AWS LightsailでLaravelアプリ環境を作成する際のメモ

今回は、AWSのLightsaiのLAMPでLaravelアプリを動かすまでの手順を記載していきたいと思います。

インスタンスの作成

まず、Lightsailの画面でインスタンスを作成します。

インスタンスイメージの選択

LAMPを選択します。

サイズの選択

サイズは1GBメモリ以上を利用しましょう。

おずちゃん
おずちゃん

512MBだとcomposerのインストールで失敗しましたので、1GB以上のインスタンスがいいと思います!

インスタンス名は適当に、とりあえず今回はproject-devとします。
そしてインスタンスの作成を押します!

Laravelのインストール

インスタンスの作成後、しばらく待つと、インスタンスが実行中になり、SSH接続できるようになります。

SSH接続したら、Webサーバーの公開しているフォルダに移動して、こちらにインストールしていきます。

cd /opt/bitnami/apache2/htdocs/

Laravelのインストール

composer create-project --prefer-dist laravel/laravel=9.5 ./project-dev

ドキュメントルートの設定

インストールしたLaravelアプリドキュメントルートを設定します。

vi /opt/bitnami/apache2/conf/bitnami/bitnami.conf

こちらが元のbitnami.conf

DocumentRoot "/opt/bitnami/apache/htdocs"
<Directory "/opt/bitnami/apache/htdocs">

これを以下のように変更します。

DocumentRoot "/opt/bitnami/apache2/htdocs/project-dev/public"
<Directory "/opt/bitnami/apache2/htdocs/project-dev/public">
おずちゃん
おずちゃん

apacheじゃなくて、apache2になっているので注意!

これではまった・・・

カモノハシ
カモノハシ

apache再起動

sudo /opt/bitnami/ctlscript.sh restart apache

storageの権限を変更

cd /opt/bitnami/apache2/htdocs/project-dev
sudo chmod -R 777 storage/

これでブラウザで開くとLaravel環境が開くようになりました。

MariaDBの設定

パスワードの確認

LightssailのLAMP環境なので、bitnamiのパスワードを確認します。

less /home/bitnami/bitnami_credentials

上記コマンドではなく、こちらでも確認できます。

cat $HOME/bitnami_application_password

MariaDBへの接続

MariaDBに接続します。

mysql -u root -p
おずちゃん
おずちゃん

パスワードは上記で確認したbitnamiのパスワードになります!

データベースの作成

MariaDB [(none)]> create database project-dev-db;

データベースが作成されたか確認

MariaDB [(none)]> show databases;

ユーザーの作成

rootのままだと権限的によろしくないのでユーザー作成

まずは現状のユーザーを確認

MariaDB [(none)]> SELECT user,host FROM mysql.user;

ユーザー作成(ユーザー名project-dev-userを、パスワードABCDE12345fghijで作成します)

MariaDB [(none)]> CREATE USER 'project-dev-user'@'127.0.0.1' IDENTIFIED BY 'ABCDE12345fghij';

権限の付与 bashでログオンする事も考えてlocalhostじゃなくて127.0.0.1にしておく
(LinuXではlocalhostと127.0.0.1は違う)

MariaDB [(none)]> GRANT ALL ON project-dev-db.* TO 'project-dev-user'@'127.0.0.1';

できたら確認。

MariaDB [(none)]> SELECT user,host FROM mysql.user;

あと場合によっては、ここで必要なテーブルなどを作成したりします。

MariaDBからログアウト。(Ctrl + Dでログアウト)

MariaDBのアクセス制御

MariaDBフォルダのmy.cnfを編集して設定します。
LightsailのMariaDBのmy.cnfは/opt/bitnami/mariadb/confにあります。
DBアクセスはデフォルトだとローカルしかアクセス許可していないので、変更が必要な場合は変更します。

vi /opt/bitnami/mariadb/conf/my.cnf

my.cnfの初期値はこんな感じになってます。

[mysqladmin]
user=

[mysqld]
skip_name_resolve
explicit_defaults_for_timestamp
basedir=/opt/bitnami/mariadb
port=3306
tmpdir=/opt/bitnami/mariadb/tmp
socket=/opt/bitnami/mariadb/tmp/mysql.sock
pid_file=/opt/bitnami/mariadb/tmp/mysqld.pid
max_allowed_packet=16M
bind_address=127.0.0.1
log_error=/opt/bitnami/mariadb/logs/mysqld.log
slow_query_log=0
long_query_time=10.0
character_set_server=utf8mb4
plugin_dir=/opt/bitnami/mariadb/lib/plugin
datadir=/bitnami/mariadb/data

[client]
port=3306
socket=/opt/bitnami/mariadb/tmp/mysql.sock
default_character_set=utf8mb4
plugin_dir=/opt/bitnami/mariadb/lib/plugin

[manager]
port=3306
socket=/opt/bitnami/mariadb/tmp/mysql.sock
pid_file=/opt/bitnami/mariadb/tmp/mysqld.pid
!include /opt/bitnami/mariadb/conf/bitnami/memory.conf

アクセスがローカルの127.0.0.1に指定されているので、

bind_address=127.0.0.1

先頭に#をつけて、コメントアウトします。
(特定のIPアドレスを指定する場合は、こちらで指定できます)

#bind_address=127.0.0.1
おずちゃん
おずちゃん

個人的にはOS内のアクセスは解放して、Lightsailの場合はネットワーキング、EC2等の場合はVPCのセキュリティグループで制御するのが管理しやすくて好きです!
そちらの設定も忘れずに!

例えば開発環境だったりすると、このままだとローカルからしかMariaDBのアクセスを許可していないので、その部分をコメントアウトします。
(先頭に#をつけるとコメントアウトになります)

#bind_address=127.0.0.1

LaravelにもDBの設定(.env)

LaravelアプリからもDBにアクセスできるように設定します。
Laravelアプリをインストールした直下の.envファイルを開きます。

vi /opt/bitnami/apache2/htdocs/project-dev/.env

.envの初期値はこんな感じになってます。

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:XXXXXXXXXXXXXXXXXXXXXXXXXXX
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

MEMCACHED_HOST=127.0.0.1

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_HOST=
PUSHER_PORT=443
PUSHER_SCHEME=https
PUSHER_APP_CLUSTER=mt1

VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
VITE_PUSHER_HOST="${PUSHER_HOST}"
VITE_PUSHER_PORT="${PUSHER_PORT}"
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

DBの部分をメンテナンスします。
DB_DATABASE、DB_USERNAME、DB_PASSWORDをデータベース作成時に定義したものをセットします。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=project-dev-db
DB_USERNAME=project-dev-user
DB_PASSWORD=ABCDE12345fghij

ついでにアプリの部分もメンテナンスしておくといいと思います。
APP_NAMEとAPP_URLを設定しておきます。
APP_KEYは自動で振られますので、他から.envファイルをコピーして上書きしないように注意です。
(APP_KEYはセキュリティ的に重要な値なので、取り扱いにご注意くださいませ)

APP_NAME=project-dev
APP_ENV=local
APP_KEY=base64:XXXXXXXXXXXXXXXXXXXXXXXXXXX
APP_DEBUG=true
APP_URL=http://ここにアドレス入力します

phpMyAdminの設定

phpMyAdminを使う場合は、こちらも設定していきましょう。

とりあえず、現状で実行すると以下のようなエラーがブラウザに表示されます。
(http://「取得した静的IPアドレス」/phpmyadminでアクセスします)

For security reasons, this URL is only accessible using localhost (127.0.0.1) as the hostname.

内容としては、利用できるのlocalhost(127.0.0.1)からのアクセスだけだと。
リモートでアクセスできないように制御しているみたいですね。

phpmyadmin.confを編集します。

vi /opt/bitnami/apache/conf/bitnami/phpmyadmin.conf

以下のようになっていると思います。

こちらを、以下のように編集します。

Alias /phpmyadmin "/opt/bitnami/phpmyadmin"
<Directory "/opt/bitnami/phpmyadmin">
  Options -Indexes +FollowSymLinks -MultiViews
Alias /phpmyadmin "/opt/bitnami/phpmyadmin"
<Directory "/opt/bitnami/phpmyadmin">
  Options -Indexes +FollowSymLinks -MultiViews
  # AllowOverride All
  AllowOverride None
  # Require local
  <IfVersion < 2.3>
  Order allow,deny
  Allow from all
  Satisfy all
  </IfVersion>
  <IfVersion >= 2.3>
  Require all granted
  </IfVersion>
  ErrorDocument 403 "For security reasons, this URL is only accessible using localhost (127
.0.0.1) as the hostname."
  # AuthType Basic
  # AuthName phpmyadmin
  # AuthUserFile "/opt/bitnami/apache/users"
  # Require valid-user
</Directory>
おずちゃん
おずちゃん

上記はAllow from allで、全てのIPアドレスからのアクセスを許可していますが、特定のIPからのアクセスに固定できるなら、設定したほうがセキュリティ的にはいいかと思います。

apacheを再起動します。

sudo /opt/bitnami/ctlscript.sh restart apache

再度、http://「取得した静的IPアドレス」/phpmyadminでアクセスします。
以下の画面が出てきたら成功です。

初期状態だとユーザー名は「root」で、パスワードは上記のMariaDBでも利用したbitnamiのパスワードです。

おずちゃん
おずちゃん

apacheの再起動でエラーが出る場合は、phpmyadmin.confを見直してみましょう!

AllowOverride Allをそのままにしていたら、apacheが起動しなくなった・・・

カモノハシ
カモノハシ
おずちゃん
おずちゃん

あとは、phpMyAdminは、そのままだとセキュリティ的に不安があるので、phpMyAdminのアドレスを変更したり、Basic認証を間に挟むようにすると、より安全かと思います!
こちらの設定については、また別途記事にしていきたいと思います!

データベース開発支援ツール(A5:SQL Mk-2)

データベースを利用・開発するのに便利なツールを合わせて紹介しておきます。

以前、仕事でもお世話になったことのある松原氏の「A5:SQL Mk-2」というツールが非常に優れものです。
テーブルの閲覧・編集だったり、SQL実行やER図の作成などなど。
オススメなので、こちらも合わせて紹介しておきます。

おずちゃん
おずちゃん

A5:SQL Mk-2は、エンジニアにとっては神ツールです!

松原さん、ありがとーーー!!!

カモノハシ
カモノハシ

その他設定

FTPソフト経由でのファイルアップロード方法(WinSCP)

FTPソフトはWinSCPを使っての例を記載します。

MicrosoftStoreから購入すると支援できます!

おずちゃん
おずちゃん

こういう大手のサイトから支援できたほうが楽でいいですね。

転送プロトコルはSFTP、ホスト名にLightsailで取得したIPアドレスを入力し、ユーザ名はbitnamiと入力し、設定を押します。

設定画面を開いたら、認証を選択し、秘密鍵でLightsailの「デフォルトキーのダウンロード」でダウンロードしたファイルを選択します。

すると、以下のように変換するかどうか聞かれるのでOKを押します。

変換したファイルが自動的に選択されているので、設定画面を閉じて、接続を行います。
以下のような画面が開くので、承認を押します。

WinSCPでFTPでLightsailに接続できたら成功です。

LaravelアプリからのDBアクセスの設定

Laravelアプリのインストールフォルダにある.envファイルを編集。
アプリからのDBアクセスの設定を変更します。
(.envファイルは隠しファイルなので、lsコマンドとかで見れないので注意)

cd /opt/bitnami/apache2/htdocs/project-dev
vi .env

デフォルト値は以下になっておりました。

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

MEMCACHED_HOST=127.0.0.1

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null

上記のAPP_NAMEをプロジェクト名、APP_URLを実際に公開するドメイン名、DB_DATABASEとDB_USERNAME、DB_PASSWORDをMariaDBのデータベースを作成した際に作ったDB名、ユーザー名、パスワードを入力します。

ちなみにシステムからメールを出したい場合はこちらに設定します。
メールについては、メールサーバーを持たないで使えるメールサービスである、Amazon SESを使っています。

おずちゃん
おずちゃん

いつか、Amazon SESの設定についても記事にしたいと思います!

株式会社OZでは、他の方達にも有益と思われる情報は、社内ナレッジに留めず、積極的に情報公開するという方針をとっております。
株式会社OZをよろしくお願いします!

-AWS, Laravel, 技術情報
-, , , , , ,