Docker로 Synology NAS에서 Sia 실행하기
원문은 Michael Lynch님이 에 게재했습니다. 이 블로그 구독하기
개요
Sia는 컴퓨터 저장 공간을 사고팔기 위한 탈중앙화 P2P 네트워크다. 여분의 저장 공간이 있다면 Sia를 통해 Sia 클라우드 네트워크에 파일을 저장하려는 다른 사람들에게 그 공간을 판매할 수 있다.
개인용 노트북이나 데스크톱에서 Sia 서버를 호스팅하는 것은 쉽지 않다. 사람들은 보통 개인용 컴퓨터를 가끔 끄거나, 적어도 정기적으로 재부팅한다. 이는 네트워크의 클라이언트에 서비스를 제공하기 위해 높은 가용성을 유지해야 하는 Sia 같은 애플리케이션에는 문제가 된다.
편리한 해결책은 네트워크 연결 저장소(NAS) 장치에서 Sia를 실행하는 것이다. NAS는 항상 전원이 켜진 상태를 유지하도록 설계되었고 재부팅이 거의 필요 없다. 게다가 NAS의 존재 이유 자체가 대용량 저장소를 제공하는 것이므로 여유 공간이 많을 가능성이 크다. 많은 상용 NAS 장치는 Sia를 실행할 수 있는 가상화 도구인 Docker를 지원한다.
이 가이드에서는 Docker를 이용해 NAS 장치에 Sia 서버를 구축하는 방법을 보여준다.
왜 호스팅해야 할까?
Sia를 처음 접하는 많은 사람들이 “Sia에서 호스팅하면 돈을 많이 벌 수 있나요?”라고 묻는다. 솔직한 답은 Sia에서 스토리지를 호스팅하는 것은 수익성이 없다는 것이다… 아직은.

저장 공간 임대 시장은 아직 임계 규모에 도달하지 못했다. 내가 가장 좋아하는 Sia 호스트 탐색기인 SiaHub에 따르면 Sia 네트워크의 전체 저장 용량(2017-05-25 기준)은 무려 1.1페타바이트에 달한다. 그중 임대된 용량은 2%에 불과하다. 이렇게 공급이 과잉인 상황에서는 호스트가 저장 공간 가격을 거의 0에 가깝게 책정하지 않으면 판매하기 어렵다.
아직 큰돈이 들어오지는 않지만, 그럼에도 참여할 만한 이유는 몇 가지 있다:
임대 시장이 성공하면 유리한 위치를 선점할 수 있다
Storj 같은 경쟁 서비스와 달리, Sia는 일반 가정 사용자보다 기업 고객에게 저장 공간을 판매하는 것을 목표로 한다. 지금까지 Sia에 크게 의존하는 대기업은 없지만, 중견·중대기업 단 한 곳이라도 Sia를 저장소 백엔드로 사용하기 시작하면 시장 전체가 본격적으로 활성화될 수 있다.
사용자가 Sia에서 저장 공간을 구매할 때 호스트 선택 알고리즘은 네트워크에 더 오래 참여한 호스트를 강하게 우대한다. 즉, 구매 열풍이 불 경우 수개월간 안정적으로 운영된 호스트가 새로 네트워크에 합류한 호스트보다 훨씬 유리한 위치를 차지하게 된다.
재미있다
나는 개인적으로 새로운 것을 실험해 보고 싶어서 호스팅을 한다. 호스트 가격을 조정하면서 저장소 계약 수가 어떻게 달라지는지 지켜보는 것이 재미있다. Sia 덕분에 다른 Sia 사용자들로 이루어진 열정적인 커뮤니티와 연결될 수도 있었다.
소프트웨어 버전
이 가이드는 작성 시점 기준 각 소프트웨어 구성 요소의 최신 버전을 사용한다:

