Giới thiệu
Bài viết này sẽ hướng dẫn bạn xây dựng một hệ thống hoàn chỉnh để quản lý file và phát nhạc trực tuyến trên máy chủ Ubuntu. Hệ thống bao gồm:
-
FileBrowser – Giao diện web quản lý file trực quan
-
Navidrome – Máy chủ phát nhạc trực tuyến (tương tự Spotify cá nhân)
-
Nginx Proxy Manager – Quản lý domain và SSL tập trung
-
Tích hợp dữ liệu nhạc giữa FileBrowser và Navidrome
📋 Kiến trúc hệ thống
Trình duyệt người dùng
│
▼
Nginx Proxy Manager (192.168.3.5:81)
│
┌───┴───────────────────┐
│ │
▼ ▼
files.huancoc.com mp3.huancoc.com
│ │
▼ ▼
FileBrowser (Port 8084) Navidrome (Port 4533)
│ │
└───────────┬───────────┘
▼
Thư mục nhạc chung
/home/your_user/music_data
🖥️ Phần 1: Chuẩn bị môi trường
Yêu cầu cơ bản
-
Máy chủ Ubuntu 20.04/22.04/24.04
-
Docker và Docker Compose đã cài đặt
-
RAM tối thiểu 2GB, khuyến nghị 4GB+
-
Domain đã trỏ về IP máy chủ
Cài đặt Docker (nếu chưa có)
# Cập nhật hệ thống sudo apt update && sudo apt upgrade -y # Cài đặt Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # Thêm user vào group docker sudo usermod -aG docker $USER newgrp docker # Cài đặt Docker Compose Plugin sudo apt install docker-compose-plugin -y # Kiểm tra cài đặt docker --version docker compose version
📁 Phần 2: Cài đặt FileBrowser – Quản lý file qua web
Tạo thư mục và cấu hình
# Tạo thư mục cho FileBrowser mkdir -p ~/filebrowser && cd ~/filebrowser # Tạo các thư mục dữ liệu mkdir -p ~/backup_data mkdir -p ~/shared_data mkdir -p ~/music_data
Tạo file docker-compose.yml
nano docker-compose.yml
Nội dung file:
services: filebrowser: image: filebrowser/filebrowser:latest container_name: filebrowser restart: unless-stopped ports: - "8084:80" volumes: - ~/backup_data:/srv/backup:rw - ~/shared_data:/srv/data:rw - ~/music_data:/srv/music:rw - ./database.db:/database.db environment: - FB_BASEURL=/
Khởi chạy FileBrowser
docker compose up -d
Thiết lập tài khoản admin lần đầu
-
Truy cập
http://192.168.3.5:8084 -
Đăng nhập với tài khoản mặc định:
-
Username:
admin -
Password:
admin
-
-
Vào Settings → thay đổi mật khẩu ngay lập tức
🎵 Phần 3: Cài đặt Navidrome – Máy chủ phát nhạc
Tạo thư mục và cấu hình
# Tạo thư mục cho Navidrome mkdir -p ~/navidrome && cd ~/navidrome
Tạo file docker-compose.yml
nano docker-compose.yml
Nội dung file:
services: navidrome: image: deluan/navidrome:latest container_name: navidrome restart: unless-stopped ports: - "4533:4533" environment: - ND_SCANSCHEDULE=1h - ND_LOGLEVEL=info - ND_SESSIONTIMEOUT=24h - ND_BASEURL= volumes: - ./data:/data - ~/music_data:/music:ro
Khởi chạy Navidrome
docker compose up -d
Thiết lập tài khoản admin lần đầu
-
Truy cập
http://192.168.3.5:4533 -
Tạo tài khoản admin đầu tiên
-
Đăng nhập và bắt đầu sử dụng
🔗 Phần 4: Kết nối FileBrowser với Navidrome
Tại sao cần kết nối?
-
FileBrowser dùng để upload/download file qua web
-
Navidrome đọc nhạc từ cùng thư mục
music_datađể phát trực tuyến -
Cả hai cùng dùng chung một thư mục dữ liệu
Kiểm tra thư mục nhạc
# Kiểm tra thư mục music_data ls -la ~/music_data/ # Nếu chưa có, tạo thư mục mkdir -p ~/music_data
Upload nhạc qua FileBrowser
-
Truy cập
http://192.168.3.5:8084 -
Đăng nhập
-
Vào thư mục music
-
Kéo thả file MP3 vào để upload
-
Navidrome sẽ tự động quét và cập nhật sau 1 giờ (hoặc vào Settings → Scan Now)
🔒 Phần 5: Cấu hình Nginx Proxy Manager (Domain và SSL)
Cài đặt Nginx Proxy Manager (nếu chưa có)
# Tạo thư mục cho NPM mkdir -p ~/npm && cd ~/npm # Tạo file docker-compose.yml cat > docker-compose.yml << 'EOF' services: app: image: 'jc21/nginx-proxy-manager:latest' container_name: nginx-proxy-manager restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt EOF # Khởi chạy docker compose up -d
Cấu hình domain cho FileBrowser
-
Truy cập NPM tại
http://192.168.3.5:81 -
Đăng nhập (mặc định:
admin@example.com/changeme) -
Vào Proxy Hosts → Add Proxy Host
Thông số cho files.huancoc.com:
-
Domain Names:
files.huancoc.com -
Scheme:
http -
Forward Hostname/IP:
192.168.3.5 -
Forward Port:
8084 -
Cache Assets: Bật
-
Block Common Exploits: Bật
-
SSL: Request Let’s Encrypt, bật Force SSL
Cấu hình domain cho Navidrome
Thông số cho mp3.huancoc.com:
-
Domain Names:
mp3.huancoc.com -
Scheme:
http -
Forward Hostname/IP:
192.168.3.5 -
Forward Port:
4533 -
Cache Assets: Bật
-
Block Common Exploits: Bật
-
SSL: Request Let’s Encrypt, bật Force SSL
🎧 Phần 6: Sử dụng hệ thống
Quản lý file qua FileBrowser
Truy cập: https://files.huancoc.com
Các thư mục có sẵn:
-
backup – Lưu trữ backup hệ thống
-
data – Dữ liệu chia sẻ thông thường
-
music – Thư mục nhạc dùng chung với Navidrome
Tính năng:
-
Upload/download file kéo thả
-
Tạo thư mục mới
-
Xem trước ảnh, video
-
Chia sẻ file tạm thời
-
Quản lý nhiều user
Nghe nhạc qua Navidrome
Truy cập: https://mp3.huancoc.com
Tính năng:
-
Phát nhạc trực tuyến
-
Tạo playlist
-
Tìm kiếm bài hát
-
Xem nghệ sĩ, album
-
Hỗ trợ nhiều định dạng (mp3, flac, m4a…)
-
App mobile tương thích (DSub, Ultrasonic, Symfonium)
Upload nhạc mới
Cách 1: Qua FileBrowser
-
Vào
https://files.huancoc.com -
Mở thư mục music
-
Kéo thả file MP3 vào
-
Navidrome sẽ tự động quét sau 1 giờ
Cách 2: Qua Navidrome
-
Vào
https://mp3.huancoc.com -
Vào Settings → Scan Now để quét ngay lập tức
📱 Phần 7: Sử dụng ứng dụng di động
Các ứng dụng tương thích với Navidrome
Navidrome hỗ trợ giao thức Subsonic API, do đó bạn có thể dùng các app sau:
| Hệ điều hành | Ứng dụng | Link tải |
|---|---|---|
| Android | DSub | Google Play |
| Android | Ultrasonic | F-Droid |
| Android | Symfonium | Google Play |
| iOS | play:Sub | App Store |
| iOS | Amperfy | App Store |
| Windows | Sonixd | sonixd.com |
| macOS | Sonixd | sonixd.com |
Cấu hình app kết nối
-
Mở ứng dụng
-
Thêm server mới với thông tin:
-
Server URL:
https://mp3.huancoc.com -
Username:
your_username -
Password:
your_password
-
🔧 Phần 8: Quản lý và bảo trì
Các lệnh quản lý container
# Xem trạng thái docker ps | grep -E "filebrowser|navidrome|nginx" # Xem logs docker logs filebrowser --tail 50 docker logs navidrome --tail 50 # Restart container docker restart filebrowser docker restart navidrome # Dừng và chạy lại cd ~/filebrowser && docker compose down && docker compose up -d cd ~/navidrome && docker compose down && docker compose up -d
Backup dữ liệu
# Tạo thư mục backup mkdir -p ~/backup_data/navidrome-backup # Backup cấu hình Navidrome cp -r ~/navidrome/data ~/backup_data/navidrome-backup/ # Backup cấu hình FileBrowser cp ~/filebrowser/database.db ~/backup_data/ # Backup danh sách nhạc (tùy chọn) cp -r ~/music_data ~/backup_data/
Tự động quét nhạc
Navidrome được cấu hình tự động quét mỗi giờ (ND_SCANSCHEDULE=1h). Để quét ngay lập tức:
# Qua web UI https://mp3.huancoc.com → Settings → Scan Now # Hoặc qua API curl -X POST https://mp3.huancoc.com/api/scan -u your_username:your_password
🛡️ Phần 9: Bảo mật
Xác thực đăng nhập cho FileBrowser
FileBrowser đã có xác thực riêng. Để thêm lớp bảo vệ qua Nginx:
-
Vào NPM (
http://192.168.3.5:81) -
Edit proxy host
files.huancoc.com -
Tab Advanced, thêm:
auth_basic "Private Area"; auth_basic_user_file /etc/nginx-auth/.htpasswd;
-
Tạo file mật khẩu:
# Tạo thư mục sudo mkdir -p /etc/nginx-auth # Tạo user sudo htpasswd -c /etc/nginx-auth/.htpasswd your_username # Nhập mật khẩu 2 lần
-
Restart NPM:
docker restart nginx-proxy-manager
Cập nhật Docker images định kỳ
# Script cập nhật tự động cat > ~/update-containers.sh << 'EOF' #!/bin/bash cd ~/filebrowser && docker compose pull && docker compose up -d cd ~/navidrome && docker compose pull && docker compose up -d cd ~/npm && docker compose pull && docker compose up -d docker system prune -f EOF chmod +x ~/update-containers.sh
Thêm vào crontab để chạy hàng tuần:
crontab -e # Thêm dòng: 0 3 * * 0 ~/update-containers.sh