우분투 서버에 JELLYFIN 올인원 설치 스크립트 (Jellyfin + 하드웨어 가속 + SMB)
1. 올인원 설치 스크립트 (Jellyfin + 하드웨어 가속 + SMB)
1)아래 내용을 우분투 터미널에 복사 붙여넣기 후 엔터키를 눌러주시면 설치 스크립트가 자동 생성 됩니다.
cat > setup-jellyfin-smb-ha.sh <<'__SCRIPT__'
#!/usr/bin/env bash
set -euo pipefail
ADMIN_USER="${SUDO_USER:-$USER}"
ADMIN_HOME="$(getent passwd "$ADMIN_USER" | cut -d: -f6)"
BASE_DIR="${ADMIN_HOME}/jellyfin"
CONFIG_DIR="${BASE_DIR}/config"
CACHE_DIR="${BASE_DIR}/cache"
MEDIA_DIR="/DATA/JELLYFIN"
TZ="Asia/Seoul"
SMB_GROUP="samba"
SMB_SHARE_NAME="DATA_JELLYFIN"
SMB_CONF="/etc/samba/smb.conf"
COMPOSE_FILE="${BASE_DIR}/docker-compose.yml"
echo "==[ Jellyfin + SMB 올인원 설치 ]=="
echo "관리자 계정 : ${ADMIN_USER}"
echo "Jellyfin 경로: ${BASE_DIR}"
echo "미디어 경로 : ${MEDIA_DIR}"
sleep 1
# ===== Docker & 필수 패키지 =====
sudo apt update -y
sudo apt install -y ca-certificates curl gnupg lsb-release apt-transport-https lsof acl openssl pciutils samba
if ! command -v docker >/dev/null 2>&1; then
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
sudo apt update -y
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
fi
DOCKER_COMPOSE=$(command -v docker-compose || echo "docker compose")
# ===== 디렉터리/권한 =====
sudo mkdir -p "${CONFIG_DIR}" "${CACHE_DIR}" "${MEDIA_DIR}"
sudo chown -R "${ADMIN_USER}:${ADMIN_USER}" "${BASE_DIR}" "${MEDIA_DIR}"
if ! getent group "${SMB_GROUP}" >/dev/null; then sudo groupadd "${SMB_GROUP}"; fi
sudo usermod -aG "${SMB_GROUP}" "${ADMIN_USER}"
sudo chgrp -R "${SMB_GROUP}" "${MEDIA_DIR}"
sudo chmod 2775 "${MEDIA_DIR}"
# ===== 하드웨어 가속 감지 =====
USE_DRI="false"
[ -e /dev/dri ] && USE_DRI="true"
RENDER_GID="$(getent group render | awk -F: '{print $3}')"
VIDEO_GID="$(getent group video | awk -F: '{print $3}')"
PUID="$(id -u "$ADMIN_USER")"
PGID="$(id -g "$ADMIN_USER")"
mkdir -p "${BASE_DIR}"
cat > "${BASE_DIR}/.env" <<EOF
TZ=${TZ}
PUID=${PUID}
PGID=${PGID}
EOF
cat > "${COMPOSE_FILE}" <<YML
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
env_file:
- .env
user: "${PUID}:${PGID}"
YML
if [ "$USE_DRI" = "true" ]; then
echo " devices:" >> "${COMPOSE_FILE}"
echo " - /dev/dri:/dev/dri" >> "${COMPOSE_FILE}"
if [ -n "$RENDER_GID" ] || [ -n "$VIDEO_GID" ]; then
echo " group_add:" >> "${COMPOSE_FILE}"
[ -n "$RENDER_GID" ] && echo " - \"$RENDER_GID\"" >> "${COMPOSE_FILE}"
[ -n "$VIDEO_GID" ] && echo " - \"$VIDEO_GID\"" >> "${COMPOSE_FILE}"
fi
fi
cat >> "${COMPOSE_FILE}" <<'YML'
volumes:
- ./config:/config
- ./cache:/cache
- /DATA/JELLYFIN:/media
ports:
- "8096:8096"
restart: unless-stopped
YML
sudo ${DOCKER_COMPOSE} -f "${COMPOSE_FILE}" pull
sudo ${DOCKER_COMPOSE} -f "${COMPOSE_FILE}" up -d
# ===== Samba 설정 =====
sudo cp "${SMB_CONF}" "${SMB_CONF}.backup.$(date +%F_%H%M%S)" || true
grep -q "^\[${SMB_SHARE_NAME}\]" "${SMB_CONF}" && \
sudo awk -v sec="${SMB_SHARE_NAME}" '
BEGIN{skip=0}
/^\[.*\]/{skip=($0 ~ "\\["sec"\\]")}
skip==0{print}
' "${SMB_CONF}" | sudo tee /tmp/smb.conf.new >/dev/null && \
sudo mv /tmp/smb.conf.new "${SMB_CONF}"
cat <<EOF | sudo tee -a "${SMB_CONF}" >/dev/null
[${SMB_SHARE_NAME}]
path = ${MEDIA_DIR}
browsable = yes
writable = yes
guest ok = no
read only = no
create mask = 0664
directory mask = 2775
force group = ${SMB_GROUP}
valid users = @${SMB_GROUP}
EOF
sudo testparm -s >/dev/null
echo "=== SMB 계정 비밀번호 설정 ==="
echo "계정: ${ADMIN_USER}"
sudo smbpasswd -a "${ADMIN_USER}"
sudo systemctl enable --now smbd nmbd
echo "[✓] 설치 완료! 웹에서 http://<서버IP>:8096 접속 후 설정 시작하세요."
__SCRIPT__
sed -i 's/\r$//' setup-jellyfin-smb-ha.sh
2) 실행 권한 부여
chmod +x setup-jellyfin-smb-ha.sh
3) 설치 실행 ( 아래 명령어를 실행하면 자동으로 Jellyfin이 설치됨 )
./setup-jellyfin-smb-ha.sh
4) 설치 완료 후 점검
① 컨테이너 상태
sudo docker ps --filter "name=jellyfin"
② 최근 로그 80줄 (에러 여부 확인)
sudo docker logs jellyfin --tail 80
③ 포트 리스닝 확인
sudo ss -lntp | grep 8096 || sudo netstat -lntp | grep 8096 2>/dev/null || true
④ SMB 공유 확인 (비번 묻습니다)
smbclient -L localhost -U $USER
5) 윈도우 탐색기에 네트워크 폴더 연결할 때 아래 경로로 연결하면됨.
\\우분투 서버 IP 주소\DATA_JELLYFIN
2. 언인스톨 스크립트
1) 아래 내용을 복사 붙여넣기 후 엔터를 누르면 언인스톨 스크립트가 생성 됩니다.
cat <<'EOF' > uninstall-jellyfin-smb.sh
#!/usr/bin/env bash
set -euo pipefail
ADMIN_USER="${SUDO_USER:-$USER}"
ADMIN_HOME="$(getent passwd "$ADMIN_USER" | cut -d: -f6)"
BASE_DIR="${ADMIN_HOME}/jellyfin"
SMB_SHARE_NAME="DATA_JELLYFIN"
SMB_CONF="/etc/samba/smb.conf"
COMPOSE_FILE="${BASE_DIR}/docker-compose.yml"
echo "==[ Jellyfin + SMB 언인스톨 시작 ]============================="
# ====== Jellyfin 컨테이너 중지/삭제 ======
if [ -f "${COMPOSE_FILE}" ]; then
echo "[*] Jellyfin 컨테이너 중지 및 삭제"
sudo docker compose -f "${COMPOSE_FILE}" down || true
else
echo "[!] docker-compose.yml 없음 → 컨테이너 직접 검색"
if sudo docker ps -a --format '{{.Names}}' | grep -q '^jellyfin$'; then
sudo docker rm -f jellyfin || true
fi
fi
# ====== Jellyfin 설치 디렉터리 제거 ======
if [ -d "${BASE_DIR}" ]; then
echo "[*] Jellyfin 디렉터리 삭제: ${BASE_DIR}"
sudo rm -rf "${BASE_DIR}"
fi
# ====== SMB 공유 제거 ======
if grep -q "^\[${SMB_SHARE_NAME}\]" "${SMB_CONF}"; then
echo "[*] smb.conf에서 [${SMB_SHARE_NAME}] 섹션 제거"
sudo awk -v sec="${SMB_SHARE_NAME}" '
BEGIN{skip=0}
/^\[.*\]/{skip=($0 ~ "\\["sec"\\]")}
skip==0{print}
' "${SMB_CONF}" | sudo tee /tmp/smb.conf.clean >/dev/null
sudo mv /tmp/smb.conf.clean "${SMB_CONF}"
sudo testparm -s >/dev/null
echo "[*] Samba 재시작"
sudo systemctl restart smbd nmbd
else
echo "[!] smb.conf에 ${SMB_SHARE_NAME} 공유 섹션 없음"
fi
# ====== Samba 사용자 삭제(선택) ======
if sudo pdbedit -L | grep -q "^${ADMIN_USER}:"; then
echo "[*] Samba 사용자 ${ADMIN_USER} 삭제"
sudo smbpasswd -x "${ADMIN_USER}" || true
fi
# ====== Docker 이미지 정리(선택) ======
if sudo docker images | grep -q 'jellyfin/jellyfin'; then
echo "[*] Jellyfin Docker 이미지 삭제"
sudo docker rmi jellyfin/jellyfin:latest || true
fi
echo "================================================================"
echo "[✓] 언인스톨 완료"
echo "- Jellyfin 컨테이너, 설정, SMB 공유가 제거되었습니다."
echo "- /DATA/JELLYFIN 폴더는 **삭제하지 않았음** (미디어 보존)"
echo " → 필요시 직접 삭제: sudo rm -rf /DATA/JELLYFIN"
echo "================================================================"
EOF
2) 실행 권한 부여
chmod +x uninstall-jellyfin-smb.sh
3) 설치 실행 ( 아래 명령어를 실행하면 자동으로 Jellyfin이 설치됨 )
./uninstall-jellyfin-smb.sh
공개 마지막 업데이트: 2025-09-24 01:42:10 AM