집에 구축한 Proxmox 기반 미니PC 서버에 ISO 파일 백업용 NAS가 필요해져서 간단한 파일 서버를 구성하기로 했다.
웹 UI 기반이며 인증/권한 관리가 가능한 copyparty를 선택했고, 외부에서도 접속할 수 있도록 Cloudflare Tunnel을 이용해 임시 URL을 자동 발급 받도록 설정하였다.
Gmail SMTP를 이용해 URL을 메일로 전달하는 자동화까지 완료하였다.
1. LXC 템플릿 다운로드 및 컨테이너 생성
Proxmox의 LXC 템플릿 다운로드 화면에서 rockylinux-9-default 이미지를 선택하고 다운로드한다.

그 다음, Proxmox 웹 UI에서 "Create CT" 버튼을 눌러 컨테이너를 생성한다. 이때 hostname, root password, 네트워크 설정 등을 입력한다.

2. Copyparty 설치 및 설정
컨테이너 안에서 copyparty를 pip로 설치한다
pip3 install --user copyparty
설정 파일 /root/copyparty.conf에 다음 내용을 작성한다
[accounts]
admin: <password> # 전체 권한
guest: <password> # 읽기 전용
[/] # 루트 URL로 접근
/home/copyparty/data # 공유 디렉토리
accs:
A: admin # admin은 전체 권한
r: guest # guest는 읽기만 가능
[accounts]: 사용자 계정과 비밀번호를 설정함admin: 모든 파일 업로드, 삭제 등 전체 권한guest: 파일 다운로드만 가능한 읽기 전용 권한
[/]: 웹에서 접근할 수 있는 루트 경로 설정/home/copyparty/data: 실제 서버에서 공유하고자 하는 디렉토리 위치accs아래의A,r은 각각 쓰기/읽기 권한 부여를 의미함
copyparty를 실행해 정상적으로 동작하는지 확인한다 ( <copyparty 서버 IP>:3923 접속 )
/root/.local/bin/copyparty -c /root/copyparty.conf --xff-hdr cf-connecting-ip
--xff-hdr cf-connecting-ip: Cloudflare 터널을 통해 들어오는 외부 접속자의 실제 IP 주소를 확인하기 위한 설정

3. cloudflared 설치 및 Cloudflare Tunnel 구성
cloudflared 바이너리를 다운로드하고 /usr/local/bin에 설치한다. 그 다음 copyparty에 대한 터널을 생성한다
# cloudflared 바이너리 다운로드
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared
# 실행 권한 부여
chmod +x cloudflared
# /usr/local/bin으로 이동
mv cloudflared /usr/local/bin/cloudflared
# 설치 확인
cloudflared --version
cloudflared tunnel --url http://127.0.0.1:3923 --logfile /var/log/cloudflared.log
터널이 열리면 로그에 임시 URL이 생성된다

4. Gmail SMTP(msmtp) 설정
파일서버가 외부 URL을 발급받았을 때 이를 이메일로 자동 전송하기 위해 msmtp를 사용한다.
msmtp 설치
dnf install -y msmtp
~/.msmtprc 설정
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-bundle.crt
logfile /var/log/msmtp.log
account gmail
host smtp.gmail.com
port 587
from <이메일>@gmail.com
user <이메일>@gmail.com
password <앱 비밀번호>
account default : gmail
🔐 Gmail 앱 비밀번호는 myaccount.google.com/apppasswords에서 2단계 인증을 설정한 후 발급받아야 한다.
5. 터널 URL 자동 추출 및 메일 전송
터널이 열리면 로그에서 URL을 추출해 파일에 저장하고, 이 URL을 Gmail SMTP를 통해 메일로 전송하도록 다음 스크립트를 작성한다.
① URL 추출 스크립트 /usr/local/bin/save-cloudflared-url.sh
#!/bin/bash
LOG_FILE="/var/log/cloudflared.log"
OUT_FILE="/var/log/cloudflared-url.txt"
URL=""
# 최대 10초 동안 URL이 로그에 찍히기를 기다림
for i in {1..10}; do
URL=$(grep -oP 'https://[a-z0-9-]+\.trycloudflare\.com' "$LOG_FILE" | tail -1)
if [[ -n "$URL" ]]; then
break
fi
sleep 1
done
if [[ -n "$URL" ]]; then
echo "$URL" > "$OUT_FILE"
else
echo "[❌ URL not found]" > "$OUT_FILE"
fi
② 메일 전송 스크립트 /usr/local/bin/send-url.sh
#!/bin/bash
TO="<이메일>@gmail.com" # 수신자 이메일
SUBJECT="🔗 Copyparty Tunnel URL"
BODY_FILE="/var/log/cloudflared-url.txt"
BODY=$(cat "$BODY_FILE")
/usr/bin/msmtp "$TO" <<EOF
Subject: $SUBJECT
From: Copyparty NAS <<이메일>@gmail.com>
To: $TO
Content-Type: text/plain; charset=UTF-8
안녕하세요,
Copyparty 서버가 실행되었습니다.
아래는 외부 접속 주소입니다:
$BODY
- 이 메일은 시스템에 의해 자동 발송되었습니다.
EOF

