• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글

유튜브 다운로더, Tube Archivist의 ARM으로 docker-compose 설정하기

ExpBox ExpBox 458

2

4

레퍼런스:

https://svrforum.com/svr/297485

요즘 따라 유튜브 다운로더가 밋밋하게 느껴지지 않습니까? 유튜브 영상을 좀 더 계획적으로 관리하고 싶으시다고요?   바로 그럴 때! Tube Archivist가 필요합니다! ...
뻘짓의초심자 | 2022.05.21

 

뻘짓의초심자 님께서 좋은 도커 이미지를 알려주셨습니다. 그런데 Tube Archivist 자체(프론트엔드)는 MultiArch로 X86과 ARM64를 지원하지만 그 아래(백엔드)의 Elasticsearch와 Redis는 메뉴얼을 그대로 사용하기에는 docker-compose.yml의 수정이 일부 필요합니다. 다행스럽게도 Redis는 Tube Archivist의 개발자가 따로 ARM 이미지를 만들어두었지만 Elasticsearch를 공식 이미지로 받아와야합니다. 이 과정 중에 많은 시행착오가 있었으며 오랜 시도 끝에 성공하여 정보 공유차 글을 적습니다.

 


 

0. 무엇이 문제인가?

 

시덥잖은 이야기는 집어치우고 docker-compose.yml을 공유하면 좋겠지만 일부 설명해야할 정보가 있기 때문에 따로 빼서 설명드립니다. 혹시나 프로그램이 업데이트 되면 이 자료를 가지고 빠르게 docker-compose.yml을 수정할 수 있게 기록하는 것을 목표로 합니다. 실행만 필요하시다면 이 챕터는 넘어가시면 되겠습니다.

 

깃허브에서의 docker-compose 예시 파일:

https://github.com/tubearchivist/tubearchivist/blob/master/docker-compose.yml

 

위의 docker-compose.yml을 사용한다면 x86 시스템에서는 바로 실행이 가능할겁니다. 중간의 USERNAME과 PASSWORD, TZ 정도만 수정해도 바로 사용이 가능할겁니다. 또한 볼륨 바인딩을 /home/ubuntu/data/어쩌고:/data 이런식인 바인드 마운트로 하고싶다면 그 방법으로 수정을 하시고 사용하시면 바로 사용이 가능하지만 앞서 말씀드렸다시피 ARM 시스템에서는 일부 설정을 바꿔야합니다.

 

깃허브 레포의 README.md 파일에서 확인할 수 있습니다. 다만 깃허브에서도 설명이 틀린 점이 있어 많이 헤맸습니다.

 

첫 번째로 Redis입니다.

 

Redis는 정식 Docker image에서도 ARM이 없기 때문에 Tube Archivist 개발자가 자체적으로 빌드한 ARM 이미지를 사용해야합니다. bbilly1/rejson 으로 사용하면 됩니다.

 

이때 https://github.com/tubearchivist/tubearchivist#redis-on-a-custom-port 를 확인하여 설정해줘야합니다. expose에서 6379가 아닌 6380으로 포트를 열어주고 아래의 커맨드를 입력하면 되는데

 

원본:
command: --port 6380 --loadmodule /usr/lib/redis/modules/rejson.so

 

깃허브에서는 위와 같이 되어있습니다. 하지만 저 상태로 docker-compose.yml 파일을 수정하고 실행 후 Redius 컨테이너의 로그를 찍어보면 /usr/lib/redis/modules/rejson.so 모듈이 존재하지 않는다고 합니다. 따라서 도커 컨테이너 내부로 접속하여 확인해본 바 rejson.so 모듈은 없으며 librejson.so 모듈만이 존재했습니다. 따라서

 

수정:
command: --port 6380 --loadmodule /usr/lib/redis/modules/librejson.so

 

위의 command를 archivist-redis에 추가하면 됩니다.

 


 

두 번째로 Elasticsearch 입니다.

 

Eleasticsearch는 Tube Archivist 전용 이미지가 ARM으로 존재하지 않기 때문에 정식 Docker image의 7.17 버전을 사용해야합니다. 여기까지는 괜찮으나 바인딩 마운트 시 볼륨 권한에서 문제가 생깁니다. 약간 복잡한 이야기인데 간략하게 줄여보자면 Elasticsearch 이미지의 컨테이너 내부에서 id 명령어를 치면 Elasticsearch라는 pid와 gid로 접속해 있습니다. 하지만 docker-compose로 생성되는 파일과 디렉터리는 root 계정으로 생성됩니다. 여기에서 권한의 차이가 생기기 때문에 디렉터리에 파일을 생성할 수 없어 생기는 문제가 있습니다.

 

