외장 SSD 마운트

집에 1TB SSD가 남아있어서 홈서버 스토리지로 활용하기로 했다. 기존에 Windows에서 쓰던 드라이브라 NTFS 포맷이다.

디스크 확인

lsblk

어떤 디바이스명으로 잡혔는지 확인한다.

lsblk 결과

파티션 포맷 확인:

sudo blkid /dev/nvme1n1p2

NTFS로 확인됐으니 마운트를 진행한다.

마운트

sudo apt install ntfs-3g -y
sudo mkdir /mnt/data
sudo mount /dev/nvme1n1p2 /mnt/data

마운트 결과

마운트 후 확인해보니 Could not mount read-write, trying read-only 메시지가 떴다. 읽기 전용으로 마운트된 것이다. Windows에서 쓰던 드라이브라 더티 플래그가 남아있어서 발생하는 문제다.

읽기/쓰기 가능하도록 재마운트

sudo umount /mnt/data
sudo ntfsfix /dev/nvme1n1p2
sudo mount /dev/nvme1n1p2 /mnt/data

ntfsfix로 더티 플래그를 제거하고 다시 마운트하면 읽기/쓰기가 모두 가능해진다.

심볼릭 링크 생성

홈 디렉토리에서 편하게 접근하기 위해 심볼릭 링크를 만들어둔다.

ln -s /mnt/data ~/data

Samba 설정

파일 탐색기에서 네트워크 드라이브처럼 접근하고 싶다면 Samba를 설치하면 된다.

sudo apt install samba -y

Samba 사용자 등록:

sudo smbpasswd -a your-username

Samba 사용자 등록

설정 파일에 공유 디렉토리 추가:

sudo vi /etc/samba/smb.conf

파일 맨 아래에 아래 내용을 추가한다.

[data]
   path = /mnt/data
   browseable = yes
   read only = no
   valid users = your-username

Samba 서비스 재시작:

sudo systemctl restart smbd

이제 Windows 파일 탐색기 주소창에 \\100.64.0.10\data를 입력하면 마운트된 SSD에 접근할 수 있다.

파일 탐색기에서 Samba 접근

다만 이건 파일 탐색기 전용이라 브라우저에서 접근하려면 Filebrowser를 써야 한다.


Docker + Filebrowser 설치

Docker 설치

# Docker 공식 레포 추가
sudo apt install ca-certificates curl gnupg -y
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu noble stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

root가 아닌 일반 계정으로 Docker를 사용하려면:

sudo usermod -aG docker $USER
# 재로그인 후 적용

Filebrowser 실행

docker run -d \
  --name filebrowser \
  --restart always \
  -v /mnt/data:/srv \
  -p 9090:80 \
  filebrowser/filebrowser

/mnt/data를 컨테이너 안의 /srv로 마운트해서 Filebrowser가 SSD 전체를 서빙하도록 했다.

초기 로그인

브라우저에서 http://100.64.0.10:9090 접속. 최신 버전의 Filebrowser는 보안 강화를 위해 최초 실행 시 임의의 일회용 비밀번호를 생성한다.

docker logs filebrowser

컨테이너 로그에 출력된 임시 비밀번호를 확인하여 로그인한 뒤, 관리자 설정(Settings)에서 영구적으로 사용할 강력한 비밀번호로 즉시 재설정해주었다.

Filebrowser 로그인 화면

Filebrowser 접속 성공


OCI Nginx 리버스 프록시 + SSL

VPN 없이도 외부에서 브라우저로 접근하려면 OCI Nginx에 리버스 프록시를 설정해야 한다.

Cloudflare DNS 추가

Cloudflare에서 files.yourdomain.com 서브도메인을 OCI 공인 IP로 추가한다.

Cloudflare DNS 설정

Nginx 설정

OCI 서버에서 /etc/nginx/sites-available/files.yourdomain.com 파일을 생성한다.

처음엔 HTTP만 설정했는데, files.yourdomain.com으로 접속하면 계속 메인 도메인으로 리다이렉트되는 문제가 있었다. SSL 인증서를 안 걸어줘서 생기는 문제였다.

최종 설정:

server {
    listen 80;
    server_name files.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name files.yourdomain.com;

    ssl_certificate     /ssl/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /ssl/live/yourdomain.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://100.64.0.10:9090;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

심볼릭 링크 생성 후 적용:

sudo ln -s /etc/nginx/sites-available/files.yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

proxy_pass에 Tailscale VPN IP를 쓰는 게 핵심이다. OCI와 홈서버가 같은 Tailscale 네트워크 안에 있기 때문에 가능한 구성이다.

Filebrowser 외부 접근 성공

이제 VPN 없이 files.yourdomain.com으로 접속해서 홈서버의 파일을 관리할 수 있다.


정리

  • NTFS 드라이브는 ntfsfix로 더티 플래그 제거 후 마운트해야 읽기/쓰기가 된다
  • Samba는 파일 탐색기 접근용, Filebrowser는 브라우저 접근용
  • OCI Nginx 리버스 프록시 + Tailscale VPN 조합으로 홈서버를 외부에 안전하게 노출할 수 있다

다음 편에서는 Immich를 설치해서 구글 포토를 대체하는 과정을 다룬다.