Synology DS412+ NAS 장치
- DiskStation Manager (DSM) 6.1.2-15132
- Sia v.1.3.4
- Docker v.1.11.2
이 가이드는 Synology DSM 시스템을 기준으로 작성되었지만, Docker와 관련된 단계는 Docker를 지원하는 모든 플랫폼에 적용할 수 있다.
이 과정은 Synology DS412+에서 성공적으로 테스트했지만, 최신 DSM과 충분한 CPU/RAM을 갖춘 모든 Synology NAS에서 동작해야 한다. QNAP NAS 같은 풀스펙 컨슈머 NAS에 맞게 이 설명을 적용하는 것도 어렵지 않을 것이다.
NAS 설정하기
Docker 설치
먼저 Docker를 설치한다.
Docker는 DSM에서 사용할 수 있는 몇 안 되는 Synology 공식 패키지 중 하나다. Package Center에서 docker를 검색한 뒤 “Install”을 클릭하면 된다.

Sia 디렉터리 만들기
다음으로 Sia 전용 Shared Folder를 만든다. 이 폴더는 암호화된 지갑 파일과 블록체인 데이터베이스를 포함한 Sia의 모든 상태 정보를 저장할 곳이다.
File Station에서 새 Shared Folder를 만들고 이름을 “sia”로 지정한다:

DiskStation에 SSH 접속 활성화하기
Sia용으로 미리 패키징된 Docker 이미지는 없으므로, Docker 이미지를 정의하는 Dockerfile을 직접 만들게 된다. DSM Docker 앱에서는 Dockerfile로부터 이미지를 생성하는 기능을 지원하지 않으므로, 이 작업은 커맨드 라인에서 수행해야 한다.
이 기능을 활성화하려면 Control Panel > Terminal & SNMP를 열고 “Enable SSH service” 옆의 체크박스를 선택한다.

Docker 컨테이너 만들기
네트워크상의 다른 컴퓨터에서 SSH로 NAS에 접속한다. Linux와 OS X 사용자는 터미널에서 다음 명령을 실행하면 된다. Windows 사용자는 Cygwin 같은 SSH 클라이언트가 필요하다.
ssh admin@diskstationSSH로 NAS에 접속한 뒤 다음 명령을 실행한다:
# NOTE: Replace 10.0.0.101 with the IP address of your Synology NAS on your
# local network.
LOCAL_IP=10.0.0.101
# Create a Docker container based on the Sia image and start running it in the
# background.
sudo docker run \
--detach \
--volume /volume1/sia:/sia-data \
--publish "${LOCAL_IP}:9980:9980" \
--publish 9981:9981 \
--publish 9982:9982 \
--restart always \
--name sia-container \
nebulouslabs/sia위 명령은 다음을 수행한다:
- 내 비공식 Sia Docker 이미지를 다운로드한다.
- 해당 이미지로부터 Docker 컨테이너를 생성하고 백그라운드에서 실행한다.
- NAS(Docker 호스트)의 포트
9980-9982로 들어오는 트래픽을 Sia 컨테이너 내부의 동일한 포트 번호로 포워딩한다.- 중요: 포트
9980의 경우 로컬 네트워크 인터페이스에만 바인딩하고, 다른 포트들은 암시적으로 모든 인터페이스에 바인딩한다는 점에 유의하자. 이는 보안 조치다. 포트9980에서siad와 통신할 수 있는 사람은 호스트를 완전히 제어할 수 있으며, 예를 들어 지갑을 비울 수도 있다. 이 조치는 네트워크가 해당 포트를 외부에 노출하지 않는다면 엄격히 필수적인 것은 아니지만, 그럼에도 유용한 예방책이다. - 내 NAS의 IP 주소는
10.0.0.101이다. NAS의 IP 주소는 로컬 네트워크의 다른 컴퓨터에서dig diskstation +short명령으로 찾을 수 있다.
- 중요: 포트
성공 여부 확인
DSM에서 Docker 앱을 열고 “Container” 패널을 확인한다. 다음과 비슷한 화면이 보여야 한다:

앞서 만든 “sia” Shared Folder를 열어 보면 siad가 여러 폴더를 생성한 것을 확인할 수 있다:

