♟️
GitHub Actions で XServer に rsync
Actions のコードはこちら。
name: Deploy Production
on:
push:
branches:
- main
jobs:
deploy-to-production:
runs-on: blacksmith-2vcpu-ubuntu-2404
environment:
name: production
steps:
- name: Checkout repository
uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: 10.12.4
- uses: actions/setup-node@v4
with:
node-version: 24.11.0
cache: "pnpm"
- name: Prepare .ssh dir
run: mkdir -p ~/.ssh && chmod 700 ~/.ssh
- name: Generate ssh key
run: echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519 && chmod 600 ~/.ssh/id_ed25519
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Register host key
env:
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_PORT: ${{ secrets.SSH_PORT }}
run: |
# サーバーのホストキーを取得して known_hosts に登録
ssh-keyscan -p "$SSH_PORT" "$SSH_HOST" >> ~/.ssh/known_hosts
- name: Install rsync
run: |
sudo apt-get update -y
sudo apt-get install -y rsync
- name: Build
env:
GTAG_ID: ${{ vars.GTAG_ID }}
TYPEKIT_ID: ${{ vars.TYPEKIT_ID }}
DEPLOY_TO: ${{ vars.DEPLOY_TO }}
run: |
git lfs pull
pnpm install --frozen-lockfile
pnpm build
- name: Deploy on XServer
env:
SSH_USER: ${{ secrets.SSH_USER }}
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_PORT: ${{ secrets.SSH_PORT }}
SSH_PATH: ${{ secrets.SSH_PATH }}
run: |
rsync -achmuv --progress --delete --exclude-from="EXCLUDE" --dry-run -e "ssh -p $SSH_PORT -o StrictHostKeyChecking=yes" ./dist/ "$SSH_USER@$SSH_HOST:$SSH_PATH"
少しだけ解説
runs-on - ランナーは、Blacksmith を使用しています。

使用するスペックを選ぶことができて、"安く済ませよう"、"パフォーマンスを上げよう"が柔軟に選択できるのがいいですね。
更に、無料枠もあるので、スモールにスタートすることもできます。

使い方は簡単で、事前にアカウントを作成し、GitHub と連携した後、
runs-on: blacksmith-2vcpu-ubuntu-2404 を追加するだけです。
ssh
鍵を作って、認証する流れ。
-
blacksmith-2vcpu-ubuntuにPrepare .ssh dirで.sshディレクトリを作成します -
Generate ssh keyでリポジトリに設定した秘密鍵を追加します -
Register host keyで XServer のホストキーを known_hosts 登録し、認証の際の確認をスキップするようにします
rsync
デフォルトで入ってないのでインストールします。
Build
プロジェクトに合わせてビルドコマンドを実行して下さい。
git lfs を使用している場合、ここでコケたので、git lfs pull を追加してます。
Deploy on XServer
各 secrets を元に rsync します。
--dry-run を入れているので、実際に使う際は外して下さい。
secrets, vars
GitHubで設定します。

Discussion