今回は、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をよろしくお願いします!