github action workflow 파일 작성 중, 배포 과정에서 오류가 발생했다.

위와 같은 오류가 발생했고, 발생 지점의 코드는 다음과 같다.
deploy:
needs: build
runs-on: ubuntu-latest
environment: dev
steps:
- name: EC2 배포
uses: appleboy/ssh-action@v0.1.5
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
script: |
docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPOSITORY }}:latest
docker-compose up -d
docker logout
오류 메세지를 보니 스크립트 코드 실행 전 EC2 인스턴스에 접근조차 못 하고 있다고 판단했다. 왜 접근을 못 하지? 고민을 하고 있었는데, EC2 인스턴스의 보안그룹 문제일수도 있겠다는걸 빠르게 캐치할 수 있었다.
보안그룹을 확인해봤는데, SSH 접근 IP가 우테코 내부로 한정되어 있었다. 결국 보안그룹의 한정된 IP로 인해 외부 IP인 github actions에서 EC2 Instance에 접근을 하지 못 해 발생한 오류였다.
해결방법 : Github Action Self Runner
외부에서 내 EC2 인스턴스에 접근을 하지 못 한다면, 내부에 미리 설치를 해놓으면 된다!
https://github.com/actions/runner
GitHub - actions/runner: The Runner for GitHub Actions :rocket:
The Runner for GitHub Actions :rocket:. Contribute to actions/runner development by creating an account on GitHub.
github.com
Github Action에서는 runner라는 오픈 소스를 제공해준다. 나는 해당 러너를 EC2 Instance 내부에 설치했다.
Github Actions -> EC2 Instance로 통신하는게 아니라, EC2 Instance -> Github Actions로 통신하는 구조다. 관계가 바뀌면 외부에서 EC2 인스턴스에 접근을 할 필요가 없다. 위의 구조로 바뀌면 인바운드 규칙이 중요하지 않다.
위와 같은 이유로, EC2 Instance 내부에 self-runner를 설치하면 외부 IP가 어딘지 상관없이 자동 배포 파이프라인을 구성할 수 있다.
Runner 설치는 공식문서를 참고하자.
Adding self-hosted runners - GitHub Docs
You can add a self-hosted runner to a repository, an organization, or an enterprise.
docs.github.com
설치를 마치고 나면 반드시 실행을 해줘야한다. 필자는 처음에
./run.sh
명령어를 통해 실행했는데, 실행하고 아무것도 할 수가 없어서 이후에
nohup ./run.sh &
로 실행 명령어를 바꿔주었다.
정상적으로 실행이 되면 Status가 활성화된다.

활성화가 되면 이제 Github Action Script에서 runs-on을 통해 EC2 Instance에 바로 접근을 할 수 있다.
deploy:
needs: build
runs-on: [self-hosted, linux, ARM64]
environment: dev
steps:
- name: EC2 배포
run: |
docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPOSITORY }}:latest
cd /home/ubuntu/docker
docker-compose down
docker-compose up -d --build
docker image prune -f
외부 IP에서 접근을 할 수 없어서 어떻게 해야할 지 감도 안 잡혔는데, self-hosted 라는 키워드를 빠르게 캐치할 수 있어 다행이다. (폰트 최고)
Self-hosted의 단점
Self-hosted를 사용하는 환경에서는 private Repository를 권장한다.

다른 사람이 fork 한다음에 pr을 보내면 외부에서 악의적인 코드를 실행시킬 수 있다는 문제점이 존재한다. 우테코 프로젝트 Repository는 public이기 때문에 더 좋은 방법이 있는지 고민을 해봐야 할 것 같다.
'트러블 슈팅' 카테고리의 다른 글
| SSE 연결 끊김 트러블슈팅: HttpLoggingFilter와 Content-Length 충돌 (0) | 2025.12.07 |
|---|---|
| CORS Policy 에러 (3) | 2025.07.27 |
| exec /usr/java/openjdk-21/bin/java: exec format error (3) | 2025.07.17 |
| github actions 배포 스크립트 no such file or directory 에러 (1) | 2025.07.13 |