1 분 소요

파일을 분산 저장하기 위해 IPFS를 사용해보고 Private Network를 만드는 방법에 대해 작성하였습니다.

공식 사이트를 보며 Ubuntu 18.04 LTS(ubuntu-18.04-desktop-amd64)에서 진행되었습니다.

IPFS

IPFS(InterPlanetary File System)은 분산 파일 시스템을 위한 프로토콜, 네트워크입니다.

Download

go-ipfs에서 본인의 환경에 맞는 바이너리 파일을 다운받을 수 있습니다.

$ wget https://dist.ipfs.io/go-ipfs/v0.4.17/go-ipfs_v0.4.17_linux-amd64.tar.gz
$ tar zxvf go-ipfs_v0.4.17_linux-amd64.tar.gz
$ cd go-ipfs
$ sudo ./install.sh
Moved ./ipfs to /usr/local/bin
$ ipfs version
ipfs version 0.4.17

Initialize

$ ipfs init
initializing IPFS node at /home/jbshin/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmNUc5j4XQQXdUMPpqX1w1d5p68433D7NvfExzi43eLbGr
to get started, enter:

        ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

$ ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme
Hello and Welcome to IPFS!

██╗██████╗ ███████╗███████╗
██║██╔══██╗██╔════╝██╔════╝
██║██████╔╝█████╗  ███████╗
██║██╔═══╝ ██╔══╝  ╚════██║
██║██║     ██║     ███████║
╚═╝╚═╝     ╚═╝     ╚══════╝

If you're seeing this, you have successfully installed
IPFS and are now interfacing with the ipfs merkledag!

 -------------------------------------------------------
| Warning:                                              |
|   This is alpha software. Use at your own discretion! |
|   Much is missing or lacking polish. There are bugs.  |
|   Not yet secure. Read the security notes for more.   |
 -------------------------------------------------------

Check out some of the other files in this directory:

  ./about
  ./help
  ./quick-start     <-- usage examples
  ./readme          <-- this file
  ./security-notes

Daemon

IPFS 데몬을 실행합니다.

$ ipfs daemon

데몬을 실행한 후 브라우저를 이용해 웹 콘솔을 이용할 수 있습니다. http://localhost:5001/webui image

파일 업로드

간단한 HTML 파일을 작성해 IPFS에 업로드해보겠습니다.

<!-- first.html -->
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>IPFS HTML</title>
</head>
<body>
  <h2>Distributed Web Page</h2>
</body>
</html>
$ ipfs add first.html
added QmT1KG2yrTV4oFUmX6f3uMzjNBAt56D5BTi1NH2JnTNSUC first.html

https://gateway.ipfs.io/ipfs/QmT1KG2yrTV4oFUmX6f3uMzjNBAt56D5BTi1NH2JnTNSUC
image

(선택) Private Network

$ 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
$ ./main > ~/.ipfs/swarm.key

swarm.key를 원하는 피어와 공유하면 됩니다!

실행시 연결될 피어들입니다.

$ ipfs bootstrap list
/dnsaddr/bootstrap.libp2p.io/ipfs/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN
/dnsaddr/bootstrap.libp2p.io/ipfs/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa
/dnsaddr/bootstrap.libp2p.io/ipfs/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb
/dnsaddr/bootstrap.libp2p.io/ipfs/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt
/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM
/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64
/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu
/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd
/ip6/2400:6180:0:d0::151:6001/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu
/ip6/2604:a880:1:20::203:d001/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM
/ip6/2604:a880:800:10::4a:5001/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64
/ip6/2a03:b0c0:0:1010::23:1001/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd

Private Network로 사용하기 위해 Bootstrap을 모두 삭제하였습니다.

$ ipfs bootstrap rm --all

피어로 참여할 곳을 ipfs bootstrap add를 이용해 추가합니다.

테스트를 해봐야겠죠??
이번에도 역시 HTML 파일을 하나 생성해봅니다.

<!-- private.html -->
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>IPFS Private Network</title>
</head>
<body>
  <h2>Private Network</h2>
</body>
</html>
$ ipfs add private.html
added QmengBxWX2CQKvXyE3kXgNXWw3U8A63S53QD72jFqfw4Yb private.html

http://localhost:8080/ipfs/QmengBxWX2CQKvXyE3kXgNXWw3U8A63S53QD72jFqfw4Yb
image
HTML 파일이 정상적으로 업로드되었네요.

그럼 아까 접속했던 gateway.ipfs.io도 확인해봐야겠죠?
image
저런… 연결되지 않습니다.
성공했네요!

카테고리:

업데이트:

댓글남기기