UStackUStack
zero icon

zero

한 번의 명령으로 Docker 이미지를 서버에 배포하세요. 자동 HTTPS, 헬스체크 기반 무중단 스위칭, 프리뷰 환경, 롤백까지.

zero

zero(ShipZero)란 무엇인가?

zero는 자체 인프라에서 Docker 이미지를 실행하기 위한 단일 서버 배포 엔진입니다. 이미지를 배포하고, 자동으로 HTTPS를 프로비저닝하며, 헬스체크 후 트래픽을 라우팅하는 명령줄 워크플로를 제공합니다.

핵심 목적은 컨테이너 이미지에서 라이브 엔드포인트로 전환하는 데 필요한 일반적인 설정 작업을 제거하는 것입니다—설정 파일, 웹 UI, YAML 없이요. 동일한 명령 기반 접근으로 프리뷰 배포와 롤백도 지원합니다.

주요 기능

  • 컨테이너 이미지에서 1-명령 배포: 레지스트리(예: ghcr.io/...)의 모든 Docker 이미지를 zero deploy로 배포하며 애플리케이션 포트를 자동 감지합니다.
  • HTTP 리다이렉트 포함 자동 HTTPS: Let’s Encrypt를 통해 HTTPS를 프로비저닝하고 배포 흐름의 일부로 HTTP → HTTPS 리다이렉트를 활성화합니다.
  • 헬스체크 기반 무중단 트래픽 스위칭: 임시 포트에서 새 컨테이너를 시작하고 TCP 또는 HTTP 헬스체크를 실행한 후, 체크가 통과하면 트래픽을 스왑합니다.
  • 프리뷰 환경: --preview <name>(예: pr-21)을 사용해 자체 서브도메인을 가진 임시 배포를 생성합니다. 프리뷰 배포는 자동으로 만료됩니다.
  • 즉시 롤백: zero rollback <app>으로 이전 이미지를 시작하고 헬스체크 후 트래픽을 되돌립니다. 헬스체크 실패 시 변경이 적용되지 않습니다.
  • 실시간 터미널 메트릭 및 로그: CPU, 메모리, 네트워크 통계를 터미널로 스트리밍하며, zero logs --server로 서버 로그를 스트리밍할 수 있습니다.
  • 웹훅 자동 배포: HMAC-SHA256으로 서명된 웹훅 요청을 검증하고 레지스트리 이벤트로 배포를 트리거합니다. 일치하지 않는 태그는 프리뷰 배포를 생성합니다.
  • 멀티 컨테이너 앱을 위한 Docker Compose 지원: 엔트리 서비스와 이름을 지정해 Docker Compose 파일을 배포하며, 풀링, 시작, 헬스체크, 라우팅을 처리합니다.

zero 사용 방법

  1. 서버 설정: Linux VPS와 도메인이 필요합니다.
  2. zero 설치:
    • VPS에서: curl -fsSL https://shipzero.sh/install.sh | sudo bash
    • 로컬 머신(CLI): curl -fsSL https://shipzero.sh/cli/install.sh | bash
  3. SSH로 연결: zero login <email-or-identifier>(예: zero login [email protected]).
  4. 이미지 배포: zero deploy <image-reference>(예: zero deploy ghcr.io/shipzero/demo:latest).
  5. 출력 확인: 헬스체크 후 zero가 라이브 URL(도메인과 감지된 앱 포트 기반)을 출력합니다.

프리뷰의 경우 --preview으로 배포(예: zero deploy demo --preview pr-21). 롤백은 zero rollback <app> 실행.

사용 사례

  • 단일 Docker 웹 앱 배포: 이미지를 빌드하고 레지스트리에 푸시한 후 zero deploy <image>:latest로 헬스체크 트래픽 스위칭이 포함된 HTTPS 엔드포인트를 얻습니다.
  • 풀 리퀘스트 리뷰를 위한 프리뷰 링크: --preview <identifier>를 전달해 PR당 프리뷰 배포를 생성하고 리뷰어와 서브도메인 URL을 공유합니다.
  • 릴리스 중 안전한 롤백: 새 컨테이너가 헬스체크 실패나 비정상 동작 시 zero rollback <app>으로 되돌리며 다운타임을 0으로 유지(헬스체크 후에만 트래픽 스왑).
  • 레지스트리에서 지속적 배포: 웹훅 엔드포인트 URL과 시크릿을 설정하고 서명된 POST로 배포를 트리거합니다. 태그는 일반 배포와 프리뷰 배포로 매핑될 수 있습니다.
  • 멀티 컨테이너 서비스 배포: Docker Compose로 앱을 설명할 때 zero deploy --compose <file> --service <name> --name <stack>으로 compose 파일의 모든 서비스를 배포하고 지정된 엔트리 서비스로 트래픽을 라우팅합니다.

자주 묻는 질문

  • 여기서 “무중단”이란 무엇인가요?
    설명된 흐름은 새 컨테이너를 시작하고 TCP 또는 HTTP 헬스체크를 실행한 후 원자적으로 라우트를 스왑합니다. 헬스체크 실패 시 트래픽은 이전 버전에 유지됩니다.

  • zero는 설정 파일이나 YAML이 필요한가요?
    페이지에 따르면 설정 파일 없음, 웹 UI 없음, 일반 워크플로에서 YAML을 피합니다.

  • zero는 어떻게 HTTPS를 활성화하나요?
    Let’s Encrypt를 사용해 자동으로 HTTPS를 프로비저닝하며 HTTP 리다이렉트도 수행합니다.

  • 단일 이미지만이 아닌 여러 컨테이너를 배포할 수 있나요?
    네. 페이지에 Docker Compose 지원이 설명되어 있으며, compose 파일, 엔트리 서비스, 배포 이름을 전달합니다.

  • 프리뷰는 어떻게 생성하고 관리하나요?
    --preview <name>을 전달해 프리뷰 배포를 생성하며 라이브 서브도메인 URL을 얻습니다. 페이지는 프리뷰가 자동으로 만료된다고 명시합니다.

대안

  • 전통적인 PaaS (platform-as-a-service): 이러한 서비스는 HTTPS, 프리뷰, 배포 흐름을 관리하지만, 일반적으로 자체 서버가 아닌 플랫폼에서 실행됩니다. 유연성과 “서버 소유” 제어를 포기할 수 있습니다.
  • 자체 관리 리버스 프록시 + 수동 컨테이너 오케스트레이션: 자체 도구로 유사한 HTTPS와 라우팅을 구현할 수 있지만, 워크플로우가 더 수동적입니다(서비스 시작/중지, 헬스체크, 라우팅 교체, 인증서를 직접 처리해야 함).
  • 범용 컨테이너 배포 도구 (CLI 기반 오케스트레이터): 단일 호스트에 컨테이너를 배포하는 도구는 유사한 단계를 커버할 수 있지만, 더 많은 구성 파일, 커스텀 라우팅, 또는 수동 헬스체크 및 롤백 로직이 필요할 수 있습니다.
  • 멀티노드 배포를 위한 Kubernetes: 멀티노드 오케스트레이션, RBAC, 웹 대시보드가 필요하다면 Kubernetes는 zero 같은 단일 서버 배포 엔진과 다른 적합성을 가집니다.
zero | UStack