티스토리 뷰
go-ipfs: 로컬 환경에서 IPFS Private 네트워크 실행
go-ipfs
를 이용해 로컬 환경에서 IPFS Private 네트워크를 실행하는 방법에 대해 알아보겠습니다.
네트워크 환경 준비
두 대의 호스트(HOST1
, HOST2
)를 이용해 IPFS Private 네트워크를 실행하도록 하겠습니다.
테스트를 위해 두 대의 호스트에 각각 IPFS를 설치합니다.
IPFS 네트워크 설치에 대한 기본 내용은 다음 글을 참조하시기 바랍니다.
[IPFS] go-ipfs: 로컬 환경에서 IPFS 네트워크 실행
IPFS Swarm Key 생성
IPFS Private 네트워크를 실행하기 위해서는 IPFS Swarm Key가 필요합니다. Swarm Key는 private 네트워크를 구성할 peer들 사이에 공유되어야 하는 private key를 의미합니다. 동일한 Swarm Key를 가진 peer들이 하나의 IPFS Private 네트워크를 구성합니다.
이 단계는 한 대의 호스트에서만 진행하면 됩니다. 여기에서는 HOST1
에서 실행합니다.
swarm-key-gen 다운로드(HOST1에서 실행)
Swarm Key를 생성해주는 swarm-key-gen
을 다운로드합니다.
cd /opt/gopath/src/github.com/ipfs
# swarm-key-gen 다운로드
git clone https://github.com/Kubuxu/go-ipfs-swarm-key-gen.git
cd go-ipfs-swarm-key-gen
go build ipfs-swarm-key-gen/main.go
Swarm Key 생성(HOST1에서 실행)
이제 다음 명령을 통해 Swarm Key를 생성합니다.
# Swarm Key 생성
./main > ~/.ipfs/swarm.key
cat ~/.ipfs/swarm.key
위 명령의 실행 결과로 출력된 Swarm Key 값을 복사해둡니다.
※ 출력된 세 줄 모두 복사해야합니다!!
Swarm Key 복사(HOST2에서 실행)
HOST1
에서 생성해 복사해 둔 Swarm Key 값을 HOST2
에도 적용시켜줍니다.
HOST1
과 HOST2
에서 동일한 Swarm Key 값을 가지고 있어야 IPFS Private 네트워크를 실행할 수 있습니다.
# Swarm Key 복사
vi ~/.ipfs/swarm.key
/key/swarm/psk/1.0.0/
/base16/
6fdf6c932b22deef933bef0c87f3e565ea54058b355c5c3c2818f2656118901c
IPFS 실행
이 단계는 각 호스트에서 모두 실행해주어야 합니다.
IPFS 데몬 실행
이제, 각 호스트에서 IPFS 데몬을 실행합니다.
# IPFS 데몬 실행
ipfs daemon
연결된 peer 확인(HOST1, HOST2에서 실행)
새로운 터미널 창을 켜고 IPFS에 연결된 peer들을 확인합니다.
# 연결된 peer 확인
ipfs bootstrap list
만약 한 개의 peer라도 연결이 되어있는 경우에는 다음 명령을 실행해 연결된 모든 피어를 삭제합니다.
# 연결된 모든 peer 삭제
ipfs bootstrap rm --all
연결된 모든 peer가 삭제되었는지 확인합니다.
# 연결된 모든 peer 삭제 재확인
ipfs bootstrap list
config 파일 수정(HOST1, HOST2에서 실행)
config 파일을 출력해보면 Addresses
부분에 API
와 Gateway
가 다음과 같이 설정되어 있는 것을 확인할 수 있습니다.
# IPFS 구성 파일 확인
ipfs config show
"Addresses": {
"API": "/ip4/127.0.0.1/tcp/5001",
"Announce": [],
"Gateway": "/ip4/127.0.0.1/tcp/8080",
"NoAnnounce": [],
"Swarm": [
"/ip4/0.0.0.0/tcp/4001",
"/ip6/::/tcp/4001"
]
}
이제 이 API
와 Gateway
의 주소에서 127.0.0.1
을 0.0.0.0
으로 변경합니다.
0.0.0.0
은 IPv4 패킷을 전송하고자 하는 컴퓨터가 자신의 IP주소를 모르는 경우 통신을 하기 위해 사용됩니다. 보통 자신의 IP주소를 모르는 컴퓨터는 부트스트랩(컴퓨터의 전원을 킬 때나 재부팅할 때)이 진행되는 도중에 위 주소를 사용합니다.
이 신호를 보낸 컴퓨터는 자신의 주소를 알기 위해 이 주소를 발신지 주소로 설정하고 목적지 주소로 255.255.255.255
로 설정한 IP 패킷을 DHCP서버로 전송합니다. DHCP서버는 신호를 받은 후 해당 PC에 IP 주소를 알려주며 PC는 해당 주소를 자신의 IP 주소로 사용합니다.
# config 파일 수정
ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001
ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080
Libp2p는 개인 네트워크와 같은 연결 보호를 지원합니다. 환경 변수 LIBP2P_FORCE_PNET=1을 설정하여 네트워크 보호를 강화합니다. 이 변수가 켜져 있으면 options.connProtector를 통해 보호 기능을 설정하지 않으면 Libp2p가 생성시 오류가 발생합니다.
# 환경변수 설정
export LIBP2P_FORCE_PNET=1
IPFS 데몬 재실행(HOST1, HOST2에서 실행)
이제 실행중인 IPFS 데몬을 ctrl + C로 중지하고 다시 시작합니다.
# IPFS 데몬 재실행
ipfs daemon
peer 연결
IP 주소 확인(HOST1에서 실행)
HOST1
에서 ifconfig
명령을 실행해 자신의 IP 주소를 확인합니다. ens33
의 inet addr
에 출력되는 IP가 자신의 IP 주소입니다.
# IP 주소 확인
ifconfig ens33
IPFS ID 확인(HOST1에서 실행)
HOST1
에서 IPFS의 ID 정보를 확인합니다.
#IPFS ID 확인
ipfs id
'ipfs id
' 명령으로 출력된 Addresses 중에서 'ifconfig ens33
' 명령으로 출력된 ens33
의 inet addr
값이 포함된 Address를 복사합니다.
/ip4/<HOST1의 IP 주소>/tcp/4001/ipfs/QmTGksHmMkiLrvSXYTExiL7HFKfDxvNcTQAnJJFegGNLrR
IPFS에 부트스트랩 peer 추가(HOST2에서 실행)
HOST1
에서 복사한 Address
값을 IPFS 부트스트랩 peer 목록에 추가합니다.
# IPFS에 부트스트랩 peer 추가
ipfs bootstrap add /ip4/<HOST1의 IP 주소>/tcp/4001/ipfs/QmTGksHmMkiLrvSXYTExiL7HFKfDxvNcTQAnJJFegGNLrR
peer 연결 확인(HOST1, HOST2에서 실행)
이제 각 호스트에서 연결이 정상적으로 이루어졌는지 확인합니다.
# peer 연결 확인
ipfs swarm peers
파일 공유
IPFS Private 네트워크가 정상적으로 실행되었으니, 파일을 공유해보도록 하겠습니다.
파일 추가(HOST1에서 실행)
HOST1
에서 공유할 파일을 하나 만들어봅시다.
cd /opt/gopath/src/github.com/ipfs/go-ipfs
# 공유할 파일 생성
echo "IPFS P2P Private Network" > info.txt
그런 다음, IPFS에 해당 파일을 추가합니다.
# 파일 추가
ipfs add info.txt
ipfs add
명령의 실행 결과로 출력된 key를 복사해둡니다.
파일 확인(HOST2에서 실행)
위에서 복사한 key를 이용해 HOST2
에서 파일을 확인해봅니다.
# 파일 확인
#ipfs cat <ipfs key>
ipfs cat Qmdxcn6oWAciMQxSTgL79pgYCSMj318zFxvkN8677A2bmZ
동일한 파일 내용이 출력되는 것을 확인할 수 있습니다.
파일 다운로드(HOST2에서 실행)
이제 파일을 다운로드 해봅니다.
# 파일 다운로드
#ipfs get <ipfs key>
ipfs get Qmdxcn6oWAciMQxSTgL79pgYCSMj318zFxvkN8677A2bmZ --output=info.txt
--output
옵션을 사용해 저장할 파일명을 지정할 수 있습니다. 별도로 지정하지 않은 경우에는 ipfs key
값으로 저장됩니다.
'Development > IPFS' 카테고리의 다른 글
[IPFS] IPFS Cluster: Docker를 이용한 IPFS Cluster 구성 (3) | 2019.03.12 |
---|---|
[IPFS] go-ipfs: 로컬 환경에서 IPFS 네트워크 실행 (0) | 2019.03.08 |
- Total
- Today
- Yesterday
- 코딩테스트
- 빅데이터
- 빅데이터 교육
- 알고리즘
- javascript
- 암브로셔스
- 블록체인
- 하이퍼레저 인디
- Hyperledger Indy
- ubuntu
- 하이퍼레저 페브릭
- 직딩잇템
- codility
- 하이퍼레저 패브릭
- Blockchain
- 코딜리티
- 빅데이터 강의
- 문제풀이
- Private Data
- 블록 체인
- 코테
- 빅데이터 기초
- Hyperledger Fabric v1.2
- Hyperledger Fabric
- 기초 of 기초 데이터 개념
- 어서와 데이터는 처음이지
- DOCs
- docker
- ambrosus
- Hyperledger Fabric v1.1
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |