はじめに
個人アプリにてCircleCIを導入し、
EC2にデプロイしようとした所、いくつかエラーが発生したので、解決策を記載します。
環境
- ruby 2.6.2
- rails 5.2.4
- EC2
config.yml
version: 2
jobs:
# build ジョブ: CircleCI 上で Docker コンテナを作成してテストする
build:
docker:
- image: alpine
steps:
- checkout
- run:
name: Echo Test
command: echo "CircleCI Test"
# deploy ジョブ: EC2 に SSH 接続して、デプロイを実行する
deploy:
machine:
image: circleci/classic:edge
steps:
- checkout
# CircleCI に登録した秘密鍵を呼び出す
- add_ssh_keys:
# CircleCI に登録した環境変数を使って SSH
- run: ssh ${USER_NAME}@${HOST_NAME} 'cd /var/www/myapp && git pull origin master'
workflows:
version: 2
# build_and_deploy ジョブ: 一番最初に呼ばれるジョブ
build_and_deploy:
# build ジョブと deploy ジョブを呼び出す
jobs:
- build
- deploy:
requires:
# deploy ジョブより先に build ジョブを実行しろ!
- build
# master ブランチに push された場合のみ deploy ジョブを実行する
filters:
branches:
only: master
起こった問題と解決策
①ポートが開いてないことによるエラー
ssh: connect to host ************* port 22: Connection timed out
【解決策】
EC2のセキリティグループのインバウンドを下記のように編集する。
注)セキリティ上、中間サーバーを使用するほうが好ましい
ポート範囲 | ソース |
---|---|
22 | マイIP xxx.xxx〜 |
↓
ポート範囲 | ソース |
---|---|
22 | カスタム 0.0.0.0/0 |
②秘密鍵が合わないことによるエラー
①EC2にて下記のコマンドを実行し、pem鍵を作成(他の鍵と競合する可能性がある為、circleci-keyなどの名前にする)
ssh-keygen -m pem
②EC2にて下記のコマンドを実行し、①で作成した公開鍵(鍵名.pub)をauthorized_keysにコピー
cat ~/.ssh/circleci-key.pub >> authorized_keys
③EC2にて下記のコマンドを実行し、①で作成した秘密鍵を表示
cat ~/.ssh/circleci-key
④表示された秘密鍵をCircleCIのSSH-Keyに設定
(このとき-----BEGIN RSA PRIVATE KEY-----と-----END RSA PRIVATE KEY-----まで含める)
## 最後に
私の場合、これでエラーが解消されましたので、
是非ためしてみてください。
# 参考
CircleCIの使い方