ipfs的安装和go-ipfs-api的简单使用

1. ipfs安装

1.1 二进制安装

参考文档:https://docs.ipfs.tech/install/command-line/#official-distributions

# 1. 从官网下载资源文件
wget https://dist.ipfs.tech/kubo/v0.16.0/kubo_v0.16.0_linux-amd64.tar.gz

# 2. 解压资源文件
tar zxvf https://dist.ipfs.tech/kubo/v0.16.0/kubo_v0.16.0_linux-amd64.tar.gz

# 3. 执行install.sh
./install.sh

1.1.1 启动ipfs服务

# 1. 初始化ipfs
ipfs init # 执行完后,默认初始化配置在/root/.ipfs目录下。可以通过设置环境变量自行指定初始化目录:export IPFS_PATH=/data_ipfs

# 2. 启动ipfs服务
ipfs daemon  # 此时ipfs是在前台执行,退出终端后,服务自行退出

说明:直接启动ipfs服务后,本地节点会自动连接到官网的节点,可以通过: ipfs swarm peers查看对应节点

# 3. 将ipfs加入系统服务,使用sytemctl 进行管理
vim /usr/lib/systemd/system/ipfs.service

[Unit]
Description=IPFS daemon
After=network.target
[Service]
Environment=IPFS_PATH=/data_ipfs  # 注意此处需要和init的目录保持一致
ExecStart=/usr/local/bin/ipfs daemon
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target

# 4. 加载系统配置
systemctl	daemon-reload

# 5. 通过systemctl 启动ipfs服务
systemctl start ipfs

# 6. 查看ipfs状态
systemctl status ipfs

# 7. 停止ipfs
systemctl stop ipfs

1.1.2 配置文件修改

ipfs的配置文件在IPFS_PATH目录下的config。此时的ipfs服务除4001端口外不能够被其他服务器访问,因为绑定的ip地址为127.0.0.1。如果需要访问5001和8080对应端口。需要修改config中对应绑定的ip地址即可

1.2 docker安装ipfs

# 1. 从dockerhub上拉取最新的ipfs镜像
docker pull ipfs/go-ipfs:latest

# 2. 启动ipfs服务
version: "3"
services:
  ipfs:
    container_name: ipfs
    image: ipfs/go-ipfs:latest
    restart: always
    environment:
      - privileged=true
    networks:
      - outside
    volumes:
      - "./data/ipfs:/data/ipfs"
    ports:
      - "5001:5001"
      - "4001:4001"
      - "8080:8080"
    ulimits:
      nproc: 65535
      nofile:
        soft: 65535
        hard: 65535
networks:
  outside:
    external:
      name: ipfs

说明:docker部署的ipfs服务。经过自行一段时间的使用,发现用docker部署的ipfs服务,跑的时间两三个星期后。就无法docker-compose down掉。无论是kill ipfs服务,还是docker-compose down还是关掉docker进程。都会是docker服务崩溃。只能通过重启服务器进行解决。通过在网上搜索,发现有网友解释是因为3.x的内核无法更好的适配docker的overlay2相关特性,需要4.x内核才可以。所以不建议使用docker进行生产环境的部署。

3. ipfs数据迁移

如果需要迁移ipfs数据时。只需要将原有ipfs服务中的IPFS_PATH映射到新的ipfs服务即可

# 1. 将旧的ipfs服务拷贝到需要部署新的ipfs服务器中

# 2. 设置IPFS_PATH为拷贝的旧ipfs服务的目录

# 3. 启动新的ipfs服务即可

4. 访问webui

# 1. 通过localhost:5001/webui访问可视化管理界面
说明:如果不是本地访问,需要改5001绑定的服务ip(不能为127.0.0.1),需要改为0.0.0.0或者对应服务器(部署ipfs)的ip地址

5. 通过go-sdk使用ipfs服务

package utils

import (
	"bytes"
	"context"
	"encoding/base64"
	"fmt"
	"io/ioutil"
	shell "github.com/ipfs/go-ipfs-api"
)

type Ipfs struct {
	Url string
	Sh  *shell.Shell
}

func NewIpfs(url string) *Ipfs {
	sh := shell.NewShell(url)
	return &Ipfs{
		Url: url,
		Sh:  sh,
	}
}

// UploadIPFS 上传数据到ipfs
func (i *Ipfs) UploadIPFS(str string) (hash string, err error) {
	hash, err = i.Sh.Add(bytes.NewBufferString(str), shell.Pin(true))
	if err != nil {
		return
	}
	return
}

// UnPinIPFS 从ipfs上删除数据
func (i *Ipfs) UnPinIPFS(hash string) (err error) {
	err = i.Sh.Unpin(hash)
	if err != nil {
		return
	}

	err = i.Sh.Request("repo/gc", hash).
		Option("recursive", true).
		Exec(context.Background(), nil)
	if err != nil {
		return
	}

	return nil
}

// CatIPFS 从ipfs下载数据
func (i *Ipfs) CatIPFS(hash string) (string, error) {
	read, err := i.Sh.Cat(hash)
	if err != nil {
		return "", err
	}
	body, err := ioutil.ReadAll(read)

	return string(body), nil
}

6. 参考文档

https://www.cnblogs.com/yoyo1216/p/12450487.html

https://docs.ipfs.tech/install/command-line/#official-distributions

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值