[Unit] Description=IPFS daemon After=network.target # IMPORTANT! If you are running on a VPS/dedicated/similar # `ipfs init --profile=server` or immediately after setting it up # `ipfs profile apply server`. # I would probably recommend `ipfs init --profile=badgerds && ipfs profile apply server` # REF: https://github.com/ipfs/go-ipfs/issues/4343 "Running IPFS on VPS # (closed in favour of https://github.com/ipfs/go-ipfs/issues/6932 # "[META] Private Addresses In Public") # providers triggers netscan detection, risking account termination" [Service] ExecStartPre=/usr/bin/sudo -n /usr/bin/protonvpn connect --p2p ExecStart=/home/mikaela/go/bin/ipfs daemon --routing=dht --enable-gc --enable-namesys-pubsub # My attempts at explaining flags above + --mount for fuse # --mount - fuse for /ipfs and /ipns, see # https://github.com/ipfs/go-ipfs/blob/master/docs/fuse.md as it requires # some specific config, I am not setting it as default here. # --routing=dht - if the IPFS node is publicly accessible, it serves as # `dhtserver` to the network possibly using more bandwidth, but also making # hosted content more findable. Otherwise it will work as `dhtclient` not # serving the network, but also saving bandwidth # --enable-gc - automatic cleaning of unpinned files per rules in ipfs # config, I think by default two hours or when the repo gets bigger than # 10G # --enable-namesys-pubsub - real time previously cached ipns updates # # My specific config: # ipfs config Reprovider.Strategy pinned - advertise only pinned files # to the network to reduce connections instead of also cached content # (which they will still be able to download, see ipfs/go-ipfs#4145) # ipfs config Swarm.ConnMgr.GracePeriod 1s - to get rid of excess # connections quickly # ipfs config --json Swarm.ConnMgr.HighWater 40 - attempt to stay below 40 # connections # ipfs config --json Swarm.ConnMgr.LowWater 20 - attempt to keep at least # 20 connections # ipfs config --json Swarm.EnableAutoRelay true - if impassable NAT is # detected, connect to the network through relays that have configured # themselves as open (EnableAutoNATService & EnableRelayHop?) # ipfs config --json Experimental.QUIC true - QUIC support, remember to # edit swarm addresses to include /ip4/0.0.0.0/udp/4001/quic # /ip6/::/udp/4001/quic # ipfs config --json Experimental.FilestoreEnabled true - for ipfs add # --nocopy to not store the content twice on disc # # Routing note: dhtclient may cause problems making the content findable # even if it uses less bandwitdh, so it may be better to use # dht everywhere if that isn't a problem. dht also breaks # LowWater/HighWater limits. # # I am using badger datastore. # # Extra: to disable IPv4 connections: # ipfs swarm filters add /ip4/0.0.0.0/ipcidr/0 # However I think this may do more harm than good, especially if the # other config options above (especially Reprovider.Strategy pinned) keep # amount of connection tolerable and won't cause issues. # Restart=on-failure [Install] WantedBy=default.target