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