docs: skill-news 좀비 프로세스 및 Gitea Actions 배포 문제 해결

- Chrome headless 좀비 67개 → 1개 (init: true)
- YAML heredoc 파싱 오류 해결
- SSH 배포 방식 구현
- Health check exit code 문제 해결
This commit is contained in:
Claude-51124 2025-09-04 14:48:06 +09:00
parent ad52d3df36
commit 56e8543199

View File

@ -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 문제)