- Frontend: Next.js 14 with TypeScript - Backend: FastAPI with SQLAlchemy - Agent: Carmodoo sync agent - Deployment: Docker Compose based staging/production setup - Scripts: Automated deployment with rollback support 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
868 lines
25 KiB
Markdown
868 lines
25 KiB
Markdown
# 파일 서버 구축 상세 문서
|
|
|
|
**작성일**: 2025-12-05
|
|
**서버**: Server3 (192.168.0.203)
|
|
**운영체제**: Ubuntu 22.04.5 LTS Server
|
|
|
|
---
|
|
|
|
## 목차
|
|
|
|
1. [아키텍처 개요](#아키텍처-개요)
|
|
2. [기술 스택](#기술-스택)
|
|
3. [하드웨어 구성](#하드웨어-구성)
|
|
4. [디스크 설정](#디스크-설정)
|
|
5. [Samba 파일 서버](#samba-파일-서버)
|
|
6. [Nextcloud 클라우드](#nextcloud-클라우드)
|
|
7. [NPM 프록시 설정](#npm-프록시-설정)
|
|
8. [보안 설정](#보안-설정)
|
|
9. [문제 해결](#문제-해결)
|
|
10. [유지보수](#유지보수)
|
|
|
|
---
|
|
|
|
## 아키텍처 개요
|
|
|
|
### 시스템 구성도
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
│ 파일 서버 아키텍처 │
|
|
└─────────────────────────────────────────────────────────────────────────────┘
|
|
|
|
┌──────────────────┐
|
|
│ 인터넷 (WAN) │
|
|
└────────┬─────────┘
|
|
│
|
|
┌────────▼─────────┐
|
|
│ 공유기 (Router) │
|
|
│ 59.14.158.123 │
|
|
│ │
|
|
│ 포트포워딩: │
|
|
│ 80,443 → :201 │
|
|
│ 81 → :201 │
|
|
│ 203 → :203:22 │
|
|
└────────┬─────────┘
|
|
│
|
|
┌────────────────────────┼────────────────────────┐
|
|
│ │ │
|
|
┌────────▼────────┐ ┌────────▼────────┐ ┌────────▼────────┐
|
|
│ Server1 │ │ Server2 │ │ Server3 │
|
|
│ 192.168.0.201 │ │ 192.168.0.202 │ │ 192.168.0.203 │
|
|
│ │ │ │ │ │
|
|
│ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────┐ │
|
|
│ │ NPM │ │ │ │ MongolCar │ │ │ │ Grantech │ │
|
|
│ │ :80/443 │──┼──────┼──│ :3000 │ │ │ │ :3001 │ │
|
|
│ └───────────┘ │ │ └───────────┘ │ │ ├───────────┤ │
|
|
│ │ │ │ │ │ FastAPI │ │
|
|
│ ┌───────────┐ │ │ │ │ │ :8001 │ │
|
|
│ │ PostgreSQL│ │ │ │ │ ├───────────┤ │
|
|
│ │ :5432 │ │ │ │ │ │ Nextcloud │ │
|
|
│ └───────────┘ │ │ │ │ │ :8080 │ │
|
|
│ │ │ │ │ ├───────────┤ │
|
|
│ ┌───────────┐ │ │ │ │ │ Samba │ │
|
|
│ │ Redis │ │ │ │ │ │ :445 │ │
|
|
│ │ :6379 │ │ │ │ │ └───────────┘ │
|
|
│ └───────────┘ │ │ │ │ │
|
|
└─────────────────┘ └─────────────────┘ │ ┌───────────┐ │
|
|
│ │ 10TB HDD │ │
|
|
│ │ /data │ │
|
|
│ └───────────┘ │
|
|
└─────────────────┘
|
|
|
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
│ 데이터 접근 경로 │
|
|
└─────────────────────────────────────────────────────────────────────────────┘
|
|
|
|
┌──────────────┐ ┌──────────────────────┐
|
|
│ 내부 사용자 │──── SMB (445) ────────────────────▶│ │
|
|
│ (사무실) │ \\192.168.0.203\share │ │
|
|
│ │ X: 드라이브 (공유) │ /data (10TB) │
|
|
│ │ Y: 드라이브 (개인) │ ├── /share │
|
|
└──────────────┘ │ │ (공유 폴더) │
|
|
│ │ │
|
|
┌──────────────┐ │ └── /damon │
|
|
│ 외부 사용자 │──── HTTPS (443) ──────────────────▶│ (개인 폴더) │
|
|
│ (외부) │ cloud.grantech.kr │ │
|
|
│ │ Nextcloud 웹 인터페이스 └──────────────────────┘
|
|
└──────────────┘
|
|
```
|
|
|
|
### 접근 방식별 특징
|
|
|
|
| 구분 | Samba (SMB) | Nextcloud |
|
|
|------|-------------|-----------|
|
|
| 접근 방식 | Windows 탐색기 | 웹 브라우저 / 앱 |
|
|
| 네트워크 | 내부망 전용 | 외부망 가능 |
|
|
| 속도 | 매우 빠름 (LAN) | 상대적으로 느림 |
|
|
| 보안 | 내부망 보호 | HTTPS 암호화 |
|
|
| 동기화 | 없음 (직접 접근) | 자동 동기화 가능 |
|
|
| 모바일 | 불가 | iOS/Android 앱 |
|
|
|
|
---
|
|
|
|
## 기술 스택
|
|
|
|
### 운영체제 및 기반
|
|
|
|
| 구성요소 | 버전 | 설명 |
|
|
|----------|------|------|
|
|
| Ubuntu Server | 22.04.5 LTS | 장기 지원 버전 (2027년까지) |
|
|
| Linux Kernel | 5.15.x | HWE (Hardware Enablement) |
|
|
| Docker | 27.x | 컨테이너 런타임 |
|
|
| Docker Compose | 2.x | 멀티 컨테이너 관리 |
|
|
|
|
### 파일 시스템
|
|
|
|
| 구성요소 | 선택 | 이유 |
|
|
|----------|------|------|
|
|
| 파일시스템 | XFS | 대용량 파일/디스크 최적화, 빠른 I/O |
|
|
| 마운트 옵션 | defaults | 일반적인 사용 패턴 |
|
|
| 백업 우선순위 | 0 | 덤프 사용 안함 |
|
|
| fsck 순서 | 2 | 루트 이후 검사 |
|
|
|
|
#### XFS vs ext4 비교
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ 파일시스템 비교 │
|
|
├─────────────────┬─────────────────┬─────────────────────────────┤
|
|
│ 항목 │ XFS │ ext4 │
|
|
├─────────────────┼─────────────────┼─────────────────────────────┤
|
|
│ 최대 파일 크기 │ 8 EB │ 16 TB │
|
|
│ 최대 볼륨 크기 │ 8 EB │ 1 EB │
|
|
│ 대용량 파일 I/O │ 우수 │ 보통 │
|
|
│ 작은 파일 처리 │ 보통 │ 우수 │
|
|
│ 온라인 확장 │ 지원 │ 지원 │
|
|
│ 온라인 축소 │ 미지원 │ 지원 │
|
|
│ 메타데이터 저널 │ 지원 │ 지원 │
|
|
│ 엔터프라이즈 │ 권장 │ 일반용 │
|
|
└─────────────────┴─────────────────┴─────────────────────────────┘
|
|
|
|
선택: XFS - 10TB 대용량 디스크에 적합, 엔터프라이즈 환경 표준
|
|
```
|
|
|
|
### 파일 공유
|
|
|
|
| 구성요소 | 버전 | 역할 |
|
|
|----------|------|------|
|
|
| Samba | 4.15.x | SMB/CIFS 파일 공유 |
|
|
| Nextcloud | Latest | 웹 기반 클라우드 스토리지 |
|
|
| MariaDB | 10.6 | Nextcloud 데이터베이스 |
|
|
|
|
### 네트워크 서비스
|
|
|
|
| 구성요소 | 포트 | 역할 |
|
|
|----------|------|------|
|
|
| SMB | 445 | Windows 파일 공유 |
|
|
| HTTP | 8080 | Nextcloud 내부 포트 |
|
|
| HTTPS | 443 | NPM 리버스 프록시 |
|
|
|
|
---
|
|
|
|
## 하드웨어 구성
|
|
|
|
### 서버 사양
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ Server3 하드웨어 │
|
|
├─────────────────┬───────────────────────────────────────────────┤
|
|
│ CPU │ (기존 사양) │
|
|
│ RAM │ (기존 사양) │
|
|
│ 시스템 디스크 │ /dev/nvme0n1 또는 /dev/sdb (기존) │
|
|
│ 데이터 디스크 │ /dev/sda - 10TB HDD │
|
|
│ 네트워크 │ 1Gbps Ethernet │
|
|
│ IP 주소 │ 192.168.0.203 (고정) │
|
|
└─────────────────┴───────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 스토리지 레이아웃
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ 디스크 레이아웃 │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
|
|
/dev/sda (10TB HDD)
|
|
│
|
|
└── /dev/sda1 (전체 용량)
|
|
│
|
|
└── 마운트: /data
|
|
│
|
|
├── /data/share ← 공유 폴더 (모든 사용자)
|
|
│ ├── 문서/
|
|
│ ├── 프로젝트/
|
|
│ └── 백업/
|
|
│
|
|
└── /data/damon ← 개인 폴더 (damon 전용)
|
|
├── 개인문서/
|
|
└── 설정백업/
|
|
```
|
|
|
|
---
|
|
|
|
## 디스크 설정
|
|
|
|
### 1. 디스크 확인
|
|
|
|
```bash
|
|
# 연결된 디스크 확인
|
|
lsblk
|
|
|
|
# 출력 예시:
|
|
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
|
|
# sda 8:0 0 9.1T 0 disk
|
|
# ├─sda1 8:1 0 9.1T 0 part
|
|
# sdb 8:16 0 465.8G 0 disk
|
|
# └─sdb1 8:17 0 465.8G 0 part /
|
|
|
|
# 디스크 상세 정보
|
|
sudo fdisk -l /dev/sda
|
|
```
|
|
|
|
### 2. 파티션 생성
|
|
|
|
```bash
|
|
# GPT 파티션 테이블 생성 (2TB 이상 필수)
|
|
sudo parted /dev/sda mklabel gpt
|
|
|
|
# 전체 디스크를 하나의 파티션으로
|
|
sudo parted /dev/sda mkpart primary 0% 100%
|
|
|
|
# 파티션 확인
|
|
sudo parted /dev/sda print
|
|
|
|
# 출력:
|
|
# Model: ATA ST10000VN0008 (scsi)
|
|
# Disk /dev/sda: 10.0TB
|
|
# Sector size (logical/physical): 512B/4096B
|
|
# Partition Table: gpt
|
|
#
|
|
# Number Start End Size File system Name Flags
|
|
# 1 1049kB 10.0TB 10.0TB primary
|
|
```
|
|
|
|
### 3. XFS 파일시스템 생성
|
|
|
|
```bash
|
|
# XFS 포맷
|
|
sudo mkfs.xfs /dev/sda1
|
|
|
|
# 출력:
|
|
# meta-data=/dev/sda1 isize=512 agcount=10, agsize=268435455 blks
|
|
# = sectsz=4096 attr=2, projid32bit=1
|
|
# = crc=1 finobt=1, sparse=1, rmapbt=0
|
|
# = reflink=1 bigtime=0 inobtcount=0
|
|
# data = bsize=4096 blocks=2441609211, imaxpct=5
|
|
# = sunit=0 swidth=0 blks
|
|
# naming =version 2 bsize=4096 ascii-ci=0, ftype=1
|
|
# log =internal log bsize=4096 blocks=521728, version=2
|
|
# = sectsz=4096 sunit=1 blks, lazy-count=1
|
|
# realtime =none extsz=4096 blocks=0, rtextents=0
|
|
```
|
|
|
|
### 4. 마운트 포인트 생성 및 마운트
|
|
|
|
```bash
|
|
# 마운트 디렉토리 생성
|
|
sudo mkdir -p /data
|
|
|
|
# 수동 마운트 (테스트)
|
|
sudo mount /dev/sda1 /data
|
|
|
|
# 마운트 확인
|
|
df -h /data
|
|
|
|
# 출력:
|
|
# Filesystem Size Used Avail Use% Mounted on
|
|
# /dev/sda1 9.1T 68G 9.1T 1% /data
|
|
```
|
|
|
|
### 5. 자동 마운트 설정 (fstab)
|
|
|
|
```bash
|
|
# UUID 확인
|
|
sudo blkid /dev/sda1
|
|
|
|
# 출력:
|
|
# /dev/sda1: UUID="998ba6f8-57ee-402c-97a7-6f11f998dd7f" TYPE="xfs" ...
|
|
|
|
# fstab 편집
|
|
sudo nano /etc/fstab
|
|
|
|
# 추가할 라인:
|
|
UUID=998ba6f8-57ee-402c-97a7-6f11f998dd7f /data xfs defaults 0 2
|
|
|
|
# fstab 검증
|
|
sudo mount -a
|
|
|
|
# 재부팅 후에도 마운트 유지됨
|
|
```
|
|
|
|
### 6. 디렉토리 구조 생성
|
|
|
|
```bash
|
|
# 공유 폴더 생성
|
|
sudo mkdir -p /data/share
|
|
sudo mkdir -p /data/damon
|
|
|
|
# 권한 설정
|
|
sudo chown damon:damon /data/share
|
|
sudo chown damon:damon /data/damon
|
|
sudo chmod 775 /data/share
|
|
sudo chmod 700 /data/damon
|
|
```
|
|
|
|
---
|
|
|
|
## Samba 파일 서버
|
|
|
|
### 1. Samba 설치
|
|
|
|
```bash
|
|
# 패키지 설치
|
|
sudo apt update
|
|
sudo apt install -y samba samba-common-bin
|
|
|
|
# 서비스 상태 확인
|
|
sudo systemctl status smbd
|
|
sudo systemctl status nmbd
|
|
```
|
|
|
|
### 2. 사용자 생성
|
|
|
|
```bash
|
|
# 시스템 사용자 생성 (이미 있으면 생략)
|
|
sudo adduser grantech_YWJ
|
|
|
|
# Samba 사용자 등록 (비밀번호 설정)
|
|
sudo smbpasswd -a damon
|
|
# Password: (입력)
|
|
|
|
sudo smbpasswd -a grantech_YWJ
|
|
# Password: 8561
|
|
|
|
# 사용자 활성화
|
|
sudo smbpasswd -e damon
|
|
sudo smbpasswd -e grantech_YWJ
|
|
```
|
|
|
|
### 3. Samba 설정
|
|
|
|
```bash
|
|
sudo nano /etc/samba/smb.conf
|
|
```
|
|
|
|
#### 전체 설정 파일
|
|
|
|
```ini
|
|
# /etc/samba/smb.conf
|
|
# Samba 설정 파일 - Grantech 파일 서버
|
|
|
|
#======================= Global Settings =======================
|
|
[global]
|
|
workgroup = WORKGROUP
|
|
server string = Grantech File Server
|
|
|
|
# 보안 설정
|
|
security = user
|
|
map to guest = never
|
|
|
|
# 로깅
|
|
log file = /var/log/samba/log.%m
|
|
max log size = 1000
|
|
logging = file
|
|
panic action = /usr/share/samba/panic-action %d
|
|
|
|
# 인증
|
|
server role = standalone server
|
|
obey pam restrictions = yes
|
|
unix password sync = yes
|
|
passwd program = /usr/bin/passwd %u
|
|
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
|
|
pam password change = yes
|
|
|
|
# 성능 최적화
|
|
socket options = TCP_NODELAY IPTOS_LOWDELAY
|
|
read raw = yes
|
|
write raw = yes
|
|
|
|
# 문자셋 (한글 지원)
|
|
unix charset = UTF-8
|
|
dos charset = CP949
|
|
|
|
#======================= Share Definitions =======================
|
|
|
|
# 공유 폴더 - 모든 등록 사용자 접근 가능
|
|
[share]
|
|
comment = Grantech Shared Drive
|
|
path = /data/share
|
|
browseable = yes
|
|
read only = no
|
|
writable = yes
|
|
valid users = damon, grantech_YWJ
|
|
create mask = 0664
|
|
directory mask = 0775
|
|
force group = damon
|
|
|
|
# 개인 폴더 - damon 전용 (검색 불가)
|
|
[damon]
|
|
comment = Damon Private Storage
|
|
path = /data/damon
|
|
browseable = no
|
|
read only = no
|
|
writable = yes
|
|
valid users = damon
|
|
create mask = 0600
|
|
directory mask = 0700
|
|
```
|
|
|
|
### 4. 설정 검증 및 서비스 재시작
|
|
|
|
```bash
|
|
# 설정 문법 검사
|
|
testparm
|
|
|
|
# 출력:
|
|
# Load smb config files from /etc/samba/smb.conf
|
|
# Loaded services file OK.
|
|
# ...
|
|
|
|
# 서비스 재시작
|
|
sudo systemctl restart smbd nmbd
|
|
|
|
# 부팅 시 자동 시작 설정
|
|
sudo systemctl enable smbd nmbd
|
|
```
|
|
|
|
### 5. 방화벽 설정
|
|
|
|
```bash
|
|
# UFW가 활성화된 경우
|
|
sudo ufw allow samba
|
|
|
|
# 또는 개별 포트
|
|
sudo ufw allow 139/tcp
|
|
sudo ufw allow 445/tcp
|
|
sudo ufw allow 137/udp
|
|
sudo ufw allow 138/udp
|
|
```
|
|
|
|
### 6. Windows 클라이언트 연결
|
|
|
|
#### 네트워크 드라이브 매핑
|
|
|
|
```
|
|
X: 드라이브 (공유)
|
|
경로: \\192.168.0.203\share
|
|
사용자: damon 또는 grantech_YWJ
|
|
|
|
Y: 드라이브 (개인)
|
|
경로: \\192.168.0.203\damon
|
|
사용자: damon
|
|
```
|
|
|
|
#### PowerShell 명령어
|
|
|
|
```powershell
|
|
# 공유 드라이브 연결
|
|
net use X: \\192.168.0.203\share /user:damon /persistent:yes
|
|
|
|
# 개인 드라이브 연결
|
|
net use Y: \\192.168.0.203\damon /user:damon /persistent:yes
|
|
|
|
# 연결 확인
|
|
net use
|
|
```
|
|
|
|
---
|
|
|
|
## Nextcloud 클라우드
|
|
|
|
### 1. Docker Compose 설정
|
|
|
|
```bash
|
|
# 디렉토리 생성
|
|
mkdir -p ~/nextcloud
|
|
cd ~/nextcloud
|
|
```
|
|
|
|
#### docker-compose.yml
|
|
|
|
```yaml
|
|
# ~/nextcloud/docker-compose.yml
|
|
version: '3'
|
|
|
|
services:
|
|
# Nextcloud 애플리케이션
|
|
nextcloud:
|
|
image: nextcloud:latest
|
|
container_name: nextcloud
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8080:80"
|
|
volumes:
|
|
# Nextcloud 데이터
|
|
- ./data:/var/www/html
|
|
# 외부 스토리지 마운트 (Samba 공유 폴더 연동)
|
|
- /data/share:/external/share
|
|
- /data/damon:/external/damon
|
|
environment:
|
|
- MYSQL_HOST=db
|
|
- MYSQL_DATABASE=nextcloud
|
|
- MYSQL_USER=nextcloud
|
|
- MYSQL_PASSWORD=nextcloud123
|
|
depends_on:
|
|
- db
|
|
networks:
|
|
- nextcloud-net
|
|
|
|
# MariaDB 데이터베이스
|
|
db:
|
|
image: mariadb:10.6
|
|
container_name: nextcloud-db
|
|
restart: unless-stopped
|
|
environment:
|
|
- MYSQL_ROOT_PASSWORD=rootpass123
|
|
- MYSQL_DATABASE=nextcloud
|
|
- MYSQL_USER=nextcloud
|
|
- MYSQL_PASSWORD=nextcloud123
|
|
volumes:
|
|
- ./db:/var/lib/mysql
|
|
networks:
|
|
- nextcloud-net
|
|
|
|
networks:
|
|
nextcloud-net:
|
|
driver: bridge
|
|
```
|
|
|
|
### 2. Nextcloud 시작
|
|
|
|
```bash
|
|
# 컨테이너 시작
|
|
cd ~/nextcloud
|
|
docker compose up -d
|
|
|
|
# 상태 확인
|
|
docker compose ps
|
|
|
|
# 출력:
|
|
# NAME IMAGE STATUS PORTS
|
|
# nextcloud nextcloud:latest Up 2 hours 0.0.0.0:8080->80/tcp
|
|
# nextcloud-db mariadb:10.6 Up 2 hours 3306/tcp
|
|
|
|
# 로그 확인
|
|
docker compose logs -f nextcloud
|
|
```
|
|
|
|
### 3. 초기 설정
|
|
|
|
1. 브라우저에서 `http://192.168.0.203:8080` 접속
|
|
2. 관리자 계정 생성
|
|
- Username: admin
|
|
- Password: (안전한 비밀번호)
|
|
3. 데이터베이스 설정 (자동 감지됨)
|
|
|
|
### 4. 외부 스토리지 연동
|
|
|
|
Nextcloud 관리자 → 앱 → External storage support 활성화
|
|
|
|
외부 스토리지 설정:
|
|
```
|
|
폴더명: 공유 폴더
|
|
외부 스토리지: 로컬
|
|
설정: /external/share
|
|
적용 대상: 모든 사용자
|
|
|
|
폴더명: 개인 폴더
|
|
외부 스토리지: 로컬
|
|
설정: /external/damon
|
|
적용 대상: admin
|
|
```
|
|
|
|
### 5. 설치된 앱
|
|
|
|
| 앱 | 용도 |
|
|
|----|------|
|
|
| Calendar | 일정 관리, CalDAV 동기화 |
|
|
| Contacts | 연락처 관리, CardDAV 동기화 |
|
|
| Notes | 메모/노트 작성 |
|
|
|
|
---
|
|
|
|
## NPM 프록시 설정
|
|
|
|
### Server1 (192.168.0.201) NPM 설정
|
|
|
|
#### cloud.grantech.kr 프록시 호스트
|
|
|
|
```
|
|
Domain Names: cloud.grantech.kr
|
|
Scheme: http
|
|
Forward Hostname/IP: 192.168.0.203
|
|
Forward Port: 8080
|
|
Websockets Support: ON
|
|
Block Common Exploits: ON
|
|
|
|
SSL:
|
|
- SSL Certificate: Let's Encrypt
|
|
- Force SSL: ON
|
|
- HTTP/2 Support: ON
|
|
```
|
|
|
|
### DNS 설정 (dotname.co.kr)
|
|
|
|
```
|
|
Type: A
|
|
Host: cloud
|
|
Value: 59.14.158.123
|
|
TTL: 3600
|
|
```
|
|
|
|
### 접속 URL
|
|
|
|
- 내부: http://192.168.0.203:8080
|
|
- 외부: https://cloud.grantech.kr
|
|
|
|
---
|
|
|
|
## 보안 설정
|
|
|
|
### 접근 제어
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ 보안 계층 구조 │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
|
|
[인터넷]
|
|
│
|
|
▼
|
|
┌──────────────────┐
|
|
│ 공유기 방화벽 │ ← 포트포워딩으로 제한된 포트만 허용
|
|
│ (NAT) │ 80, 443, 81, 201-203
|
|
└────────┬─────────┘
|
|
│
|
|
▼
|
|
┌──────────────────┐
|
|
│ NPM (HTTPS) │ ← SSL/TLS 암호화
|
|
│ Let's Encrypt │ 도메인 기반 라우팅
|
|
└────────┬─────────┘
|
|
│
|
|
▼
|
|
┌──────────────────┐
|
|
│ Docker Network │ ← 컨테이너 격리
|
|
│ │
|
|
└────────┬─────────┘
|
|
│
|
|
▼
|
|
┌──────────────────┐
|
|
│ Nextcloud Auth │ ← 사용자 인증
|
|
│ │ 2FA 가능
|
|
└──────────────────┘
|
|
|
|
[내부망만]
|
|
│
|
|
▼
|
|
┌──────────────────┐
|
|
│ Samba (SMB) │ ← 내부망만 접근 가능
|
|
│ 사용자 인증 │ 사용자별 권한 분리
|
|
└──────────────────┘
|
|
```
|
|
|
|
### 사용자 권한
|
|
|
|
| 사용자 | Samba share | Samba damon | Nextcloud |
|
|
|--------|-------------|-------------|-----------|
|
|
| damon | ✅ 읽기/쓰기 | ✅ 읽기/쓰기 | ✅ 전체 |
|
|
| grantech_YWJ | ✅ 읽기/쓰기 | ❌ 접근불가 | ⚠️ 제한적 |
|
|
|
|
### 파일 권한
|
|
|
|
```bash
|
|
# /data/share - 공유 폴더
|
|
drwxrwxr-x damon damon /data/share
|
|
# 새 파일: 0664 (rw-rw-r--)
|
|
# 새 디렉토리: 0775 (rwxrwxr-x)
|
|
|
|
# /data/damon - 개인 폴더
|
|
drwx------ damon damon /data/damon
|
|
# 새 파일: 0600 (rw-------)
|
|
# 새 디렉토리: 0700 (rwx------)
|
|
```
|
|
|
|
---
|
|
|
|
## 문제 해결
|
|
|
|
### Samba 연결 문제
|
|
|
|
#### 증상: "네트워크 경로를 찾을 수 없습니다"
|
|
|
|
```bash
|
|
# 서버에서 확인
|
|
sudo systemctl status smbd
|
|
|
|
# 포트 확인
|
|
sudo netstat -tlnp | grep 445
|
|
|
|
# Windows에서 테스트
|
|
ping 192.168.0.203
|
|
```
|
|
|
|
#### 증상: "로그온 실패"
|
|
|
|
```bash
|
|
# Samba 사용자 확인
|
|
sudo pdbedit -L
|
|
|
|
# 비밀번호 재설정
|
|
sudo smbpasswd -a username
|
|
```
|
|
|
|
#### 증상: "권한이 없습니다"
|
|
|
|
```bash
|
|
# 디렉토리 권한 확인
|
|
ls -la /data/share
|
|
|
|
# 권한 수정
|
|
sudo chmod 775 /data/share
|
|
sudo chown damon:damon /data/share
|
|
```
|
|
|
|
### Nextcloud 문제
|
|
|
|
#### 증상: 502 Bad Gateway
|
|
|
|
```bash
|
|
# 컨테이너 상태 확인
|
|
docker compose ps
|
|
|
|
# 컨테이너 재시작
|
|
docker compose restart nextcloud
|
|
```
|
|
|
|
#### 증상: 외부 스토리지 접근 불가
|
|
|
|
```bash
|
|
# 컨테이너 내부 권한 확인
|
|
docker exec nextcloud ls -la /external/
|
|
|
|
# 권한 수정 (호스트에서)
|
|
sudo chmod 755 /data/share
|
|
```
|
|
|
|
### 로그 확인
|
|
|
|
```bash
|
|
# Samba 로그
|
|
sudo tail -f /var/log/samba/log.smbd
|
|
|
|
# Nextcloud 로그
|
|
docker compose logs -f nextcloud
|
|
|
|
# 시스템 로그
|
|
sudo journalctl -u smbd -f
|
|
```
|
|
|
|
---
|
|
|
|
## 유지보수
|
|
|
|
### 일일 점검
|
|
|
|
```bash
|
|
# 디스크 사용량
|
|
df -h /data
|
|
|
|
# 서비스 상태
|
|
sudo systemctl status smbd
|
|
docker compose ps
|
|
|
|
# 현재 Samba 연결
|
|
sudo smbstatus
|
|
```
|
|
|
|
### 백업 전략
|
|
|
|
```bash
|
|
# 중요 설정 파일 백업
|
|
sudo cp /etc/samba/smb.conf /data/share/backup/
|
|
sudo cp /etc/fstab /data/share/backup/
|
|
cp ~/nextcloud/docker-compose.yml /data/share/backup/
|
|
|
|
# Nextcloud 데이터베이스 백업
|
|
docker exec nextcloud-db mysqldump -u nextcloud -pnextcloud123 nextcloud > backup.sql
|
|
```
|
|
|
|
### 업데이트
|
|
|
|
```bash
|
|
# Samba 업데이트
|
|
sudo apt update && sudo apt upgrade samba
|
|
|
|
# Nextcloud 업데이트
|
|
cd ~/nextcloud
|
|
docker compose pull
|
|
docker compose up -d
|
|
```
|
|
|
|
---
|
|
|
|
## 부록: 명령어 요약
|
|
|
|
### 서비스 관리
|
|
|
|
```bash
|
|
# Samba
|
|
sudo systemctl start|stop|restart|status smbd
|
|
sudo systemctl enable smbd
|
|
|
|
# Docker (Nextcloud)
|
|
docker compose up -d
|
|
docker compose down
|
|
docker compose restart
|
|
docker compose logs -f
|
|
```
|
|
|
|
### 사용자 관리
|
|
|
|
```bash
|
|
# Samba 사용자 추가
|
|
sudo smbpasswd -a username
|
|
|
|
# Samba 사용자 삭제
|
|
sudo smbpasswd -x username
|
|
|
|
# Samba 사용자 목록
|
|
sudo pdbedit -L
|
|
```
|
|
|
|
### 디스크 관리
|
|
|
|
```bash
|
|
# 용량 확인
|
|
df -h /data
|
|
|
|
# 디렉토리별 용량
|
|
du -sh /data/*
|
|
|
|
# inode 확인
|
|
df -i /data
|
|
```
|
|
|
|
---
|
|
|
|
## 변경 이력
|
|
|
|
| 날짜 | 변경 내용 | 작업자 |
|
|
|------|-----------|--------|
|
|
| 2025-12-05 | 초기 구축 및 문서 작성 | Claude |
|
|
|
|
---
|
|
|
|
*문서 작성일: 2025-12-05*
|