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
서로의 노드가 추가되어있다면 성공이다.
실습 예제
연결된 두 노드에 파일을 공유해보자.
간단한 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 |