LoginSignup
17

More than 1 year has passed since last update.

GitHub Actions から VPS にSSH 接続して CI / CD 環境を構築する

Last updated at Posted at 2021-04-10

この記事では、VPS にSSH 接続し、GitHub Actions で CI/CDを行うための環境を構築する方法を記事をまとめました。

image.png

はじめに

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" ボタンをクリックします。

2021-04-10 (2).png

このページで、任意に作りたい Workflow を追加し、CI の設定を作成していきます。

今回のデプロイでは、ビルドやテストを行わず、main ブランチに push され次第 VPS へ
デプロイするように設定します。そこで、上記のページでは、Simple workflow
Set up this workflow をクリックし、以下のYML ファイルを作成しました。

.github/workflows/deploy.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 情報が漏洩することはあってはならないことです。

そこで、人に見られたくない変数については各リポジトリにて、 SettingSecrets へ移動後、New repository secret にて追加したいリポジトリを追加します。

2021-04-10 (4).png

ここで、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 へ接続できて変更したコードが反映されていれば成功です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17