# 250731 로그 저장소 고민과 해결방안 ## 문제 상황 ### 초기 문제 - rb10508 등 로빙 컨테이너들의 로그가 SSD에 저장되고 있음 - CLAUDE.md에 명시된 대로 로그는 HDD(/mnt/hdd/logs/)에 저장되어야 함 - 51123 서버에 HDD가 있고, 51124 서버에서 접근 필요 ### 검토한 방안들 #### 1. SSHFS 마운트 (채택) - 51123 서버의 HDD를 51124 서버에 마운트 - `/mnt/51123logs`에 916GB 공간 확보 - SSH 키 인증 필요 #### 2. 심볼릭 링크 ```bash ln -s /mnt/51123logs/rb10508 logs ``` - 간단하지만 로빙마다 수동 작업 필요 #### 3. docker-compose.yml 직접 수정 ```yaml volumes: - /mnt/51123logs/rb10508:/code/logs:rw ``` - 명확하지만 역시 로빙마다 수정 필요 ## 권한 문제의 딜레마 ### 문제점 1. **SSHFS 마운트**: admin(UID 1000)으로 마운트됨 2. **Docker 컨테이너**: UID 999로 실행 3. **권한 불일치**: Docker가 디렉토리 생성 시 실패 ### 시도한 해결책들 #### 1. SSHFS UID 매핑 ```bash sudo sshfs -o allow_other,uid=999,gid=999 ... ``` - root 권한 필요, 복잡함 #### 2. 사전 권한 설정 ```bash sudo chown -R 999:999 /mnt/hdd/logs/51124-server/ ``` - 여전히 디렉토리는 수동 생성 필요 #### 3. 로빙별 폴더 없이? - 로그 파일이 한 곳에 섞여서 관리 어려움 ## 최종 해결책: 템플릿 방식 ### 1. docker-compose.yml 템플릿화 ```yaml services: app: volumes: - ${LOG_ROOT:-./logs}/${ROBING_NAME:-${COMPOSE_PROJECT_NAME}}:/code/logs:rw ``` ### 2. .env.template ```bash # .env.template LOG_ROOT=/mnt/51123logs ROBING_NAME=__ROBING__ ``` ### 3. 배포 자동화 스크립트 ```bash #!/bin/bash # deploy_robing.sh rb10508_test set -e ROBING=$1 LOG_ROOT=/mnt/51123logs sudo mkdir -p ${LOG_ROOT}/${ROBING} sudo chown 999:docker ${LOG_ROOT}/${ROBING} cp .env.template .env sed -i "s/__ROBING__/${ROBING}/" .env docker compose up -d ``` ### 4. CI/CD 통합 Gitea Actions에서 자동으로: - SSH로 디렉토리 생성 - 권한 설정 - 환경변수 치환 - 배포 ## 장점 1. **수동 작업 제로**: 스크립트 한 번 실행으로 끝 2. **환경별 자동 전환**: 로컬/서버 자동 구분 3. **확장성**: 새 로빙 추가 시 이름만 변경 4. **CI/CD 통합 가능**: 완전 자동화 ## 교훈 1. **처음부터 템플릿 설계**: 하드코딩은 나중에 고통 2. **권한 문제는 미리 해결**: Docker UID/GID 차이 주의 3. **간단한 해결책부터**: SSHFS가 NFS보다 설정 간편 4. **자동화는 필수**: 수동 작업은 실수의 원인 ## 남은 작업 1. 기존 로빙들 마이그레이션 2. 배포 스크립트 작성 3. Gitea Actions 워크플로우 수정 4. 로그 로테이션 정책 설정 --- 작성일: 2025-07-31 작성자: Claude (51124 서버) & 로컬 개발자 주제: 로그 저장소 중앙화 고민과 템플릿 기반 해결책