Gitea Actions 배포 워크플로우 초안 설계 #4

Open
opened 2026-02-04 14:04:38 +09:00 by lectom · 0 comments

목표

Gitea Actions로 main 브랜치 배포를 자동화합니다. 이미지를 빌드/레지스트리 푸시 후, 서버에서 pull해서 배포하는 Docker 기반 배포 방식으로 설계합니다.

제안 워크플로우 개요

  • 트리거
    • push to main
    • workflow_dispatch(수동 배포)
  • 단계
    1. 소스 체크아웃
    2. Docker Buildx 세팅
    3. 레지스트리 로그인
    4. 이미지 빌드/푸시 (latest, sha 태그)
    5. 서버 배포(SSH)
      • 이미지 pull
      • docker compose up -d

필요한 시크릿/변수

  • REGISTRY (예: registry.example.com)
  • REGISTRY_USER
  • REGISTRY_PASSWORD
  • SSH_HOST
  • SSH_USER
  • SSH_KEY
  • SSH_PORT (선택)
  • DEPLOY_PATH (서버의 compose 경로)
  • IMAGE_NAME (예: kngil_home)
  • DEPLOY_ENV (선택, 예: production)

산출물

  • Docker 이미지:
    • ${REGISTRY}/${IMAGE_NAME}:latest
    • ${REGISTRY}/${IMAGE_NAME}:${GITEA_SHA}

서버 배포 방식 (레지스트리 Pull)

  • 서버의 docker-compose.yml 또는 배포 스크립트가 이미지 태그를 사용하도록 구성
  • 배포 시:
    • docker compose pull
    • docker compose up -d
  • 필요 시 docker image prune -f

.env override 포함 배포 방식

  • 서버에 .env 또는 .env.production을 배치해 runtime 설정을 override
  • 예시: docker compose --env-file .env.production pull / docker compose --env-file .env.production up -d
  • 배포 워크플로우에서 환경 파일 전달 방식 결정 필요:
    • A) 서버에 수동 배치
    • B) Gitea Actions에서 scp/ssh로 전달
    • C) 서버에 이미 존재하는 환경 파일 재사용

롤백 전략

  • 이전 태그로 docker compose에서 이미지 태그만 되돌린 후 재기동

워크플로우 초안 (YAML)

name: Deploy (main)

on:
  push:
    branches: [ "main" ]
  workflow_dispatch:

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    permissions:
      contents: read

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to registry
        uses: docker/login-action@v3
        with:
          registry: ${{ secrets.REGISTRY }}
          username: ${{ secrets.REGISTRY_USER }}
          password: ${{ secrets.REGISTRY_PASSWORD }}

      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: |
            ${{ secrets.REGISTRY }}/${{ secrets.IMAGE_NAME }}:latest
            ${{ secrets.REGISTRY }}/${{ secrets.IMAGE_NAME }}:${{ github.sha }}

      - name: Deploy via SSH
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_KEY }}
          port: ${{ secrets.SSH_PORT }}
          script: |
            cd ${{ secrets.DEPLOY_PATH }}
            docker compose --env-file .env.production pull
            docker compose --env-file .env.production up -d

확인 필요

  • 레지스트리 종류/주소
  • 서버 배포 경로 및 compose 파일 위치
  • 배포 시 추가 명령 필요 여부(예: 마이그레이션)
  • .env 전달 방식 결정(A/B/C)

원하시면 이 초안을 기반으로 실제 .gitea/workflows/deploy.yml 파일을 추가하겠습니다.

## 목표 Gitea Actions로 main 브랜치 배포를 자동화합니다. **이미지를 빌드/레지스트리 푸시 후, 서버에서 pull해서 배포**하는 Docker 기반 배포 방식으로 설계합니다. ## 제안 워크플로우 개요 - **트리거** - `push` to `main` - `workflow_dispatch`(수동 배포) - **단계** 1) 소스 체크아웃 2) Docker Buildx 세팅 3) 레지스트리 로그인 4) 이미지 빌드/푸시 (`latest`, `sha` 태그) 5) 서버 배포(SSH) - 이미지 pull - `docker compose up -d` ## 필요한 시크릿/변수 - `REGISTRY` (예: `registry.example.com`) - `REGISTRY_USER` - `REGISTRY_PASSWORD` - `SSH_HOST` - `SSH_USER` - `SSH_KEY` - `SSH_PORT` (선택) - `DEPLOY_PATH` (서버의 compose 경로) - `IMAGE_NAME` (예: `kngil_home`) - `DEPLOY_ENV` (선택, 예: `production`) ## 산출물 - Docker 이미지: - `${REGISTRY}/${IMAGE_NAME}:latest` - `${REGISTRY}/${IMAGE_NAME}:${GITEA_SHA}` ## 서버 배포 방식 (레지스트리 Pull) - 서버의 `docker-compose.yml` 또는 배포 스크립트가 **이미지 태그**를 사용하도록 구성 - 배포 시: - `docker compose pull` - `docker compose up -d` - 필요 시 `docker image prune -f` ## .env override 포함 배포 방식 - 서버에 `.env` 또는 `.env.production`을 배치해 **runtime 설정을 override** - 예시: `docker compose --env-file .env.production pull` / `docker compose --env-file .env.production up -d` - 배포 워크플로우에서 **환경 파일 전달 방식** 결정 필요: - A) 서버에 수동 배치 - B) Gitea Actions에서 `scp`/`ssh`로 전달 - C) 서버에 이미 존재하는 환경 파일 재사용 ## 롤백 전략 - 이전 태그로 `docker compose`에서 이미지 태그만 되돌린 후 재기동 ## 워크플로우 초안 (YAML) ```yaml name: Deploy (main) on: push: branches: [ "main" ] workflow_dispatch: jobs: build-and-deploy: runs-on: ubuntu-latest permissions: contents: read steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to registry uses: docker/login-action@v3 with: registry: ${{ secrets.REGISTRY }} username: ${{ secrets.REGISTRY_USER }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Build and push uses: docker/build-push-action@v5 with: context: . push: true tags: | ${{ secrets.REGISTRY }}/${{ secrets.IMAGE_NAME }}:latest ${{ secrets.REGISTRY }}/${{ secrets.IMAGE_NAME }}:${{ github.sha }} - name: Deploy via SSH uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_KEY }} port: ${{ secrets.SSH_PORT }} script: | cd ${{ secrets.DEPLOY_PATH }} docker compose --env-file .env.production pull docker compose --env-file .env.production up -d ``` ## 확인 필요 - 레지스트리 종류/주소 - 서버 배포 경로 및 compose 파일 위치 - 배포 시 추가 명령 필요 여부(예: 마이그레이션) - `.env` 전달 방식 결정(A/B/C) --- 원하시면 이 초안을 기반으로 실제 `.gitea/workflows/deploy.yml` 파일을 추가하겠습니다.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: b24014/kngil_home#4