githubからmixhostに自動でデプロイしたいんだけどできる?
手順は多いですができますよ。
この記事ではgithubからmixhostへ自動でデプロイする方法を書いていきます。
この記事でやること
- mixhostの公開鍵・秘密鍵を作成
- githubへ秘密鍵を登録
- github actionsの作成
- githubにpushでmixhostに反映
自動デプロイする際にはGithubActionsを使ってやります。CircleCIなど他のものでもできるはずなので、使い慣れているものでやるといいでしょう。
githubからmixhostに自動デプロイしてみましょう。
mixhostの公開鍵・秘密鍵を作成する
mixhostの管理画面から公開鍵・秘密鍵は作ることができるんですが、パスフレーズを設定しないと作れません。
自動デプロイする際にはパスフレーズなしでやりたいので、管理画面から作成するのはやめてコマンドで作ります。
SSH接続する
mixhostへのSSH接続方法は以下の記事で紹介しているので、もしやり方がわからなかったら参考にしてみてください。
-
mixhostでSSH接続する方法を紹介します。
2022/9/19
そんな疑問を解消するために、この記事ではmixhostで契約したサーバーにSSH接続する方法を紹介し ...
公開鍵・秘密鍵を作成する
$ cd .ssh
$ ssh-keygen(デフォルトrsa,2048bitなので、変更したい場合はオプションをつけてやるといいです。)
質問がいくつか聞かれますが、passphraseはそのままEnterキーを押します。
Enter file in which to save the key (/home/〇〇/.ssh/id_rsa): github_key
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
これで公開鍵と秘密鍵が.ssh配下に作られました。今回はgithub_keyっていう名前で作ったので以下の2つですね。
github_key github_key.pub
pubがついている方が公開鍵でもう一つが秘密鍵です。
公開鍵はauthorized_keysに突っ込みます。
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
githubに秘密鍵を登録する
githubでデプロイしたいリポジトリを作ったら、SettingsからSecretsを選択して[New repository secret]をクリックします。
そしたらここに秘密鍵を貼り付けて[Add secret]をクリック。
これでこの秘密鍵をgithubで使う準備はできました。
GithubActionsのファイルを作成する
GithubActionsは.github/workflows配下にymlファイルを作成すればそれが動いてくれます。
今回はdeploy.ymlという名前で作成してみましょう。
name: deploy to mixhost
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: ssh key generate
run: echo "$SSH_PRIVATE_KEY" > key && chmod 600 key
env:
SSH_PRIVATE_KEY: ${{ secrets.MIXHOST_SECRET_KEY }} #githubに登録したmixhostへの秘密鍵を指定
- name: rsync deployments
uses: burnett01/rsync-deployments@5.1
with:
switches: -avz --delete
path: src/ #mixhostに送りたいファイルのあるパスを指定
remote_path: /home/ユーザー名/public_html/ #mixhostのどこに同期させるか
remote_host: ホスト名
remote_user: ユーザー名
remote_port: 22
remote_key: ${{ secrets.MIXHOST_SECRET_KEY }}
ホスト名やユーザー名はmixhostの管理画面から確認することができます。
- ユーザー名・・・現在のユーザー
- ホスト名・・・プライマリドメイン
登録したmixhostへの秘密鍵参照してSSH接続してrsyncさせるっていうことをコードではしています。
rsyncで同期させる
rsyncでmixhostの指定したディレクトリと同期させます。
git pushする
これで以下で指定したブランチに変化が起きるとmixhostにデプロイされます。
on:
push:
branches:
- main
$ git push origin main
Pushすると記述したGithubActionsが動いてmixhostにデプロイされます。
今回はpathでsrc配下を指定したので、src配下のものがmixhostのサーバーに同期されますね。
switches: -avz --delete
path: src/
remote_path: /home/ユーザー名/public_html/
remote_pathではmixhostの初期ドメインのドキュメントルートを指定しています。
これでmixhostの初期ドメインにアクセスするとrsyncで同期されたファイルの表示を見ることができますよ。
まとめ
githubにpushしてmixhostへデプロイするっていうことをやりました。やったこととしては以下です。
- mixhostの公開鍵・秘密鍵を作成
- githubに作成した秘密鍵を登録
- mixhostへデプロイするGithubActionsを作成
鍵とか設定するのちょっと面倒だけど、何か頻繁に公開するものの変更があるならやっておくと楽ですよね。