Community코딩 & 개발github.com

byteTuto/website

byteTuto 웹사이트를 Amazon EC2(Docker + nginx, GitHub Actions, GHCR, Let's Encrypt)에 배포, 확인, 진단 또는 롤백합니다. 배포, HTTPS, 서버 또는 CI/CD 파이프라인 관련 모든 질문에 사용하세요.

website란 무엇인가요?

이 스킬은 byteTuto 웹사이트를 Amazon EC2 인스턴스에 Docker 컨테이너로 배포하고 관리하는 전체 CI/CD 파이프라인을 제공합니다. GitHub Actions를 기반으로 하여 `main` 브랜치에 푸시하면 자동으로 테스트, 이미지 빌드 및 퍼블리시, EC2 배포가 실행됩니다. 특히 멀티 아키텍처(amd64 + arm64) Docker 이미지를 GHCR에 푸시하고, 배포 실패 시 자동 롤백하는 안전 장치를 갖추고 있습니다. 또한 Let's Encrypt를 통한 HTTPS 설정, nginx 설정 템플릿 동적 선택, 진단 테이블을 통한 문제 해결 등 운영에 필요한 핵심 기능을 모두 포함합니다. 개발자는 이 스킬을 통해 배포 상태 확인, 수동 롤백, SSL 인증서 갱신 등의 작업을 안전하게 수행할 수 있습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/byteTuto/website/tree/HEAD/.claude/skills/deploy-ec2

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

byteTuto EC2 배포

배포 체인

  1. git push on main → .github/workflows/deploy.yml
  2. test 작업 : docker build, nginx -t, 스모크 테스트 (/healthz, 홈페이지, 404, CSP 헤더).
  3. publish 작업 : 멀티 아키텍처(amd64 + arm64) 이미지를 ghcr.io/bytetuto/website:<sha7> 및 :latest에 푸시.
  4. deploy 작업 : EC2에 SSH 접속, /opt/bytetuto/.env 작성, docker-compose.yml + deploy/*.sh 복사, deploy/deploy.sh 실행.
  5. deploy.sh : pull, up -d, /healthz 대기(최대 40초). 실패 → .last_image의 이미지로 자동 롤백.

PR은 test 작업만 실행합니다.

GitHub Secrets / 변수 (Settings → Secrets and variables → Actions)

  • Secrets : EC2_HOST, EC2_USER (ec2-user 또는 ubuntu), EC2_SSH_KEY (전체 개인 키), EC2_KNOWN_HOSTS (권장: ssh-keyscan -H <ip> 결과).
  • Variables : DOMAIN (예: bytetuto.com), LETSENCRYPT_EMAIL.
  • GitHub production 환경 (수동 승인이 필요할 수 있음).

유용한 명령어 (EC2에서, /opt/bytetuto 디렉토리)

  • 상태 : docker compose ps · 로그 : docker compose logs -f web
  • 헬스 체크 : curl -fsS http://127.0.0.1/healthz
  • 특정 버전 재배포 : IMAGE=ghcr.io/bytetuto/website:<sha7> bash deploy/deploy.sh
  • 수동 롤백 : 이전 태그로 deploy.sh 재실행 (GitHub Packages 탭에서 확인 가능).
  • HTTPS (DNS 설정 후, 한 번만) : bash deploy/init-ssl.sh (먼저 STAGING=1로 테스트).
  • 갱신 : cron /etc/cron.d/bytetuto-certbot (하루 2회), 로그는 certbot-renew.log.

nginx가 HTTP 또는 HTTPS를 선택하는 방법

nginx/40-bytetuto-ssl.sh가 컨테이너 시작 시 실행됩니다. $DOMAIN에 대한 인증서가 있으면 → https.conf.template, 없으면 → http.conf.template. init-ssl.sh 실행 후 docker compose restart web만 하면 됩니다.

빠른 진단

증상원인
deploy 작업: Permission denied (publickey)EC2_SSH_KEY / EC2_USER 오류
docker: permission denied사용자가 docker 그룹에 없음 → ec2-setup.sh 후 재접속
pull access deniedGHCR 패키지가 비공개이고 로그인 실패, 또는 패키지를 공개로 전환
외부에서 HTTP 타임아웃Security Group에서 포트 80/443이 열려 있지 않음
certbot 실패DNS가 아직 전파되지 않았거나 포트 80이 닫힘
exec format error아키텍처: 이미지가 멀티 아키텍처인지 확인

규칙

  • .env, SSH 키 또는 certbot/을 읽거나 표시하지 않음.
  • git push, ssh, scp 또는 deploy/ 및 워크플로 수정 시 확인 요청.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

관련 스킬