rclone 공식 도커 이미지는 서비스 이미지가 아니라 실행 파일만 담고 있어서
서비스로 올리면 에러가 나지만 docker-compose로 서비스로 만들고 명령어를 넣어주면
서비스로 사용할 수 있습니다.
먼저, 기존 rclone config가 준비되어 있어야 합니다.
물론 없을 경우에도 docker cli를 통해 만들어 줄 수 있지만 여기서는 일단 패스 합니다.
portainer나 docker-compose도 조금 안다고 가정합니다. 시놀로지 도커 앱으로는 어떻게 하는지 잘 모르겠어요.
아래 내용을 portainer 나 쉘에서 적당한 곳에 docker-compose.yml로 만들어 올려 줍니다.
---
version: "3"
services:
2$rclone:
4$image: rclone/rclone:lastest
container_name: rclone
mem_limit: 10g
network_mode: bridge
privileged: true #fuse와 최상위 디렉토리에 마운트하기 위해 권한 상승
devices:
6$ - /dev/fuse
4$ cap_add:
6$ - SYS_ADMIN
environment:
- PUID=0 #최상위에 마운트 하려면 권한을 상승 시켜줘야 함
- PGID=0 #마찬가지
- UMASK=022 #마찬가지
- TZ=Asia/Seoul
volumes:
- /volume1/docker/rclone/config:/config #rlcone.conf의 위치
- /volume1/docker/rclone/cache:/cache #캐시 디렉토리 위치
- /volume1/docker/rclone/log:/log #옵션, 로그 위치
- /volume1/video:/video:shared #마운트할 위치. 사실 volumeX 바로 아래는 최상위 디렉토리라 권장하지 않음.
4$ command: mount gdrive:video/ /video/ --config /config/rclone.conf --log-file /log/mount.log --fast-list --allow-non-empty --allow-other --cache-dir /cache --dir-cache-time 720h --vfs-cache-max-age 72h --vfs-cache-max-size 300G --vfs-cache-mode full --vfs-read-ahead 32M #마운트, 디렉토리 위치에 주의, 옵션은 취향대로, 이 설정은 메모리 요구가 높음
4$ restart: unless-stopped
yml 파일은 파이썬 처럼 빈칸이 문법이니 주의 하셔야 합니다. $가 빈칸이며 표기 안된 곳도 빈칸 2,4,6으로 유지하셔야 합니다.
command는 여러 줄로 쓸려고 했는데 왠지 잘 안되서 그냥 한줄로 씁니다.
plex와 rlcone 결합
---
version: "2.1"
services:
plex:
image: linuxserver/plex:latest
container_name: plex
mem_limit: 5g
network_mode: bridge
ports:
- 32400:32400/tcp
devices:
- /dev/dri:/dev/dri
environment:
- PUID=1026
- PGID=100
- VERSION=docker
- TZ=Asia/Seoul
volumes:
- /volume1/docker/plex:/config
- /volume1/video/movie:/movie:ro #아래 rclone의 마운트 위치 참조
- /volume1/video/tv:/tv:ro #ro는 읽기 전용. 취향대로 설정.
depends_on: #plex가 rclone 보다 빨리 실행될 경우 디렉토리를 잡지 못해 에러가 납니다. depends_on으로 rlcone을 먼저 실행시키고 의존성을 걸어서 plex를 실행 시키도록 합니다
- rclone
restart: unless-stopped
rclone: #위와 같음
image: rclone/rclone:latest
container_name: rclone
mem_limit: 10g
network_mode: bridge
privileged: true
devices:
- /dev/fuse
cap_add:
- SYS_ADMIN
environment:
- PUID=0
- PGID=0
- UMASK=022
- TZ=Asia/Seoul
volumes:
- /volume1/docker/rclone/config:/config
- /volume1/docker/rclone/cache:/cache
- /volume1/docker/rclone/log:/log
- /volume1/video:/video:shared
command: mount drive:video/ /video/ --config /config/rclone.conf --log-file /log/mount.log --fast-list --allow-non-empty --allow-other --cache-dir /cache --dir-cache-time 720h --vfs-cache-max-age 72h --vfs-cache-max-size 300G --vfs-cache-mode full --vfs-read-ahead 32M
restart: unless-stopped
초보가 도커 매뉴얼 보면서 삽질한 거 공유해봅니다.
시간만 때 변경해 봐야 갔네요
rclone 마운트가 부팅시에 딜레이가 생겨서 plex docker를 마운트가 완료된후 재시작 해주는게 귀찮았는데
rclone랑 plex를 docker-compose로 하나로 묶어주니 한번에 잘 되네요
해당 내용은 본문에 추가했습니다.
저는 depends_on만 하니 마운트 되기전에 plex 컨테이너가 시작이 되버려서
rclone쪽에 healthcheck도 추가했어요.
혹시 필요하신분 계실까 방법을 남기면
버전은 2.3으로 했고
plex쪽에
depends_on:
rclone:
condition: service_healthy
rclone 쪽에
healthcheck:
test: ls /mnt/gdrive/movies
interval: 10s
timeout: 5s
retries: 10
지정한 폴더에 접근이 가능해지면 healthy 상태가 되면서 plex가 시작되네요.
버전 3 이상은 구문이 바뀌었는지 어떻게 하는지 잘 모르겠어서 2.3으로 하니 되더라구요.
네이티브로 할땐 마운트 잘되는데 따라해보니 마운트가 안되네용 ㅠ
remote:를 /ext_drive에 마운트 하려면
volumes에는
/ext_drive:/video:shared
command에는 mount remote:/ /video/ 이렇게 바꾸는게 맞는걸까요..