Sia 설정하기
상태 확인
커맨드라인 클라이언트인 siac를 이용해 Sia 데몬에 연결해 보자.
siad가 NAS에서 실행 중이면 로컬 네트워크상의 다른 컴퓨터에서 Sia와 통신할 수 있다. 해당 컴퓨터에는 최신 Sia 릴리스가 필요하다.
siac 바이너리를 컴퓨터에 복사한 뒤, addr 파라미터에 NAS의 호스트 이름을 지정해 siac 명령을 실행할 수 있다:
# DISKSTATION is the hostname of the NAS on my local network, the default for
# Synology NAS devices.
$ ./siac --addr DISKSTATION:9980
Synced: No
Block: 0000000001ac2429ee234370ddf139ce87161277eded4bd58bcd31c5e5e2554f
Height: 727
Target: [0 0 0 0 12 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204 204]호스트 저장 공간 추가
다른 Sia 사용자들에게 판매할 저장 공간을 만들려면, “sia” shared folder 안에 host-storage라는 전용 하위 디렉터리를 만든다:

그런 다음 siac를 이용해 해당 폴더를 새로운 Sia 호스트 저장소 폴더로 추가한다:
./siac --addr DISKSTATION:9980 host folder add /sia-data/host-storage 500GB/sia-data/host-storage는 siac 관점이 아니라 Docker 컨테이너 내부의 데몬 관점에서 본 경로라는 점에 유의하자.
방화벽에서 Sia 허용하기
Sia는 포트 9981과 9982를 통해 원격 피어와 통신해야 한다. 홈 라우터를 사용하는 경우, 이 포트들을 Synology NAS로 포워딩하도록 설정해야 한다. 정확한 과정은 라우터마다 다르지만, 대략 다음과 같은 형태가 될 것이다:
참고: 10.0.0.101을 Synology NAS의 IP 주소로 교체한다.

포트 9980은 Sia의 API 통신용 포트이므로 외부에 노출해서는 안 된다. 이 포트를 공용 인터넷에 노출하면 Sia 호스트가 공격에 취약해진다.
Sia 업그레이드 방법
Sia는 아직 새로운 기술이라 몇 달마다 중요한 새 릴리스가 나온다. 임차인은 서버 버전을 보고 파일 계약을 맺을 호스트를 결정하므로, 새 릴리스가 나온 뒤 가급적 빨리 업그레이드하는 것이 유리하다.
이 가이드를 따라 했다면 Sia의 모든 상태는 Docker 컨테이너 외부에 보관되므로, Sia 지갑이나 저장소 계약에 영향을 주지 않고 안전하게 업그레이드할 수 있다.
SSH로
admin계정으로 NAS에 접속한다.ssh admin@diskstation다음 명령을 실행한다:
# Gracefully shut down Sia sudo docker exec -it sia-container ./siac stop # Remove the old container. # NOTE: If Docker says the container is still running, wait a few minutes to # allow siad to finish shutting down gracefully and re-try this command. # It may take up to 10 minutes. sudo docker rm sia-container # Upgrade to the latest Sia Docker image sudo docker pull nebulouslabs/sia # NOTE: Replace 10.0.0.101 with the IP address of the Synology NAS on your # local network. LOCAL_IP=10.0.0.101 # Re-create the Docker container. sudo docker run \ --detach \ --volume /volume1/sia:/sia-data \ --publish "${LOCAL_IP}:9980:9980" \ --publish 9981:9981 \ --publish 9982:9982 \ --restart always \ --name sia-container \ nebulouslabs/sia
이 과정을 완료하면 최신 버전의 Sia를 실행하는 새로운 Sia Docker 컨테이너가 동작하게 된다.
결론
이제 NAS가 켜져 있는 한 계속 온라인 상태를 유지하는 Sia 노드가 생겼다.
이 구성은 Sia의 모든 영구 상태를 컨테이너 외부에 보관하므로, 새 릴리스가 게시될 때마다 Sia 노드를 매우 쉽게 업그레이드할 수 있다.
더 읽어보기
이 가이드에서는 호스트를 구동하는 방법까지 다뤘지만, 호스트를 제대로 설정하고 수익을 극대화하도록 최적화하려면 추가로 해야 할 일이 더 있다. Sia 커뮤니티 멤버인 RBZL이 훌륭한 가이드를 작성해 두었다:
글을 무작위로 읽기
댓글
로그인하고 댓글 남기기