# 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 프로세스(무관)
- skill-news 컨테이너 정상 작동 중 (healthy)
- Gitea Actions 자동 배포 성공
- 2025-09-04 재확인: 정상 작동 유지

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