Gitea Actions를 사용해 Hugo 웹사이트를 AWS S3에 배포

AWS S3에서 Gitea와 Hugo를 설정한 후...

Page content

다음 단계는 CI/CD를 구현하고 Gitea Actions를 설정하여 Hugo 웹사이트를 AWS S3에 푸시 하도록 하며, master 브랜치가 업데이트될 때 웹사이트를 자동으로 배포하는 것입니다.

Gitea 설치, 구성 및 테스트(Gitea 서버 설정 완료) 및 Gitea SSL 설정 이후, Hugo 웹사이트를 AWS S3에 배포하는 작업을 이미 완료했습니다.

이 가이드는 AWS 배포 전략을 다루는 우리 웹 인프라 문서의 일부입니다. CloudFront 분배 설정에 대해서는 사용량에 따른 과금 모델로 CloudFront 생성을 참고하십시오. 또한 대안적 배포 방법으로서 AWS CLI를 이용한 Hugo 배포도 살펴볼 수 있습니다.

Gitea Runner

자, 시작해 보겠습니다.

Gitea 러너를 위한 새로운 토큰 생성

https://your-gitea-server/your-user/your-repo/settings/actions/runners 으로 이동하고

Create New Runner 버튼을 클릭합니다.

Create New Runner

Registration Token을 복사합니다.

새 Gitea 러너 시작

새 Gitea 러너가 실행될 서버에 ssh 접속합니다.

그리고 docker 컨테이너를 시작합니다. 별도 실행 파일로 실행하거나 서비스로 실행하는 등 여러 방법이 있지만, 여기서는 docker 컨테이너를 사용하여 실행합니다.

sudo docker run \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e GITEA_INSTANCE_URL=http://<my-gitea-server>:3000/ \
    -e GITEA_RUNNER_REGISTRATION_TOKEN=<my-registration-token> \
    -e GITEA_RUNNER_NAME=srv-act-runner \
    --name my_runner \
    --restart always \
    -d docker.io/gitea/act_runner:latest

러너가 정상적으로 등록되었는지 확인

https://your-gitea-server/your-user/your-repo/settings/actions/runners 으로 이동하면

이미 실행 중임을 확인할 수 있습니다.

AWS 시크릿 몇 개 생성

다음 주소로 이동합니다: https://your-gitea-server/your-user/your-repo/settings/actions/secrets

그리고 몇 개의 중요한 시크릿을 생성합니다: AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY. 이들이 어떤 의미인지 아시죠?

aws-secrets

Hugo 빌드 및 S3 배포를 위한 Gitea 워크플로우 생성

Hugo 프로젝트의 .gitea/workflows 폴더 안에 hugo-deploy.yaml 파일을 생성합니다.

name: Gitea Actions - Hugo Deploy
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
on:
  push:
    branches:
      - master
jobs:
  Hugo-Deploy:
    runs-on: ubuntu-latest
    steps:
      - run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
      - run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."

      - name: Check out repository code
        uses: actions/checkout@v4
        with:
          submodules: true  # Fetch Hugo themes (true OR recursive)
          fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod

      - run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v3
        with:
          hugo-version: '0.134.1' # or remove this for the latest
          extended: true

      - name: List files in the repository
        run: |
          ls

      - name: Build
        run: hugo

      - name: Deploy
        run: hugo deploy
        env:
          AWS_REGION: 'ap-southeast-2'
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

      - run: echo "🍏 This job's status is ${{ job.status }}."

혹시 시드니(Sydney)에서 사이트를 호스팅할 강한 의향이 없다면, 더 선호하는 지역으로 AWS_REGION을 변경하면 됩니다.

아래 설정 부분:

on:
  push:
    branches:
      - master

은 master 브랜치로의 모든 푸시와 머지를 처리해 줍니다.

커밋 및 푸시

서버로 변경 사항을 푸시한 후 https://your-gitea-server/your-user/your-repo/actions 페이지에서 다음과 유사한 결과를 확인해야 합니다.

hugo-deploy-log-gitea-actions

좋은 하루 되세요! Gitea Actions 러너가 배포되고 사이트를 빌드하기 시작하면, 해당 인스턴스를 실행 중인 서버 자체도 안전 장치가 필요함을 잊지 마세요 - gitea dump 워크플로우에 대해서는 Gitea 서버 백업 및 복구를 참고하십시오.

유용한 링크

구독하기

시스템, 인프라, AI 엔지니어링에 관한 새 글을 받아보세요.