0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LaravelをさくらレンタルサーバにGitHub Actionsで自動デプロイする方法

0
Posted at

はじめに

GitHub Actionsについては、G'sの授業で少し学び、最近Reactを学ぶ中でもGitHub Actionsに触れる機会がありました。
最初に見た時は、ymlファイルの中身がさっぱりわからなかったのですが、触れる機会が増え、少しずつ仕組みが分かるようになってきたので、G'sの卒業制作で作ったLaravelプロジェクトをGitHub Actionsを使ってデプロイしてみることにしました。
そのような記事も少ないように思えたので、今回、記事にした次第です。どなたかのご参考になれば幸いです。

前提条件

  • さくらレンタルサーバ(スタンダード)
  • すでにLaravelプロジェクトがさくらサーバにデプロイされていること

これまでの手動デプロイの流れ

  • さくらサーバにsshでログイン
  • サーバ上で以下のコマンドを実行
# プロジェクトがあるディレクトリに移動
$ cd ~/project

# メンテナンスモードにする(任意) my-projectは自分のプロジェクト名などに
$ php artisan down --secret="my-project-deploy"

# GitHubのリモートリポジトリから最新を取得する
$ git pull origin main

# composerのインストール(必要な場合)
$ composer install --no-dev --prefer-dist --no-interaction --optimize-autoloader

# マイグレーションを本番で実行(必要な場合)
$ php artisan migrate --force

# キャッシュクリア
$ php artisan optimize:clear

# メンテ解除(メンテモードにした場合)
$ php artisan up

注)キャッシュの生成(config:cacheなど)は実行していません。

GitHub Actionsによる自動デプロイ

SSH鍵の生成

ローカルPCのターミナルで以下のコマンドを実行します。

ssh-keygen -t ed25519 -C "my-project-github-actions" -f ~/.ssh/id_ed25519_my_project_actions

各オプションの意味

  • -t ed25519 : 鍵のアルゴリズム指定
  • -C "..." : 任意のコメントを書く(私の場合は、{プロジェクト名}-github-actions)
  • -f path : 秘密鍵のファイル名

このあと、パスフレーズについて聞かれますが、すべてEnterで進みます。
鍵のイメージが表示されたら、OK。

公開鍵をさくらサーバに登録する

% cd .ssh

# 公開鍵を表示 .pubがついている方
% cat id_ed25519_my_project_actions.pub

画面に表示された鍵(文字列)をコピーして、さくらサーバのコントロールパネルで公開鍵を登録します。

スクリーンショット 2026-01-23 14.56.23.png

下図の公開鍵にコピーを貼り付けます。
コメントは、何用の鍵かわかるように書いておきます。
スクリーンショット 2026-01-23 14.57.13.png

秘密鍵をGitHubに登録する

% cd .ssh

# 秘密鍵を表示 .pubがない方
% cat id_ed25519_my_project_actions

秘密鍵が何行かにわたって表示されますので、上から下まで全部コピーします。

GitHubの対象リポジトリのSetting > Secrets and variables > Actionsを開くと、Repository secretsというのがありますので、ここでNew repository secretを叩くと、登録画面になります。ここに鍵を登録します。

スクリーンショット 2026-01-23 17.05.09.png

  • Name : SAKURA_SSH_KEY
  • Secret : コピーした秘密鍵を貼り付けます
    (Nameは、ご自身のわかりやすい名前にしてください。以降のサーバー情報も同様。)

今回のケースではすでにデプロイ済みのため、初回デプロイ時にさくらサーバ上で、ssh-keygenコマンドを使い、鍵ペアをひとつ作成していました。その際は、秘密鍵をさくらサーバ側に保存し、公開鍵をGitHub側に登録しています。今回、GitHub Actions用に作成した鍵ペアは、このときとは保存場所の向きが逆になります。

サーバー情報の登録

秘密鍵を登録したGitHubのRepository secretsに、サーバー情報も登録します。

Name : SAKURA_HOST
Secret : hogehoge.sakura.ne.jp(自分のサーバ名)

Name : SAKURA_USER
Secret : hogehoge(自分のアカウント)

ワークフローファイルの作成

GitHub Actionsを使って自動デプロイするためには、ワークフローを記述した deploy.yml ファイルを .github/workflows に作成します。
今回は、main ブランチに push されたら実行するワークフローを記述します。

.github/workflows/deploy.yml


name: Deploy my-project to Sakura

on:
  push:
    branches: [ "main" ]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Deploy via SSH
        uses: appleboy/ssh-action@v1.2.4

        with:
          host: ${{ secrets.SAKURA_HOST }}
          username: ${{ secrets.SAKURA_USER }}
          key: ${{ secrets.SAKURA_SSH_KEY }}
          port: 22

          script: |
            set -e
            cd ~/project
            php artisan down --secret="my-project-deploy" || true
            trap 'php artisan up || true' EXIT
            git pull origin main
            composer install --no-dev --prefer-dist --no-interaction --optimize-autoloader
            php artisan migrate --force
            php artisan optimize:clear

  • name: Deploy my-project to Sakura : このワークフローの名前
  • on: push: branches: [ "main" ] :
    「いつこのワークフローを実行するか」の条件ブロック。
    今回はmainブランチにpush(またはマージ)されたら実行する条件。
  • deploy : ジョブ名。GitHub Actionsの画面にも出る
  • runs-on: ubuntu-latest :
    このジョブを動かす実行環境(GitHubが提供する仮想マシン)。Ubuntuの最新安定版を使用。
  • name: Deploy via SSH : ステップ名。ログ画面で見やすくするためのラベル
  • uses: appleboy/ssh-action@v1.2.4 :
    既存のGitHub Action(appleboy/ssh-action)を呼び出して使う。「SSHでリモートサーバへ接続してコマンドを実行」するもの。
  • host: ${{ secrets.SAKURA_HOST }} : GitHub Secretsに登録した値を使用。他も同様
  • port: 22 : ポート番号
  • script: | :
    ここから下に書いたものがサーバ上で実行される。|は「改行込みの複数行」を書けるYAML記法。
  • set -e :
    どれかひとつでもコマンドが失敗したら、その時点で全体を失敗として止める。
  • php artisan down --secret="my-project-deploy" || true :
    Laravelをメンテナンスモードにする。|| true は、もしdownが失敗しても(例:すでにdown中)そこで止めずに続行するための書き方。
  • trap 'php artisan up || true' EXIT :
    trap "コマンド" EXITと記述することで、スクリプトの最後に(成功でも失敗でも)必ず指定したコマンドが実行される。メンテモードのまま放置されないように。

その他のスクリプトは、手動デプロイ時と同じ。

動作確認

これでmainブランチにpush(またはマージ)すると、GitHub Actionsが走ります。
GitHub Actionsの画面で、❌が出ていなければ成功です。
わかりやすいように、テキストの色を変更してpushすると、さくらサーバの本番用ページにも反映されていました。

おわりに

以前に「GitHub Actionsを使って簡単なReactアプリをFirebaseに自動デプロイする」ことを経験していたのですが、それと今回のさくらサーバへの自動デプロイ実装を通して、GitHub Actionsの使い方、ymlファイルの見方・書き方や、鍵生成の方法などへの理解が進みました。
それでも、まだまだよく理解できていない部分もありますので、引き続き学びを継続していきたいと思います。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?