mixhost

githubからmixhostへ自動デプロイしてみる【GithubActions/rsync】

githubからmixhostに自動でデプロイしたいんだけどできる?

手順は多いですができますよ。

この記事ではgithubからmixhostへ自動でデプロイする方法を書いていきます。

この記事でやること

  • mixhostの公開鍵・秘密鍵を作成
  • githubへ秘密鍵を登録
  • github actionsの作成
  • githubにpushでmixhostに反映

自動デプロイする際にはGithubActionsを使ってやります。CircleCIなど他のものでもできるはずなので、使い慣れているものでやるといいでしょう。

githubからmixhostに自動デプロイしてみましょう。

mixhostの公開鍵・秘密鍵を作成する

mixhostの管理画面から公開鍵・秘密鍵は作ることができるんですが、パスフレーズを設定しないと作れません。

自動デプロイする際にはパスフレーズなしでやりたいので、管理画面から作成するのはやめてコマンドで作ります。

SSH接続する

mixhostへのSSH接続方法は以下の記事で紹介しているので、もしやり方がわからなかったら参考にしてみてください。

mixhost

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を作成

鍵とか設定するのちょっと面倒だけど、何か頻繁に公開するものの変更があるならやっておくと楽ですよね。

-mixhost