Docker를 이용하여 아래의 환경들을 구축할 것이다.
- WebDav(Web Distributed Authoring and Versioning) : 웹서버를 저장소로 사용 (저장된 문서, 파일 읽기 및 편집가능.)
- Transmission : 토렌트
- Plex : 동영상 스트리밍 서버
WebDAV
nginx를 이용하여 webdav 서버를 실행한다.
Dockerfile
FROM ubuntu:18.04
MAINTAINER alexonepath@gmail.com
ENV USERNAME ""
ENV USERPWD ""
RUN apt-get update && apt install -y nginx nginx-extras apache2-utils
RUN echo 'server {\n\
listen 80 default_server;\n\
listen [::]:80 default_server;\n\
charset utf-8;\n\
location /webdav {\n\
alias /var/webdav;\n\
dav_methods PUT DELETE MKCOL COPY MOVE;\n\
dav_ext_methods PROPFIND OPTIONS;\n\
create_full_put_path on;\n\
dav_access user:rw group:rw all:rw;\n\
autoindex on;\n\
auth_basic "restricted";\n\
auth_basic_user_file /etc/nginx/users.pass;\n\
send_timeout 36000s;\n\
proxy_connect_timeout 36000s;\n\
proxy_read_timeout 36000s;\n\
proxy_send_timeout 36000s;\n\
proxy_request_buffering off;\n\
}}\n'\
>> /etc/nginx/sites-available/webdav
RUN ln -s /etc/nginx/sites-available/webdav /etc/nginx/sites-enabled/webdav
RUN rm -rf /etc/nginx/sites-enabled/default
RUN mkdir -p /var/webdav
RUN chown www-data /var/webdav && chmod -R 777 /var/webdav
COPY entrypoint.sh /
RUN chmod +x entrypoint.sh
CMD /entrypoint.sh && nginx -g "daemon off;"
entrypoint.sh
#!/bin/bash
if [[ -n "$USERNAME" ]] && [[ -n "$USERPWD" ]]
then
htpasswd -bc /etc/nginx/users.pass $USERNAME $USERPWD
echo Done.
fi
이미지 빌드 및 push
$ docker build --tag seongjongjeon/webdav:1.0 .
$ docker login
$ docker push seongjongjeon/webdav:1.0
컨테이너 실행
# volume 매핑을 위한 디렉토리 생성
$ mkdir -p /data/repositories/docker-repository/webdav && chmod 777 /data/repositories/docker-repository/webdav
###################
# 1. 실행시 사용자 생성
###################
$ docker run -d --name alex-webdav \
--restart=always \
-p 20000:80 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/repositories/docker-repository/webdav:/var/webdav \
-e USERNAME=YOUR_NAME \
-e USERPWD=YOUR_PWD \
seongjongjeon/webdav:1.0
#####################
# 2. 생성된 사용자 파일 매핑
# USERNAME과 USERPWD 환경 변수가 없다면 users.pass 파일을 매핑해야 한다.
#####################
# 사용자 생성하기
$ htpasswd -bc users.passwd YOUR_NAME YOUR_PWD
$ htpasswd -b users.passwd YOUR_NAME YOUR_PWD
$ docker run -d --name alex-webdav \
--restart=always \
-p 20000:80 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/repositories/docker-repository/webdav:/var/webdav \
-v ${YOUR_PASSWD_PATH}:/etc/nginx/users.pass \
seongjongjeon/webdav:1.0
# 실행중인 webdav에 사용자 추가
$ docker exec ${CONTAINER_NAME} htpasswd -b /etc/nginx/users.pass YOUR_NAME YOUR_PWD
Mac 연결
- Finder 선택
- 메뉴(이동) > 서버에 연결 > http://도메인:port/webdav
Transmission (토렌트)
Dockerfile
FROM linuxserver/transmission:95
MAINTAINER alexonepath@gmail.com
COPY entrypoint.sh /
RUN chmod +x entrypoint.sh
RUN rm -rf /etc/services.d/transmission
CMD /entrypoint.sh && /usr/bin/transmission-daemon -g /config -c /watch -f
entrypoint.sh
#!/bin/bash
if [[ -n "$USERNAME" ]] && [[ -n "$USERPWD" ]]
then
sed -i 's/"rpc-authentication-required": false/"rpc-authentication-required": true/g' /config/settings.json
sed -i 's/"rpc-username": ""/"rpc-username": "'${USERNAME}'"/g' /config/settings.json
sed -i 's/"rpc-password": ".*"/"rpc-password": "'${USERPWD}'"/g' /config/settings.json
echo Done.
fi
이미지 빌드 및 push
$ docker build --tag seongjongjeon/transmission:95 .
$ docker push seongjongjeon/transmission:95
컨테이너 실행
$ docker run -d --name alex-transmission \
--restart=always \
-v /etc/localtime:/etc/localtime:ro \
-v /data/repositories/docker-repository/transmission/config:/config \
-v /data/repositories/docker-repository/transmission/download:/downloads \
-v /data/repositories/docker-repository/transmission/watch:/watch \
-p 20001:9091 \
-p 51413:51413 \
-p 51413:51413/udp \
-e TZ=Asia/Seoul \
-e USERNAME=YOUR_NAME \
-e USERPWD=YOUR_PWD \
seongjongjeon/transmission:95
Plex (동영상 스트리밍 서버)
Obtain Claim token : plex 계정에 자동 로그인을 위한 토큰
컨테이너 실행 (접속 http://IP:20010)
# /data는 transmission의 다운로드 폴더로 지정해 준다.
$ docker run -d --name alex-plex \
--restart=always \
-p 20010:32400/tcp \
-p 20011:3005/tcp \
-p 20012:8324/tcp \
-p 20013:32469/tcp \
-p 20014:1900/udp \
-p 20015:32410/udp \
-p 20026:32412/udp \
-p 20027:32413/udp \
-p 20028:32414/udp \
-v /etc/localtime:/etc/localtime:ro \
-v /data/repositories/docker-repository/plex/config:/config \
-v /data/repositories/docker-repository/plex/transcode:/transcode \
-v /data/repositories/docker-repository/transmission/download/complete:/data \
-e TZ="Asia/Seoul" \
-e PLEX_CLAIM=YOUR_PLEX_CLAIM \
plexinc/pms-docker
영화 및 드라마 정보 Metadata Agent
영화 및 드라마에 대한 메타정보를 받아온다. 다운로드
플러그인 적용
# plugins 디렉토리로 이동
$ cd "/data/repositories/docker-repository/plex/config/Library/Application Support/Plex Media Server/Plug-ins"
# Checkout
# 플러그인 설치후 재시작 해야 함.
$ git clone https://github.com/hojel/DaumMovie.bundle.git
- 메인 화면의 라이브러리 추가 버튼클릭 (영화 또는 드라마가 등이 존재하는 폴더를 추가한다.)
- 미디어 폴더 찾기 (Transmission의 다운로드 폴더를 /data 디렉토리에 매핑해 놓았으므로 해당 디렉토리 하위에 movie 폴더를 만들고 선택)
- 고급 선택후 에이전트를 Daum Movie 선택
그외 설정
- 자막 설정 (설정 > 언어)
- 라이브러리 설정 (설정 > 라이브러리)
Docker Compose 이용하여 설정
위의 3가지 컨테이너를 Docker Compose를 활용하여 한번에 컨트롤 할 수 있도록 한다.
WebDAV 및 Transmission의 경우는 이미지를 Docker Hub에 업로드 하였으므로 해당 이미지를 기반으로 컨테이너를 생성한다.
docker-compose.yml
version: '3'
services:
alex-webdav:
image: "seongjongjeon/webdav:1.0"
container_name: "alex-webdav"
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- /data/repositories/docker-repository/webdav:/var/webdav
#- /data/deploy/docker/webdav/users.passwd:/etc/nginx/users.pass # 미리 생성한 계정파일을 매핑하는 경우.
ports:
- 20000:80
environment:
- USERNAME=user_name
- USERPWD=user_password
alex-transmission:
image: "seongjongjeon/transmission:95"
container_name: "alex-transmission"
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- /data/repositories/docker-repository/transmission/config:/config
- /data/repositories/docker-repository/transmission/download:/downloads
- /data/repositories/docker-repository/transmission/watch:/watch
ports:
- 20001:9091
- 51413:51413
- 51413:51413/udp
environment:
- TZ=Asia/Seoul
- USERNAME=YOUR_NAME
- USERPWD=YOUR_PWD
alex-plex:
image: "plexinc/pms-docker"
container_name: "alex-plex"
restart: always
depends_on:
- "alex-transmission"
volumes:
- /etc/localtime:/etc/localtime:ro
- /data/repositories/docker-repository/plex/config:/config
- /data/repositories/docker-repository/plex/transcode:/transcode
- /data/repositories/docker-repository/transmission/download/complete:/data
ports:
- 20010:32400/tcp
- 20011:3005/tcp
- 20012:8324/tcp
- 20013:32469/tcp
- 20014:1900/udp
- 20015:32410/udp
- 20016:32412/udp
- 20017:32413/udp
- 20018:32414/udp
environment:
- TZ=Asia/Seoul
- PLEX_CLAIM=YOUR_CLAIM_TOKEN
Compose Start
# 기존 디렉토리 삭제
$ sudo rm -rf /data/repositories/docker-repository/plex
$ sudo rm -rf /data/repositories/docker-repository/transmission
$ sudo rm -rf /data/repositories/docker-repository/webdav
# WebDAV 디렉토리 권한설정
$ mkdir -p /data/repositories/docker-repository/webdav && chmod 777 /data/repositories/docker-repository/webdav
# 서비스 시작
$ docker-compose up -d
# 서비스 정지
$ docker-compose down
Plex 자막처리 (출처)
Plex에서는 smi 자막을 처리할때 서버에서 트랜스코딩하여 스트리밍한다.
하지만 srt 포맷의 자막은 트랜스코더를 거치지 않고 스트리밍이 가능하다.
SMI to SRT 변환
- smi2srt.py
- smi2srt-all.sh
- 위 2개의 파일을 다운로드 한 후 아래의 명령어로 수행한다.
# chardet 설치
$ sudo apt install python-chardet
# 인자로 변환해야 할 디렉토리를 선택하면 하위 디렉토리까지 모두 변환
# ./smi2srt-all.sh /change/driectory/