laraveコンテンツを基盤移行した話
■前提条件
・移行コンテンツがgitに格納されている
・基盤はAWS
1.AWSの作成・初期設定
新規にアカウントを作成するところから。
今回はサービス利用を目的としておらず、表示・動作すればよいためIAMなどの権限設定は行わない。
そのため、AWSアカウントを作成して終わり。
2.EC2作成・ログイン
無料枠でインスタンスをひとつ作成する。
OSはAmazonLinux2023。
DBは腹持ちにするため、以下をインストール。
・git
・mariadb
・php
・php-fpm
・composer
・nginx
3.gitにログイン
認証がかかっていたので、接続確認含めてgitにログイン。
ここで、コンソールからclone実施用のトークンを発行する。
1)画面右上のアイコンタブをクリックし、Settingsを押下
2)左ペイン一番下にあるDeveloper settingsを押下
3)Personal access tokensを押下
4)Tokens(classic)を押下
5)Generate new tokenを押下
6)必要事項を選択
7)Generate tokenを押下
8)出力されたトークンをコピー(テキストエディタなどで保存するとよい)
詳しくはこちら
4.コンテンツをclone
トークンを入手できたら、gitにあるコンテンツをEC2の特定のディレクトリにcloneします。
今回は、/配下の/presenに作成したのでそちらで。
$ cd /sudo
$ mkdir /presen
$ sudo chown ec2-user:ec2-user /presen
$ cd /presen
$ git clone https://github.com/[コンテンツ格納アカウント]/[コンテンツ格納リポジトリ].git
ここで認証が入るので、アカウントと3.で用意したトークンを入力する。
認証が通るとコンテンツをダウンロードできる
5.laravelを更新する
cloneしたディレクトリでupdateを行う
$ cd /presen/[コンテンツ格納リポジトリ]
$ composer update
dnfでインストールしたのであれば、composerのpathは通っているが、通っていないのであれば、composerが格納されている場所を調べる。
$ find / -name "composer"
私は面倒くさいのでよく/配下から調べるのだが、rootユーザで実施しても標準エラー出力がいっぱいでるため、2> /dev/nullをよく付けます。
6.nginxの設定
今回はDNSを利用しないため、sslの設定は行い。
serverディレクティブの80だけ修正した。
一応、Basic認証も実施。
server {
listen 80;
listen [::]:80;
server_name _;
root /presen/[コンテンツ格納リポジトリ]/public; #ドキュメントルートを編集
index index.php; #デフォルト表示されるファイルを指定
location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd; # Basic 認証用定義
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/www.sock; # php-fpmのソケット場所に修正
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
7.php-fpmの設定
listenを変更した気がする
nginxで指定したパスと同じものにする。
listen = /run/php-fpm/www.sock
※/runは/var/runのシンボリックリンク
8.nginxの起動確認
起動してみる。
特にエラーはでないと思うが、発生時はログを確認して対処する。
・確認するべきログ
/var/log/nginx/error.log
※権限的にrootユーザでしか見れない
なお、AmazonLinux2023はsyslogとしてmessageが作成されない初期設定のため、journalctlコマンドで確認する必要がある。
9.DB設定・起動
mariadbを起動してみる。
DB側の修正は特に必要なく、不足分は後で実施する。
まずはスキーマを流せるようにする。
sudo systemctl start mariadb
必要なパッケージがインストールされていればこれで起動するが、起動しない場合はパッケージ不足を疑う。
以下を入れておけば問題なさそう。
mariadb105-devel
mariadb105-server
mariadb-connector
mariadb105-common
10.DBにログイン
エラーなく起動したらログインしてみる。
sudo mysql -uroot
インストール時にパスワードが記載されたログファイルが生成された時代もあったが、これで入れた。
sudoが強力すぎるので、公開するコンテンツを配置するサーバなどは適宜権限設定を怠らないようにする。
11.DBの作成とユーザの作成
スキーマを流す用のDBを作成する。
何のDBを作成すればよいのかわからない場合、一度スキーマを流してやるとエラーが出るので参考にしてDBを作成する。
mysql -u[ユーザ名] -p[ユーザのパスワード] < sample.bakcup #スキーマファイルを指定する
DBの作成
CREATE DATABASE [DB名];
SHOW databases;
実行後、DBリストに作成したDBが存在していることを確認する。
次に一応一般ユーザを作成しておく。
CREATE USER '[ユーザ名]'@'localhost';
ULTER USER '[ユーザ名]'@'localhost' IDENTIFIED BY '[ユーザ名ユーザのパスワード]';
詳しくはこちら
12.スキーマを流す
一般ユーザの作成を行ったが、権限設定をしていないためスキーマを流せないと思うので、結局rootユーザで流した。
mysql -u[ユーザ名] -p[ユーザのパスワード] < sample.bakcup #スキーマファイルを指定する
13.nginxを再起動
nginxを再起動して、DBのデータを反映させる。
$ sudo systemctl restart nginx
エラーが発生した場合は、8.nginxの起動確認を参照しエラーを取り除く。
13.ブラウザで表示確認
EC2に付与されている外部アクセスが行えるアドレスをコピーし、ブラウザからアクセスしてみる。
いざ鎌倉。