# 260307 24서버 정상복구 초기서버 기준 계획 **작성일**: 2026-03-07 **상태**: 완료 (2026-03-10 기준) **전제**: 작성 당시 51124는 빈 초기 서버에 가깝고, 51123이 `테스트 + 임시 운영` 역할을 겸하고 있었다. --- ## 1. 목표 - 51124를 다시 robeing 프로덕션 실행 서버로 복구한다. - 51123의 임시 수용 상태를 종료하고, 원래 역할인 `테스트 + 보조 + 인프라`로 되돌린다. - 복구 후에도 IP/경로/시크릿 변경이 대량 수정으로 번지지 않도록 SSOT 구조를 함께 정착시킨다. ## 2. 복구 원칙 1. 24는 처음부터 다시 쌓는다고 가정한다. - 과거 상태를 추측 복원하지 않는다. - 필요한 구성요소를 체크리스트로 다시 올린다. 2. 서비스보다 기반을 먼저 복구한다. - OS/계정/권한/디렉터리/SSOT/네트워크가 먼저다. - 이 기반 없이 컨테이너만 올리면 재장애 가능성이 높다. 3. 프로덕션 판정은 24에서만 확정한다. - 23에서 정상인 것은 사전 검증 근거일 뿐이다. - 최종 정상 판정은 24의 실제 헬스체크와 실경로 검증으로만 내린다. ## 3. 24 서버에 먼저 갖춰야 할 것 ### 3.1 운영 기본 계층 - 배포 사용자 계정 및 SSH 접근 - Docker / Docker Compose - 기본 로그 경로 - 시스템 시간대, 방화벽, 필수 패키지 - 재부팅 후 자동 기동 정책(systemd 또는 compose 운영 규칙) ### 3.2 프로젝트 루트 구조 - `/home/admin/robeing` - `/home/admin/workspace-config` - 서비스별 배포 루트 경로 - 로그/데이터/마운트 경로 ### 3.3 설정 SSOT 계층 - `/home/admin/workspace-config/runtime.env` - `/home/admin/workspace-config/secrets.env` - 서비스별 `.env`는 비워 두거나 로컬 오버라이드 전용으로 유지 - IP/포트/내부 호스트/외부 연계 주소는 runtime.env 기준으로만 관리 ### 3.4 네트워크/연계 - 24 -> 23 DB 접근 확인 - 24 -> NAS 또는 대체 스토리지 접근 확인 - 23 gateway가 24 upstream으로 다시 붙을 수 있는지 확인 - 헬스체크/내부 포트/UFW 정책 선반영 ## 4. 복구 대상 서비스 ### 4.1 우선 복구 - `rb8001` - `skill-email` - `skill-calendar` - `skill-news` - `skill-slack` - `skill-rag-file` - `skill-embedding` - `ChromaDB` ### 4.2 조건부 복구 - `robeing-monitor` - 기타 실험/보조 컨테이너 원칙: - 프로덕션 핵심 경로를 먼저 복구한다. - 모니터링/실험 서비스는 핵심 경로 안정화 후 붙인다. ## 5. 단계별 실행 계획 ### 5.1 Phase 1: 바닥 공사 - 24 서버 기본 패키지, Docker, 사용자 권한, SSH 키, 방화벽 구성 - 프로젝트 루트 디렉터리 생성 - `infra-config` 배치 및 권한 적용 - Gitea Actions가 접근할 배포 경로 생성 완료 기준: - SSH 접속 가능 - Docker 실행 가능 - 배포 경로/권한 오류 없음 ### 5.2 Phase 2: 설정 이식 - 23 기준 운영값 중 24에 필요한 항목만 선별 - `runtime.env`와 `secrets.env`에 반영 - 하드코딩 IP/경로가 남아 있는 서비스는 이 단계에서 제거 완료 기준: - 각 서비스 compose가 24에서 동일한 SSOT 파일을 읽음 - 서비스 내부 코드에 23 전용 하드코딩이 남아 있지 않음 ### 5.3 Phase 3: 데이터/스토리지 연계 - PostgreSQL 연결 확인 - ChromaDB 볼륨 및 데이터 경로 확인 - NAS 또는 공유 스토리지 마운트 확인 - 로그 저장 경로 확인 완료 기준: - DB read/write 정상 - 필요한 파일 마운트가 실제 경로에서 읽힘 - 로그가 지정 경로에 기록됨 ### 5.4 Phase 4: 서비스 기동 - 핵심 서비스부터 `docker compose down && docker compose up -d --build` - 각 서비스별 헬스체크 확인 - 컨테이너 포트/네트워크 실제 바인딩 확인 완료 기준: - `docker ps` 기준 핵심 컨테이너 running/healthy - 서비스별 health endpoint 응답 정상 ### 5.5 Phase 5: 23과 연결 복구 - 23 gateway upstream을 24 기준으로 재설정 - auth / gateway / upstream 로그를 같은 요청 기준으로 대조 - 실제 도메인 기준 요청 흐름 검증 완료 기준: - `ro-being.com` 실제 경로에서 핵심 API 응답 정상 - gateway/nginx/upstream 로그가 한 요청 기준으로 이어짐 ### 5.6 Phase 6: 역할 정상화 - 24를 프로덕션으로 확정 - 23의 임시 실행 컨테이너 정리 - 23을 다시 `테스트 + 보조 + 인프라` 역할로 축소 - 임시 예외 설정 제거 여부 확인 완료 기준: - 프로덕션 트래픽 기준 서버가 24로 고정됨 - 23은 테스트/보험 역할만 수행 ## 6. 검증 체크리스트 1. 인프라 - SSH, Docker, disk, memory, UFW 정상 2. 데이터 - 24에서 PostgreSQL 연결 정상 - ChromaDB 경로/볼륨 정상 - 공유 스토리지 접근 정상 3. 서비스 - `rb8001` health 정상 - 핵심 스킬 health 정상 - monitor 필요 시 health 정상 4. 요청 흐름 - 실제 도메인에서 gateway -> upstream 응답 정상 - 인증 경로 정상 - 로그가 요청 단위로 추적 가능 5. 운영 - Actions 배포 성공 - 재기동 후 자동 복구 가능 - 23/24 역할 문서와 실제 구성이 일치 ## 7. 실패 패턴 경계 - 23의 임시값을 24 복구값으로 착각하는 것 - `.env`, compose, 코드, 문서가 각각 다른 값을 갖는 것 - 컨테이너만 살아 있고 실제 도메인 요청은 실패하는 상태를 정상으로 오판하는 것 - 24 복구 전에 23 임시 설정을 정리해 버리는 것 ## 8. 복구 완료 선언 조건 - 24에서 핵심 서비스가 healthy - 실제 도메인 기준 핵심 경로 응답 정상 - 23 gateway와 24 upstream 연결 정상 - 문서, runtime.env/secrets.env, 배포 경로가 서로 일치 - 23 임시운영 예외 항목이 후속 문서에 정리됨 ## 9. 후속 문서 연결 - [260303_23테스트보조_24프로덕션_운영전환_계획](./260303_23테스트보조_24프로덕션_운영전환_계획.md) - [260304_24장애시_23자동임시프로덕션전환_계획](./260304_24장애시_23자동임시프로덕션전환_계획.md) - [260304_51123_임시복구_서비스연속성_조치내역](../troubleshooting/260304_51123_임시복구_서비스연속성_조치내역.md) - [260307_gateway_SSOT_runtime_secrets_분리_적용_및_검증](../troubleshooting/260307_gateway_SSOT_runtime_secrets_분리_적용_및_검증.md)