프로젝트 진행 중 작성한 코드를 "명령 프롬프트(cmd)", "VSCode" 등에서 업데이트를 하다보니 매번 Github에 커밋, pull, push 등의 작업에 번거로움을 느껴 찾아보니 자동 배포를 설정할 수 있다는걸 알게 되었습니다.
자동 배포의 여러가지 방법 중 Github actions 과 Docker를 통해 설정을 진행하고 이를 작성해두려고 합니다.
your-project/
│
├── .github/
│ └── workflows/
│ └── deploy.yml # GitHub Actions 설정 파일
│
├── src/
│ └── ...
├── Dockerfile
├── README.md
└── ...
name: Deploy to Server
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build Docker image
run: |
docker build -t your-dockerhub-username/my-app:latest .
- name: Deploy to server
env:
HOST: ${{ secrets.SERVER_IP }}
USER: ${{ secrets.SSH_USER }}
PASSWORD: ${{ secrets.SSH_PASSWORD }}
run: |
sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no $USER@$HOST "docker pull username/my-app && docker stop my-app && docker rm my-app && docker run -d --name my-app -p 80:80 username/my-app"
파일 작성 시 수정해야 하는 부분
- Docker 이미지 이름 및 태그
username/my-app은 Docker Hub에서 사용할 사용자 이름과 이미지 이름을 나타냅니다.
(1) username 부분은 본인의 Docker Hub 사용자 이름으로 변경합니다.
(2) my-app 부분은 프로젝트에 맞는 이미지 이름을 변경합니다.
(3) Docker는 기본적으로 latest 태그를 사용하지만, 명시적으로 태그를 일관되게 사용하는 것이 좋습니다.- name: Build Docker image run: | docker build -t username0117/FirstProject:latest .⠀
- Docker 컨테이너 이름
현재 컨테이너 이름은 "my-app"으로 설정되어 있습니다.
다른 이름을 사용하고 싶다면 이 부분도 수정 가능합니다.
⭐대문자 사용 불가!!
예시 (your-app-name으로 수정 시)docker stop your-app-name && docker rm your-app-name && docker run -d --restart unless-stopped --name your-app-name -p 80:80 your-dockerhub-username/your-app-name
secrets로 정의된 SERVER_IP, SSH_USER, SSH_PASSWORD는 "GitHub 레포지토리"의 Settings → Secrets and variables에서 설정해야 합니다.
이를 통해 서버의 IP 주소, SSH 사용자명, 그리고 비밀번호를 안전하게 관리할 수 있습니다.

⭐GitHub Secrets 설정 방법⭐
(1) GitHub 레포지토리의 Settings로 이동
(2) 왼쪽 메뉴에서 Secrets and variables → Actions → New repository secret 버튼을 선택하여 다음을 각각 설정
(3) 주의할 점
