우분투 서버에서 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