외장 SSD 마운트
집에 1TB SSD가 남아있어서 홈서버 스토리지로 활용하기로 했다. 기존에 Windows에서 쓰던 드라이브라 NTFS 포맷이다.
디스크 확인
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

설정 파일에 공유 디렉토리 추가:
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에 접근할 수 있다.

다만 이건 파일 탐색기 전용이라 브라우저에서 접근하려면 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
로그를 확인해보니 랜덤으로 생성된 비밀번호가 출력돼 있었다. 그 비밀번호로 접속하면 된다.


OCI Nginx 리버스 프록시 + SSL
VPN 없이도 외부에서 브라우저로 접근하려면 OCI Nginx에 리버스 프록시를 설정해야 한다.
Cloudflare DNS 추가
Cloudflare에서 files.yourdomain.com 서브도메인을 OCI 공인 IP로 추가한다.

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 네트워크 안에 있기 때문에 가능한 구성이다.

이제 VPN 없이 files.yourdomain.com으로 접속해서 홈서버의 파일을 관리할 수 있다.
정리
- NTFS 드라이브는
ntfsfix로 더티 플래그 제거 후 마운트해야 읽기/쓰기가 된다 - Samba는 파일 탐색기 접근용, Filebrowser는 브라우저 접근용
- OCI Nginx 리버스 프록시 + Tailscale VPN 조합으로 홈서버를 외부에 안전하게 노출할 수 있다
다음 편에서는 Immich를 설치해서 구글 포토를 대체하는 과정을 다룬다.