Membangun Server Media Rumah dengan Docker dan Samba

18 Agu 2024 · 8 menit baca

Link berhasil di copy
Building a Home Media Server with Docker and Samba illustration

Anak pertama Saya suka menonton video Youtube di TV. Sebagai orang tua, Saya bertanggung jawab untuk memberikan tontonan yang baik. Terkadang, Saya kurang suka dengan iklan yang muncul karena bukan iklan anak-anak, juga seringkali videonya berlanjut ke video anak namun tidak islami.

Awalnya Saya menggunakan diska lepas berisi video yang sudah Saya unduh untuk ditonton. Minusnya adalah setiap mau menambah video harus dicopot dan unduh ulang dari gawai yang lain, mengkopinya lagi dan memasang ulang.

Karena sebelumnya Saya baru saja men-setup sebuah home server dari PC bekas, Saya kepikiran bagaimana jika videonya ditaruh saja di server. Nantinya, Saya bisa mengunduh video langsung ke server dari laptop saya via SSH, dan daftar video yang ada di TV langsung terupdate.

Di artikel ini Saya akan menuliskan langkah yang Saya lakukan untuk menyiapkan server media yang dapat diakses dari TV Cerdas mapun gawai lain yang terhubung ke jaringan. Untuk dapat mengikuti petunjuk pada artikel ini, diasumsikan beberapa hal berikut sudah terpenuhi:

  • PC server terinstalasi linux dan Docker yang terkoneksi jaringan
  • sedikit pemahaman tentang linux dan mengetik perintah di terminal

Menyiapkan direktori penyimpanan

Direktori penyimpanan ini nantinnya akan diekspos melalui protokol samba, agar bisa diakses oleh gawai apapun dalam jaringan.

Tentukan direktori yang akan dijadikan penyimapanan media, misalkan /mnt/mydisk/media. /media adalah direktori atau folder yang akan kita ekspos ke jaringan. Agar nantinnya direktori dan file didalamnya dapat diakses, perlu dilakukan perubahan izin akses direktori dengan perintah berikut

sudo chmod -R 775 /mnt/mydisk/media

Perintah diatas memberikan izin akses baca direktori dan seisinya kepada semua pengguna.

Membuat direktori projek

Agar semua konfigurasi ada dalam satu direktori sehingga mudah dicari, Saya membuat direktori projek tersendiri. Saya menyiapkan repositori Github yang bisa langsung diklon dengan perintah berikut:

git clone https://github.com/muhsalaa/docker-samba-server.git

Setelah clone berhasil, masuk ke direktori tersebut dan rubah konfigurasi sesuai data yang sesungguhnya. Terdapat 3 file konfigurasi yang perlu dirubah, berikut adalah penjelasan masing-masing:

smb.conf

[global]
    workgroup = SAMBA
    erver string = Samba Server
    security = user
    min protocol = SMB2
    passdb backend = tdbsam
    log file = /var/log/samba/%m.log
    max log size = 50
    socket options = TCP_NODELAY IPTOS_LOWDELAY
    read raw = yes

[media]
    path = /mnt/mydisk/media
    browseable = yes
    read only = yes
    guest ok = no

Diatas adalah template konfigurasi Samba yang nanti akan dijalankan di server, dan berikut adalah konfigurasi yang perlu dirubah serta sedikit penjelasan untuk konfigurasi yang penting:

  • [global] min protocol, Versi protokol samba minimal yang akan digunakan. Jika TV atau gawai yang akan mengakses server masih menggunakan versi samba 1, hapus konfigurasi ini.
  • [media] boleh dirubah, ini adalah nama direktori untuk server samba yang akan dikoneksikan dari aplikasi.
  • [media] path, path direktori boleh dirubah, namun pastikan merubahnya juga pada Dockerfile dan docker-compose.yml.

Untuk konfigurasi lainnya silahkan lihat cheathseet konfigurasi samba.

Dockerfile

FROM alpine:3.20

# Install Samba and necessary utilities
RUN apk add --no-cache samba samba-common-tools

# Define build-time arguments
ARG SAMBA_USER
ARG SAMBA_PASSWORD

# Create and configure Samba user
RUN adduser -D -H -s /sbin/nologin ${SAMBA_USER} && \
    echo "${SAMBA_USER}:${SAMBA_PASSWORD}" | chpasswd && \
    (echo "${SAMBA_PASSWORD}"; echo "${SAMBA_PASSWORD}") | smbpasswd -s -a ${SAMBA_USER}

# Copy Samba configuration file
COPY smb.conf /etc/samba/smb.conf

# Set up the media directory and permissions
RUN mkdir -p /mnt/mydisk/media && \
    chown -R ${SAMBA_USER}:${SAMBA_USER} /mnt/mydisk/media

# Expose Samba ports
EXPOSE 139 445

# Start Samba service in the foreground
CMD ["smbd", "--foreground", "--no-process-group"]

Tidak ada yang perlu dirubah pada konfigurasi Dockerfile diatas. Path direktori /mnt/mydisk/media bisa saja dirubah, namun pastikan merubahnya pula pada file docker-compose.yml dan smb.conf.

Dockerfile ini akan membuat suatu container berbasis Alpine linux yang akan menjadi host server samba.

docker-compose.yml

