エックスサーバーにローカル→github→サーバーへ自動デプロイしたメモ
前に書いた記事ではconohaのDocker環境にデプロイした軌跡を書きました。
今回はエックスサーバー(レンタル)にデプロイしたいので過程を記事に残します。
全体的な流れ
前回とやることはほぼ同じはずですが全体像のイメージ
エックスサーバー側で「ssh設定」から状態をONにして公開鍵を作る
↓
ローカルのmacからgithubにソースをpush
↓
・ github actionsでpushを検知したら、自動でエックスサーバーにログインする
・ githubからgit pullして最新のソース取得したりコードを移動する
と言う内容のコードをgithub actionsに書いてそれらが実行されてデプロイが完了
実践
エックスサーバーのssh設定は公式を見て設定してもらうので割愛
vpsと違ってsshの設定とかが楽・・
ダウンロードしたsshkeyを適宜移動させてそのまま接続コマンドを打つとパーミッションエラーになるはず
$ ssh [サーバーID]@[サーバーID].xsrv.jp -p 10022 -i ~/.ssh/[サーバーID].key
The authenticity of host '[[サーバーID].xsrv.jp]:10022 ([**.***.***.**]:10022)' can't be established.
ED25519 key fingerprint is SHA256:************************.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[[サーバーID].xsrv.jp]:10022' (ED25519) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/***/.ssh/[サーバーID].key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/***/.ssh/[サーバーID].key": bad permissions
[サーバーID]@[サーバーID].xsrv.jp: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
パーミッションエラーを解消
chmod 600 ~/.ssh/[サーバーID].key
sshでログインしてgitが使えることを確認
$ git --version
git version 1.8.3.1
トップディレクトリ配下にファイルを設置してgithubに配置する。
すると以下のファイル内容を元にgithub actionsが動作してくれる。
その前に以下のリンクの準備は済ませておこう
(サーバー側にgithubアカウントの設定と、yml内で使っているSSH_KEYなどの変数をシークレットに設定の部分)
name: deploy
on:
push:
branches: main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install SSH Key for Deploy
uses: appleboy/ssh-action@master
with:
key: ${{ secrets.SSH_KEY }}
host: ${{ secrets.HOST_NAME }}
username: ${{ secrets.SSH_USER }}
port: ${{ secrets.SSH_PORT }}
# git用ディレクトリからドキュメントルートにファイルをコピー
script: |
cd /home/****/****.xsrv.jp/forgit/
git pull origin main
\cp -rf /home/****/****.xsrv.jp/forgit/src/* /home/****/****.xsrv.jp/public_html
わざわざ /home/〜/〜.xsrv.jp/forgit/ のディレクトリを作成してファイルをコピーしている理由について説明する。
私の環境ではローカルでDockerを構築して、そこで問題がなければpushして
本番環境に反映させることを目的にしている。
そうするとディレクトリ構造が以下の様になることが多いと思う
プロジェクト名/
├─ src/
│ ├─ 実際のコードのディレクトリ/
プロジェクト名のディレクトリごとgithubに置く場合src以下のソースだけサーバー側に欲しいのに
ドキュメントルートに全部来てしまってうまくいかないと言う状態に陥った。
特定のディレクトリだけpullすれば良いのでは?と考えた。
src以下のファイルだけpullして欲しいのにディレクトリ構造が変わってしまうのでできないらしい。
(よく考えればそりゃそうだ)
仕方ないのでgit pullする用のディレクトリからドキュメントルートにソースを移動する(上書きする)方法に変更。という経緯。
また前の環境ではmvコマンド問題なかったのに、エックスサーバーでは同名のファイルが
存在していると上書きができなかったのでcpコマンドに変更した。
Discussion