筆者の環境では、Laravelアプリケーションの本番リリースフローは次の通りであった。
1. ローカル環境で、開発およびテスト
2. 本番環境にアップロード
自分ひとりで開発から運用まで担当しているので、これでもさして不都合が無かったわけだが、規模が大きくなったのを機に、次の通り改めることにした。
1. ローカル環境(新開発環境)で、開発
2. リモートリポジトリに push
3. ステージング環境で pull し、テスト
4. 本番環境で pull
Laravelプロジェクトファイル一式を git 管理下に移したので、手順を共有する。
移行手順
本番環境がもっとも信頼できそうだったので、まず本番環境内にローカルリポジトリを作成し、リモートリポジトリに最初のコミットをすることにした。
リモートリポジトリの作成
リモートリポジトリはどこに作っても良いが、本稿では GitHub に用意するものとして説明する。
この辺は特に解説不要かと思う。
本番環境のオペレーション
git のアップグレード
今の本番環境は CentOS 7.6 なので git のバージョンが古かった。
$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
$ git version
git version 1.8.3.1
CentOS7 で git を 2系 にアップグレードする方法はいくつかあるようだ。
https://qiita.com/mao172/items/f8bb0a7c740f9cc931fb
https://qiita.com/d-dai/items/3cc0c8c81911d5b6cce5
自分は以下のように対応した。
IUSリポジトリを追加
$ yum install \
https://repo.ius.io/ius-release-el7.rpm \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
標準パッケージをより新しいバージョンで置き換え
$ yum shell
> erase git
> install git224
> run
$ git version
git version 2.24.3
git の初期設定
ユーザ名とメールアドレスを設定
git config --global user.name "[user name]"
git config --global user.email [email address]
git config --list
ssh鍵ペアの作成
GitHub は様々な認証方式に対応するが、パスワード認証は使うべきではない。
なお、2021年8月に GitHub はパスワード認証を廃止することが決まっている。*Gigazine
ssh-keygen -t rsa -b 4096 -C "[comment]"
秘密鍵(id_rsa)と公開鍵(id_rsa.pub)は~/.ssh
に作成される。
本稿では、リスクを承知で、秘密鍵をパスフレーズ保護しないことにする。
本来なら、パスフレーズ保護して ssh-agent に登録するのがセオリーである。
鍵生成時にデフォルト以外の鍵を指定した場合は ~/.ssh/config
の作成も必要になる。
公開鍵(id_rsa.pub)を https://github.com/settings/keys に貼り付ける。
Title には、どのデバイスの鍵か分かる情報を入れると良いと思う。
接続テスト
ssh -T git@github.com
失敗するときは-vvv
オプション(verbose mode)を付けてトレースしてみる。
リモートリポジトリに push
Laravelプロジェクトのルートディレクトリで行う。
cd /var/www/html/[project name]
git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:[account name]/[repository name].git
git push -u origin main
10月から既定のブランチ名が master から main に変わっているので留意。
この変更は、master/slave が奴隷制度を連想させることへの配慮だ。
git init
からやり直したくなったり、取り消すときは、rm -fr .git
としてしまって良い。
新開発環境のオペレーション
本番環境と同様に、ユーザ名とメールアドレスを設定する。
sshの鍵は、新規に作成するか、先ほどの鍵を使い回す。Windows10(OpenSSH)の場合、鍵は%USERPROFILE%\.ssh
に置く。
リモートリポジトリから git clone
Laravelのインストール先(通常はApacheのドキュメントルート)で行う。
cd /var/www/html
git clone git@github.com:[account name]/[repository name].git
cd [project name]
.gitignore
に含まれている /vendor
と .env
は展開されないので、自分で作成する。
/vendor (Laravel本体) の作成
composer install
でOK。composer.lock
の内容をもとにパッケージのインストールを行うので、パッケージのバージョンはリモートと一致するはずだ。
composer.lock
が無ければcomposer update
でも良いが、Updating dependencies (including require-dev)
の表示後にフリーズする場合がある。原因は様々だが、筆者の環境ではcomposer self-update
でcomposer自身をアップデートするだけで上手くいった。
.env の作成
新開発環境用の .env
を作成するか、以前の開発時に使っていた .env
をコピーする。
動作確認
新開発環境でLaravelアプリが動作することを確認。
README.md の更新
必須では無いが、新開発環境からのコミットテストも兼ねて README を更新(新規作成)してみる。
Name, Overview, Author などを追記。
社内向けのドキュメントがあれば、そのリンクを Document に追記。なければ、Description, Requirement, Usage, Note, Deploy などを追記。
リモートリポジトリに push
これを「作業A」とする。
git add README.md
git commit -m "add README file"
git push
Visual Studio Code からなら下図のような操作になる。
本番環境のオペレーション
これを「作業B」とする。
cd /var/www/html/[project name]
git pull
本番リリース手順
新開発環境で「作業A」、ステージング環境と本番環境で「作業B」、これを繰り返すことになる。