services:
  samba:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        SAMBA_USER: youruser
        SAMBA_PASSWORD: yourpassword
    container_name: samba-server
    ports:
      - "139:139"
      - "445:445"
    volumes:
      - /path/to/media:/mnt/mydisk/media
    restart: unless-stopped

Terakhir adalah file docker-compose.yml, berisi konfigurasi perintah untuk membuat kontainer dari Dockerfile. Beberapa data yang perlu dirubah:

  • SAMBA_USER dan SAMBA_PASSWORD, isi sesuai yang diinginkan.
  • /path/to/media ganti path volumes dengan direktori yang sudah dibuat diawal (direktori yang menyimpan media pada server). Jika kamu merubah path pada Dockerfile atau smb.conf, pastikan menyesuaikan data /mnt/mydisk/media juga.

Menjalankan servis samba

Setelah direktori media dan projek siap, saatnya menjalankan kontainer samba yang sudah disiapkan. Masuk ke direktori projek lalu jalankan perintah

docker compose up -d

Membuka firewall untuk port 139 dan 445

Agar port yang digunakan oleh server samba dapat diakses oleh gawai lain pada jaringan, perlu untuk membuka akses firewall pada port 139 dan 445 (bagian ini bisa dilewati jika pada server belum terinstall firewall). Berikut adalah runtutan perintah untuk membuka port firewall pada sistem operasi AlmaLinux yang Saya gunakan

sudo firewall-cmd --permanent --add-port=139/tcp
sudo firewall-cmd --permanent --add-port=445/tcp
sudo firewall-cmd --reload

Untuk sistem operasi linux lain seperti Ubuntu, bisa menggunakan perintah berikut

sudo ufw allow 139/tcp
sudo ufw allow 445/tcp
sudo ufw reload

Sampai sini, seharusnya server samba sudah dapat diakses dari HP atau TV pintar yang terkoneksi di jaringan.

Mengakses media dengan VLC dari smart TV

Banyak aplikasi untuk dapat mengakses file media yang berada di server dari smart TV atau HP: Kodi, MX Player, VLC, dll. Jika menginginkan UI yang lebih baik bisa gunakan KODI. Namun, kali ini Saya akan menggunakan VLC yang relatif lebih mudah penyambungannya.

Saya akan menggunakan tangkapan layar dari aplikasi VLC di HP saya sebagai ilustrasi, berikut adalah langkahnya:

Buat server favorit baru

Buka aplikasi VLC lalu pilih menu browse. Kemudian klik titik 3 dipaling kanan atas dan pilih menu add a server favorite

step 1 create new favorite server

Isi data konfigurasi server

Isikan data konfigurasi sesuai yang dibutuhkan

  • Network share name, berisi IP address dari PC server
  • Folder path, berisi nama direkotri yang tertera pada konfigurasi samba, pada gambar tertera /media karena pada konfigurasi samba adalah [media].
  • Server name, ini adalah nama server yang akan tertera pada aplikasi VLC Setelah data terisi, klik tombol OK. Kemudian klik tombol titik 3 dan pilih menu Edit, lalu masukkan username yang ada pada konfigurasi SAMBA_USER pada file docker-compose.yml dan pencet OK.

step 2 input server configuration

Login ke server

Langkah terakhir adalah login ke server samba yang sudah di konfigurasi. Klik menu server favorit yang sudah dibuat, lalu masukkan password sesuai dengan yang tertera pada konfigurasi SAMBA_PASSWORD dan klik OK. Kini video atau media yang ada pada server akan muncul dan dapat diputar. step 3 login to the server

Bonus: cara unduh video youtube sekaligus

Server media ini Saya gunakan untuk memutar video dari youtube yang sudah Saya unduh. Daripada mengunduh satu-satu, yang Saya lakukan adalah mengkopi url video-video yang ingin Saya download dan memasukkannya pada suatu file txt. Kemudian Saya membuat script untuk mendownload setiap video secara otomatis.

Pertama install modul yt-dlp pada server dengan mengikuti petunjuk di dokumentasi. Setelah terinstall, masuk ke direktori tempat file media disimpan dan buat file baru dengan nama youtube_urls.txt berisi url video yang ingin diunduh.

https://youtube.com/watch?v=sSneQbtznCI
https://youtube.com/watch?v=9fqDgK3drhw
https://youtube.com/watch?v=Ix4ajTSf7dg
https://youtube.com/watch?v=UBswtBkT3Ew

Pada direktori yang sama buat file baru dengan nama ytdl.sh, berisi script berikut

#!/bin/bash

file_name="youtube_urls.txt"

download_videos() {
    while IFS= read -r url; do
        echo "Downloading: $url"
        yt-dlp -f "bv*[height<=720][ext=mp4]+ba*[ext=m4a]" -N 4 "$url" --output "%(title)s.%(ext)s" --restrict-filenames || echo "Error downloading $url, continuing to next URL"
    done < "$file_name"
    echo "All downloads completed."
}

download_videos

Sesuaikan resolusi video yang diunduh dengan mengubah angka pada baris ini height<=720 menjadi 1080 atau 1440. Jangan lupa, berikan akses eksekusi untuk skrip dengan perintah.

chmod +x ytdl.sh

Jalankan perintah berikut untuk mulai mendownload

./ytdl.sh

Referensi

https://medium.com/devops-technical-notes-and-manuals/how-to-run-docker-commands-without-sudo-28019814198f https://reintech.io/blog/installing-docker-on-almalinux-9

Emot's Space © 2025