따라서 chmod를 통하여 es로 바인딩 된 폴더만 chmod 명령어로 777 처리를 한다면 괜찮지만 보안에 그리 좋지 않습니다. 따라서 Elasticsearch 컨테이너의 User와 HostOS의 User를 매칭하는 과정이 필요합니다. 따라서

 

추가:
user: "1000"

 

위의 명령어를 추가하시면 됩니다. 여기에서 또 중요한 사실은 이게 끝난게 아니라 /usr/share/elasticsearch/data로 바인딩 된 볼륨을 chown 명령어로 1000:1000으로 권한을 변경해야합니다.

 

세 번째로 Tube Archivist 입니다.

 

Tube Archivist는 MultiARCH를 지원한다고 말씀드렸습니다. 따라서 그리 바꿀것은 없지만 Redis의 포트번호가 6380으로 바꾸었기 때문에 environment에서 REDIS_PORT=6380를 추가해야합니다.

 


 

1. 제 입맛대로 커스텀한 docker-compose.yml

 

제 마음대로 커스텀된 ARM용 docker-compose.yml입니다. 빨간색은 수정하셔야하는 부분입니다.

 

version: '3.3'

services:
  tube_archivist:
    container_name: Tube_archivist
    restart: always
    image: bbilly1/tubearchivist:v0.1.5    # MultiARCH
    ports:
      - 8000:8000
    volumes:
      - /path/your/compose/youtubefile:/youtube
      - /path/your/compose/cache:/cache
    environment:
      - ES_URL=http://archivist-es:9200     # needs protocol e.g. http and port
      - REDIS_HOST=archivist-redis          # don't add protocol
      - REDIS_PORT=6380                     # use redis port 6380
      - HOST_UID=1000
      - HOST_GID=1000
      - TA_USERNAME=tubearchivist           # your initial TA credentials
      - TA_PASSWORD=verysecret              # your initial TA credentials
      - ELASTIC_PASSWORD=verysecret         # set password for Elasticsearch
      - TZ=Asia/Seoul                       # set your time zone
    depends_on:
      - archivist-es
      - archivist-redis
    networks:
      - compose      
      
  archivist-redis:
    image: bbilly1/rejson:v2.0.8          # for arm64 use bbilly1/rejson
    container_name: Tube_archivist-redis
    restart: always
    expose:
      - 6380      # don't use 6379 on ARM64
    volumes:
      - /path/your/compose/redis:/data
    command: --port 6380 --loadmodule /usr/lib/redis/modules/librejson.so # don't use rejson.so
    depends_on:
      - archivist-es
    networks:
      - compose
      
  archivist-es:
    image: elasticsearch:7.17.3         # only for amd64, or use official es 7.17.3
    container_name: Archivist-es
    restart: always
    user: "1000"
    environment:
      - "xpack.security.enabled=true"
      - "ELASTIC_PASSWORD=verysecret"       # matching Elasticsearch password
      - "discovery.type=single-node"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /path/your/compose/es:/usr/share/elasticsearch/data    # check for permission error when using bind mount, see readme
    expose:
      - 9200
    networks:
      - compose

networks:
  compose:
    driver: bridge

 

 

제가 추가한 일부 설정 외에는 따로 건드린 것이 없으니 혹시나 필요하시면 수정해서 사용하시면 됩니다.

 


 

2. docker-compose.yml 실행 전 행동 (확실하지 않음)

 

다른 디렉터리는 docker-compose를 통하여 생성되어도 크게 문제 없습니다. 하지만 Eleasicsearch가 바인딩될 디렉터리는 sudo를 사용하지 않고 생성하여 권한을 현재 로그인 한 계정으로 만들 필요가 있습니다. 따라서

 

mkdir ~/docker/TubeArchivist/es

 

로 생성하여 볼륨을 바인딩해야합니다. 혹시나 이미 docker-compose를 통하여 docker 컨테이너에 바인딩된 볼륨이 있어 sudo를 사용하지 않고 만들 수 없다면 아래의 3번 항목을 확인하시면 됩니다.

 


 

3. es 디렉터리 생성 및 권한 변경

 

