Laravelの本番デプロイ手順って複雑じゃないですか?
というわけでGitHub Actionsで自動デプロイしてみます。
今回は、まず必要になるDockerについてです。
なぜDockerが必要なの?
GitHub Actionsの中で任意バージョンのphpやcomposer、npmコマンドなどを実行するために必要になります。
ローカルでの開発や、コンテナでの本番運用にも転用可能なので、使えるようにしておきましょう。
Docker環境既にあるぜ!って人やLaradockなどのDockerHubにあるImageを使う人には今回の記事は必要ありません。
次回作にご期待ください。
Dockerfileを作る
- php
- composer
- nodejs
の3つを使えるImageを作成します。
以下ではamazonlinux2とphp-fpm環境を例示していますが、上の3つが使えればphpイメージベースなど、何でも良いです。バージョンも適宜読み替えてください。
FROM amazonlinux:latest
RUN amazon-linux-extras enable php7.4 epel
RUN yum install -y \
epel-release \
https://rpm.nodesource.com/pub_12.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm \
&& \
yum install -y \
composer \
libaio \
nodejs \
php \
php-fpm \
php-gd \
php-mbstring \
php-redis \
php-xml \
php-xmlrpc \
unzip \
&& \
yum clean all
# 以下の設定でconf書き換え
# user = root
# group = root
# listen = 9000
COPY www.conf /etc/php-fpm.d/www.conf
WORKDIR /var/www/app
STOPSIGNAL SIGQUIT
EXPOSE 9000
CMD ["php-fpm", "-F", "--allow-to-run-as-root"]
Docker imageをbuildしてGitHub Packagesにpushする
Configuring Docker for use with GitHub Packages も参照してください
# イメージのビルド
docker build . -t docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION
# Github自アカウントの個人トークンでGithub Packagesの認証
cat ~/TOKEN.txt | docker login docker.pkg.github.com -u USERNAME --password-stdin
# Github PackagesにImageをpush
docker push docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION
REPOSITORYはどこでも構いませんが、Github Actionsで使うならActionsを実行するrepoにpushするとworkflow内での認証が要らなくなるのでおすすめです。
docker-compose.ymlを作る
version: "3.7"
services:
app:
image: docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION
ports:
- "9000:9000"
volumes:
- .:/var/www/app
php, composer, nodejs, npmが動くかテスト
docker-compose run app php -v
docker-compose run app composer -v
docker-compose run app node -v
docker-compose run app npm -v
これでLaravelをDockerで動かす準備ができました。
次回はこのdocker-composeを使ってGithub Actionsのワークフローを作成したいと思います。