Docker-Compose零成本搭建一个ipfs图床取代telegraph图床

telegraph图床最近调整了服务政策,限制图床服务,我们可以白嫖ipfs图床。

拉取前端代码

git clone https://github.com/img2ipfs/img2ipfs

部署ipfs节点

创建 docker-compose.yaml 文件。

version: '3.8'
services:
  ipfs:
    image: ipfs/kubo
    restart: unless-stopped
    volumes:
      - ./ipfs:/data/ipfs
    environment:
      - IPFS_PATH=/data/ipfs
    ports:
      # p2p 通信端口
      - 4001:4001/tcp
      - 4001:4001/udp
      
      # API 端口
      - 127.0.0.1:5001:5001
      
      # HTTP 网关端口
      - 127.0.0.1:8080:8080

  caddy:
    image: caddy
    restart: unless-stopped
    ports:
      - "8080:8080"
      - "443:443"
      - "80:80"
    volumes:
      - ./img2ipfs:/app
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy_data:/data
      - ./caddy_config:/config
    depends_on:
      - ipfs

请根据情况自己修改域名、端口这些。

Caddyfile

# 图片网关代理,可以不要,白嫖别人的
http://i1.img2ipfs.com {
    reverse_proxy ipfs:8080
}

# 上传接口 只给上传文件这个接口,其它不给
http://api.img2ipfs.org {
    reverse_proxy /api/v0/add ipfs:5001 {
    }
}

# 网站前端
http://img2ipfs.org {
    root * /app
    @static {
        file
        path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.woff2 *.webp
    }
    header @static Cache-Control max-age=31536000
	  encode gzip zstd
}

ipfs的数据保存在当前目录的 ipfs 里面。

启动节点docker-compose up,让节点初始化,然后关闭节点。

编辑 ipfs/config 文件,增加跨站访问权限。

{
"API": {
		"HTTPHeaders": {
			"Access-Control-Allow-Origin": [
				"https://cdn.ipfsscan.io",
				"*"
			]
		}
	}
}

你可以只设置自己的域名,也可以设置为 * 。

修改前端代码

修改 static/file.js 第79行的API上传接口,其它想改的地方也可以修改。

启动

docker-compose up -d

ipfs图床的优势

  • 存储空间和流量成本很低,白嫖了大量其它网关和节点。
  • 通过这种方式上传的图片,不会被压缩,也不会被打码,100%原图。
  • 不会因为网站停止运行导致图片丢失,你随时可以换一个ipfs网关。
  • 图片看的人越多,图片被复制到的节点越多,越可靠。

ipfs图床的劣势

  • 冷门图片加载速度慢,甚至可能丢失(一年以上没有人看)

样例展示

https://cdn.ipfsscan.io

0%