#前提
ec2インスタンス作成済み
sshできる
#パッケージアップデート
sudo yum update
#PHP
2020/09/11現在
amazon-linux-extras リポジトリにPHP7.4があります
sudo amazon-linux-extras enable php7.4
##こんな出力があります
Now you can install:
# yum clean metadata
# yum install php-cli php-pdo php-fpm php-json php-mysqlnd
有効化の後yum を使用してトピックをインストールします。
Now you can install:
のコマンド突っ込めば大丈夫です
sudo yum install php-cli php-pdo php-fpm php-json php-mysqlnd -y
php -v
PHP 7.4.9 (cli) (built: Aug 21 2020 21:45:11) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
足りない拡張追加
Laravelのサーバー要件
※Laravel 7.x
PHP >= 7.2.5
BCMath PHP拡張
Ctype PHP拡張
Fileinfo PHP extension
JSON PHP拡張
Mbstring PHP拡張
OpenSSL PHP拡張
PDO PHP拡張
Tokenizer PHP拡張
XML PHP拡張
これに従い追加します
追加済みの拡張を調べます
php -m | grep -e bcmath -e PDO -e ctype -e fileinfo -e json -e mbstring -e openssl -e pdo -e tokenizer -e ^xml$
php -m
でインストール済み拡張が出力されます
コマンド | grep [オプション] 検索パターン
でコマンドでの出力に対してgrep(絞り込み)
が掛かります
-e 検索パターン
をたくさん使用して複数の単語に対して引っかかる検索かけています。
私の環境ですと下記の拡張がインストール済みのようでした。
なので、そのほかをインストールしていきます
ctype
fileinfo
json
openssl
PDO
pdo_mysql
pdo_sqlite
tokenizer
# 足りないもの
# bcmath
# mbstring
# xml
bcmath
,mbstring
,xml
が足りないので追加します
sudo yum install php-bcmath php-mbstring php-xml -y
opcache
###インストール
設定ではないけど、opcacheを入れます
sudo yum install php-opcache
###確認
php -v
#PHP 7.4.9 (cli) (built: Aug 21 2020 21:45:11) ( NTS )
#Copyright (c) The PHP Group
#Zend Engine v3.4.0, Copyright (c) Zend Technologies
# with Zend OPcache v7.4.9, Copyright (c), by Zend Technologies
###設定値の変更
php.ini
の場所を調べます
php --ini
php --ini
Configuration File (php.ini) Path: /etc
Loaded Configuration File: /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed: /etc/php.d/10-opcache.ini,
/etc/php.d/20-bcmath.ini,
/etc/php.d/20-bz2.ini,
/etc/php.d/20-calendar.ini,
#...
opcache.ini
で設定を変えます
sudo vi /etc/php.d/10-opcache.ini
https://www.php.net/manual/ja/opcache.installation.php
推奨設定に合わせて編集します
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
##php-fpm
FPMとは、FastCGI Process Managerの略でPHP5.4.0から公式サポートされたPHP標準のアプリケーションサーバです。名前にあるFastCGIというプロトコルで通信するよう実装されています。 FastCGIは、Webサーバとアプリケーションサーバの間で使われるプロトコルの一つで、ここでの例ではnginxとPHP-FPMの間で交わされるプロトコルとなります。
参考
https://hacknote.jp/archives/27419/
https://hackers-high.com/linux/php-fpm-config/
###起動
sudo service php-fpm start
###確認
sudo systemctl status php-fpm
php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since 金 2020-09-11 17:15:02 JST; 1 day 17h ago
###自動起動
sudo systemctl enable php-fpm
Composer
##インストール
https://getcomposer.org/download/
公式のコマンドを叩いていきます
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '795f976fe0ebd8b75f26a6dd68f78fd3453ce79f32ecb33e7fd087d39bfeb978342fb73ac986cd4f54edd0dc902601dc') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
##移動
sudo mv composer.phar /usr/local/bin/composer
##確認
composer
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.10.13 2020-09-09 11:46:34
nginx
##インストール
PHPと同様にamazon-linux-extras リポジトリにあります
sudo amazon-linux-extras enable nginx1
##こんな出力があります
Now you can install:
# yum clean metadata
# yum install nginx
インストール
sudo yum install nginx -y
nginx -v
nginx version: nginx/1.18.0
##起動
インストールしただけだと、起動していない
sudo systemctl start nginx
(上記コマンドを叩いても出力はなにもないです)
起動しているか確認します
sudo systemctl status nginx
nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/nginx.service.d
└─php-fpm.conf
Active: active (running) since 金 2020-09-11 08:15:02 UTC; 2s ago
##自動起動設定
現状EC2再起動するたび、自力で立ち上げないといけない
sudo systemctl enable nginx
##画面確認
EC2のIPをブラウザで入力
#Gitインストール
sudo yum install git
git --version
# >git version 2.23.3
#PHP + nginx設定
両方のインストールが終わったので疎通していきます
##php-fpm設定
設定変更する前にコピーとっておくと良いかもしれません
sudo vi /etc/php-fpm.d/www.conf
下記の内容に更新します
それぞれ/検索ワード
とかで検索して書き換えましょう
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
# 以下はお好み
pm = static
pm.max_children = 5
pm.max_requests = 1500
ちなみに、pm
関係の設定値はデフォルトでも良いです
下記が参考になるので、チューニングしたい方はどうぞ
https://hackers-high.com/linux/php-fpm-config/
##nginx設定
sudo vi /etc/nginx/nginx.conf
ドキュメントルートは自由に
server {
listen 80;
listen [::]:80;
server_name _;
root /var/www;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
root /var/www;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#~中略~
##確認
sudo mkdir /var/www
sudo chmod 777 /var/www
cd /var/www
echo "<?php phpinfo(); " > index.php
ドキュメントルートの内phpinfo()
だけの、index.php
作ってます
IPをブラウザで確認して、表示されてればPHP使えるようになりました
#RDS
AWSにログインしRDS on MySQLでDBを作成しておきます
(参考 -> https://noumenon-th.net/programming/2020/04/10/ec2-rds-laravel/
エンドポイントと、ユーザーとパスワードを用いるのでとっておきましょう
EC2にSSH接続し、下記コマンドでmysqlをインストールします
sudo yum install mysql -y
終わったら、エンドポイントとユーザー、パスワードを用いて接続します
うまくつながらなかったら、だいたいセキュリティグループとかなので、AWSのRDS等見直してみてください
mysql -h エンドポイント -u ユーザー名 -p
Enter password:
つながればOK
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 47
Server version: 8.0.17 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
データベースを作成していなかったら(RDS作成時に指定できる)
CREATE DATABASE
で作成してください
(参考 => https://www.dbonline.jp/mysql/database/index1.html#section1)
#Laravel
これまででLaravelの下準備は整っています
デプロイの場合もgitからcloneすれば良いので大丈夫です
まずはドキュメントルートに移動します
nginxで/var/www
を指定していたのでそこに移動します
cd /var/www
ComposerからLaravelを入れます
composer create-project --prefer-dist laravel/laravel 【名前】
【名前】は自由に
今回はlaravel-app
にしました
ちなみに、Laravelのバージョン指定したい場合、【名前】のあとに、5.8とか6.xとか入れたら良いです
メモリ足りなくて下記のようなエラー出たら、下記の記事の手順でswapを作成してください
https://qiita.com/ntm718/items/88d3fc787f4f18ad1f20
mmap() failed: [12] Cannot allocate memory
mmap() failed: [12] Cannot allocate memory
インストールしたら、指定した名前のディレクトリに移動します
私はlaravel-app
にしたので、今後置き換えてお読みください
cd laravel-app
php artisan key:generate --ansi
sudo chmod -R 777 storage
sudo chmod -R 777 bootstrap/cache/
この段階でブラウザで下記のようにアクセスすると、Laravelの初期画面が出ます
ipアドレス/laravel-app/public
ここまで来たら、あと少しです
vi .env
DBの接続情報を書き換えます
DB_CONNECTION=mysql
DB_HOST=エンドポイント名
DB_PORT=3306
DB_DATABASE=作ったDB名
DB_USERNAME=ユーザー名
DB_PASSWORD=パスワード
保存し、php artisan migrate
します
ちゃんと実行されたらOK
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (51.33ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (38.25ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (39.88ms)
最後にドキュメントルートを変更しましょう
現状だとipアドレス/laravel-app/public
なので、laravel-app/public
までをドキュメントルートに設定したら良さそうですね
sudo vi /etc/nginx/nginx.conf
laravel
のpublic
がドキュメントルートに来るように修正します
server {
listen 80;
listen [::]:80;
server_name _;
root /var/www/laravel/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
root /var/www/laravel/public;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
~中略~
再起動
sudo systemctl restart nginx
ipアドレスにアクセスしたら、laravelの画面が出たら終了
Route53でドメイン設定して、SSLしたらそれっぽくなるはず
ドメイン設定編(事前にEC2とElastic IPを紐付けておく必要あり)
https://qiita.com/ntm718/items/c01fa4fc47d21893974e
#終わりに
Docker使うならECR ECSのがいいんだろうか
そもそも、個人でやるにはAWSは料金が怖すぎて無料期間あるやつしか使う気がしない...
勉強で作ったらVPSとかのがいいんでしょうか...