name: metatransportipfs # One of MetaShare's transport plugins (meta-transport-ipfs). MetaShare (the # hull) reaches it at http://metashare-ipfs:3000 over `pcs` — the default entry # in its plugin list — and probes it every 10 s, so installing or removing this # app takes effect with no other step. Manage it from MetaShare → Plugins. # # It shares MetaShare's data volume (same /data layout the monolith used: the # `tmp/` → `cache/` promote is one rename(2), and the hull reads plugin-written # files directly). Its own settings live in its state dir (config.json), edited # through MetaShare's dashboard. # # A headless service: no tile link, no Caddy route, no AppShield. Its config # page is reached only through MetaShare (Plugins → configure, proxied by # /api/plugins//ui/*), behind MetaShare's own perimeter. services: metashare-ipfs: image: ghcr.io/worph/meta-transport-ipfs:1.1.0 container_name: metashare-ipfs hostname: metashare-ipfs restart: unless-stopped cpu_shares: 20 # Hard RAM cap, swap disabled (memswap_limit == mem_limit) → OOM instead of swap. mem_limit: 2g memswap_limit: 2g # Clean redb / session shutdown on SIGTERM before docker escalates. stop_grace_period: 30s # Root, like MetaShare: the shared data volume is root-owned. user: 0:0 expose: - 3000 # transport contract (internal, reached by MetaShare only) # libp2p TCP must be host-published: other peers' kad-DHT lookups dial # the public multiaddr directly, and Caddy cannot proxy it (not HTTP). ports: - "4001:4001" volumes: - ${DATA_ROOT:-/DATA}/AppData/metashare/data:/data:rw - ${DATA_ROOT:-/DATA}/AppData/metatransportipfs/state:/state:rw environment: - META_SHARE_HULL_URL=http://metashare-app:3001 # Advertise the routable address so provider records + identify carry a # dialable multiaddr. ${APP_PUBLIC_IPV4}, NOT ${APP_PUBLIC_IP}: on an # IPv6-primary PCS the latter holds a v6 address, and /ip4//… is not a # parseable multiaddr (the plugin refuses to start rather than announce a lie). - PUBLIC_ADDR=/ip4/${APP_PUBLIC_IPV4}/tcp/4001 # Public IPFS DHT bootstraps by explicit /dns4/.../tcp/4001 (the nested # dnsaddr default resolves to wss-only in some container resolvers), plus # mars.i.ipfs.io as a fifth in case the foundation four refuse this IP. # Editable later from MetaShare → Plugins → ipfs → configure. - KAD_BOOTSTRAP_PEERS=/dns4/sg1.bootstrap.libp2p.io/tcp/4001/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt,/dns4/sv15.bootstrap.libp2p.io/tcp/4001/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN,/dns4/ny5.bootstrap.libp2p.io/tcp/4001/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa,/dns4/am6.bootstrap.libp2p.io/tcp/4001/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb,/dns4/mars.i.ipfs.io/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ - TZ=$TZ healthcheck: test: ["CMD", "curl", "-sf", "http://localhost:3000/health"] interval: 10s timeout: 3s retries: 10 start_period: 30s networks: - pcs networks: pcs: name: ${APP_NET:-pcs} external: true x-casaos: architectures: - amd64 - arm64 author: Worph Team category: Media tags: ["media", "needs-public-ip"] developer: Aptero Team description: en_us: | **IPFS transport for MetaShare — the mesh itself.** Runs MetaShare's libp2p node: peer discovery (public IPFS DHT, mDNS on the LAN), bitswap block exchange, and seeding of your library and of what you fetched, without a second copy on disk. It is also how MetaShare finds the gateways on the mesh. **One of MetaShare's transport plugins** — without it MetaShare can still use BitTorrent and Usenet, but has no swarm. Configure it from **MetaShare → Plugins → ipfs → configure** (cohort namespace, bootstrap peers, DHT announce). **Requires:** **MetaShare** (it shares MetaShare's storage). **Port 4001 must be reachable from the internet** so other peers can dial you. Behind CGNAT it still works, but peers cannot reach you. fr_fr: | **Transport IPFS pour MetaShare — le mesh lui-même.** Fait tourner le nœud libp2p de MetaShare : découverte des pairs (DHT IPFS public, mDNS sur le LAN), échange de blocs bitswap et partage de votre bibliothèque sans seconde copie. C'est aussi par lui que MetaShare trouve les passerelles du mesh. **Un des plugins de transport de MetaShare.** Réglages dans **MetaShare → Plugins → ipfs → configure**. **Nécessite :** **MetaShare**. Le **port 4001** doit être joignable depuis Internet. tagline: en_us: IPFS for MetaShare — find and share content with peers by CID fr_fr: IPFS pour MetaShare — trouver et partager du contenu par CID title: en_us: MetaTransport · IPFS icon: https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaTransportIpfs/icon.png thumbnail: https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaTransportIpfs/thumbnail.png store_app_id: metatransportipfs is_uncontrolled: false tips: before_install: en_us: | **Install MetaShare first** — this plugin shares its storage and is driven by it. MetaShare picks it up automatically within ~10 s; check **MetaShare → Plugins**, where it shows as *live*. Settings: **MetaShare → Plugins → ipfs → configure**. Saving restarts the plugin to apply. # Maison (Yundera dashboard) configuration. Read in preference to x-casaos. x-compose-app: schema_version: 2 folders: - path: /DATA/AppData/metatransportipfs/state user: $PUID group: $PGID # No webui-host and no x-casaos hostname/webui_port/port_map: Maison files it # under Services (no click target). Its config opens from MetaShare → Plugins.