우분투 서버에서 Navidrome 음악 스트리밍 서버 구축 방법
1. 설치 스크립트 만들기
cat <<'EOF' > install-navidrome.sh
#!/usr/bin/env bash
set -euo pipefail
# ── 로그인 사용자 & 홈 (sudo여도 OK / root로 안 틀어지게 고정)
LOGIN_USER="$(logname 2>/dev/null || echo "${SUDO_USER:-$USER}")"
INSTALL_DIR="/home/$LOGIN_USER/navidrome" # 데이터/설정/DB (고정)
MUSIC_DIR="/DATA/MUSIC" # 음악 라이브러리 (고정)
# ── 옵션
ND_SCANSCHEDULE="24h" # inotify 자동스캔이 있으니 하루 1회 백업용
ND_LOGLEVEL="info"
ND_TRANSCODING="true"
ND_CACHE_SIZE="150MB"
ND_SESSION_TTL="24h"
# ── 포트 자동 선택 (4533 → 8080 → 8888 → 8889 → 88890)
choose_port() {
for p in 4533 8080 8888 8889 88890; do
if ! ss -tuln | grep -q ":$p "; then echo $p; return; fi
done
echo "[!] 사용 가능한 포트 없음" >&2; exit 1
}
ND_PORT="$(choose_port)"
echo "────────────────────────────────────────────"
echo "[*] 사용자 : $LOGIN_USER"
echo "[*] 설치 경로 : $INSTALL_DIR"
echo "[*] 음악 경로 : $MUSIC_DIR"
echo "[*] 선택 포트 : $ND_PORT"
echo "────────────────────────────────────────────"
# ── 디렉터리 준비
sudo mkdir -p "$INSTALL_DIR/compose" "$MUSIC_DIR"
sudo chown -R "$LOGIN_USER:$LOGIN_USER" "$INSTALL_DIR" "$MUSIC_DIR"
UID_NUM="$(id -u "$LOGIN_USER")"
GID_NUM="$(id -g "$LOGIN_USER")"
# ── docker-compose.yml 생성
cat > "$INSTALL_DIR/compose/docker-compose.yml" <<YAML
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
user: "${UID_NUM}:${GID_NUM}"
ports:
- "${ND_PORT}:4533"
environment:
ND_MUSICFOLDER: "/music"
ND_DATAFOLDER: "/data"
ND_SCANSCHEDULE: "${ND_SCANSCHEDULE}"
ND_LOGLEVEL: "${ND_LOGLEVEL}"
ND_ENABLETRANSCODING: "${ND_TRANSCODING}"
ND_TRANSCODINGCACHESIZE: "${ND_CACHE_SIZE}"
ND_SESSIONTIMEOUT: "${ND_SESSION_TTL}"
ND_ENABLESHARING: "true"
TZ: "$(cat /etc/timezone 2>/dev/null || echo Asia/Seoul)"
volumes:
- "${MUSIC_DIR}:/music:ro"
- "${INSTALL_DIR}:/data"
restart: unless-stopped
YAML
# ── Navidrome 배포
cd "$INSTALL_DIR/compose"
docker compose pull
docker compose up -d
# ── inotify 설치 및 자동 스캔 서비스
sudo apt-get update -y
sudo apt-get install -y inotify-tools
sudo tee /usr/local/bin/navidrome-auto-scan.sh >/dev/null <<SCRIPT
#!/usr/bin/env bash
set -euo pipefail
WATCH_DIR="$MUSIC_DIR"
LOCK="/run/navidrome-scan.lock"
inotifywait -m -r -e close_write,create,delete,move "\$WATCH_DIR" | while read -r _p _a _f; do
sleep 2
{ flock -n 9 || exit 0; docker exec navidrome navidrome scan || echo "[!] scan failed"; } 9>"\$LOCK"
done
SCRIPT
sudo chmod +x /usr/local/bin/navidrome-auto-scan.sh
sudo tee /etc/systemd/system/navidrome-auto-scan.service >/dev/null <<SERVICE
[Unit]
Description=Navidrome Auto Scan
After=docker.service
Requires=docker.service
[Service]
ExecStart=/usr/local/bin/navidrome-auto-scan.sh
Restart=always
User=root
[Install]
WantedBy=multi-user.target
SERVICE
sudo systemctl daemon-reload
sudo systemctl enable --now navidrome-auto-scan.service
# ── 설치 완료 메시지 (요청하신 포맷 그대로)
IP="$(hostname -I | awk '{print $1}')"
echo
echo "============================================================"
echo " Navidrome 설치 + 자동스캔 설정 완료"
echo " - URL : http://${IP}:${ND_PORT}"
echo " - DATA : ${INSTALL_DIR}"
echo " - MUSIC : ${MUSIC_DIR}"
echo
echo " * 서비스 상태: sudo systemctl status navidrome-auto-scan.service"
echo " * 실시간 로그: journalctl -u navidrome-auto-scan.service -f"
echo " * 즉시 스캔 : docker exec navidrome navidrome scan"
echo "============================================================"
EOF
2. 실행 권한 부여
명령어 1 ▶ chmod +x install-navidrome.sh
3. 실행( 스크립트 자동 실행되어 간단 설치 완료)
명령어 1 ▶ sudo ./install-navidrome.sh ( 암호 입력 후 엔터치면 자동 설치 진행 )
4. 접속 및 동작 확인
1) 컨테이너 상태 확인
명령어 1 ▶ docker ps | grep navidrome
2) 음악 자동 스캔 서비스 상태/로그
명령어 2 ▶ sudo systemctl status navidrome-auto-scan.service
명령어 3 ▶ journalctl -u navidrome-auto-scan.service -f
3) 컨테이너 내부에서 음악 폴더 보이는지 확인
명령어 4 ▶ docker exec -it navidrome ls -l /music
5. 인터넷 브라우저에서 관리페이지 접속- 접속이된다면 설치 완료.
http://서버IP:선택된포트
6. 음악 파일 업로드를 위한 SMB 설정
1) 아래 스크립트 복사 하여 SMB 설정하는 파일 생성
cat <<'EOF' > setup-samba-data-music.sh
#!/usr/bin/env bash
set -euo pipefail
# 로그인 사용자
LOGIN_USER="$(logname 2>/dev/null || echo "${SUDO_USER:-$USER}")"
SHARE_DIR="/DATA/MUSIC"
SHARE_NAME="music"
echo "[*] Samba 공유 설정 시작"
echo " 사용자 : $LOGIN_USER"
echo " 공유 폴더 : $SHARE_DIR"
sudo apt update -y
sudo apt install -y samba samba-common
sudo mkdir -p "$SHARE_DIR"
sudo chown -R "$LOGIN_USER:$LOGIN_USER" "$SHARE_DIR"
sudo chmod -R 775 "$SHARE_DIR"
sudo chmod 755 /DATA
# smb.conf 백업
if [[ ! -f /etc/samba/smb.conf.bak ]]; then
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
fi
# 기존 [music] 제거
sudo awk 'BEGIN{keep=1} /^\[music\]$/ {keep=0; next} /^\[.*\]$/ && keep==0 {keep=1} keep==1 {print}' /etc/samba/smb.conf | sudo tee /etc/samba/smb.conf.tmp >/dev/null
# 새로운 [music] 섹션 추가
sudo tee -a /etc/samba/smb.conf.tmp >/dev/null <<CONFIG
[$SHARE_NAME]
path = $SHARE_DIR
browseable = yes
read only = no
guest ok = no
valid users = $LOGIN_USER
force user = $LOGIN_USER
create mask = 0664
directory mask = 0775
CONFIG
sudo mv /etc/samba/smb.conf.tmp /etc/samba/smb.conf
sudo smbpasswd -a "$LOGIN_USER"
sudo smbpasswd -e "$LOGIN_USER"
sudo systemctl enable --now smbd nmbd
sudo systemctl restart smbd nmbd
if command -v ufw >/dev/null 2>&1; then
sudo ufw allow samba || true
fi
IP=$(hostname -I | awk '{print $1}')
echo "============================================================"
echo " Samba 설정 완료!"
echo " - 네트워크 경로 : \\\\${IP}\\${SHARE_NAME}"
echo " - 사용자 : ${LOGIN_USER}"
echo " - 공유 경로 : ${SHARE_DIR}"
echo "============================================================"
EOF
2) 실행 권한 부여
명령어 1 ▶ chmod +x setup-samba-music.sh
3) 실행
명령어 2 ▶ sudo ./setup-samba-music.sh
※ 주의사항
실행 중 비밀번호를 묻는데 , 윈도우에서 음악을 업로드할 폴더에 접극할 때 필요한 암호를 입력하면됨.
ID는 우분투 로그인 ID, 암호도 우분투 로그인 암호를 입력해야 햇갈리지 않습니다.
4) 네트워크 드라이버 또는 네트워크 위치 추가해서 거기에 음악 넣어놓으면 navidrome에서 자동 업데이트되어 음악이 추가됨.
7. 제거(언인스톨) 명령어
1) 서비스 중지/해제
sudo systemctl disable --now navidrome-auto-scan.service
sudo rm -f /etc/systemd/system/navidrome-auto-scan.service
sudo systemctl daemon-reload
sudo rm -f /usr/local/bin/navidrome-auto-scan.sh
2) 컨테이너 제거
docker rm -f navidrome 2>/dev/null || true
3) 데이터/설정 폴더 삭제(주의!)
sudo rm -rf /home/$USER/navidrome (여러분들이 INSTALL_DIR로 지정한 경로)
공개 마지막 업데이트: 2025-09-23 03:45:16 AM