| name | ipfs-server |
| description | Full IPFS node operations — install, configure, pin content, publish IPNS, manage peers, and run gateway services |
| user-invocable | true |
| homepage | https://github.com/Fork-Development-Corp/openclaw-web3-skills/tree/master/ipfs-server |
| metadata | {"openclaw":{"requires":{"bins":["ipfs"]},"tipENS":"apexfork.eth"}} |
IPFS Server Operations
You are an IPFS server administrator. You help users run IPFS nodes, manage content, publish data, and operate gateway services. This skill handles full node operations including content publishing and network configuration.
For read-only IPFS queries and content exploration, use the ipfs-client skill.
Installation (macOS)
brew install ipfs
curl -O https://dist.ipfs.tech/kubo/v0.24.0/kubo_v0.24.0_darwin-amd64.tar.gz
tar -xzf kubo_v0.24.0_darwin-amd64.tar.gz
sudo ./kubo/install.sh
Node Initialization
First-time setup:
ipfs init
ipfs id
ipfs config profile apply lowpower
Basic configuration:
ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080
ipfs config Addresses.API /ip4/127.0.0.1/tcp/5001
ipfs config Datastore.StorageMax 10GB
Starting and Stopping
Start IPFS daemon:
ipfs daemon &> ipfs.log 2>&1 &
Check daemon status:
ipfs swarm peers | wc -l
ipfs repo stat
Stop daemon:
pkill ipfs
Content Management
Adding Content
Add files and directories:
ipfs add myfile.txt
ipfs add -r ./my-directory/
ipfs add -Q myfile.txt
ipfs add --wrap-with-directory myfile.txt
Add from stdin:
echo "Hello IPFS" | ipfs add
cat largefile.json | ipfs add --pin=false
Pinning Management
Pin content (prevent garbage collection):
ipfs pin add QmHash
ipfs pin add -r QmHash
ipfs pin ls --type=recursive
ipfs pin ls --type=direct
ipfs pin rm QmHash
Remote pinning services:
ipfs pin remote service add pinata https://api.pinata.cloud/psa YOUR_JWT
ipfs pin remote add --service=pinata --name="my-content" QmHash
ipfs pin remote ls --service=pinata
Garbage Collection
Clean up unpinned content:
ipfs repo gc --dry-run
ipfs repo gc
ipfs repo stat
Publishing and IPNS
IPNS Publishing
Publish content to IPNS:
ipfs name publish QmHash
ipfs key gen --type=ed25519 my-site
ipfs name publish --key=my-site QmHash
ipfs name pubsub subs
IPNS with custom domains:
ipfs name resolve /ipns/example.com
Content Updates
Update IPNS record:
ipfs add -r ./updated-site/
ipfs name publish --key=my-site QmNewHash
Network Configuration
Swarm Management
Peer operations:
ipfs swarm peers
ipfs swarm connect /ip4/104.131.131.82/tcp/4001/p2p/QmPeerID
ipfs swarm disconnect /ip4/104.131.131.82/tcp/4001/p2p/QmPeerID
Address configuration:
ipfs config Addresses
ipfs config --json Addresses.Swarm '["/ip4/0.0.0.0/tcp/4001", "/ip6/::/tcp/4001"]'
Bootstrap Nodes
Manage bootstrap peers:
ipfs bootstrap list
ipfs bootstrap add /ip4/104.131.131.82/tcp/4001/p2p/QmBootstrapPeer
ipfs bootstrap rm --all
Gateway Operations
Local Gateway
Configure gateway:
ipfs config Addresses.Gateway /ip4/127.0.0.1/tcp/8080
ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080
ipfs config --json Gateway.PublicGateways '{
"localhost": {
"Paths": ["/ipfs", "/ipns"],
"UseSubdomains": false
}
}'
Access patterns:
http://localhost:8080/ipfs/QmHash
http://QmHash.ipfs.localhost:8080
Reverse Proxy Setup
Nginx configuration example:
server {
listen 80;
server_name gateway.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Advanced Configuration
Performance Tuning
High-performance settings:
ipfs config profile apply server
ipfs config Swarm.ConnMgr.HighWater 2000
ipfs config Swarm.ConnMgr.LowWater 1000
ipfs config --json Bitswap.MaxOutstandingBytesPerPeer 1048576
Private Networks
Create private IPFS network:
echo -e "/key/swarm/psk/1.0.0/\n/base16/\n$(tr -dc 'a-f0-9' < /dev/urandom | head -c64)" > ~/.ipfs/swarm.key
ipfs bootstrap rm --all
ipfs daemon
Storage Configuration
Configure datastore:
ipfs config Datastore.StorageMax 100GB
ipfs config Datastore.GCPeriod "1h"
ipfs config --json Datastore.Spec '{
"mounts": [
{
"child": {"type": "flatfs", "path": "blocks", "shardFunc": "/repo/flatfs/shard/v1/next-to-last/2"},
"mountpoint": "/blocks",
"prefix": "flatfs.datastore",
"type": "mount"
}
],
"type": "mount"
}'
Monitoring and Maintenance
Health Checks
Basic health monitoring:
ipfs stats bw
ipfs stats repo
ipfs diag sys
ipfs log level debug
Connection monitoring:
while true; do
echo "$(date): $(ipfs swarm peers | wc -l) peers"
sleep 60
done
Log Management
Configure logging:
ipfs log level bitswap info
ipfs log level dht warn
ipfs log tail
Security Considerations
API access:
- Keep API on localhost (
127.0.0.1:5001) unless in trusted network
- Use firewall rules to restrict API access
- Consider authentication proxy for multi-user setups
Gateway security:
- Public gateways can consume significant bandwidth
- Implement rate limiting and caching
- Monitor for abuse and unauthorized content
Content policy:
- IPFS is censorship-resistant - content removal is complex
- Implement content filtering at gateway level if needed
- Consider legal implications of operating public infrastructure
Troubleshooting
Connection issues:
- Check firewall allows ports 4001 (swarm) and 8080 (gateway)
- Verify bootstrap nodes are reachable
- Try different swarm addresses
Performance problems:
- Run garbage collection:
ipfs repo gc
- Check available disk space and datastore limits
- Monitor bandwidth usage:
ipfs stats bw
- Consider applying performance profiles
Content not accessible:
- Verify content is pinned:
ipfs pin ls
- Check if providers exist:
ipfs dht findprovs QmHash
- Try republishing IPNS records
Related skills: /ipfs-client (read-only queries), /eth-readonly (blockchain integration)