--- tags: [infra, gitea-actions, deploy, 24-server, runtime, plans] --- # 24 자동배포 0초 종료 runtime SSOT 복구 계획 **작성일**: 2026-03-11 **상태**: draft **목표**: Gitea Actions의 24 배포 경로를 현재 runtime SSOT에 다시 맞춰 `git push -> 자동 배포`를 복구한다. ## 관련 문서 - [24 자동배포 0초 종료와 runtime SSOT 불일치 이슈](../troubleshooting/260311_24자동배포_0초종료_runtime_ssot불일치_이슈.md) - [24 자동배포 0초 종료와 runtime SSOT 불일치 리서치](../research/260311_24자동배포_0초종료_runtime_ssot불일치_리서치.md) - [24서버 robeing runtime workspace-config 단일화](../worklog/260310_24서버_robeing_runtime_workspace_config_단일화.md) ## 결정 - 이번 문제는 `rb8001` 코드가 아니라 `배포 인프라 경로 + 51123 runner 실행층` 문제로 다룬다. - `c7bca94`로 `.env.deploy`와 예시 파일은 이미 SSOT에 맞춰졌고, `github_deploy` 공개키를 24 `authorized_keys`에 반영해 수동 SSH 인증도 복구됐다. - 따라서 남은 우선순위는 `runner 실행 복구 확인 -> deploy key 인증 유지 확인 -> workflow 본문 재진입 검증 -> 24에서 최종 닫힘/worklog 작성` 순서다. ## 범위 - 포함: - 51123 self-hosted runner 기동 상태 복구 - runner 시작 방식과 운영 기준(systemd vs script) 정리 - 최신 `#677`과 같은 `0s` 종료 run의 dispatch/task fetch 경로 확인 - 24 배포 대상 host/port/path SSOT 확인 - 23 runner deploy key와 24 `authorized_keys` 정합성 확인 - 실제 push 기반 자동 배포 재검증 - 제외: - 애플리케이션 기능 수정 - 24 runtime.env/secrets.env 구조 재설계 ## 실행 단계 1. 51123에서 runner 프로세스, 시작 스크립트, 등록 정보(`/etc/act_runner/.runner`)를 기준으로 실제 기동 경로를 확정한다. 2. `/home/admin/scripts/start-act-runner.sh` 기반 재기동 구조가 맞는지 확인하고, 같은 방식으로 runner를 재기동해 `ps -ef`, `act_runner.log`, Gitea DB `action_runner.last_online`이 현재 시각으로 갱신되는지 본다. 3. backlog가 다시 흐르기 시작하는지 `action_task` 신규 row 생성과 pending queue 감소로 확인한다. 4. `rb8001/.gitea/workflows/cicd.yml`, `.env.deploy`, `.env.deploy.example`가 현재 SSOT(`192.168.0.106:51124`, `/home/admin/robeing/rb8001`)를 유지하고, `DEPLOY_SSH_KEY_PATH=/home/admin/.ssh/github_deploy`가 실제 운영 키와 일치하는지 재확인한다. 5. 24 `admin ~/.ssh/authorized_keys`에 `github_deploy` 공개키가 유지되는지 확인하고, 51123에서 `ssh -i /home/admin/.ssh/github_deploy -p 51124 admin@192.168.0.106 'echo SSH_OK'` 재검증을 남긴다. 6. `rb8001`을 단독으로 다시 실행해 `action_run_job.task_id`가 실제 task id로 바뀌는지, `Test SSH Connection`을 넘어 `Deploy to Target Server`까지 진입하는지 확인한다. 7. workflow가 본문에 진입하면 `git pull`, `docker compose down && docker compose up -d --build`, health check까지 실제 로그를 확인한다. 8. 복구 후 닫힘 판단과 worklog 작성은 24 서버에서 실제 배포 성공 근거를 붙여 마무리한다. 9. runner 재기동 후에도 유사 증상이 반복되면 Gitea runner online 상태, dispatch/task 저장 경로, repo-level Actions 설정을 추가 점검하고, 운영 방식은 systemd 유닛 또는 동등한 자동복구 경로로 별도 승격한다. ## 완료 기준 - `cicd.yml` task가 `0s` 종료가 아니라 checkout 이후 실제 실행 로그를 남긴다. - 51123에서 `github_deploy`로 24 `51124` 포트 수동 SSH가 지속적으로 성공한다. - Gitea DB 기준 `action_run_job.task_id != 0`, `action_task` 신규 row 생성, `action_runner.last_online` 현재 시각 갱신이 확인된다. - `rb8001` 새 run이 `Test SSH Connection`과 `Deploy to Target Server`를 통과한다. - `git push origin main` 후 24 서버 `rb8001` 컨테이너가 자동 재시작된다. - 수동 배포 없이도 `docker ps`, 헬스체크, 최신 커밋 반영이 확인된다. ## 한 줄 결론 - 목표는 `24=192.168.0.106` SSOT를 유지한 채 51123 self-hosted runner를 다시 실행 경로에 올려 `git push -> workflow 본문 실행 -> 24 자동 배포`를 복구하는 것이다.