# skill-slack 배포 지침서 ## 문제 skill-slack의 역할을 로빙 철학(스킬=도구, 판단 금지)에 맞게 재정의하고 51124 서버에 배포 ## 배포 정보 - **포트**: 8502 - **서버**: 51124 (192.168.219.52) - **경로**: /home/admin/ivada_project/skill-slack - **설정파일**: skill-slack/docker-compose.yml --- ## 배포 전제조건 ### 현재 상태 - **heejae 컨테이너**: 실행 중 (포트 8502 사용) - **admin 디렉토리**: 코드만 클론됨 - **포트 충돌**: 동시 실행 불가 ### 필수 확인 - [ ] thread_ts 버그 수정 (chat_postMessage에 thread_ts 파라미터 추가) - [ ] SERVICE_API_KEY 설정 (51124 서버 .env 확인) - [ ] SLACK_BOT_TOKEN 설정 (환경변수) - [ ] heejae 컨테이너 중단 후 admin 시작 --- ## 로빙 철학 적용 ### 원칙 - **스킬 = 순수 도구**: 판단 금지, DB 접근 금지 - **무상태**: 어떤 정보도 기억/조회하지 않음 - **교체 가능**: 언제든 제거/교체 가능해야 함 ### 올바른 아키텍처 ``` 1. rb8001이 DB에서 토큰/채널 조회 2. rb8001이 skill-slack 호출 시 필요 정보 전달 3. skill-slack은 받은 정보로만 작업 ``` ### API 변경 | 엔드포인트 | 상태 | 이유 | |-----------|------|------| | `/health` | 유지 | 헬스체크 | | `/api/v1/send` | 유지 | 메시지 전송 (토큰 받아서) | | `/api/v1/update` | 유지 | 메시지 업데이트 | | `/api/v1/summarize` | **삭제** | LLM 호출 (로빙 역할) | | `/api/v1/digest` | **삭제** | 자체 처리 (로빙 역할) | --- ## 환경변수 설정 ### 현재: 환경변수 방식 (임시) - **SLACK_BOT_TOKEN**: 환경변수로 설정 - **SERVICE_API_KEY**: 51124 서버 .env에서 확인 ### 목표: API 요청 시 전달 (향후) - rb8001이 main_db의 slack_workspace 테이블에서 토큰 조회 - 요청 시마다 토큰 전달: ```json { "channel": "C1234567", "text": "메시지", "token": "xoxb-...", // rb8001이 DB에서 조회한 토큰 "thread_ts": "1234567890.123456" } ``` --- ## 배포 절차 ### 계정 전환 (heejae → admin) ```bash # 51124 서버에서 실행 # 1. heejae 컨테이너 중단 sudo docker stop skill-slack || echo "Already stopped" sudo docker rm skill-slack || echo "Already removed" # 2. admin 계정으로 배포 cd /home/admin/ivada_project/skill-slack git pull origin main sudo docker compose down sudo docker compose up -d --build # 3. 로그 확인 sudo docker logs skill-slack --tail=50 -f ``` ### 네트워크 모드 변경 - 파일: `/home/admin/ivada_project/skill-slack/docker-compose.yml` 32행 - 현재: `network_mode: host` - 권장: bridge 모드로 변경 (포트 충돌 방지, 보안 격리) - 로그 수집: Fluent-bit는 파일 기반이므로 영향 없음 --- ## 주요 이슈 ### 긴급 - **thread_ts 미작동**: chat_postMessage 호출 시 thread_ts 미전달 - **DB 접근 문제**: skill-slack이 DB 접근하면 철학 위반 ### 수정 필요 - **토큰 전달 방식**: 환경변수 → API 요청 시 전달 - **네트워크**: host → bridge --- ## 테스트 ### 테스트 명령 (현재: 환경변수 토큰) ```bash # 헬스체크 curl -f http://localhost:8502/health # 메시지 전송 (API_KEY는 .env의 SERVICE_API_KEY) curl -X POST http://localhost:8502/api/v1/send \ -H "X-API-Key: {SERVICE_API_KEY}" \ -H "Content-Type: application/json" \ -d '{"channel": "C07V9F3V21V", "text": "skill-slack 배포 테스트"}' # 스레드 응답 테스트 curl -X POST http://localhost:8502/api/v1/send \ -H "X-API-Key: {SERVICE_API_KEY}" \ -H "Content-Type: application/json" \ -d '{"channel": "C07V9F3V21V", "text": "스레드 응답 테스트", "thread_ts": "1234567890.123456"}' ``` ### 테스트 명령 (향후: 요청별 토큰) ```bash # rb8001이 토큰과 함께 요청 curl -X POST http://localhost:8502/api/v1/send \ -H "X-API-Key: {SERVICE_API_KEY}" \ -H "Content-Type: application/json" \ -d '{"channel": "C1234567", "text": "테스트", "token": "xoxb-..."}' ``` --- ## 체크리스트 ### 배포 전 (순서대로) 1. [x] heejae 컨테이너 중단 (포트 8502 확보) 2. [x] thread_ts 버그 수정 (완료: app/api/endpoints/messages.py:33) 3. [x] 환경변수 설정 (.env 파일 생성 완료) ### 배포 후 - [ ] 헬스체크 200 확인 - [ ] 스레드 응답 테스트 - [ ] API에 token 파라미터 추가 (향후 개선사항)