From d4ec12e2eb1e8fcfa2c7cce87b16381ccc8ec277 Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Thu, 31 Jul 2025 23:16:52 +0900 Subject: [PATCH] =?UTF-8?q?Add:=20=EB=A1=9C=EA=B7=B8=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=EC=86=8C=20=EA=B3=A0=EB=AF=BC=EA=B3=BC=20=ED=95=B4=EA=B2=B0?= =?UTF-8?q?=EB=B0=A9=EC=95=88=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SSHFS 설정부터 권한 문제까지 전체 고민 과정 정리 - 심볼릭 링크, 직접 마운트 등 다양한 방안 검토 - 최종 해결책: 템플릿 기반 자동화 방식 - 로컬 개발자와의 논의 내용 포함 --- ..._로그저장소_고민과_해결방안.md | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 troubleshooting/250731_로그저장소_고민과_해결방안.md diff --git a/troubleshooting/250731_로그저장소_고민과_해결방안.md b/troubleshooting/250731_로그저장소_고민과_해결방안.md new file mode 100644 index 0000000..c4d8f3d --- /dev/null +++ b/troubleshooting/250731_로그저장소_고민과_해결방안.md @@ -0,0 +1,117 @@ +# 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 서버) & 로컬 개발자 +주제: 로그 저장소 중앙화 고민과 템플릿 기반 해결책 \ No newline at end of file