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

text
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ó)

bash
# 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

bash
# 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

bash
nano docker-compose.yml

Nội dung file:

yaml
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

bash
docker compose up -d

Thiết lập tài khoản admin lần đầu

  1. Truy cập http://192.168.3.5:8084

  2. Đăng nhập với tài khoản mặc định:

    • Usernameadmin

    • Passwordadmin

  3. 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

bash
# Tạo thư mục cho Navidrome
mkdir -p ~/navidrome && cd ~/navidrome

Tạo file docker-compose.yml

bash
nano docker-compose.yml

Nội dung file:

yaml
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

bash
docker compose up -d

Thiết lập tài khoản admin lần đầu

  1. Truy cập http://192.168.3.5:4533

  2. Tạo tài khoản admin đầu tiên

  3. Đă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

bash
# 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

  1. Truy cập http://192.168.3.5:8084

  2. Đăng nhập

  3. Vào thư mục music

  4. Kéo thả file MP3 vào để upload

  5. 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ó)

bash
# 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

  1. Truy cập NPM tại http://192.168.3.5:81

  2. Đăng nhập (mặc định: admin@example.com / changeme)

  3. Vào Proxy Hosts → Add Proxy Host

Thông số cho files.huancoc.com:

  • Domain Namesfiles.huancoc.com

  • Schemehttp

  • Forward Hostname/IP192.168.3.5

  • Forward Port8084

  • 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 Namesmp3.huancoc.com

  • Schemehttp

  • Forward Hostname/IP192.168.3.5

  • Forward Port4533

  • 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

  1. Vào https://files.huancoc.com

  2. Mở thư mục music

  3. Kéo thả file MP3 vào

  4. Navidrome sẽ tự động quét sau 1 giờ

Cách 2: Qua Navidrome

  1. Vào https://mp3.huancoc.com

  2. 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

  1. Mở ứng dụng

  2. Thêm server mới với thông tin:

    • Server URLhttps://mp3.huancoc.com

    • Usernameyour_username

    • Passwordyour_password

🔧 Phần 8: Quản lý và bảo trì

Các lệnh quản lý container

bash
# 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

bash
# 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:

bash
# 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:

  1. Vào NPM (http://192.168.3.5:81)

  2. Edit proxy host files.huancoc.com

  3. Tab Advanced, thêm:

nginx
auth_basic "Private Area";
auth_basic_user_file /etc/nginx-auth/.htpasswd;
  1. Tạo file mật khẩu:

bash
# 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
  1. Restart NPM:

bash
docker restart nginx-proxy-manager

Cập nhật Docker images định kỳ

bash
# 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:

bash
crontab -e
# Thêm dòng:
0 3 * * 0 ~/update-containers.sh

By admin

Leave a Reply

Your email address will not be published. Required fields are marked *