From 56e854319929907b357891dde182b62b1db11074 Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Thu, 4 Sep 2025 14:48:06 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20skill-news=20=EC=A2=80=EB=B9=84=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=EC=84=B8=EC=8A=A4=20=EB=B0=8F=20Gitea=20Acti?= =?UTF-8?q?ons=20=EB=B0=B0=ED=8F=AC=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Chrome headless 좀비 67개 → 1개 (init: true) - YAML heredoc 파싱 오류 해결 - SSH 배포 방식 구현 - Health check exit code 문제 해결 --- ...skill-news_zombie_process_gitea_actions.md | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 troubleshooting/250904_admin_skill-news_zombie_process_gitea_actions.md diff --git a/troubleshooting/250904_admin_skill-news_zombie_process_gitea_actions.md b/troubleshooting/250904_admin_skill-news_zombie_process_gitea_actions.md new file mode 100644 index 0000000..b024006 --- /dev/null +++ b/troubleshooting/250904_admin_skill-news_zombie_process_gitea_actions.md @@ -0,0 +1,142 @@ +# skill-news 좀비 프로세스 및 Gitea Actions 배포 문제 해결 + +**날짜**: 2025-09-04 +**작업자**: admin +**관련 서비스**: skill-news, Gitea Actions +**서버**: 51124 (192.168.219.52) + +## 문제 1: Chrome headless 좀비 프로세스 67개 발생 + +### 증상 +```bash +ps aux | grep defunct | wc -l +# 67 +``` +- headless_shell 프로세스가 좀비로 남음 +- 부모 프로세스: skill-news 컨테이너 (PID 3024266) + +### 원인 +- Docker 컨테이너에서 PID 1 프로세스(Python)가 자식 프로세스 정리 못함 + +### 해결 +```yaml +# skill_news/docker-compose.yml +services: + skill-news: + init: true # 좀비 프로세스 정리용 + build: . + container_name: robeing-skill-news +``` + +### 결과 +- 컨테이너 재시작 후 좀비 프로세스 67개 → 1개로 감소 +- 1개는 claude 관련 git 프로세스(무관) + +## 문제 2: Gitea Actions YAML 문법 오류 + +### 증상 +``` +Workflow config file is invalid. Please check your config file: +yaml: line 76: could not find expected ':' +``` + +### 원인 +- heredoc 사용시 YAML 파서가 내용을 YAML로 해석 + +### 첫 번째 시도 (실패) +```yaml +# .gitea/workflows/cicd.yml +sudo tee .env > /dev/null << 'ENVFILE' +NEWS_SERVICE_PORT=8505 +ENVFILE +``` +- `sudo tee` → `cat`으로 변경했으나 여전히 오류 + +### 최종 해결 +```yaml +# heredoc 대신 echo 명령어 사용 +echo "NEWS_SERVICE_PORT=8505" > .env +echo "NEWS_SERVICE_HOST=0.0.0.0" >> .env +# ... 나머지 환경변수들 +``` + +## 문제 3: 51124 서버 SSH 배포 실패 + +### 증상 +- Actions runner(51123)가 로컬 경로 `/home/admin/ivada_project/skill-email` 접근 시도 +- "그런 파일이나 디렉터리가 없습니다" 오류 + +### 해결 +```yaml +# .gitea/workflows/cicd.yml 전면 재작성 +- name: Setup SSH + run: | + mkdir -p ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY_51124 }}" > ~/.ssh/deploy_key + chmod 600 ~/.ssh/deploy_key + ssh-keyscan -p 51124 -H ${{ secrets.SSH_HOST_51124 }} >> ~/.ssh/known_hosts + +- name: Deploy to 51124 Server + run: | + ssh -p 51124 -i ~/.ssh/deploy_key admin@${{ secrets.SSH_HOST_51124 }} << 'DEPLOY_SCRIPT' + cd /home/admin/ivada_project/skill_news + git pull origin main --rebase + docker compose down + docker compose up -d --build + DEPLOY_SCRIPT +``` + +### 필요한 시크릿 +- `SSH_PRIVATE_KEY_51124`: SSH 개인키 +- `SSH_HOST_51124`: 192.168.219.52 + +## 문제 4: Health check 성공해도 Actions 실패 표시 + +### 증상 +``` +✅ Service is healthy! +# Actions는 빨간 X 표시 (exit status 1) +``` + +### 원인 +- heredoc 내부 `exit 0`이 SSH 세션 전체를 종료 + +### 해결 +```bash +# 변경 전 +if curl -f http://localhost:8505/health; then + echo "✅ Service is healthy!" + exit 0 # SSH 세션 종료됨 +fi + +# 변경 후 +if curl -f http://localhost:8505/health; then + echo "✅ Service is healthy!" + break # 반복문만 종료 +fi +``` + +## 최종 상태 + +### 배포 확인 (2025-09-04 14:47) +```bash +docker ps | grep robeing-skill-news +# cfcdb2a7221e skill_news-skill-news Up 54 seconds (healthy) + +ps aux | grep defunct | wc -l +# 3 (skill-news 관련 없음) + +curl http://localhost:8505/health +# {"status":"healthy"} +``` + +### 커밋 이력 +- d96d040: docker-compose.yml에 init: true 추가 +- 1e843dd: YAML heredoc을 echo로 변경 +- 9abd417: SSH 배포 방식 전면 재작성 +- 1dfa735: Health check exit 0 → break 변경 + +## 참고 문서 +- 250820_happybell80_skill-email_DB통합및Actions배포.md (SSH 배포 구조) +- 250819_happybell80_GmailItem구현및GitActions설정.md (heredoc 문제) +- 250728_happybell80_nginx프록시및CI배포문제해결.md (exit 0 문제) \ No newline at end of file