본문 바로가기

Blockchain/IPFS

IPFS Private Network

swarm-key 생성

방법1​

찾아보니 사용하고 있는 ipfs 디렉토리에서 swarm key를 만들지 않아도 돼서 이 방법을 사용했습니다.

 

https://hub.docker.com/r/mattjtodd/ipfs-swarm-key-gen

 

Docker Hub

 

hub.docker.com

swarm key 생성 프로그램 도커 이미지입니다.

 

도커 이미지를 다운로드 받습니다.

$docker pull mattjtodd/ipfs-swarm-key-gen

해당 이미지를 실행시켜줍니다.

$docker run --rm -it mattjtodd/ipfs-swarm-key-gen

아래 이미지와 같이 세 줄의 결과가 나타나는데 이 결과를 파일에 저장해둬야 합니다.

 

방법2

go 명령어를 통해 swarm ket generator를 다운받습니다.

 $go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen

 

swarm key generator 저장 폴더 경로를 쳐주고 swarm.key 파일을 저장할 경로도 쳐줍니다.

$./go/bin/ipfs-swarm-key-gen > ~/ipfs/swarm.key

 

swarm.key 파일을 열어보면 방법1 결과와 같은 형식의 내용이 저장되어 있습니다.

 

 

Docker로 Node 실행

도커로 ipfs를 실행시키기 전에, 각 노드에서 사용할 폴더들을 미리 만들어줘야 합니다.

여기서는 node 2개를 사용할거기 때문에 각 노드에 대한 파일을 만들겠습니다.

 

  • home/usr/ipfs/node1/staging
  • home/usr/ipfs/node1/data
  • home/usr/ipfs/node2/staging
  • home/usr/ipfs/node2/data

 

저는 ipfs 폴더 안에 node1,node2 폴더를 만들고 각각 staging,data 폴더를 만들었습니다.

 

 

노드1 생성

$docker run -d --name ipfs_node1 -e IPFS_SWARM_KEY_FILE=$HOME/ipfs/swarm.key -v $HOME/ipfs/node1/staging:/export -v $HOME/ipfs/node1/data:/data/ipfs -p 4001:4001 -p 4001:4001/udp -p 127.0.0.1:8080:8080 -p 127.0.0.1:5001:5001 ipfs/go-ipfs:latest

노드2 생성

docker run -d --name ipfs_node2 -e IPFS_SWARM_KEY_FILE=$HOME/ipfs/swarm.key -v $HOME/ipfs/node2/staging:/export -v $HOME/ipfs/node2/data:/data/ipfs -p 4002:4001 -p 4002:4001/udp -p 127.0.0.1:8081:8080 -p 127.0.0.1:5002:5001 ipfs/go-ipfs:latest

 

 

 

IPFS에 연결된 초기 peer들을 확인합니다

$docker exec ipfs_node_1 ipfs bootstrap list
$docker exec ipfs_node_2 ipfs bootstrap list

 

연결된 peer가 있다면 아래 명령어로 연결된 모든 피어를 삭제합니다.

$docker exec ipfs_node_1 ipfs bootstrap rm all  
$docker exec ipfs_node_2 ipfs bootstrap rm all

 

각 노드의 id와 주소를 알아야합니다.

$docker exec ipfs_node_1 ipfs id  
$docker exec ipfs_node_2 ipfs id

위 명령어를 실행해서 "ID" 와 "Address"를 기억해둡니다.

 

 

node1에 node2를 추가합니다.

$docker exec ipfs_node_1 ipfs bootstrap add [node2 address]

node2에 node1을 추가합니다.

$docker exec ipfs_node_1 ipfs bootstrap add [node1 address]

 

실행되고 있는 도커를 모두 종료 후 다시 실행시키고, 두 노드가 서로 연결됐는지 확인한다. 

$docker exec ipfs_node_1 ipfs swarm peers
$docker exec ipfs_node_2 ipfs swarm peers

 

Node1 swarm peers

 

Node2 swarm peers

 

서로의 노드가 추가되어있다면 성공이다.

 

 

실습 예제

연결된 두 노드에 파일을 공유해보자.

간단한 txt 파일을 만들고 공유를 하려고 아래 명령어를 실행시켰다.

$docker exec ipfs_node1 echo "IPFS PRIVATE NETWORK TEST" > info.txt
$docker exec ipfs_node1 add info.txt

하지만 아래와 같은 오류만....ㅠ

info.txt파일은 도커 컨테이너 내부의 디렉토리가 아닌 내 home 디렉토리에 저장되어 있었다.

 

$docker exec -ti ipfs_node1 bin/sh

위 명령어를 실행시켜서 도커 내부의 디렉토리를 살펴보았다.

home에 tmp폴더를 만들고 그 안에 test.txt 파일을 저장하고 나왔다.

 

 

$docker exec ipfs_node1 add home/tmp/test.txt

성공...!

 

이제 node2에 가서 파일이 공유되었는지 확인해보자.

$docker exec ipfs_node2 ipfs cat QmVYdgNn9v9e8w8qnSS8C1V3Mv6gULQoGzTw61YXSzYPBS

공유가 제대로 된걸 확인할 수 있다.

'Blockchain > IPFS' 카테고리의 다른 글

IPFS Pub/Sub  (0) 2022.03.18
Go 설치  (0) 2022.03.16