피드로 돌아가기
Deploying a Containerized Backend to a VPS with Docker Compose + GitHub Actions (A Beginner's Runbook)
Dev.toDev.to
DevOps

Docker Compose와 GitHub Actions를 통한 Immutable Infrastructure 기반 배포 자동화

Deploying a Containerized Backend to a VPS with Docker Compose + GitHub Actions (A Beginner's Runbook)

FOLASAYO SAMUEL OLAYEMI2026년 6월 25일28beginner

Context

수동 서버 설정으로 인한 환경 불일치와 배포 과정의 휴먼 에러를 방지하기 위한 자동화 파이프라인 필요. 서버 내 직접 수정으로 인한 설정 파편화 및 배포 시 복구 불가능한 상태가 발생하는 구조적 한계 존재.

Technical Solution

  • Multi-stage Build를 적용한 런타임 이미지 경량화 및 빌드 도구 제거를 통한 Attack Surface 최소화
  • One Image Two Roles 전략을 통한 API와 Worker의 이미지 단일화로 버전 일관성 보장
  • depends_on 및 Healthcheck 설정을 통한 DB-Pooler-App 순의 서비스 기동 순서 제어
  • Server as Disposable 원칙 기반의 Git Single Source of Truth 체계 구축으로 서버 상태의 가변성 제거
  • GHCR 레지스트리와 SSH 배포 파이프라인을 연동한 빌드-스캔-배포의 자동화 워크플로우 구현
  • Non-root User 실행 설정을 통한 컨테이너 내부 보안 강화 및 권한 최소화 설계

- 배포 전 `docker compose config`를 통한 YAML 설정 로컬 검증 수행 - 런타임 이미지에서 npm/pnpm 등 패키지 매니저를 제거하여 이미지 크기 및 보안 취약점 감소 - 컨테이너 기동 순서(Dependency Order)를 명시하여 서비스 간 Race Condition 방지 - 서버 내부 수정 금지 원칙을 수립하고 모든 변경 사항을 Git Repository를 통해 반영

원문 읽기