외장 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.109.108.36\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.109.108.36:9090 접속. 초기 계정은 admin / admin이라고 알려져 있는데 접속이 안 됐다.

docker logs filebrowser

로그를 확인해보니 랜덤으로 생성된 비밀번호가 출력돼 있었다. 그 비밀번호로 접속하면 된다.

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.109.108.36: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를 설치해서 구글 포토를 대체하는 과정을 다룬다.