この記事では、VPS にSSH 接続し、GitHub Actions で CI/CDを行うための環境を構築する方法を記事をまとめました。
はじめに
CI/CD ツール で VPS にSSH接続するためには公開鍵認証が行えるように環境構築する必要があります。 SSH 認証がうまくいかないと感じたら公開鍵認証ができるかどうかの確認をしてみてください。以下の記事の内容は、SSH 接続して、CI/ CD を行えるようにするための手順をまとめています。
環境については以下の通りです。
- Client(PC) OS : Windows Pro
- Server(VPS) OS : Ubuntu 20.04
- CI/CD ツール: GitHub Actions
- VPS : Conoha VPS
開発環境は Windows ですが、コマンド等の違いは特にありません。
Client サイド(PC)の環境構築
まず、SSH Key の秘密鍵と公開鍵を生成します。
ssh-keygen -t rsa -b 4096 -C "example@email.com"
# Enter file in which to save the key (/Users/<user>/.ssh/id_rsa): [Press enter]
#Enter passphrase (empty for no passphrase): [Type a passphrase]
# Enter same passphrase again: [Type passphrase again]
として、SSH で鍵を生成します。(Mac OS, Unix OS では ~/.ssh/id_rsa
に生成されます。)
Server(VPS)サイドでの環境構築
続いて、 VPS での環境構築を行います。
VPS の管理画面より、VPS サーバーのコンソールを起動します。
まず、ユーザーの作成後、sudo が実行できるよう権限を与えます。
adduser conoha // User 名をconoha に設定した
usermod -aG sudo conoha
cd /home
chmod 755 conoha // SSH の権限は 755 でないとしようできない
続いて、conoha アカウントでSSH 環境を設定します。
su conoha
mkdir ~/.ssh
chmod 700 .ssh
この時、scp
を使用して Client 側から VPS へ 公開鍵を渡します。
scp .ssh/id_rsa.pub conoha@<サーバーのIP アドレス>:.ssh
上記のコマンドを実行したのち、.ssh ディレクトリ内に id_rsa.pub
が送付されていることを確認してください。`送信後、
cd ~/.ssh
mv id_rsa.pub authorized_keys
chmod 600 authorized_keys
として、ファイル名変更後、ファイルの権限を制限します。
その後、 vi を使用して/etc/ssh/sshd_config
ファイル内の次の変数の値を編集し、公開鍵でのログインしか許可しないようにします。
$ sudo vi /etc/ssh/sshd_config
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
usePAM no
編集後、SSH を再起動します。
sudo /etc/init.d/ssh restart
この時、Client 側から
ssh -i .ssh/id_rsa conoha@<IP アドレス>
としたとき、パスワードが要求されずにログインができたら成功です。
上記の通りに実行しても、もしうまくいかなかったら、/home/conoha
のファイルの権限を 755 に変更し、SSH を再起動してみてください。
cd /home
chmod 755 conoha
cd conoha
sudo /etc/init.d/ssh restart
GitHub Actions の実装について
続いて、GitHub Actions の環境を構築します。
まず、GitHub Actions で管理しているリポジトリに移り、"Actions" ボタンをクリックします。
このページで、任意に作りたい Workflow を追加し、CI の設定を作成していきます。
今回のデプロイでは、ビルドやテストを行わず、main ブランチに push され次第 VPS へ
デプロイするように設定します。そこで、上記のページでは、Simple workflow
の
Set up this workflow
をクリックし、以下のYML ファイルを作成しました。
name: CI
on:
push:
branches: [main]
pull_request:
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.SK }}
host: ${{secrets.SSH_HOST}}
username: ${{secrets.SSH_USERNAME}}
port: ${{secrets.SSH_PORT}}
script: |
cd conoha-app
git pull origin main
デプロイ後、VPS を操作するために appleboy/ssh-action を使用しました。
上記のファイルを作成後、セキュリティの観点から ファイルにVPS を接続するための設定がほかの人に見られるのは好ましくありません。とりわけ、鍵認証での接続において、SSH の Secret Key 情報が漏洩することはあってはならないことです。
そこで、人に見られたくない変数については各リポジトリにて、 Setting
→ Secrets
へ移動後、New repository secret
にて追加したいリポジトリを追加します。
ここで、New secret にて、Name
で変数名を設定し、Value
で呼ばれる値を設定します。
今回は次のように設定しました。
- SK:(ローカル環境で設定した)SSH の 秘密キー
- SSH_HOST: VPS の IPアドレス
- SSH_USERNAME: VPS で設定したユーザーネーム(今回は 'conoha' )
- SSH_PORT: SSH へ接続する PORT 番号(デフォルトは 22)
これで、GitHub Actions の設定は完了です。
この状態で、コード変更後、Github へ push して、VPS へデプロイができているかどうかの確認を行ってください。GitHub Actions から VPS へ接続できて変更したコードが反映されていれば成功です。