Add: 로그 저장소 고민과 해결방안 정리
- SSHFS 설정부터 권한 문제까지 전체 고민 과정 정리 - 심볼릭 링크, 직접 마운트 등 다양한 방안 검토 - 최종 해결책: 템플릿 기반 자동화 방식 - 로컬 개발자와의 논의 내용 포함
This commit is contained in:
parent
be18904cc1
commit
d4ec12e2eb
117
troubleshooting/250731_로그저장소_고민과_해결방안.md
Normal file
117
troubleshooting/250731_로그저장소_고민과_해결방안.md
Normal file
@ -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 서버) & 로컬 개발자
|
||||
주제: 로그 저장소 중앙화 고민과 템플릿 기반 해결책
|
||||
Loading…
x
Reference in New Issue
Block a user