먼저 위의 docker-compose를 실행합니다.

 

docker-compose up -d

 

그리고 컨테이너가 실행되면 바로 종료합니다.

 

docker-compose down

 

 종료하고 Elasticsearch에 바인딩된 볼륨의 소유자를 변경합니다.

 

sudo chown 1000:1000 /path/your/compose/es

 

그리고 docker-compose를 실행합니다.

 

docker-compose up -d

 


 

충분한 설명이 되었는지 모르겠습니다. 리눅스를 조금이나마 공부했다면 크게 문제가 되지 않을 수준이지만 처음해보시는 분이라면 많이 어려울 수도 있습니다. 따라서 라즈베리파이 같은건 쓰지 말고 얌전히 헤놀/시놀 혹은 x86 시스템만 쓰는 바람직한(?) 사용자(???)가 됩시다.

 

추가:

image.png.jpg

 

image.png.jpg

 

정상작동 확인했습니다. 지금은 한번 초기화 했는데 다운로드도 잘 되더라구요.

신고공유스크랩
4
1등
뻘짓의초심자 2022.05.23. 22:03

대단하십니다... 전 elasticsearch의 볼륨 부분만 건드렸다가 말았다가 했는데 역시 고수는 다르시네요

깃허브 확인 능력부터가 남다르셨던 이유가 있군요

profile image
ExpBox 글쓴이 2022.05.23. 22:27
뻘짓의초심자

그렇게 말씀해주셔서 감사합니다. 하지만 당장에 헤놀 작업하시는 핫포사이 님, 화정큐삼 님 외 여러가지로 활약하시는 분들 보면 정말 저는 아직 새발의 피도 안되는걸 느낍니다. ㅠㅠ 저도 더 노력해야죠. 이것도 뻘짓의초심자님도 시간만 더 있으셨으면 해결하셨을겁니다. ㅎㅎ

profile image
ExpBox 글쓴이 2022.05.24. 10:46
달소

생각보다 깃허브에 있는 정보가 정확하지 않아서 설명대로 따라했는데도 불구하고 오류가 나더라구요. 로그 찍고 어디서 문제 일어나는지 분석하고 검색했는데 거진 다 영어라서 혼났습니다 ㅠ 크롬 번역기도 가끔 이상해져서..

 

그래도 다행인건 Portainer라도 있어서 가시성이라도 좋았던거.. 그거 아니었으면 진작에 포기했을 것 같아요.

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story
번호 분류 제목 글쓴이 날짜 조회 추천
오픈소스 Hoarder 소개 📦 - AI 기반 태깅 기능을 갖춘 오픈 소스 Bookmark-Everything 앱(mymind 오픈 소스 대안) 6 달소 1일 전22:53 194 +1
정보 Proxmox) VMware ESXi 기반 가상 머신 마이그레이션에 사용할 수 있는 새로운 가져오기 마법사 5 달소 1일 전22:48 100 +1
정보 안녕하세요! 새로 가입했습니다. 6 Razorbacks 1일 전18:06 91 +1
383 잡담
normal
kmw_ 9시간 전13:43 242 0
382 잡담
image
주차장 3일 전17:47 512 +1
381 잡담
normal
아나나나나다 24.03.21.12:58 384 0
380 잡담
image
빨간물약 24.03.20.14:09 288 0
379 잡담
image
bass9030 24.03.18.18:16 410 0
378 잡담
image
purndal 24.03.16.15:15 222 +1
377 잡담
image
purndal 24.03.15.10:49 184 +3
376 잡담
image
달소 24.03.14.22:23 200 +2
375 잡담
image
달소 24.03.11.23:27 147 0
374 잡담
image
달소 24.03.08.16:56 373 0
373 잡담
normal
달소 24.03.08.16:51 163 0
372 잡담
image
eyeball 24.03.04.10:47 486 +2
371 잡담
image
짝퉁교보 24.03.03.03:26 669 0
370 잡담
image
ljr10 24.02.29.16:48 368 0
369 잡담
image
서하 24.02.27.21:53 620 +2
368 잡담
image
kmw_ 24.02.26.19:24 274 +1
367 잡담
normal
서맹 24.02.25.22:10 184 0
366 잡담
image
달소 24.02.25.00:38 309 0
365 잡담
image
kmw_ 24.02.22.21:35 185 0
364 잡담
image
달소 24.02.19.22:45 471 +1