153 lines
5.8 KiB
Markdown
153 lines
5.8 KiB
Markdown
# 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, ROBEING_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, ROBEING_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 마운트 권한 불일치로 인한 컨테이너 로그 쓰기 실패 해결 |