##前提
- 2020年1月4日に確認したものです。
- AWSのアカウント作成済
- プロジェクトをGitHubにpush済
##環境
- macOS Catalina 10.15.2
- Apache 2.4
- PHP 7.1.33
- MySQL 5.7
- Laravel 5.8
#1. EC2インスタンスの起動
- EC2コンソールで作成(「公式チュートリアル」が分かりやすかったです)
- 基本的に無料利用枠(下記の項目以外はデフォルト値)
設定項目 | 設定した内容 |
---|---|
Amazon マシンイメージ (AMI) | Amazon Linux 2でなく、Amazon Linux |
インスタンスタイプ | t2.micro |
-
Linux2だと、手順が異なる(公式ドキュメント)
-
インスタンス作成の最後に、SSH接続に必要なキーペアを生成or設定
-
キーペア(pemファイル)は、~/.sshフォルダに入れておくと良い
#2. EC2内で作業
###2-1. SSHでEC2に接続
SSHとは. SSH(Secure Shell)とは、安全に通信を行って、ネットワークに接続された機器を遠隔操作するための通信手段(プロトコル)の1つ
※ 参照:初心者がSSHについて学ぶ(´・ω・`)
$ ssh -i [キーペア(pemファイル)を置いた場所のパス] ec2-user@[パブリックDNS or パブリックIP]
-
iオプション
で、上記で生成or設定したpemファイルを指定する -
ec2-user
は、デフォルトのユーザー名。最初はこのユーザー名を使う -
パブリックDNS or パブリックIP
は、EC2コンソール画面で確認できる - 初回接続時のみ、yes/noを聞かれる
###2-2. Apache, PHP, MySQLのインストール
- yumのアップデートは忘れずに!(パッケージを最新にする)
- yumは
yオプション
を付けることで、問い合わせ全てにYesと答えるため、yes/noがいちいち聞かれなくなります。
$ sudo yum update -y
$ sudo yum install -y httpd24 php71 php71-mbstring php71-zip php71-fpm php71-mysqlnd mysql57-server
###2-3. Apacheを起動
$ sudo service httpd start
※ Linux2だと、systemctlコマンドが使える
この時点で、ブラウザでパブリック IP
にアクセスすると、Apacheの画面が表示される。
(EC2コンソール画面のセキュリティグループのインバウンドで、httpの80ポートを空けておくことを忘れずに)
# システムが再起動するたびにApacheが起動するように設定
$ sudo chkconfig httpd on
# 設定の確認
$ chkconfig --list httpd
###2-4. ec2-userのファイル操作の許可を設定
参照:公式チュートリアル
Amazon Linux Apache ドキュメントルートは /var/www/html であり、デフォルトでは root によって所有されます。
そのため、ec2-userにファイル操作の権限を設定する必要がある。
# ec2-userをapacheグループに追加
$ sudo usermod -a -G apache ec2-user
# いったんログアウトして、再度ログイン
$ exit
$ ssh -i [キーペアのpemファイルを置いた場所のパス] ec2-user@[パブリックDNS or パブリックIP]
# /var/www とそのコンテンツのグループ所有権を apache グループに変更
$ sudo chown -R ec2-user:apache /var/www
# グループに、/var/wwwの書き込み許可追加
$ sudo chmod 2775 /var/www
# /var/www とサブディレクトのディレクトリ許可を変更
$ find /var/www -type d -exec sudo chmod 2775 {} \;
# /var/www とサブディレクトリのファイル許可を変更
$ find /var/www -type f -exec sudo chmod 0664 {} \;
###2-5. composer自身のインストール
& curl -sS https://getcomposer.org/installer | php
# composerコマンドのパスを通す
$ sudo mv composer.phar /usr/local/bin/composer
# パス確認(/usr/local/bin/composerと表示されればOK)
$ which composer
###2-6. Laravelプロジェクトをgit clone
sudo yum install git
cd /var/www
git clone [URL]
###2-7. Apacheの設定変更
####http.confファイルのDocumentRootの変更
Laravelでは、プロジェクト内のpublicディレクトリをドキュメントルートに指定する必要がある
$ sudo vi /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html"
の箇所をDocumentRoot "/var/www/プロジェクト名/public"
に変更
####http.confファイルに以下のDirectoryを追加(.htaccessの有効化)
<Directory /var/www/プロジェクト名/public>
AllowOverride All
</Directory>
####Apacheの設定変更後は、再起動を忘れずに!
$ sudo service httpd restart
###2-8. パッケージのインストール
$ cd /var/www/[プロジェクトのフォルダ名]
# composer.jsonファイルがない場合
$ composer init
# vendorディレクトリが生成される
$ composer install
###2-9. Laravelプロジェクトの設定
####ディレクトリのパーミッション変更
Laravelでは、storage
下とbootstrap/cache
ディレクトリをWebサーバから書き込み可能にする必要がある
$ sudo chmod -R 777 /var/www/[プロジェクト名]/storage
$ sudo chmod -R 775 /var/www/[プロジェクト名]/bootstrap/cache
####.envファイルの作成
cp .env.example .env
# .envファイルにある「APP_KEY」(アプリケーションキー)の生成
php artisan key:generate
APP_NAME=Laravel
APP_ENV=production
APP_KEY=base64:xxxxxxx(php artisan key:generateで生成される)
APP_DEBUG=false
APP_URL=http://[パブリックIP]
###2-10. DBの設定、作成
####MySQL側
# MySQL起動
$ sudo service mysqld start
# MySQLの初期設定
$ sudo mysql_secure_installation
# システムが再起動するたびにMySQLが起動するように設定
$ sudo chkconfig mysqld on
# データベース作成
$ mysql -u root -p
> 設定したパスワード入力
> create database [データベース名];
> show databases;
#####mysql_secure_installation
コマンドで聞かれること
- パスワード検証プラグインのセットアップ
- パスワード
- 匿名ユーザーアカウントの削除
- rootユーザーのリモートログインの許否
- testデータベースの削除
####Laravel側
# 「DB_DATABASE」など、DB情報を設定しておく
$ sudo vi .env
DB_DATABASE=[作成したデータベース名]
DB_USERNAME=root
DB_PASSWORD=[設定したパスワード]
$ php artisan migrate
$ php artisan db:seed
##参考にさせて頂いた記事
【Laravel】AWSにLaravelをインストールする
Laravel:EC2-PHP72-Apacheで環境を作成する
MySQL5.7 にて root のパスワード変更などの初期設定をする