From 01c707c8b4e4084666b73aaedc7dc34f856959d2 Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Sun, 3 Aug 2025 22:29:45 +0900 Subject: [PATCH] =?UTF-8?q?Fix:=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EB=B0=8F=20=EC=83=88=20=ED=8A=B8=EB=9F=AC=EB=B8=94?= =?UTF-8?q?=EC=8A=88=ED=8C=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../250731_claude_SSHFS권한문제해결.md | 153 +++++++++++++++ .../250731_claude_SSHFS로그설정.md | 114 ------------ ...소_SSHFS설정과_템플릿해결책.md | 174 ++++++++++++++++++ ..._로그저장소_고민과_해결방안.md | 117 ------------ 4 files changed, 327 insertions(+), 231 deletions(-) create mode 100644 troubleshooting/250731_claude_SSHFS권한문제해결.md delete mode 100644 troubleshooting/250731_claude_SSHFS로그설정.md create mode 100644 troubleshooting/250731_로그저장소_SSHFS설정과_템플릿해결책.md delete mode 100644 troubleshooting/250731_로그저장소_고민과_해결방안.md diff --git a/troubleshooting/250731_claude_SSHFS권한문제해결.md b/troubleshooting/250731_claude_SSHFS권한문제해결.md new file mode 100644 index 0000000..c921677 --- /dev/null +++ b/troubleshooting/250731_claude_SSHFS권한문제해결.md @@ -0,0 +1,153 @@ +# 250731 SSHFS 권한 문제 해결 + +## 문제 상황 + +### 오후 11시 49분 - 로컬 개발자 배포 실패 +- Gitea Actions에서 "Create log directory safely" 단계 실패 +- 오류: `mkdir: cannot create directory '/mnt/51123logs': Permission denied` +- 컨테이너 시작 실패: `PermissionError: [Errno 13] Permission denied: '/code/logs/rb10508_test_app.log'` + +### 근본 원인 분석 +1. **SSHFS 마운트 권한**: admin(UID 1001)으로 마운트됨 +2. **컨테이너 실행 사용자**: appuser(UID 999)로 실행 +3. **권한 불일치**: UID 1001 vs UID 999 충돌로 로그 파일 쓰기 불가 + +## 해결 과정 + +### 오후 11시 51분 - 51123 서버에서 권한 설정 +```bash +# 모든 로빙 서비스용 디렉토리 생성 +sudo mkdir -p /mnt/hdd/logs/51124-server/{rb10508_test,rb8001,rb10408_test} + +# UID 999:999로 권한 설정 (Docker 컨테이너 사용자와 일치) +sudo chown -R 999:999 /mnt/hdd/logs/51124-server/ +``` + +### 오후 11시 56분 - 51124 서버에서 SSHFS 재마운트 +```bash +# SSHFS 서비스 재시작으로 새 권한 적용 +sudo systemctl restart mount-51123logs.service + +# 마운트 확인 +ls -la /mnt/51123logs/ +# 결과: 모든 디렉토리가 999:docker 권한으로 정상 마운트됨 +``` + +### 오후 11시 57분 - 컨테이너 권한 문제 해결 +```bash +# 컨테이너 재시작 +docker compose down && docker compose up -d + +# Docker가 볼륨 마운트 시 root 권한으로 디렉토리 생성 문제 발견 +docker exec rb10508_test ls -la /code/logs/ +# 결과: drwxr-xr-x 2 root root (문제 확인) + +# 컨테이너 내부에서 권한 수정 +docker exec -u root rb10508_test chown -R appuser:appuser /code/logs + +# 컨테이너 재시작으로 정상 동작 확인 +docker restart rb10508_test +``` + +## 검증 결과 + +### 오후 11시 58분 - 성공 확인 +```bash +# 1. 컨테이너 정상 시작 +docker logs rb10508_test --tail 5 +# 결과: INFO: Uvicorn running on http://0.0.0.0:10508 + +# 2. 헬스체크 통과 +curl http://localhost:10508/health +# 결과: {"status":"healthy"} + +# 3. 로그 파일 생성 확인 +docker exec rb10508_test ls -la /code/logs/ +# 결과: -rw-r--r-- 1 appuser appuser 0 rb10508_test_app.log + +# 4. SSHFS를 통한 로그 저장 확인 +ls -la /mnt/51123logs/rb10508_test/ +# 결과: 999:docker 권한으로 정상 마운트 +``` + +## 해결책 요약 + +### 1. 51123 서버 작업 (완료) +- 로그 디렉토리를 Docker 컨테이너 UID(999:999)로 사전 생성 +- 모든 로빙(rb10508_test, rb8001, rb10408_test) 디렉토리 준비 + +### 2. 51124 서버 작업 (완료) +- SSHFS 서비스 재시작으로 새 권한 적용 +- Docker 볼륨 마운트 시 root 권한 문제를 컨테이너 내부에서 해결 + +### 3. CI/CD 수정 (로컬 개발자 작업 - 완료) +- sudo 제거로 SSHFS 권한 충돌 방지 +- 권한 오류 처리 개선 + +## 교훈 + +1. **SSHFS 권한은 원격 서버에서 설정**: 51124에서 권한 변경 불가, 51123에서 사전 설정 필요 +2. **Docker 볼륨 마운트 권한 주의**: Docker가 빈 디렉토리를 root 권한으로 생성하는 문제 +3. **UID 일치 중요성**: 컨테이너 사용자(999)와 파일 시스템 권한 일치 필수 +4. **CI/CD에서 sudo 금지**: SSHFS 마운트에서는 user space 권한만 유효 +5. **단계별 검증**: 마운트 → 권한 → 컨테이너 → 로그 파일 순서로 검증 + +## 최종 결과 + +**Gitea Actions 성공**: 권한 문제 해결로 정상 배포 +**rb10508_test 정상 동작**: 헬스체크 통과 및 API 서비스 가능 +**중앙 로그 시스템 완성**: 51123 서버 HDD에 안전한 로그 저장 + +## 남은 문제점 + +### 템플릿 자동화 목표 실패 +- **원래 목표**: 새 로빙 추가 시 자동으로 디렉토리 생성 및 권한 설정 +- **현재 상태**: 51123 서버에서 수동으로 `sudo mkdir`, `sudo chown` 필요 +- **문제**: 완전히 처음 수동 작업 방식으로 돌아감 + +### 근본 원인 +1. **SSHFS 제약**: 마운트된 쪽(51124)에서 권한 변경 불가 +2. **CI/CD 한계**: 51124에서 실행되므로 51123 권한 설정 불가 +3. **템플릿 무효화**: 환경변수 기반 자동화가 권한 문제로 실패 + +### 진정한 자동화를 위한 향후 개선 방안 +1. **CI/CD에서 51123 서버 SSH 접속**: 디렉토리 생성 단계 추가 +2. **51123 서버 자동화 API**: 디렉토리 생성 요청 받는 서비스 구축 +3. **대안 검토**: NFS, rsync, 로그 수집 에이전트 방식 고려 + +### 교훈 +- **SSHFS 권한 문제는 해결되었지만 자동화 목표는 달성되지 못함** +- **수동 작업 의존성이 다시 생김**: 새 로빙마다 51123 서버 작업 필요 +- **완전한 자동화를 위해서는 추가 아키텍처 개선 필요** + +## 오전 12시 04분 - 중앙 로그 시스템 완전 실패 및 롤백 + +### 시도했던 작업 +1. .env 파일에 LOG_ROOT=/mnt/51123logs, ROBING_NAME=rb10508_test 설정 +2. 템플릿 시스템 동작 확인 (docker compose config에서 경로 정상 해석됨) +3. 컨테이너 재시작 시도 + +### 실패 원인 +**Docker SSHFS 마운트 포인트 충돌**: +``` +Error response from daemon: error while creating mount source path '/mnt/51123logs/rb10508_test': mkdir /mnt/51123logs: file exists +``` + +Docker가 볼륨 마운트 시 상위 디렉토리를 새로 만들려고 했지만, 해당 경로는 이미 SSHFS 마운트 포인트로 존재해서 충돌 발생. + +### 롤백 작업 +1. .env 파일에서 LOG_ROOT, ROBING_NAME 환경변수 제거 +2. 기존 ./logs:/code/logs:rw 방식으로 복원 +3. 컨테이너 정상 시작됨 + +### 최종 결과 +- 24서버 SSD에 로그 저장 (/home/admin/ivada_project/rb10508_test/logs/) +- CLAUDE.md 규칙 위반 (로그는 HDD에 저장되어야 함) +- SSHFS 마운트는 설정되어 있지만 미사용 +- 중앙 로그 시스템 구축 실패 + +--- + +작성일: 2025-07-31 23:49 - 23:58 +작성자: Claude (51124 서버) +주제: SSHFS 마운트 권한 불일치로 인한 컨테이너 로그 쓰기 실패 해결 \ No newline at end of file diff --git a/troubleshooting/250731_claude_SSHFS로그설정.md b/troubleshooting/250731_claude_SSHFS로그설정.md deleted file mode 100644 index cfc2a87..0000000 --- a/troubleshooting/250731_claude_SSHFS로그설정.md +++ /dev/null @@ -1,114 +0,0 @@ -# SSHFS를 이용한 로그 저장소 설정 - -## 오후 10시 50분 - SSHFS 설정 시작 - -### 배경 -- rb10508 등 로빙 컨테이너들의 로그가 SSD에 저장되고 있음 -- CLAUDE.md에 명시된 대로 로그는 HDD(/mnt/hdd/logs/)에 저장되어야 함 -- 51123 서버에 HDD가 있고, 51124 서버에서 SSHFS로 마운트하여 사용하기로 결정 - -### 왜 SSHFS가 적합한가? -1. 이미 SSH 키 설정 완료 - 추가 인증 설정 불필요 -2. 다양한 로그 형태 지원 - stdout/stderr뿐만 아니라 파일 로그도 저장 -3. 설정 최소화 - 51123 서버는 디렉토리만 만들면 됨 -4. 투명한 작동 - 컨테이너는 로컬 디렉토리처럼 사용 - -### 51123 서버에서 수행한 작업 (오후 10시 48분) -```bash -# 1. 51124서버 전용 로그 디렉토리 생성 -sudo mkdir -p /mnt/hdd/logs/51124-server -sudo chown admin:admin /mnt/hdd/logs/51124-server - -# 2. 51124서버의 SSH 공개키 추가 -# 51124 서버의 ~/.ssh/id_rsa_deploy.pub 내용을 ~/.ssh/authorized_keys에 추가 - -# 3. cleanup 스크립트에 51124 서버 로그 정리 추가 -# /home/admin/scripts/cleanup-server.sh 파일 수정 -# 51124 서버 로그도 30일 후 자동 정리되도록 설정 -``` - -### 51124 서버에서 완료한 작업 -```bash -# 1. SSHFS 설치 -sudo apt install -y sshfs - -# 2. 마운트 포인트 생성 -sudo mkdir -p /mnt/51123logs - -# 3. 마운트 시도 (SSH 키 등록 후 다시 시도 필요) -sudo sshfs -o allow_other,reconnect admin@192.168.219.45:/mnt/hdd/logs/51124-server /mnt/51123logs -p 51123 -``` - -### 다음 단계 (SSH 키 등록 후) -```bash -# 1. SSHFS 마운트 -sudo sshfs -o allow_other,reconnect admin@192.168.219.45:/mnt/hdd/logs/51124-server /mnt/51123logs -p 51123 - -# 2. 자동 마운트 설정 (/etc/fstab) -echo "admin@192.168.219.45:/mnt/hdd/logs/51124-server /mnt/51123logs fuse.sshfs _netdev,allow_other,reconnect,port=51123 0 0" | sudo tee -a /etc/fstab - -# 3. docker-compose.yml 수정 -# 각 로빙 서비스의 볼륨 설정 변경 -volumes: - - /mnt/51123logs/rb10508:/code/logs - # 기존: ./logs:/code/logs -``` - -## 오후 10시 51분 - SSHFS 마운트 성공 - -### 완료된 작업 -```bash -# 1. SSH 키 파일 지정하여 마운트 -sshfs -o IdentityFile=/home/admin/.ssh/id_rsa_deploy admin@192.168.219.45:/mnt/hdd/logs/51124-server /mnt/51123logs -p 51123 - -# 2. 마운트 확인 -df -h /mnt/51123logs -# 결과: 916G 크기의 HDD가 성공적으로 마운트됨 - -# 3. 테스트 -mkdir -p /mnt/51123logs/rb10508 -echo "SSHFS mount test - $(date)" > /mnt/51123logs/rb10508/test.log -``` - -### 영구 마운트 설정 (선택사항) -```bash -# /etc/fstab에 추가하려면: -echo "admin@192.168.219.45:/mnt/hdd/logs/51124-server /mnt/51123logs fuse.sshfs _netdev,allow_other,reconnect,port=51123,IdentityFile=/home/admin/.ssh/id_rsa_deploy 0 0" | sudo tee -a /etc/fstab -``` - -### 교훈 -1. **서버 간 통신은 항상 SSH 키 먼저**: 51123-51124 간 SSH 키가 설정되어 있지 않았음 -2. **마운트 포인트 이름 규칙**: /mnt/51123logs처럼 연결하는 서버 번호를 명시하면 관리가 편함 -3. **SSHFS vs NFS**: 간단한 로그 저장용도는 SSHFS가 설정이 훨씬 간편함 -4. **SSH 키 파일 명시**: -o IdentityFile 옵션으로 특정 키 파일 지정 필요 - -### 로컬 개발자에게 전달할 사항 - -각 로빙 서비스의 docker-compose.yml 파일에 볼륨 설정 추가 필요: - -```yaml -# rb8001/docker-compose.yml -services: - rb8001: - volumes: - - /mnt/51123logs/rb8001:/app/logs # 추가 - # 기존 볼륨들... - -# rb10508_test/docker-compose.yml -services: - rb10508_test: - volumes: - - /mnt/51123logs/rb10508_test:/app/logs # 추가 - # 기존 볼륨들... - -# rb10408_test/docker-compose.yml -services: - rb10408_test: - volumes: - - /mnt/51123logs/rb10408_test:/app/logs # 추가 - # 기존 볼륨들... -``` - -작업자: -- Claude (51123 서버 - SSH 키 등록 및 디렉토리 생성) -- Claude (51124 서버 - SSHFS 설정 및 마운트) \ No newline at end of file diff --git a/troubleshooting/250731_로그저장소_SSHFS설정과_템플릿해결책.md b/troubleshooting/250731_로그저장소_SSHFS설정과_템플릿해결책.md new file mode 100644 index 0000000..836ec07 --- /dev/null +++ b/troubleshooting/250731_로그저장소_SSHFS설정과_템플릿해결책.md @@ -0,0 +1,174 @@ +# 250731 로그 저장소 SSHFS 설정과 템플릿 해결책 + +## 문제 상황 + +### 초기 문제 +- rb10508 등 로빙 컨테이너들의 로그가 SSD에 저장되고 있음 +- CLAUDE.md에 명시된 대로 로그는 HDD(/mnt/hdd/logs/)에 저장되어야 함 +- 51123 서버에 HDD가 있고, 51124 서버에서 접근 필요 + +### SSHFS가 적합한 이유 +1. 이미 SSH 키 설정 완료 - 추가 인증 설정 불필요 +2. 다양한 로그 형태 지원 - stdout/stderr뿐만 아니라 파일 로그도 저장 +3. 설정 최소화 - 51123 서버는 디렉토리만 만들면 됨 +4. 투명한 작동 - 컨테이너는 로컬 디렉토리처럼 사용 + +## 실제 설정 과정 + +### 오후 10시 48분 - 51123 서버 작업 +```bash +# 1. 51124서버 전용 로그 디렉토리 생성 +sudo mkdir -p /mnt/hdd/logs/51124-server +sudo chown admin:admin /mnt/hdd/logs/51124-server + +# 2. 51124서버의 SSH 공개키 추가 +# 51124 서버의 ~/.ssh/id_rsa_deploy.pub 내용을 ~/.ssh/authorized_keys에 추가 + +# 3. cleanup 스크립트에 51124 서버 로그 정리 추가 +# 51124 서버 로그도 30일 후 자동 정리되도록 설정 +``` + +### 오후 10시 50분 - 51124 서버 작업 +```bash +# 1. SSHFS 설치 +sudo apt install -y sshfs + +# 2. 마운트 포인트 생성 +sudo mkdir -p /mnt/51123logs + +# 3. 마운트 시도 (초기 실패 - SSH 키 문제) +sudo sshfs -o allow_other,reconnect admin@192.168.219.45:/mnt/hdd/logs/51124-server /mnt/51123logs -p 51123 +``` + +### 오후 10시 51분 - SSHFS 마운트 성공 +```bash +# 1. SSH 키 파일 지정하여 마운트 +sshfs -o IdentityFile=/home/admin/.ssh/id_rsa_deploy admin@192.168.219.45:/mnt/hdd/logs/51124-server /mnt/51123logs -p 51123 + +# 2. 마운트 확인 +df -h /mnt/51123logs +# 결과: 916G 크기의 HDD가 성공적으로 마운트됨 + +# 3. 테스트 +mkdir -p /mnt/51123logs/rb10508 +echo "SSHFS mount test - $(date)" > /mnt/51123logs/rb10508/test.log +``` + +## 권한 문제의 딜레마 + +### 발견된 문제점 +1. **SSHFS 마운트**: admin(UID 1000)으로 마운트됨 +2. **Docker 컨테이너**: UID 999로 실행 +3. **권한 불일치**: Docker가 디렉토리 생성 시 실패 + +### 검토한 해결방안들 + +#### 1. 심볼릭 링크 +```bash +ln -s /mnt/51123logs/rb10508 logs +``` +- 간단하지만 로빙마다 수동 작업 필요 + +#### 2. docker-compose.yml 직접 수정 +```yaml +volumes: + - /mnt/51123logs/rb10508:/code/logs:rw +``` +- 명확하지만 역시 로빙마다 수정 필요 + +#### 3. SSHFS UID 매핑 +```bash +sudo sshfs -o allow_other,uid=999,gid=999 ... +``` +- root 권한 필요, 복잡함 + +#### 4. 사전 권한 설정 +```bash +sudo chown -R 999:999 /mnt/hdd/logs/51124-server/ +``` +- 여전히 디렉토리는 수동 생성 필요 + +## 최종 해결책: 템플릿 방식 + +### 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) +```yaml +- name: Create log dir + run: | + ssh admin@192.168.219.52 "sudo mkdir -p /mnt/51123logs/${{ env.PROJECT }}" + ssh admin@192.168.219.52 "sudo chown 999:docker /mnt/51123logs/${{ env.PROJECT }}" +- name: Deploy + run: | + sed -i "s/__ROBING__/${{ env.PROJECT }}/" .env + docker compose up -d +``` + +### 5. 기존 로빙 마이그레이션 +```bash +for r in rb8001 rb10408 rb10508_test; do + sudo mkdir -p /mnt/51123logs/$r + sudo chown 999:docker /mnt/51123logs/$r + mv /home/admin/ivada_project/$r/logs/* /mnt/51123logs/$r/ 2>/dev/null || true +done +``` + +## 템플릿 방식의 장점 +1. **수동 작업 제로**: 스크립트 한 번 실행으로 끝 +2. **환경별 자동 전환**: 로컬에선 `./logs`, 서버에선 `/mnt/51123logs` +3. **확장성**: 새 로빙 추가 시 이름만 변경 +4. **CI/CD 통합 가능**: 완전 자동화 + +## 교훈 +1. **서버 간 통신은 항상 SSH 키 먼저**: 51123-51124 간 SSH 키가 설정되어 있지 않았음 +2. **마운트 포인트 이름 규칙**: /mnt/51123logs처럼 연결하는 서버 번호를 명시하면 관리가 편함 +3. **SSHFS vs NFS**: 간단한 로그 저장용도는 SSHFS가 설정이 훨씬 간편함 +4. **SSH 키 파일 명시**: -o IdentityFile 옵션으로 특정 키 파일 지정 필요 +5. **처음부터 템플릿 설계**: 하드코딩은 나중에 고통 +6. **권한 문제는 미리 해결**: Docker UID/GID 차이 주의 +7. **자동화는 필수**: 수동 작업은 실수의 원인 + +## 남은 작업 +1. 기존 로빙들 마이그레이션 +2. 배포 스크립트 작성 +3. Gitea Actions 워크플로우 수정 +4. 로그 로테이션 정책 설정 +5. 영구 마운트 설정 (/etc/fstab) + +--- + +작성일: 2025-07-31 +작성자: Claude (51123 서버 - SSH 키 등록 및 디렉토리 생성) + Claude (51124 서버 - SSHFS 설정 및 마운트) + 로컬 개발자 (템플릿 해결책 제안) +주제: 로그 저장소 중앙화를 위한 SSHFS 설정과 템플릿 기반 자동화 \ No newline at end of file diff --git a/troubleshooting/250731_로그저장소_고민과_해결방안.md b/troubleshooting/250731_로그저장소_고민과_해결방안.md deleted file mode 100644 index c4d8f3d..0000000 --- a/troubleshooting/250731_로그저장소_고민과_해결방안.md +++ /dev/null @@ -1,117 +0,0 @@ -# 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