diff --git a/.env.prod.example b/.env.prod.example index 0d64db4a07f44a409ac65d8f0c4b18d9f00623bd..17a5ab250b7b76aefad424799a0af0c17b0d49b5 100644 --- a/.env.prod.example +++ b/.env.prod.example @@ -12,6 +12,7 @@ HASURA_GRAPHQL_ADMIN_SECRET=hasura_admin_secret # kubo configuration KUBO_PORT=4001 # should be open to incoming connections KUBO_DOMAIN=datapod.coinduf.eu # domain (used in p2p peering) +KUBO_WEBSOCKET_DOMAIN=websocket.datapod.coinduf.eu # p2p through websocket (not webtransport ou webrtc) KUBO_GATEWAY_PORT=8080 # listen port of ipfs http gateway KUBO_GATEWAY_DOMAIN=gateway.datapod.coinduf.eu # domain for kubo reverse proxy ipfs http gateway reverse proxy KUBO_GATEWAY_SUBDOMAIN=pagu.re # domain for subdomain gateway (provides origin isolation but requires wildcard) diff --git a/doc/nginx/ipfs-websocket.nginx.conf b/doc/nginx/ipfs-websocket.nginx.conf new file mode 100644 index 0000000000000000000000000000000000000000..c4b8edeaaa6b4f2f38cdeaebd9903fab3b641d07 --- /dev/null +++ b/doc/nginx/ipfs-websocket.nginx.conf @@ -0,0 +1,23 @@ +# websocket connection to p2p +server { + listen 443 ssl; + listen [::]:443 ssl; + + ssl_certificate /etc/letsencrypt/live/KUBO_WEBSOCKET_DOMAIN/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/KUBO_WEBSOCKET_DOMAIN/privkey.pem; + + server_name KUBO_WEBSOCKET_DOMAIN; + + access_log /var/log/nginx/KUBO_WEBSOCKET_DOMAIN_access.log; + error_log /var/log/nginx/KUBO_WEBSOCKET_DOMAIN_error.log; + + # redirect to websocket + location / { + add_header X-Robots-Tag "noindex"; + proxy_pass http://localhost:4002; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $host; + } +} \ No newline at end of file diff --git a/docker/Dockerfile.Kubo b/docker/Dockerfile.Kubo index a7efab50e4a4d931a995616fa6cea5723f070485..c21eac36e34267139e40faacd57c602ff15e5f8f 100644 --- a/docker/Dockerfile.Kubo +++ b/docker/Dockerfile.Kubo @@ -1,6 +1,6 @@ # kubo config suited for datapod use # TODO split gateway in another instance for performance and safeness and separation of concerns -FROM ipfs/kubo:v0.30.0 +FROM ipfs/kubo:v0.32.1 COPY ./scripts/configure-keys.sh /container-init.d/001-configure.sh COPY ./scripts/configure-addresses.sh /container-init.d/002-configure.sh COPY ./scripts/configure-bootstrap.sh /container-init.d/003-configure.sh diff --git a/docker/Dockerfile.KuboRpc b/docker/Dockerfile.KuboRpc index 8f1c24c94b02333888388854fd70c650a6020989..32dda2311c5afb5fdcd6d805a29000ced040e3aa 100644 --- a/docker/Dockerfile.KuboRpc +++ b/docker/Dockerfile.KuboRpc @@ -1,5 +1,5 @@ # kubo config suited for unsafe remote RPC instance -FROM ipfs/kubo:v0.30.0 +FROM ipfs/kubo:v0.32.1 COPY ./scripts/configure-addresses.sh /container-init.d/001-configure.sh COPY ./scripts/configure-bootstrap.sh /container-init.d/002-configure.sh COPY ./scripts/configure-peering.sh /container-init.d/003-configure.sh diff --git a/docker/docker-build.sh b/docker/docker-build.sh index a072e5089300397166fcd678e68fb0e8bf0e7db8..c699bcea5b949a7a00cecdc214280c7814d419cc 100755 --- a/docker/docker-build.sh +++ b/docker/docker-build.sh @@ -16,15 +16,15 @@ version_tag=$(grep -oP '"version": "\K[^"]+' ./package.json) # docker image push h30x/duniter-datapod:latest # # --- kubo -# docker buildx build -f ./docker/Dockerfile.Kubo -t datapod-kubo . +docker buildx build -f ./docker/Dockerfile.Kubo -t datapod-kubo . -# # Tag with version and 'latest' -# docker image tag datapod-kubo h30x/datapod-kubo:$version_tag -# docker image tag datapod-kubo h30x/datapod-kubo:latest +# Tag with version and 'latest' +docker image tag datapod-kubo h30x/datapod-kubo:$version_tag +docker image tag datapod-kubo h30x/datapod-kubo:latest -# # Push both -# docker image push h30x/datapod-kubo:$version_tag -# docker image push h30x/datapod-kubo:latest +# Push both +docker image push h30x/datapod-kubo:$version_tag +docker image push h30x/datapod-kubo:latest # --- kubo-rpc docker buildx build -f ./docker/Dockerfile.KuboRpc -t datapod-kubo-rpc . diff --git a/docker/docker-compose.prod.yml b/docker/docker-compose.prod.yml index 6a37a5aa1ae4badcd013857c8d0db935abcbc209..c8519c3c1528634897981556b0128d6145261ce9 100644 --- a/docker/docker-compose.prod.yml +++ b/docker/docker-compose.prod.yml @@ -39,6 +39,9 @@ services: # p2p port public (tcp, udp, webtransport, webrtc) - ${KUBO_PORT}:4001/tcp - ${KUBO_PORT}:4001/udp + # p2p through websocket + - 127.0.0.1:4002:4002 + - '[::1]:4002:4002' # public gateway - 127.0.0.1:${KUBO_GATEWAY_PORT}:8080 - '[::1]:${KUBO_GATEWAY_PORT}:8080' @@ -47,10 +50,13 @@ services: volumes: - kubo_data:/data/ipfs # optional volume if you want to persist the configuration script in order to change it + # you can use the command + # docker run --rm -it -v datapod_kubo_init:/container-init.d --entrypoint /bin/sh h30x/datapod-kubo # - kubo_init:/container-init.d environment: KUBO_DOMAIN: ${KUBO_DOMAIN} KUBO_PORT: ${KUBO_PORT} + KUBO_WEBSOCKET_DOMAIN: ${KUBO_WEBSOCKET_DOMAIN} KUBO_GATEWAY_DOMAIN: ${KUBO_GATEWAY_DOMAIN} KUBO_GATEWAY_SUBDOMAIN: ${KUBO_GATEWAY_SUBDOMAIN} restart: always @@ -60,21 +66,21 @@ services: image: h30x/datapod-kubo-rpc ports: # p2p port public (tcp, udp, webtransport, webrtc) - - 4002:4001/tcp - - 4002:4001/udp + - 4401:4001/tcp + - 4401:4001/udp # expose RPC to partial reverse proxy - 127.0.0.1:6001:5001 volumes: - kubo-rpc_data:/data/ipfs environment: KUBO_DOMAIN: ${KUBO_DOMAIN} - KUBO_PORT: 4002 + KUBO_PORT: 4401 restart: always # ------ # optional kubo pubsub to see what the node receives on pubsub pubsub: - image: ipfs/kubo:v0.30.0 + image: ipfs/kubo:v0.32.1 restart: always depends_on: kubo: diff --git a/package.json b/package.json index 28bfa4058d1371e6be45cfa52f8b8860765c5439..97dcfa1b3863fb1c510f40724f4723641e72acc5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ddd-indexer", - "version": "0.0.3", + "version": "0.0.4", "private": true, "type": "module", "scripts": { diff --git a/scripts/configure-addresses.sh b/scripts/configure-addresses.sh index 2475e46e8a37ff08691b04e9c7fec1a031758797..a1b467c79d71692bbe68ec015fab3a89d839527a 100644 --- a/scripts/configure-addresses.sh +++ b/scripts/configure-addresses.sh @@ -13,7 +13,9 @@ ipfs config Addresses.Swarm --json '[ "/ip4/0.0.0.0/udp/4001/quic-v1/webtransport", "/ip6/::/udp/4001/quic-v1/webtransport", "/ip4/0.0.0.0/udp/4001/webrtc-direct", - "/ip6/::/udp/4001/webrtc-direct" + "/ip6/::/udp/4001/webrtc-direct", + "/ip4/0.0.0.0/tcp/4002/ws", + "/ip6/::/tcp/4002/ws" ]' # configure the addresses to announce # KUBO_PORT is external port mapped in docker compose to 4001 @@ -21,5 +23,11 @@ ipfs config Addresses.Announce --json "[ \"/dns/$KUBO_DOMAIN/tcp/$KUBO_PORT\", \"/dns/$KUBO_DOMAIN/udp/$KUBO_PORT/quic-v1\", \"/dns/$KUBO_DOMAIN/udp/$KUBO_PORT/quic-v1/webtransport\", - \"/dns/$KUBO_DOMAIN/udp/$KUBO_PORT/webrtc-direct\" + \"/dns/$KUBO_DOMAIN/udp/$KUBO_PORT/webrtc-direct\", + \"/dns/$KUBO_WEBSOCKET_DOMAIN/tcp/443/wss/\" ]" + +# --- swarm --- +# disable p2p-circuit +ipfs config Swarm.RelayClient.Enabled --json false +ipfs config Swarm.Transports.Network.Relay --json false \ No newline at end of file