6. Systemd 서비스 등록
① Copyparty 서비스 파일 /etc/systemd/system/copyparty.service
[Unit]
Description=Copyparty File Server
After=network.target
[Service]
User=root
ExecStart=/root/.local/bin/copyparty -c /root/copyparty.conf --xff-hdr cf-connecting-ip
Restart=always
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:/root/.local/bin
[Install]
WantedBy=multi-user.target
② Cloudflared 서비스 파일 /etc/systemd/system/cloudflared.service
[Unit]
Description=Cloudflare Tunnel (Quick URL)
After=network-online.target
Wants=network-online.target
Requires=copyparty.service
[Service]
ExecStartPre=/usr/bin/truncate -s 0 /var/log/cloudflared.log
ExecStart=/usr/local/bin/cloudflared tunnel --url http://127.0.0.1:3923 --logfile /var/log/cloudflared.log
ExecStartPost=/usr/local/bin/save-cloudflared-url.sh
ExecStartPost=/usr/local/bin/send-url.sh
Restart=always
User=root
[Install]
WantedBy=multi-user.target
서비스 실행 및 상태 확인
systemctl enable copyparty --now
systemctl enable cloudflared --now
systemctl status copyparty
systemctl status cloudflared



이로써 NAS처럼 동작하는 웹 기반 파일서버가 간단하게 구축되었다.
Cloudflare를 통해 생성된 임시 URL을 통해 외부에서도 접근 가능하며, 필요시 SSH 포트포워딩 없이 메일로 자동 전달받을 수 있는 구조로 구성하였다.
향후 계획
최근 집 전원이 불규칙하게 차단되는 문제가 발생하고 있으며, 특히 미니PC는 BIOS 설정에 자동부팅 기능이 없어 문제가 크다.
이를 해결하기 위해 라즈베리파이를 활용한 임시 HA 구성을 계획하고 있다. 구체적으로는 다음과 같다.
- 전력 차단 시에도 최소한의 가용성을 유지하기 위해 라즈베리파이에 Proxmox를 구성하고,
기존 미니PC Proxmox와 연동하여 corosync 기반 quorum 클러스터를 구성할 예정이다. - 이를 통해 미니PC의 전원이 꺼졌을 경우, 클러스터 quorum을 감지하고 라즈베리파이가 일시적으로 NAS 역할을 대신 수행할 수 있도록 구성하고자 한다.
- 클러스터 구성 시 중요한 VM만 복제 또는 스냅샷 형태로 유지하며, 감시 및 failover 시 복구 가능한 최소한의 환경만 넘기는 방식을 고려 중이다.
- 이를 위해 라즈베리파이 전용 SSD를 별도로 주문하였으며, 성능 테스트 및 연동 구성은 추후 진행할 예정이다.
- 다만, 라즈베리파이의 성능이 일시적인 VM 운영을 감당할 수 있을지는 아직 확실하지 않다.