From 65d739ee2755c68b77af14333610fdd6badeb50c Mon Sep 17 00:00:00 2001 From: Yann Autissier Date: Sun, 15 Dec 2024 14:16:05 +0100 Subject: [PATCH 1/2] wip: stalled changes --- apps/389ds/389ds.mk | 3 + docker/389ds/Dockerfile | 62 +++++++++++++++++++++ docker/389ds/setup.py | 86 +++++++++++++++++++++++++++++ docker/ipfs/Dockerfile | 5 +- docker/rozofs/Dockerfile | 30 ++++++++++ docker/rozofs/rozofs.sh | 50 +++++++++++++++++ make/apps/common.mk | 1 + make/def.docker.mk | 4 +- stack/User/User.mk | 2 +- stack/User/ipfs.mk | 1 + stack/User/ipfs.yml | 6 +- stack/drone/drone.mk | 2 +- stack/drone/drone.yml | 11 ++-- stack/duniter/v2s.mk | 2 +- stack/host/ipfs.mk | 2 +- stack/host/ipfs.yml | 4 +- stack/host/ldap.mk | 2 + stack/host/ldap.yml | 16 ++++++ stack/host/nginx.mk | 2 +- stack/host/volumes.backup.local.yml | 10 ++++ stack/ipfs/ipfs.mk | 2 +- stack/skx/rss2email.yml | 21 +++++++ stack/whisper/Caddyfile | 17 ++++++ stack/whisper/whisper.yml | 69 +++++++++++++++++++++++ 24 files changed, 393 insertions(+), 17 deletions(-) create mode 100644 apps/389ds/389ds.mk create mode 100644 docker/389ds/Dockerfile create mode 100644 docker/389ds/setup.py create mode 100644 docker/rozofs/Dockerfile create mode 100755 docker/rozofs/rozofs.sh create mode 100644 stack/host/ldap.mk create mode 100644 stack/host/ldap.yml create mode 100644 stack/host/volumes.backup.local.yml create mode 100644 stack/skx/rss2email.yml create mode 100644 stack/whisper/Caddyfile create mode 100644 stack/whisper/whisper.yml diff --git a/apps/389ds/389ds.mk b/apps/389ds/389ds.mk new file mode 100644 index 0000000..07317da --- /dev/null +++ b/apps/389ds/389ds.mk @@ -0,0 +1,3 @@ +389DS_REPOSITORY_URL := https://github.com/thorsten-l/389ds-docker-alpine +389DS_VERSION := 2.4.4 +DOCKER_BUILD_ARGS += --build-arg BUILD_VERSION=$(389DS_VERSION) diff --git a/docker/389ds/Dockerfile b/docker/389ds/Dockerfile new file mode 100644 index 0000000..3136102 --- /dev/null +++ b/docker/389ds/Dockerfile @@ -0,0 +1,62 @@ +# from: https://github.com/thorsten-l/389ds-docker-alpine +FROM --platform=$BUILDPLATFORM alpine:3.19 as builder +ARG TARGETPLATFORM +ARG BUILDPLATFORM +RUN echo "*** BUILDPLATFORM=$BUILDPLATFORM TARGETPLATFORM=$TARGETPLATFORM" + +ARG BUILD_VERSION +ARG DOCKER_BUILD_DIR + +RUN apk add build-base wget libtool autoconf automake openssl-dev cracklib-dev \ + libevent-dev nspr-dev nss-dev openldap-dev db-dev icu-dev \ + net-snmp-dev krb5-dev pcre-dev make rsync nss-tools openssl \ + linux-pam-dev python3 py3-pip python3-dev git py3-setuptools \ + py3-argcomplete py3-ldap3 py3-dateutil lmdb-dev json-c-dev pcre2-dev + +RUN if [ "$TARGETPLATFORM" != "linux/arm/v7" ]; then apk add rust cargo ; fi + +RUN mkdir /build +WORKDIR /build +RUN wget "https://github.com/389ds/389-ds-base/archive/refs/tags/389-ds-base-$BUILD_VERSION.tar.gz" +RUN tar xvfz "389-ds-base-$BUILD_VERSION.tar.gz" +WORKDIR "/build/389-ds-base-389-ds-base-$BUILD_VERSION" + +RUN ./autogen.sh +RUN if [ "$TARGETPLATFORM" != "linux/arm/v7" ]; then ./configure --with-openldap --enable-rust ; fi +RUN if [ "$TARGETPLATFORM" == "linux/arm/v7" ]; then ./configure --with-openldap; fi + +RUN sed -e 's/.*build_manpages.*/\tcd \$\(srcdir\)\/src\/lib389\; \$\(PYTHON\) setup.py build/g' Makefile > M +RUN mv M Makefile + +COPY ${DOCKER_BUILD_DIR}/setup.py src/lib389/setup.py + +RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \ + && apk add zig@testing + +RUN make -j 8 && make lib389 -j 8 && make install && make lib389-install + +FROM alpine:3.19 + +RUN apk add openssl cracklib libevent nspr nss openldap db icu \ + net-snmp krb5 pcre nss-tools openssl linux-pam python3 \ + lmdb json-c pcre2 elfutils libffi libexpat + +COPY --from=builder /opt /opt +COPY --from=builder /usr/sbin/ds* /usr/sbin/ +COPY --from=builder /usr/lib/python3.10 /usr/lib/python3.10 +COPY --from=builder /usr/libexec/dirsrv /usr/libexec/dirsrv + +RUN mkdir -p /data /data/config /data/run /opt/dirsrv/var/run/dirsrv; \ + ln -s /data/run /opt/dirsrv/var/run/dirsrv; \ + ln -s /data/ssca /opt/dirsrv/etc/dirsrv/ssca; \ + ln -s /data/config /opt/dirsrv/etc/dirsrv/slapd-localhost + +HEALTHCHECK --start-period=5m --timeout=5s --interval=5s --retries=2 \ + CMD /usr/libexec/dirsrv/dscontainer -H + +WORKDIR /data +VOLUME /data + +EXPOSE 3389 3636 + +CMD [ "/usr/libexec/dirsrv/dscontainer", "-r" ] diff --git a/docker/389ds/setup.py b/docker/389ds/setup.py new file mode 100644 index 0000000..5f571d1 --- /dev/null +++ b/docker/389ds/setup.py @@ -0,0 +1,86 @@ +#!/usr/bin/python3 + +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2018 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- + +# +# A setup.py file +# + +from setuptools import setup, find_packages +from os import path + +from setuptools.command.build_py import build_py + +here = path.abspath(path.dirname(__file__)) + +# fedora/rhel versioning or PEP440?; ATM semantic versioning +# with open(path.join(here, 'VERSION'), 'r') as version_file: +# version = version_file.read().strip() + +version = "1.4.0.1" + +with open(path.join(here, 'README.md'), 'r') as f: + long_description = f.read() + +setup( + name='lib389', + license='GPLv3+', + version=version, + description='A library for accessing and configuring the 389 Directory ' + + 'Server', + long_description=long_description, + url='http://www.port389.org/docs/389ds/FAQ/upstream-test-framework.html', + + author='Red Hat Inc., and William Brown', + author_email='389-devel@lists.fedoraproject.org', + + classifiers=[ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'Operating System :: POSIX :: Linux', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Topic :: Software Development :: Libraries', + 'Topic :: Software Development :: Quality Assurance', + 'Topic :: Software Development :: Testing'], + + keywords='389 directory server test configure', + packages=find_packages(exclude=['tests*']), + + # find lib389/clitools -name ds\* -exec echo \''{}'\', \; + data_files=[ + ('/usr/sbin/', [ + 'cli/dsctl', + 'cli/dsconf', + 'cli/dscreate', + 'cli/dsidm', + 'cli/openldap_to_ds', + ]), + ('/usr/libexec/dirsrv/', [ + 'cli/dscontainer', + ]), + ], + + install_requires=[ + 'pyasn1', + 'pyasn1-modules', + 'python-dateutil', + 'argcomplete', + 'argparse-manpage', + 'python-ldap', + 'setuptools', + 'distro', + ], + + cmdclass={ + } + +) diff --git a/docker/ipfs/Dockerfile b/docker/ipfs/Dockerfile index fff4612..f7ef902 100644 --- a/docker/ipfs/Dockerfile +++ b/docker/ipfs/Dockerfile @@ -1,4 +1,4 @@ -ARG IPFS_VERSION=0.14.0 +ARG IPFS_VERSION=0.24.0 FROM ipfs/kubo:v${IPFS_VERSION} as dist LABEL maintainer aynic.os ARG DOCKER_BUILD_DIR @@ -7,6 +7,9 @@ RUN sed -i 's!repo="$IPFS_PATH"!repo="$IPFS_PATH" \&\& mkdir -p "$IPFS_PATH" \&\ COPY ${DOCKER_BUILD_DIR}/*.sh /container-init.d/ RUN chmod +rx /container-init.d/*.sh +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ + CMD ipfs --api=$(cat $IPFS_PATH/api) dag stat /ipfs/QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn || exit 1 + FROM dist as master ARG DOCKER_BUILD_DIR ARG UID diff --git a/docker/rozofs/Dockerfile b/docker/rozofs/Dockerfile new file mode 100644 index 0000000..6c811b5 --- /dev/null +++ b/docker/rozofs/Dockerfile @@ -0,0 +1,30 @@ +# link: https://github.com/kvaps/docker-rozofs/blob/master/Dockerfile +FROM debian:bookworm as master +ARG DOCKER_BUILD_DIR + +# Make sure the package repository is up to date and install required packages +RUN apt-get -y update \ + && apt-get install -fy gnupg lsb-release tini wget \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists + +# Avoid warning during packet installations +ENV DEBIAN_FRONTEND noninteractive + +# Install the release key +# Set the RozoFS repository to access RozoFS packages +# Install RozoFS manager (optionally) required for all nodes +RUN wget -O - http://dl.rozofs.org/deb/devel@rozofs.com.gpg.key | apt-key add - \ + && echo deb http://dl.rozofs.org/deb/master $(lsb_release -sc) main | tee /etc/apt/sources.list.d/rozofs.list \ + && echo 'APT::Install-Recommends "0";' > /etc/apt/apt.conf.d/01norecommend \ + && echo 'APT::Install-Suggests "0";' >> /etc/apt/apt.conf.d/01norecommend \ + && echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d \ + && apt-get -y update \ + && apt-get install -y rozofs-manager* rozofs-* busybox inotify-tools \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists + + +COPY ${DOCKER_BUILD_DIR}/rozofs.sh / +ENTRYPOINT ["/usr/bin/tini", "--"] +CMD [ "/rozofs.sh" ] diff --git a/docker/rozofs/rozofs.sh b/docker/rozofs/rozofs.sh new file mode 100755 index 0000000..56cbcea --- /dev/null +++ b/docker/rozofs/rozofs.sh @@ -0,0 +1,50 @@ +#!/bin/bash +# link: https://github.com/kvaps/docker-rozofs/blob/master/rozofs.sh + +start_daemons() { + # restore fstab + cp -f /etc/rozofs/fstab /etc/fstab + # start rozo agent + /etc/init.d/rozofs-manager-agent start + # start rozo export + if [ "$(grep -c '\(volumes\|exports\) *= *( *) *;' /etc/rozofs/export.conf)" != "2" ]; then + /etc/init.d/rozofs-exportd start + fi + # start rozo storage + if [ "$(grep -c 'storages *= *( *) *;' /etc/rozofs/storage.conf)" != "1" ]; then + /etc/init.d/rozofs-storaged start + fi + # start rozo mounts + awk '$1 == "rozofsmount" {print $2}' /etc/fstab | + while read mount; do + mkdir -p "$mount" + mount "$mount" + done +} + +stop_daemons() { + # save fstab + cp -f /etc/fstab /etc/rozofs/fstab.bak + mv /etc/rozofs/fstab.bak /etc/rozofs/fstab + awk '$1 == "rozofsmount" {print $2}' /etc/fstab | + while read mount; do + umount "$mount" + done + /etc/init.d/rozofs-storaged stop + /etc/init.d/rozofs-exportd stop + /etc/init.d/rozofs-manager-agent stop +} + +# start logging +/bin/busybox syslogd +tail -F /var/log/messages 2>/dev/null & + +trap stop_daemons EXIT +start_daemons + +while inotifywait -e modify /etc/fstab; do + cp -f /etc/fstab /etc/rozofs/fstab.bak + mv /etc/rozofs/fstab.bak /etc/rozofs/fstab +done & + +wait $! diff --git a/make/apps/common.mk b/make/apps/common.mk index 997afe1..f601e62 100644 --- a/make/apps/common.mk +++ b/make/apps/common.mk @@ -192,6 +192,7 @@ ssh@%: ## it updates COMPOSE_FILE with all .yml files of the current stack .PHONY: stack stack: + $(call compose-file,docker) $(foreach stackz,$(STACK),$(call docker-stack,$(stackz))) $(call compose-file,$(MYOS_STACK),$(MYOS_STACK_FILE)) diff --git a/make/def.docker.mk b/make/def.docker.mk index cbefcd2..0375714 100644 --- a/make/def.docker.mk +++ b/make/def.docker.mk @@ -3,7 +3,7 @@ DOCKER_ENV_ARGS ?= $(docker_env_args) DOCKER_EXEC_OPTIONS ?= DOCKER_GID ?= $(call gid,docker) DOCKER_IMAGE ?= $(USER_DOCKER_IMAGE) -DOCKER_MACHINE := $(shell docker run --rm alpine uname -m 2>/dev/null) +DOCKER_MACHINE ?= $(shell docker run --rm alpine uname -m 2>/dev/null) DOCKER_NAME ?= $(USER_DOCKER_NAME) DOCKER_NETWORK ?= $(if $(USER_STACK),$(USER),$(DOCKER_NETWORK_PRIVATE)) DOCKER_NETWORK_PRIVATE ?= $(USER)-$(ENV) @@ -16,7 +16,7 @@ DOCKER_RUN_NETWORK += --network $(DOCKER_NETWORK) DOCKER_RUN_OPTIONS += --rm DOCKER_RUN_VOLUME ?= $(patsubst %,-v %,$(DOCKER_VOLUME)) DOCKER_RUN_WORKDIR ?= $(if $(DOCKER_WORKDIR),-w $(DOCKER_WORKDIR)) -DOCKER_SYSTEM := $(shell docker run --rm alpine uname -s 2>/dev/null) +DOCKER_SYSTEM ?= $(shell docker run --rm alpine uname -s 2>/dev/null) DOCKER_VOLUME ?= /var/run/docker.sock:/var/run/docker.sock DOCKER_WORKDIR ?= $(PWD) ENV_VARS += DOCKER_MACHINE DOCKER_NETWORK DOCKER_NETWORK_PRIVATE DOCKER_NETWORK_PUBLIC DOCKER_SYSTEM HOST_COMPOSE_PROJECT_NAME HOST_COMPOSE_SERVICE_NAME HOST_DOCKER_REPOSITORY HOST_DOCKER_VOLUME HOST_GID HOST_UID USER_COMPOSE_PROJECT_NAME USER_COMPOSE_SERVICE_NAME USER_DOCKER_IMAGE USER_DOCKER_NAME USER_DOCKER_REPOSITORY USER_DOCKER_VOLUME diff --git a/stack/User/User.mk b/stack/User/User.mk index 5f47e43..de48630 100644 --- a/stack/User/User.mk +++ b/stack/User/User.mk @@ -2,7 +2,7 @@ ENV_VARS += USER_DOMAIN USER_HOST user_domain MAKECMDARGS += user-exec user-exec:% user-exec@% user-run user-run:% user-run@% USER_DOMAIN ?= $(patsubst %,$(USER).%,$(DOMAIN)) USER_HOME ?= $(shell cd ~ && pwd -P) -USER_HOST ?= $(patsubst %,$(USER).%,$(HOST))$(USER_HOST_LB) +USER_HOST ?= $(if $(APP_HOST_MULTI_USER),$(patsubst %,$(USER).%,$(HOST)))$(USER_HOST_LB) USER_HOST_LB ?= $(if $(USER_LB),$(space)$(HOST)$(if $(HOST_LB),$(space)$(DOMAIN)),$(if $(HOST_LB),$(space)$(USER_DOMAIN))) USER_PATH ?= $(USER_PATH_PREFIX) USER_URIS ?= $(patsubst %,%/$(USER_PATH),$(USER_HOST)) diff --git a/stack/User/ipfs.mk b/stack/User/ipfs.mk index 5784036..bfd2fe0 100644 --- a/stack/User/ipfs.mk +++ b/stack/User/ipfs.mk @@ -10,5 +10,6 @@ USER_IPFS_SERVICE_5001_TAGS_PROXY_TCP ?= $(call patsublist,%,urlprefix-% pro USER_IPFS_SERVICE_5001_TAGS_URIS ?= $(strip $(if $(call servicenvs,USER_IPFS,5001,URIS),$(call urlprefix,$(USER_IPFS_SERVICE_5001_PATH),,$(call servicenvs,USER_IPFS,5001,URIS)))) USER_IPFS_SERVICE_5001_URIS ?= $(call uriprefix,USER_IPFS,5001,$(USER_URIS)) USER_IPFS_SERVICE_8080_OPTS ?= $(patsubst %/,%,$(if $(USER_PATH),strip=/$(USER_PATH))) +USER_IPFS_SERVICE_8080_PATH ?= ipfs/ USER_IPFS_SERVICE_8080_TAGS ?= $(call tagprefix,USER_IPFS,8080) USER_IPFS_SERVICE_8080_URIS ?= $(call uriprefix,USER_IPFS,8080,$(USER_URIS)) diff --git a/stack/User/ipfs.yml b/stack/User/ipfs.yml index 4700ec5..5c79b52 100644 --- a/stack/User/ipfs.yml +++ b/stack/User/ipfs.yml @@ -63,6 +63,8 @@ services: - IPFS_SWARM_TRANSPORTS_NETWORK_RELAY=${USER_IPFS_SWARM_TRANSPORTS_NETWORK_RELAY:-} - LETSENCRYPT_HOST=${USER_IPFS_LETSENCRYPT_HOST} image: ${USER_DOCKER_REPOSITORY}/ipfs:${DOCKER_IMAGE_TAG} + healthcheck: + timeout: 55s labels: - SERVICE_4001_CHECK_TCP=true - SERVICE_4001_NAME=${USER_COMPOSE_SERVICE_NAME}-ipfs-4001 @@ -88,9 +90,9 @@ services: soft: 65536 hard: 65536 volumes: + - dns:/dns:delegated - home:/home:delegated volumes: + dns: home: - external: true - name: ${HOST_DOCKER_VOLUME}_home diff --git a/stack/drone/drone.mk b/stack/drone/drone.mk index 76da177..9b039e7 100644 --- a/stack/drone/drone.mk +++ b/stack/drone/drone.mk @@ -5,6 +5,6 @@ DRONE_SERVER_HOST ?= $(DRONE_SERVICE_NAME).$(firstword $ DRONE_SERVICE_NAME ?= drone DRONE_SERVICE_80_NAME ?= $(DRONE_SERVICE_NAME) DRONE_SERVICE_80_TAGS ?= $(call tagprefix,drone,80) -DRONE_USER_CREATE ?= $(USER):$(GIT_USER),admin:true +DRONE_USER_CREATE ?= username:$(GIT_USER),admin:true DRONE_USER_FILTER ?= $(GIT_USER) ENV_VARS += DRONE_RUNNER_NAME DRONE_SERVER_HOST DRONE_USER_CREATE DRONE_USER_FILTER DRONE_SERVICE_80_TAGS diff --git a/stack/drone/drone.yml b/stack/drone/drone.yml index d976c9e..9d2884e 100644 --- a/stack/drone/drone.yml +++ b/stack/drone/drone.yml @@ -4,9 +4,12 @@ services: drone: environment: - DRONE_GIT_ALWAYS_AUTH=${DRONE_GIT_ALWAYS_AUTH:-false} + - DRONE_GITEA_CLIENT_ID=${DRONE_GITEA_CLIENT_ID:-} + - DRONE_GITEA_CLIENT_SECRET=${DRONE_GITEA_CLIENT_SECRET:-} + - DRONE_GITEA_SERVER=${DRONE_GITEA_SERVER:-} - DRONE_GITHUB_SERVER=${DRONE_GITHUB_SERVER:-https://github.com} - - DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID} - - DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET} + - DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID:-} + - DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET:-} - DRONE_LOGS_COLOR=${DRONE_LOGS_COLOR:-true} - DRONE_LOGS_PRETTY=${DRONE_LOGS_PRETTY:-true} - DRONE_PROMETHEUS_ANONYMOUS_ACCESS=${DRONE_PROMETHEUS_ANONYMOUS_ACCESS:-true} @@ -14,8 +17,8 @@ services: - DRONE_SERVER_HOST=${DRONE_SERVER_HOST:-drone} - DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO:-http} - DRONE_TLS_AUTOCERT=${DRONE_TLS_AUTOCERT:-true} - - DRONE_USER_CREATE=${DRONE_USER_CREATE} - - DRONE_USER_FILTER=${DRONE_USER_FILTER} + - DRONE_USER_CREATE=${DRONE_USER_CREATE:-} + - DRONE_USER_FILTER=${DRONE_USER_FILTER:-} labels: - SERVICE_80_CHECK_TCP=true - SERVICE_80_NAME=${COMPOSE_SERVICE_NAME}-drone-80 diff --git a/stack/duniter/v2s.mk b/stack/duniter/v2s.mk index 4ac969e..c16dc3c 100644 --- a/stack/duniter/v2s.mk +++ b/stack/duniter/v2s.mk @@ -7,7 +7,7 @@ DUNITER_UI_WS_URL ?= wss://$(DUNITER_V2S_SERVICE_NAME).$ DUNITER_V2S_DUNITER_CHAIN_NAME ?= gdev DUNITER_V2S_DUNITER_NODE_NAME ?= $(USER)-$(ENV)-$(DUNITER_V2S_DUNITER_PRUNING_PROFILE) DUNITER_V2S_DUNITER_PUBLIC_ADDR ?= /dns/$(DUNITER_V2S_SERVICE_NAME).$(firstword $(APP_HOST))/tcp/443/wss -DUNITER_V2S_DUNITER_PRUNING_PROFILE ?= archive +DUNITER_V2S_DUNITER_PRUNING_PROFILE ?= default DUNITER_V2S_SERVICE_NAME ?= $(DUNITER_V2S_DUNITER_CHAIN_NAME) DUNITER_V2S_SERVICE_9615_PATH ?= metrics/ DUNITER_V2S_SERVICE_9615_TAGS ?= $(call tagprefix,DUNITER_V2S,9615) diff --git a/stack/host/ipfs.mk b/stack/host/ipfs.mk index 263b2d9..acb7b08 100644 --- a/stack/host/ipfs.mk +++ b/stack/host/ipfs.mk @@ -6,5 +6,5 @@ HOST_IPFS_SERVICE_5001_PATH ?= api/ HOST_IPFS_SERVICE_5001_TAGS ?= $(call tagprefix,HOST_IPFS,5001) HOST_IPFS_SERVICE_8080_ENVS ?= host HOST_IPFS_SERVICE_8080_TAGS ?= $(call urlprefix,,,$(HOST_IPFS_SERVICE_8080_URIS) $(call servicenvs,HOST_IPFS,8080,URIS)) -HOST_IPFS_SERVICE_8080_URIS ?= $(call uriprefix,ipfs *.ipns) +HOST_IPFS_SERVICE_8080_URIS ?= $(call uriprefix,ipfs *.ipns *.ipfs) HOST_IPFS_UFW_UPDATE ?= 4001/tcp 4001/udp 8080 diff --git a/stack/host/ipfs.yml b/stack/host/ipfs.yml index fd969aa..fa6f5e6 100644 --- a/stack/host/ipfs.yml +++ b/stack/host/ipfs.yml @@ -31,7 +31,7 @@ services: - IPFS_BOOTSTRAP=${HOST_IPFS_BOOTSTRAP:-} - IPFS_DATASTORE_GCPERIOD=${HOST_IPFS_DATASTORE_GCPERIOD:-} - IPFS_DISK_USAGE_PERCENT=${HOST_IPFS_DISK_USAGE_PERCENT:-} - - IPFS_EXPERIMENTAL_ACCELERATEDDHTCLIENT=${HOST_IPFS_EXPERIMENTAL_ACCELERATEDDHTCLIENT:-true} + - IPFS_EXPERIMENTAL_ACCELERATEDDHTCLIENT=${HOST_IPFS_EXPERIMENTAL_ACCELERATEDDHTCLIENT:-} - IPFS_EXPERIMENTAL_FILESTOREENABLED=${HOST_IPFS_EXPERIMENTAL_FILESTOREENABLED:-} - IPFS_EXPERIMENTAL_GRAPHSYNCENABLED=${HOST_IPFS_EXPERIMENTAL_GRAPHSYNCENABLED:-} - IPFS_EXPERIMENTAL_LIBP2PSTREAMMOUNTING=${HOST_IPFS_EXPERIMENTAL_LIBP2PSTREAMMOUNTING:-true} @@ -62,7 +62,7 @@ services: - IPFS_SWARM_RELAYSERVICE_ENABLED=${HOST_IPFS_SWARM_RELAYSERVICE_ENABLED:-} - IPFS_SWARM_TRANSPORTS_NETWORK_RELAY=${HOST_IPFS_SWARM_TRANSPORTS_NETWORK_RELAY:-} healthcheck: - timeout: 5s + timeout: 55s image: ${HOST_DOCKER_REPOSITORY}/ipfs:${DOCKER_IMAGE_TAG} labels: - SERVICE_4001_CHECK_TCP=true diff --git a/stack/host/ldap.mk b/stack/host/ldap.mk new file mode 100644 index 0000000..ed8b120 --- /dev/null +++ b/stack/host/ldap.mk @@ -0,0 +1,2 @@ +HOST_389DS_VERSION := 2.4.4 +ENV_VARS += HOST_389DS_VERSION diff --git a/stack/host/ldap.yml b/stack/host/ldap.yml new file mode 100644 index 0000000..1946e8a --- /dev/null +++ b/stack/host/ldap.yml @@ -0,0 +1,16 @@ +version: '3.6' + +services: + 389ds: + build: + args: + - BUILD_VERSION=${HOST_389DS_VERSION} + - DOCKER_BUILD_DIR=docker/389ds + context: ../.. + dockerfile: docker/389ds/Dockerfile + container_name: ${HOST_COMPOSE_PROJECT_NAME}-389ds + hostname: ${HOSTNAME} + image: ${HOST_DOCKER_REPOSITORY}/389ds:${DOCKER_IMAGE_TAG} + network_mode: host + restart: always + diff --git a/stack/host/nginx.mk b/stack/host/nginx.mk index 9903e59..887a009 100644 --- a/stack/host/nginx.mk +++ b/stack/host/nginx.mk @@ -1,7 +1,7 @@ ENV_VARS += HOST_NGINX_LETSENCRYPT_HOST HOST_NGINX_SERVICE_80_TAGS HOST_NGINX_SERVICE_443_TAGS HOST_NGINX_VIRTUAL_HOST HOST_NGINX_HOST_URIS ?= true HOST_NGINX_LETSENCRYPT_HOST ?= $(subst $(space),$(comma),$(filter-out *.%,$(subst $(comma),$(space),$(HOST_NGINX_VIRTUAL_HOST)))) -HOST_NGINX_SERVICE_HOST_URIS ?= */ +HOST_NGINX_SERVICE_HOST_URIS ?= */ */.well-known/acme-challenge/ HOST_NGINX_SERVICE_HOST ?= $(subst $(comma),$(space),$(HOST_NGINX_VIRTUAL_HOST)) HOST_NGINX_SERVICE_80_HOST ?= $(HOST_NGINX_SERVICE_HOST) HOST_NGINX_SERVICE_80_TAGS ?= $(call urlprefix,,,$(HOST_NGINX_SERVICE_80_URIS) $(call servicenvs,HOST_NGINX,80,URIS)) diff --git a/stack/host/volumes.backup.local.yml b/stack/host/volumes.backup.local.yml new file mode 100644 index 0000000..d85e003 --- /dev/null +++ b/stack/host/volumes.backup.local.yml @@ -0,0 +1,10 @@ +version: '3.6' + +volumes: + backup: + driver: local + driver_opts: + device: /var/lib/backup + o: bind + type: none + diff --git a/stack/ipfs/ipfs.mk b/stack/ipfs/ipfs.mk index ec63a54..a0cfc74 100644 --- a/stack/ipfs/ipfs.mk +++ b/stack/ipfs/ipfs.mk @@ -7,7 +7,7 @@ IPFS_SERVICE_5001_TAGS ?= $(call tagprefix,ipfs,5001) IPFS_SERVICE_8080_CHECK_HTTP ?= /ipfs/QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn IPFS_SERVICE_8080_TAGS ?= $(call urlprefix,,,$(IPFS_SERVICE_8080_URIS)) IPFS_SERVICE_8080_URIS ?= $(call uriprefix,ipfs *.ipns) -IPFS_VERSION ?= 0.16.0 +IPFS_VERSION ?= 0.24.0 .PHONY: bootstrap-stack-ipfs bootstrap-stack-ipfs: ~/.ipfs setup-sysctl diff --git a/stack/skx/rss2email.yml b/stack/skx/rss2email.yml new file mode 100644 index 0000000..9fc90b4 --- /dev/null +++ b/stack/skx/rss2email.yml @@ -0,0 +1,21 @@ +version: "3.8" +services: + rss2email: + command: daemon -verbose ${RSS2EMAIL_EMAIL:-${MAIL}} + entrypoint: rss2email + working_dir: /app + user: app + environment: + - TZ=UTC + - SMTP_USERNAME=${RSS2EMAIL_SMTP_USERNAME:-} + - SMTP_PASSWORD=${RSS2EMAIL_PASSWORD:-} + - SMTP_HOST=smtp + - SMTP_PORT=587 + restart: unless-stopped + image: ghcr.io/skx/rss2email:master + volumes: + - rss2email-data:/app/.rss2email + +volumes: + rss2email-data: + diff --git a/stack/whisper/Caddyfile b/stack/whisper/Caddyfile new file mode 100644 index 0000000..9a98e79 --- /dev/null +++ b/stack/whisper/Caddyfile @@ -0,0 +1,17 @@ +:80 { + header { + Access-Control-Allow-Origin "*" + Access-Control-Allow-Credentials true + Access-Control-Allow-Methods "*" + Access-Control-Allow-Headers "*" + defer + } + + encode zstd gzip + reverse_proxy whisper-frontend:5173 + + handle_path /api/* { + reverse_proxy whisper-backend:3000 + } + +} diff --git a/stack/whisper/whisper.yml b/stack/whisper/whisper.yml new file mode 100644 index 0000000..422604e --- /dev/null +++ b/stack/whisper/whisper.yml @@ -0,0 +1,69 @@ +version: "3.9" + +services: + whisper-asr: + image: onerahmet/openai-whisper-asr-webservice:v1.1.1 + environment: + ASR_MODEL: ${WHISPER_MODEL-large} + volumes: + - whisper-cache:/root/.cache/whisper + restart: unless-stopped + expose: + - 9000 + networks: + - private + + whisper-translate: + image: libretranslate/libretranslate:latest + restart: unless-stopped + command: --disable-web-ui --debug + environment: + LT_DISABLE_WEB_UI: True + LT_DEBUG: True + expose: + - 5000 + networks: + - private + + whisper-backend: + image: pluja/web-whisper-backend:latest + environment: + UPLOAD_DIR: /app/uploads + ASR_ENDPOINT: whisper-asr:9000 + LT_ENDPOINT: whisper-translate:5000 + volumes: + - whisper-data:/app/db + - whisper-files:/app/uploads + restart: unless-stopped + expose: + - 3000 + networks: + - private + + whisper-frontend: + image: pluja/web-whisper-frontend:latest + restart: unless-stopped + expose: + - 5173 + networks: + - private + + whisper-proxy: + image: caddy:2-alpine + restart: unless-stopped + labels: + SERVICE_80_CHECK_HTTP: / + SERVICE_80_NAME: ${COMPOSE_SERVICE_NAME}-proxy-80 + SERVICE_80_TAGS: urlprefix-transcript.asycn.io/* + ports: + - 80 + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile + networks: + - private + - public + +volumes: + whisper-cache: + whisper-data: + whisper-files: From 449dff98c66d6d7546c0089ea61740c4ebc3ff6f Mon Sep 17 00:00:00 2001 From: Yann Autissier Date: Sun, 15 Dec 2024 23:27:45 +0000 Subject: [PATCH 2/2] ipfs v0.32 --- docker/ipfs/Dockerfile | 6 +- docker/ipfs/ipfs-config.sh | 161 +++++++++++++++++++++++++++++-------- stack/ipfs/ipfs.mk | 6 +- stack/ipfs/ipfs.yml | 87 +++++++++++++++++--- 4 files changed, 211 insertions(+), 49 deletions(-) diff --git a/docker/ipfs/Dockerfile b/docker/ipfs/Dockerfile index f7ef902..9abb128 100644 --- a/docker/ipfs/Dockerfile +++ b/docker/ipfs/Dockerfile @@ -1,5 +1,5 @@ -ARG IPFS_VERSION=0.24.0 -FROM ipfs/kubo:v${IPFS_VERSION} as dist +ARG IPFS_VERSION=0.32.1 +FROM ipfs/kubo:v${IPFS_VERSION} AS dist LABEL maintainer aynic.os ARG DOCKER_BUILD_DIR @@ -10,7 +10,7 @@ RUN chmod +rx /container-init.d/*.sh HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD ipfs --api=$(cat $IPFS_PATH/api) dag stat /ipfs/QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn || exit 1 -FROM dist as master +FROM dist AS master ARG DOCKER_BUILD_DIR ARG UID ENV UID=${UID} diff --git a/docker/ipfs/ipfs-config.sh b/docker/ipfs/ipfs-config.sh index feeac8c..80a3b32 100755 --- a/docker/ipfs/ipfs-config.sh +++ b/docker/ipfs/ipfs-config.sh @@ -6,11 +6,17 @@ set -e # ipfs config --json Swarm.ResourceMgr.Enabled false # ERROR p2pnode libp2p/rcmgr_defaults.go:107 ===> OOF! go-libp2p changed DefaultServiceLimits +# apply migration +if [ "${IPFS_REPO_MIGRATE}" = "true" ]; then ipfs repo stat >/dev/null || ipfs repo migrate; fi + # set ipfs peer id [ -n "${IPFS_IDENTITY_PEERID}" ] && [ -n "${IPFS_IDENTITY_PRIVKEY}" ] \ && sed -i 's/"PeerID":.*/"PeerID": "'"${IPFS_IDENTITY_PEERID}"'",/;s/"PrivKey":.*/"PrivKey": "'"${IPFS_IDENTITY_PRIVKEY}"'"/' "${IPFS_PATH}/config" \ || true +# apply ipfs profile +[ -n "${IPFS_PROFILE}" ] && for profile in ${IPFS_PROFILE}; do ipfs config profile apply "${profile}"; done + ## ipfs client needs API address # search for ip address of $(hostname).${IPFS_ADDRESSES_API_DOMAIN} [ -n "${IPFS_ADDRESSES_API_DOMAIN}" ] && [ -z "${IPFS_ADDRESSES_API_INET4}" ] \ @@ -33,6 +39,9 @@ echo "${IPFS_ADDRESSES_GATEWAY_INET4}" |awk -F. '{ for ( i=1; i<=4; i++ ) if ($i || unset IPFS_ADDRESSES_GATEWAY_PORT ipfs config Addresses.Gateway "${IPFS_ADDRESSES_GATEWAY:-/ip4/${IPFS_ADDRESSES_GATEWAY_INET4:-127.0.0.1}/tcp/${IPFS_ADDRESSES_GATEWAY_PORT:-8080}}" +[ -n "${IPFS_ADDRESSES_SWARM}" ] && ipfs config --json Addresses.Swarm "${IPFS_ADDRESSES_SWARM}" +[ -n "${IPFS_ADDRESSES_ANNOUNCE}" ] && ipfs config --json Addresses.Announce "${IPFS_ADDRESSES_ANNOUNCE}" +[ -n "${IPFS_ADDRESSES_APPENDANNOUNCE}" ] && ipfs config --json Addresses.AppendAnnounce "${IPFS_ADDRESSES_APPENDANNOUNCE}" [ -n "${IPFS_ADDRESSES_NOANNOUNCE}" ] && ipfs config --json Addresses.NoAnnounce "${IPFS_ADDRESSES_NOANNOUNCE}" ## api http headers @@ -44,65 +53,149 @@ ipfs config Addresses.Gateway "${IPFS_ADDRESSES_GATEWAY:-/ip4/${IPFS_ADDRESSES_G \"Access-Control-Allow-Origin\": ${IPFS_API_HTTPHEADERS_ACA_ORIGIN:-null} }}" +## api authorizations: "Bob": { "AuthSecret": "bearer:secret-token123", "AllowedPaths": ["/api/v0"] } +[ -n "${IPFS_API_AUTHORIZATIONS}" ] && ipfs config --json API.Authorizations "${IPFS_API_AUTHORIZATIONS}" + +## autonat service +[ -n "$IPFS_AUTONAT$IPFS_AUTONAT_SERVICEMODE$IPFS_AUTONAT_THROTTLE$IPFS_AUTONAT_THROTTLE_GLOBALLIMIT$IPFS_AUTONAT_THROTTLE_PEERLIMIT$IPFS_AUTONAT_THROTTLE_INTERVAL" ] \ + && ipfs config --json AutoNAT "${IPFS_AUTONAT:-{ +\"ServiceMode\": ${IPFS_AUTONAT_SERVICEMODE:-null}, +\"Throttle\": ${IPFS_AUTONAT_THROTTLE:-{ + \"GlobalLimit\": ${IPFS_AUTONAT_THROTTLE_GLOBALLIMIT:-null}, + \"PeerLimit\": ${IPFS_AUTONAT_THROTTLE_PEERLIMIT:-null}, + \"Interval\": \"${IPFS_AUTONAT_THROTTLE_INTERVAL:-null}\" + } +}}" + +## auto tls +[ -n "$IPFS_AUTOTLS$IPFS_AUTOTLS_ENABLED$IPFS_AUTOTLS_DOMAINSUFFIX$IPFS_AUTOTLS_REGISTRATIONENDPOINT$IPFS_AUTOTLS_REGISTRATIONTOKEN$IPFS_AUTOTLS_CAENDPOINT" ] \ + && ipfs config --json AutoNAT "${IPFS_AUTOTLS:-{ +\"Enabled\": ${IPFS_AUTOTLS_ENABLED:-null}, +\"DomainSuffix\": ${IPFS_AUTOTLS_DOMAINSUFFIX:-null}, +\"RegistrationEndpoint\": ${IPFS_AUTOTLS_REGISTRATIONENDPOINT:-null}, +\"RegistrationToken\": ${IPFS_AUTOTLS_REGISTRATIONTOKEN:-null}, +\"CAEndpoint\": ${IPFS_AUTOTLS_CAENDPOINT:-null} +}}" + ## bootstrap [ -n "${IPFS_BOOTSTRAP}" ] && ipfs config --json Bootstrap "${IPFS_BOOTSTRAP}" ## storage -# limit disk usage to 50 percent of disk size +# limit disk usage to xx/percent of disk size diskSize=$(df -P ${IPFS_PATH:-~/.ipfs} | awk 'NR>1{size+=$2}END{print size}') -ipfs config Datastore.StorageMax "$((diskSize * ${IPFS_DISK_USAGE_PERCENT:-50/100}))" -# garbage collector +ipfs config Datastore.StorageMax "$((diskSize * ${IPFS_DATASTORE_DISKUSAGE:-50}/100))" +# garbage collector is declenched over xx/percent of available disk used +[ -n "${IPFS_DATASTORE_STORAGEGCWATERMARK}" ] && ipfs config Datastore.StorageGCWatermark "${IPFS_DATASTORE_STORAGEGCWATERMARK}" +# automatic garbage collector run every time period [ -n "${IPFS_DATASTORE_GCPERIOD}" ] && ipfs config Datastore.GCPeriod "${IPFS_DATASTORE_GCPERIOD}" +[ -n "${IPFS_DATASTORE_HASHONREAD}" ] && ipfs config --bool Datastore.HashOnRead "${IPFS_DATASTORE_HASHONREAD}" +[ -n "${IPFS_DATASTORE_BLOOMFILTERSIZE}" ] && ipfs config --json Datastore.BloomFilterSize "${IPFS_DATASTORE_BLOOMFILTERSIZE}" +[ -n "${IPFS_DATASTORE_SPEC}" ] && ipfs config --json Datastore.Spec "${IPFS_DATASTORE_SPEC}" -## experimental features -[ -n "${IPFS_EXPERIMENTAL_ACCELERATEDDHTCLIENT}" ] && ipfs config --json Experimental.AcceleratedDHTClient "${IPFS_EXPERIMENTAL_ACCELERATEDDHTCLIENT}" -[ -n "${IPFS_EXPERIMENTAL_FILESTOREENABLED}" ] && ipfs config --json Experimental.FilestoreEnabled "${IPFS_EXPERIMENTAL_FILESTOREENABLED}" -[ -n "${IPFS_EXPERIMENTAL_GRAPHSYNCENABLED}" ] && ipfs config --json Experimental.GraphsyncEnabled "${IPFS_EXPERIMENTAL_GRAPHSYNCENABLED}" -[ -n "${IPFS_EXPERIMENTAL_LIBP2PSTREAMMOUNTING}" ] && ipfs config --json Experimental.Libp2pStreamMounting "${IPFS_EXPERIMENTAL_LIBP2PSTREAMMOUNTING}" -[ -n "${IPFS_EXPERIMENTAL_P2PHTTPPROXY}" ] && ipfs config --json Experimental.P2pHttpProxy "${IPFS_EXPERIMENTAL_P2PHTTPPROXY}" -[ -n "${IPFS_EXPERIMENTAL_STRATEGICPROVIDING}" ] && ipfs config --json Experimental.StrategicProviding "${IPFS_EXPERIMENTAL_STRATEGICPROVIDING}" -[ -n "${IPFS_EXPERIMENTAL_URLSTOREENABLED}" ] && ipfs config --json Experimental.UrlstoreEnabled "${IPFS_EXPERIMENTAL_URLSTOREENABLED}" +## ALLOW AUTO DISCOVERY ON DOCKER NETWORK +[ -n "${IPFS_DISCOVERY_MDNS_ENABLED}" ] && ipfs config --bool Discovery.MDNS.Enabled "${IPFS_DISCOVERY_MDNS_ENABLED}" +[ -n "${IPFS_DOCKER_NETWORK}" ] && ipfs config --json Addresses.NoAnnounce "$(ipfs config Addresses.NoAnnounce |sed '/"${IPFS_DOCKER_NETWORK}"/d')" +## serve only local content +[ -n "${IPFS_GATEWAY_NOFETCH}" ] && ipfs config --bool Gateway.NoFetch "${IPFS_GATEWAY_NOFETCH}" +## redirect content with TXT DNS link prefix +[ -n "${IPFS_GATEWAY_NODNSLINK}" ] && ipfs config --bool Gateway.NoDNSLink "${IPFS_GATEWAY_NODNSLINK}" +## false = trustless gateway +[ -n "${IPFS_GATEWAY_DESERIALIZEDRESPONSES}" ] && ipfs config --json Gateway.DeserializedResponses "${IPFS_GATEWAY_DESERIALIZEDRESPONSES}" +## pretty html errors +[ -n "${IPFS_GATEWAY_DISABLEHTMLERRORS}" ] && ipfs config --json Gateway.DisableHTMLErrors "${IPFS_GATEWAY_DISABLEHTMLERRORS}" +## someguy +[ -n "${IPFS_GATEWAY_EXPOSEROUTINGAPI}" ] && ipfs config --json Gateway.ExposeRoutingAPI "${IPFS_GATEWAY_EXPOSEROUTINGAPI}" ## gateway http headers [ -n "${IPFS_GATEWAY_HTTPHEADERS}${IPFS_GATEWAY_HTTPHEADERS_ACA_CREDENTIALS}${IPFS_GATEWAY_HTTPHEADERS_ACA_HEADERS}${IPFS_GATEWAY_HTTPHEADERS_ACA_METHODS}${IPFS_GATEWAY_HTTPHEADERS_ACA_ORIGIN}" ] \ && ipfs config --json Gateway.HTTPHeaders "${IPFS_GATEWAY_HTTPHEADERS:-{ -\"Access-Control-Allow-Credentials\": ${IPFS_GATEWAY_HTTPHEADERS_ACA_CREDENTIALS:-[ \"true\" ]}, -\"Access-Control-Allow-Headers\": ${IPFS_GATEWAY_HTTPHEADERS_ACA_HEADERS:-[ \"X-Requested-With\", \"Range\", \"User-Agent\" ]}, -\"Access-Control-Allow-Methods\": ${IPFS_GATEWAY_HTTPHEADERS_ACA_METHODS:-[ \"GET\" ]}, -\"Access-Control-Allow-Origin\": ${IPFS_GATEWAY_HTTPHEADERS_ACA_ORIGIN:-[ \"*\" ]} +\"Access-Control-Allow-Credentials\": ${IPFS_GATEWAY_HTTPHEADERS_ACA_CREDENTIALS:-null}, +\"Access-Control-Allow-Headers\": ${IPFS_GATEWAY_HTTPHEADERS_ACA_HEADERS:-null}, +\"Access-Control-Allow-Methods\": ${IPFS_GATEWAY_HTTPHEADERS_ACA_METHODS:-null}, +\"Access-Control-Allow-Origin\": ${IPFS_GATEWAY_HTTPHEADERS_ACA_ORIGIN:-null} }}" +## redirect / +[ -n "${IPFS_GATEWAY_ROOTREDIRECT}" ] && ipfs config Gateway.RootRedirect "${IPFS_GATEWAY_ROOTREDIRECT}" +## public gateways: { "localhost": { "Paths": ["/ipfs", "/ipns"], "UseSubdomains": true } } +[ -n "${IPFS_GATEWAY_PUBLICGATEWAYS}" ] && ipfs config --json Gateway.PublicGateways "${IPFS_GATEWAY_PUBLICGATEWAYS}" ## ipns [ -n "${IPFS_IPNS_REPUBLISHPERIOD}" ] && ipfs config Ipns.RepublishPeriod "${IPFS_IPNS_REPUBLISHPERIOD}" [ -n "${IPFS_IPNS_RECORDLIFETIME}" ] && ipfs config Ipns.RecordLifetime "${IPFS_IPNS_RECORDLIFETIME}" +[ -n "${IPFS_IPNS_RESOLVECACHESIZE}" ] && ipfs config Ipns.ResolveCacheSize "${IPFS_IPNS_RESOLVECACHESIZE}" +[ -n "${IPFS_IPNS_MAXCACHETTL}" ] && ipfs config Ipns.MaxCacheTTL "${IPFS_IPNS_MAXCACHETTL}" [ -n "${IPFS_IPNS_USEPUBSUB}" ] && ipfs config --json Ipns.UsePubsub "${IPFS_IPNS_USEPUBSUB}" -## dht pubsub mode -[ -n "${IPFS_PUBSUB_ENABLE}" ] && ipfs config --json Pubsub.Enabled "${IPFS_PUBSUB_ENABLE}" -[ -n "${IPFS_PUBSUB_ROUTER}" ] && ipfs config Pubsub.Router "${IPFS_PUBSUB_ROUTER}" +## pinning +[ -n "${IPFS_PINNING_REMOTESERVICES}" ] && ipfs config --json Pinning.RemoteServices "${IPFS_PINNING_REMOTESERVICES}" -## routing -[ -n "${IPFS_ROUTING_TYPE}" ] && ipfs config Routing.Type "${IPFS_ROUTING_TYPE}" +## peering :) +[ -n "${IPFS_PEERING_PEERS}" ] && ipfs config --json Peering.Peers "${IPFS_PEERING_PEERS}" ## reproviding local content to routing system [ -n "${IPFS_REPROVIDER_INTERVAL}" ] && ipfs config Reprovider.Interval "${IPFS_REPROVIDER_INTERVAL}" [ -n "${IPFS_REPROVIDER_STRATEGY}" ] && ipfs config Reprovider.Strategy "${IPFS_REPROVIDER_STRATEGY}" +## routing +[ -n "${IPFS_ROUTING_TYPE}" ] && ipfs config --json Routing.Type "${IPFS_ROUTING_TYPE}" +[ -n "${IPFS_ROUTING_ACCELERATEDDHTCLIENT}" ] && ipfs config --json Routing.AcceleratedDHTClient "${IPFS_ROUTING_ACCELERATEDDHTCLIENT}" +[ -n "${IPFS_ROUTING_LOOPBACKADDRESSESONLANDHT}" ] && ipfs config --bool Routing.LoopbackAddressesOnLanDHT "${IPFS_ROUTING_LOOPBACKADDRESSESONLANDHT}" +[ -n "${IPFS_ROUTING_METHODS}" ] && ipfs config --json Routing.Methods "${IPFS_ROUTING_METHODS}" +[ -n "${IPFS_ROUTING_ROUTERS}" ] && ipfs config --json Routing.Routers "${IPFS_ROUTING_ROUTERS}" + ## swarm config -[ -n "${IPFS_SWARM_CONNMGR_HIGHWATER}" ] && ipfs config --json Swarm.ConnMgr.HighWater "${IPFS_SWARM_CONNMGR_HIGHWATER}" -[ -n "${IPFS_SWARM_CONNMGR_LOWWATER}" ] && ipfs config --json Swarm.ConnMgr.LowWater "${IPFS_SWARM_CONNMGR_LOWWATER}" -[ -n "${IPFS_SWARM_CONNMGR_TYPE}" ] && ipfs config --json Swarm.ConnMgr.Type "${IPFS_SWARM_CONNMGR_TYPE}" -[ -n "${IPFS_SWARM_DISABLENATPORTMAP}" ] && ipfs config --bool Swarm.DisableNatPortMap "${SWARM_DISABLENATPORTMAP}" -[ -n "${IPFS_SWARM_ENABLEHOLEPUNCHING}" ] && ipfs config --bool Swarm.EnableHolePunching "${SWARM_ENABLEHOLEPUNCHING}" -[ -n "${IPFS_SWARM_RELAYCLIENT_ENABLED}" ] && ipfs config --bool Swarm.RelayClient.Enabled "${SWARM_RELAYCLIENT_ENABLED}" -[ -n "${IPFS_SWARM_RELAYSERVICE_ENABLED}" ] && ipfs config --bool Swarm.RelayService.Enabled "${SWARM_RELAYSERVICE_ENABLED}" -[ -n "${IPFS_SWARM_TRANSPORTS_NETWORK_RELAY}" ] && ipfs config --bool Swarm.Transports.Network.Relay "${SWARM_TRANSPORTS_NETWORK_RELAY}" +[ -n "${IPFS_SWARM_ADDRFILTERS}" ] && ipfs config --json Swarm.AddrFilters "${IPFS_SWARM_ADDRFILTERS}" +[ -n "${IPFS_DOCKER_NETWORK}" ] && ipfs config --json Swarm.AddrFilters "$(ipfs config Swarm.AddrFilters |sed '/${IPFS_DOCKER_NETWORK}"/d')" +[ -n "${IPFS_SWARM_DISABLEBANDWIDTHMETRICS}" ] && ipfs config --bool Swarm.DisableBandwidthMetrics "${SWARM_DISABLEBANDWIDTHMETRICS}" +[ -n "${IPFS_SWARM_DISABLENATPORTMAP}" ] && ipfs config --bool Swarm.DisableNatPortMap "${SWARM_DISABLENATPORTMAP}" +[ -n "${IPFS_SWARM_ENABLEHOLEPUNCHING}" ] && ipfs config --json Swarm.EnableHolePunching "${SWARM_ENABLEHOLEPUNCHING}" +[ -n "${IPFS_SWARM_RELAYCLIENT_ENABLED}" ] && ipfs config --json Swarm.RelayClient.Enabled "${SWARM_RELAYCLIENT_ENABLED}" +[ -n "${IPFS_SWARM_RELAYCLIENT_STATICRELAYS}" ] && ipfs config --json Swarm.RelayClient.StaticRelays "${SWARM_RELAYCLIENT_STATICRELAYS}" +[ -n "${IPFS_SWARM_RELAYSERVICE_ENABLED}" ] && ipfs config --json Swarm.RelayService.Enabled "${SWARM_RELAYSERVICE_ENABLED}" +[ -n "${IPFS_SWARM_RELAYSERVICE_LIMIT}" ] && ipfs config --json Swarm.RelayService.Limit "${SWARM_RELAYSERVICE_LIMIT}" +[ -n "${IPFS_SWARM_RELAYSERVICE_CONNECTIONDURATIONLIMIT}" ] && ipfs config Swarm.RelayService.ConnectionDurationLimit "${SWARM_RELAYSERVICE_CONNECTIONDURATIONLIMIT}" +[ -n "${IPFS_SWARM_RELAYSERVICE_CONNECTIONDATALIMIT}" ] && ipfs config Swarm.RelayService.ConnectionDataLimit "${SWARM_RELAYSERVICE_CONNECTIONDATALIMIT}" +[ -n "${IPFS_SWARM_RELAYSERVICE_RESERVATIONTTL}" ] && ipfs config Swarm.RelayService.ConnectionDataLimit "${SWARM_RELAYSERVICE_RESERVATIONTTL}" +[ -n "${IPFS_SWARM_RELAYSERVICE_MAXRESERVATIONS}" ] && ipfs config Swarm.RelayService.MaxReservations "${SWARM_RELAYSERVICE_MAXRESERVATIONS}" +[ -n "${IPFS_SWARM_RELAYSERVICE_MAXCIRCUITS}" ] && ipfs config Swarm.RelayService.MaxCircuits "${SWARM_RELAYSERVICE_MAXCIRCUITS}" +[ -n "${IPFS_SWARM_RELAYSERVICE_BUFFERSIZE}" ] && ipfs config Swarm.RelayService.BufferSize "${SWARM_RELAYSERVICE_BUFFERSIZE}" +[ -n "${IPFS_SWARM_RELAYSERVICE_MAXRESERVATIONSPERASN}" ] && ipfs config Swarm.RelayService.MaxReservationsPerASN "${SWARM_RELAYSERVICE_MAXRESERVATIONSPERASN}" +[ -n "${IPFS_SWARM_RELAYSERVICE_MAXRESERVATIONSPERIP}" ] && ipfs config Swarm.RelayService.MaxReservationsPerIp "${SWARM_RELAYSERVICE_MAXRESERVATIONSPERIP}" +[ -n "${IPFS_SWARM_CONNMGR_TYPE}" ] && ipfs config Swarm.ConnMgr.Type "${IPFS_SWARM_CONNMGR_TYPE}" +[ -n "${IPFS_SWARM_CONNMGR_HIGHWATER}" ] && ipfs config Swarm.ConnMgr.HighWater "${IPFS_SWARM_CONNMGR_HIGHWATER}" +[ -n "${IPFS_SWARM_CONNMGR_LOWWATER}" ] && ipfs config Swarm.ConnMgr.LowWater "${IPFS_SWARM_CONNMGR_LOWWATER}" +[ -n "${IPFS_SWARM_CONNMGR_GRACEPERIOD}" ] && ipfs config Swarm.ConnMgr.GracePeriod "${IPFS_SWARM_CONNMGR_GRACEPERIOD}" +[ -n "${IPFS_SWARM_RESOURCEMGR_ENABLED}" ] && ipfs config --json Swarm.ResourceMgr.Enabled "${IPFS_SWARM_RESOURCEMGR_ENABLED}" +[ -n "${IPFS_SWARM_RESOURCEMGR_MAXMEMORY}" ] && ipfs config Swarm.ResourceMgr.MaxMemory "${IPFS_SWARM_RESOURCEMGR_MAXMEMORY}" +[ -n "${IPFS_SWARM_RESOURCEMGR_MAXFILEDESCRIPTORS}" ] && ipfs config Swarm.ResourceMgr.MaxFileDescriptors "${IPFS_SWARM_RESOURCEMGR_MAXFILEDESCRIPTORS}" +[ -n "${IPFS_SWARM_RESOURCEMGR_ALLOWLIST}" ] && ipfs config --json Swarm.ResourceMgr.Allowlist "${IPFS_SWARM_RESOURCEMGR_ALLOWLIST}" + +## swarm transports +[ -n "${IPFS_SWARM_TRANSPORTS_NETWORK_TCP}" ] && ipfs config --json Swarm.Transports.Network.TCP "${SWARM_TRANSPORTS_NETWORK_TCP}" +[ -n "${IPFS_SWARM_TRANSPORTS_NETWORK_WEBSOCKET}" ] && ipfs config --json Swarm.Transports.Network.Websocket "${SWARM_TRANSPORTS_NETWORK_WEBSOCKET}" +[ -n "${IPFS_SWARM_TRANSPORTS_NETWORK_QUIC}" ] && ipfs config --json Swarm.Transports.Network.QUIC "${SWARM_TRANSPORTS_NETWORK_QUIC}" +[ -n "${IPFS_SWARM_TRANSPORTS_NETWORK_RELAY}" ] && ipfs config --json Swarm.Transports.Network.Relay "${SWARM_TRANSPORTS_NETWORK_RELAY}" +[ -n "${IPFS_SWARM_TRANSPORTS_NETWORK_WEBTRANSPORT}" ] && ipfs config --json Swarm.Transports.Network.WebTransport "${SWARM_TRANSPORTS_NETWORK_WEBTRANSPORT}" +[ -n "${IPFS_SWARM_TRANSPORTS_NETWORK_WEBRTCDIRECT}" ] && ipfs config --json Swarm.Transports.Network.WebRTCDirect "${SWARM_TRANSPORTS_NETWORK_WEBRTCDIRECT}" +[ -n "${IPFS_SWARM_TRANSPORTS_NETWORK_WEBRTCDIRECT}" ] && ipfs config --json Swarm.Transports.Network.WebRTCDirect "${SWARM_TRANSPORTS_NETWORK_WEBRTCDIRECT}" +[ -n "${IPFS_SWARM_TRANSPORTS_SECURITY_TLS}" ] && ipfs config Swarm.Transports.Security.TLS "${SWARM_TRANSPORTS_SECURITY_TLS}" +[ -n "${IPFS_SWARM_TRANSPORTS_SECURITY_NOISE}" ] && ipfs config Swarm.Transports.Security.Noise "${SWARM_TRANSPORTS_SECURITY_NOISE}" +[ -n "${IPFS_SWARM_TRANSPORTS_MULTIPLEXERS_YAMUX}" ] && ipfs config Swarm.Transports.Multiplexers.Yamux "${SWARM_TRANSPORTS_MULTIPLEXERS_YAMUX}" + +## dns +[ -n "${IPFS_DNS_RESOLVERS}" ] && ipfs config --json DNS.Resolvers "${IPFS_DNS_RESOLVERS}" +[ -n "${IPFS_DNS_MAXCACHETTL}" ] && ipfs config DNS.MaxCacheTTL "${IPFS_DNS_MAXCACHETTL}" + +## experimental features +[ -n "${IPFS_EXPERIMENTAL_FILESTOREENABLED}" ] && ipfs config --json Experimental.FilestoreEnabled "${IPFS_EXPERIMENTAL_FILESTOREENABLED}" +[ -n "${IPFS_EXPERIMENTAL_URLSTOREENABLED}" ] && ipfs config --json Experimental.UrlstoreEnabled "${IPFS_EXPERIMENTAL_URLSTOREENABLED}" +[ -n "${IPFS_EXPERIMENTAL_URLSTORE}" ] && ipfs urlstore add "${IPFS_EXPERIMENTAL_URLSTORE}" +[ -n "${IPFS_EXPERIMENTAL_LIBP2PSTREAMMOUNTING}" ] && ipfs config --json Experimental.Libp2pStreamMounting "${IPFS_EXPERIMENTAL_LIBP2PSTREAMMOUNTING}" +[ -n "${IPFS_EXPERIMENTAL_P2PHTTPPROXY}" ] && ipfs config --json Experimental.P2pHttpProxy "${IPFS_EXPERIMENTAL_P2PHTTPPROXY}" +[ -n "${IPFS_EXPERIMENTAL_STRATEGICPROVIDING}" ] && ipfs config --json Experimental.StrategicProviding "${IPFS_EXPERIMENTAL_STRATEGICPROVIDING}" +[ -n "${IPFS_EXPERIMENTAL_OPTIMISTICPROVIDE}" ] && ipfs config --json Experimental.OptimisticProvide "${IPFS_EXPERIMENTAL_OPTIMISTICPROVIDE}" +[ -n "${IPFS_EXPERIMENTAL_GATEWAYOVERLIBP2P}" ] && ipfs config --json Experimental.GatewayOverLibp2p "${IPFS_EXPERIMENTAL_GATEWAYOVERLIBP2P}" ## REMOVE IPFS BOOTSTRAP for private usage -[ ${IPFS_NETWORK:-public} = "public" ] || ipfs bootstrap rm --all +[ ${IPFS_NETWORK:-public} = "public" ] || ipfs bootstrap rm --all [ ${IPFS_NETWORK:-public} = "private" ] && export LIBP2P_FORCE_PNET=1 ||: - -## ALLOW AUTO DISCOVERY ON DOCKER NETWORK -ipfs config --bool Discovery.MDNS.Enabled true -ipfs config --json Addresses.NoAnnounce "$(ipfs config Addresses.NoAnnounce |sed '/172.16.0.0/d')" -ipfs config --json Swarm.AddrFilters "$(ipfs config Swarm.AddrFilters |sed '/172.16.0.0/d')" diff --git a/stack/ipfs/ipfs.mk b/stack/ipfs/ipfs.mk index a0cfc74..6aa6b38 100644 --- a/stack/ipfs/ipfs.mk +++ b/stack/ipfs/ipfs.mk @@ -1,13 +1,15 @@ -ENV_VARS += IPFS_API_HTTPHEADERS_ACA_ORIGIN IPFS_DAEMON_ARGS IPFS_PROFILE IPFS_SERVICE_5001_TAGS IPFS_SERVICE_8080_TAGS IPFS_VERSION +ENV_VARS += IPFS_API_HTTPHEADERS_ACA_ORIGIN IPFS_DAEMON_ARGS IPFS_DATASTORE_DISKUSAGE IPFS_PROFILE IPFS_SERVICE_CPUS IPFS_SERVICE_5001_TAGS IPFS_SERVICE_8080_TAGS IPFS_VERSION IPFS_API_HTTPHEADERS_ACA_ORIGIN ?= [$(call patsublist,%,"https://%",$(patsubst,%/,%,$(IPFS_SERVICE_8080_URIS)))] +IPFS_DATASTORE_DISKUSAGE ?= 80 IPFS_PROFILE ?= $(if $(filter-out amd64 x86_64,$(MACHINE)),lowpower,server) IPFS_SERVICE_NAME ?= ipfs +IPFS_SERVICE_CPUS ?= 0.5 IPFS_SERVICE_5001_PATH ?= api/ IPFS_SERVICE_5001_TAGS ?= $(call tagprefix,ipfs,5001) IPFS_SERVICE_8080_CHECK_HTTP ?= /ipfs/QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn IPFS_SERVICE_8080_TAGS ?= $(call urlprefix,,,$(IPFS_SERVICE_8080_URIS)) IPFS_SERVICE_8080_URIS ?= $(call uriprefix,ipfs *.ipns) -IPFS_VERSION ?= 0.24.0 +IPFS_VERSION ?= 0.32.1 .PHONY: bootstrap-stack-ipfs bootstrap-stack-ipfs: ~/.ipfs setup-sysctl diff --git a/stack/ipfs/ipfs.yml b/stack/ipfs/ipfs.yml index 8452fbb..f0843a2 100644 --- a/stack/ipfs/ipfs.yml +++ b/stack/ipfs/ipfs.yml @@ -12,52 +12,119 @@ services: command: daemon --agent-version-suffix=${COMPOSE_PROJECT_NAME} ${IPFS_DAEMON_ARGS:---migrate} cpus: 0.5 environment: + - DEBUG=${DEBUG:-} + - IPFS_ADDRESSES_ANNOUNCE=${IPFS_ADDRESSES_ANNOUNCE:-} - IPFS_ADDRESSES_API=${IPFS_ADDRESSES_API:-} - IPFS_ADDRESSES_API_DOMAIN=${IPFS_ADDRESSES_API_DOMAIN:-${DOCKER_NETWORK_PRIVATE}} - IPFS_ADDRESSES_API_INET4=${IPFS_ADDRESSES_API_INET4:-} - IPFS_ADDRESSES_API_PORT=${IPFS_ADDRESSES_API_PORT:-} + - IPFS_ADDRESSES_APPENDANNOUNCE=${IPFS_ADDRESSES_APPENDANNOUNCE:-} - IPFS_ADDRESSES_GATEWAY=${IPFS_ADDRESSES_GATEWAY:-} - IPFS_ADDRESSES_GATEWAY_DOMAIN=${IPFS_ADDRESSES_GATEWAY_DOMAIN:-} - IPFS_ADDRESSES_GATEWAY_INET4=${IPFS_ADDRESSES_GATEWAY_INET4:-0.0.0.0} - IPFS_ADDRESSES_GATEWAY_PORT=${IPFS_ADDRESSES_GATEWAY_PORT:-} - IPFS_ADDRESSES_NOANNOUNCE=${IPFS_ADDRESSES_NOANNOUNCE:-} + - IPFS_ADDRESSES_SWARM=${IPFS_ADDRESSES_SWARM:-} - IPFS_API_HTTPHEADERS=${IPFS_API_HTTPHEADERS:-} - IPFS_API_HTTPHEADERS_ACA_CREDENTIALS=${IPFS_API_HTTPHEADERS_ACA_CREDENTIALS:-["true"]} - IPFS_API_HTTPHEADERS_ACA_HEADERS=${IPFS_API_HTTPHEADERS_ACA_HEADERS:-["X-Requested-With", "Range", "User-Agent"]} - IPFS_API_HTTPHEADERS_ACA_METHODS=${IPFS_API_HTTPHEADERS_ACA_METHODS:-["OPTIONS", "POST"]} - IPFS_API_HTTPHEADERS_ACA_ORIGIN=${IPFS_API_HTTPHEADERS_ACA_ORIGIN:-} + - IPFS_AUTONAT=${IPFS_AUTONAT:-} + - IPFS_AUTONAT_SERVICEMODE=${IPFS_AUTONAT_SERVICEMODE:-} + - IPFS_AUTONAT_THROTTLE=${IPFS_AUTONAT_THROTTLE:-} + - IPFS_AUTONAT_THROTTLE_GLOBALLIMIT=${IPFS_AUTONAT_THROTTLE_GLOBALLIMIT:-} + - IPFS_AUTONAT_THROTTLE_PEERLIMIT=${IPFS_AUTONAT_THROTTLE_PEERLIMIT:-} + - IPFS_AUTONAT_THROTTLE_INTERVAL=${IPFS_AUTONAT_THROTTLE_INTERVAL:-} + - IPFS_AUTOTLS=${IPFS_AUTOTLS:-} + - IPFS_AUTOTLS_ENABLED=${IPFS_AUTOTLS_ENABLED:-false} + - IPFS_AUTOTLS_DOMAINSUFFIX=${IPFS_AUTOTLS_DOMAINSUFFIX:-} + - IPFS_AUTOTLS_REGISTRATIONENDPOINT=${IPFS_AUTOTLS_REGISTRATIONENDPOINT:-} + - IPFS_AUTOTLS_REGISTRATIONTOKEN=${IPFS_AUTOTLS_REGISTRATIONTOKEN:-} + - IPFS_AUTOTLS_CAENDPOINT=${IPFS_AUTOTLS_CAENDPOINT:-} - IPFS_BOOTSTRAP=${IPFS_BOOTSTRAP:-} - - IPFS_DATASTORE_GCPERIOD=${IPFS_DATASTORE_GCPERIOD:-} - - IPFS_DISK_USAGE_PERCENT=${IPFS_DISK_USAGE_PERCENT:-} - - IPFS_EXPERIMENTAL_ACCELERATEDDHTCLIENT=${IPFS_EXPERIMENTAL_ACCELERATEDDHTCLIENT:-} + - IPFS_DATASTORE_BLOOMFILTERSIZE=${IPFS_DATASTORE_BLOOMFILTERSIZE:-} + - IPFS_DATASTORE_DISKUSAGE=${IPFS_DATASTORE_DISKUSAGE:-50} + - IPFS_DATASTORE_GCPERIOD=${IPFS_DATASTORE_GCPERIOD:-1h} + - IPFS_DATASTORE_HASHONREAD=${IPFS_DATASTORE_HASHONREAD:-false} + - IPFS_DATASTORE_SPEC=${IPFS_DATASTORE_SPEC:-} + - IPFS_DATASTORE_STORAGEGCWATERMARK=${IPFS_DATASTORE_STORAGEGCWATERMARK:-} + - IPFS_DISCOVERY_MDNS_ENABLED=${IPFS_DISCOVERY_MDNS_ENABLED:-true} + - IPFS_DNS_RESOLVERS=${IPFS_DNS_RESOLVERS:-} + - IPFS_DNS_MAXCACHETTL=${IPFS_DNS_MAXCACHETTL:-} + - IPFS_DOCKER_NETWORK=${IPFS_DOCKER_NETWORK:-172.16.0.0} - IPFS_EXPERIMENTAL_FILESTOREENABLED=${IPFS_EXPERIMENTAL_FILESTOREENABLED:-} - - IPFS_EXPERIMENTAL_GRAPHSYNCENABLED=${IPFS_EXPERIMENTAL_GRAPHSYNCENABLED:-} - - IPFS_EXPERIMENTAL_LIBP2PSTREAMMOUNTING=${IPFS_EXPERIMENTAL_LIBP2PSTREAMMOUNTING:-} - - IPFS_EXPERIMENTAL_P2PHTTPPROXY=${IPFS_EXPERIMENTAL_P2PHTTPPROXY:-} + - IPFS_EXPERIMENTAL_GATEWAYOVERLIBP2P=${IPFS_EXPERIMENTAL_GATEWAYOVERLIBP2P:-true} + - IPFS_EXPERIMENTAL_LIBP2PSTREAMMOUNTING=${IPFS_EXPERIMENTAL_LIBP2PSTREAMMOUNTING:-true} + - IPFS_EXPERIMENTAL_OPTIMISTICPROVIDE=${IPFS_EXPERIMENTAL_OPTIMISTICPROVIDE:-} + - IPFS_EXPERIMENTAL_P2PHTTPPROXY=${IPFS_EXPERIMENTAL_P2PHTTPPROXY:-true} - IPFS_EXPERIMENTAL_STRATEGICPROVIDING=${IPFS_EXPERIMENTAL_STRATEGICPROVIDING:-} + - IPFS_EXPERIMENTAL_URLSTORE=${IPFS_EXPERIMENTAL_URLSTORE:-} - IPFS_EXPERIMENTAL_URLSTOREENABLED=${IPFS_EXPERIMENTAL_URLSTOREENABLED:-} + - IPFS_GATEWAY_DESERIALIZEDRESPONSES=${IPFS_GATEWAY_DESERIALIZEDRESPONSES:-true} + - IPFS_GATEWAY_DISABLEHTMLERRORS=${IPFS_GATEWAY_DISABLEHTMLERRORS:-false} + - IPFS_GATEWAY_EXPOSEROUTINGAPI=${IPFS_GATEWAY_EXPOSEROUTINGAPI:-false} + - IPFS_GATEWAY_HTTPHEADERS=${IPFS_GATEWAY_HTTPHEADERS:-} + - IPFS_GATEWAY_HTTPHEADERS_ACA_CREDENTIALS=${IPFS_GATEWAY_HTTPHEADERS_ACA_CREDENTIALS:-["true"]} + - IPFS_GATEWAY_HTTPHEADERS_ACA_HEADERS=${IPFS_GATEWAY_HTTPHEADERS_ACA_HEADERS:-["X-Requested-With", "Range", "User-Agent"]} + - IPFS_GATEWAY_HTTPHEADERS_ACA_METHODS=${IPFS_GATEWAY_HTTPHEADERS_ACA_METHODS:-["GET"]} + - IPFS_GATEWAY_HTTPHEADERS_ACA_ORIGIN=${IPFS_GATEWAY_HTTPHEADERS_ACA_ORIGIN:-["*"]} + - IPFS_GATEWAY_NOFETCH=${IPFS_GATEWAY_NOFETCH:-false} + - IPFS_GATEWAY_NODNSLINK=${IPFS_GATEWAY_NODNSLINK:-false} + - IPFS_GATEWAY_PUBLICGATEWAYS=${IPFS_GATEWAY_PUBLICGATEWAYS:-} - IPFS_IDENTITY_PEERID=${IPFS_IDENTITY_PEERID:-} - IPFS_IDENTITY_PRIVKEY=${IPFS_IDENTITY_PRIVKEY:-} + - IPFS_IPNS_MAXCACHETTL=${IPFS_IPNS_MAXCACHETTL:-} - IPFS_IPNS_REPUBLISHPERIOD=${IPFS_IPNS_REPUBLISHPERIOD:-} - IPFS_IPNS_RECORDLIFETIME=${IPFS_IPNS_RECORDLIFETIME:-} + - IPFS_IPNS_RESOLVECACHESIZE=${IPFS_IPNS_RESOLVECACHESIZE:-} - IPFS_IPNS_USEPUBSUB=${IPFS_IPNS_USEPUBSUB:-true} - IPFS_LOGGING=${IPFS_LOGGING:-error} - IPFS_NETWORK=${IPFS_NETWORK:-private} + - IPFS_PEERING_PEERS=${IPFS_PEERING_PEERS:-} + - IPFS_PINNING_REMOTESERVICES=${IPFS_PINNING_REMOTESERVICES:-} - IPFS_PROFILE=${IPFS_PROFILE:-} - - IPFS_PUBSUB_ENABLE=${IPFS_PUBSUB_ENABLE:-true} - - IPFS_PUBSUB_ROUTER=${IPFS_PUBSUB_ROUTER:-gossipsub} - - IPFS_ROUTING_TYPE=${IPFS_ROUTING_TYPE:-dht} + - IPFS_REPO_MIGRATE=${IPFS_REPO_MIGRATE:-true} - IPFS_REPROVIDER_INTERVAL=${IPFS_REPROVIDER_INTERVAL:-} - IPFS_REPROVIDER_STRATEGY=${IPFS_REPROVIDER_STRATEGY:-} + - IPFS_ROUTING_ACCELERATEDDHTCLIENT=${IPFS_ROUTING_ACCELERATEDDHTCLIENT:-true} + - IPFS_ROUTING_LOOPBACKADDRESSESONLANDHT=${IPFS_ROUTING_LOOPBACKADDRESSESONLANDHT:-} + - IPFS_ROUTING_METHODS=${IPFS_ROUTING_METHODS:-} + - IPFS_ROUTING_ROUTERS=${IPFS_ROUTING_ROUTERS:-} + - IPFS_ROUTING_TYPE=${IPFS_ROUTING_TYPE:-"dht"} + - IPFS_SWARM_ADDRFILTERS=${IPFS_SWARM_ADDRFILTERS:-} + - IPFS_SWARM_CONNMGR_GRACEPERIOD=${IPFS_SWARM_CONNMGR_GRACEPERIOD:-} - IPFS_SWARM_CONNMGR_HIGHWATER=${IPFS_SWARM_CONNMGR_HIGHWATER:-} - IPFS_SWARM_CONNMGR_LOWWATER=${IPFS_SWARM_CONNMGR_LOWWATER:-} - IPFS_SWARM_CONNMGR_TYPE=${IPFS_SWARM_CONNMGR_TYPE:-} - IPFS_SWARM_DISABLENATPORTMAP=${IPFS_SWARM_DISABLENATPORTMAP:-} + - IPFS_SWARM_DISABLEBANDWIDTHMETRICS=${IPFS_SWARM_DISABLEBANDWIDTHMETRICS:-} - IPFS_SWARM_ENABLEHOLEPUNCHING=${IPFS_SWARM_ENABLEHOLEPUNCHING:-} - IPFS_SWARM_KEY=${IPFS_SWARM_KEY:-} - IPFS_SWARM_RELAYCLIENT_ENABLED=${IPFS_SWARM_RELAYCLIENT_ENABLED:-} - - IPFS_SWARM_RELAYSERVICE_ENABLED=${IPFS_SWARM_RELAYSERVICE_ENABLED:-} + - IPFS_SWARM_RELAYCLIENT_STATICRELAYS=${IPFS_SWARM_RELAYCLIENT_STATICRELAYS:-} + - IPFS_SWARM_RELAYSERVICE_CONNECTIONDATALIMIT=${IPFS_SWARM_RELAYSERVICE_CONNECTIONDATALIMIT:-} + - IPFS_SWARM_RELAYSERVICE_CONNECTIONDURATIONLIMIT=${IPFS_SWARM_RELAYSERVICE_CONNECTIONDURATIONLIMIT:-} + - IPFS_SWARM_RELAYSERVICE_LIMIT=${IPFS_SWARM_RELAYSERVICE_LIMIT:-} + - IPFS_SWARM_RELAYSERVICE_MAXCIRCUITS=${IPFS_SWARM_RELAYSERVICE_MAXCIRCUITS:-} + - IPFS_SWARM_RELAYSERVICE_MAXRESERVATIONS=${IPFS_SWARM_RELAYSERVICE_MAXRESERVATIONS:-} + - IPFS_SWARM_RELAYSERVICE_RESERVATIONTTL=${IPFS_SWARM_RELAYSERVICE_RESERVATIONTTL:-} + - IPFS_SWARM_RELAYSERVICE_BUFFERSIZE=${IPFS_SWARM_RELAYSERVICE_BUFFERSIZE:-} + - IPFS_SWARM_RELAYSERVICE_MAXRESERVATIONSPERASN=${IPFS_SWARM_RELAYSERVICE_MAXRESERVATIONSPERASN:-} + - IPFS_SWARM_RELAYSERVICE_MAXRESERVATIONSPERIP=${IPFS_SWARM_RELAYSERVICE_MAXRESERVATIONSPERIP:-} + - IPFS_SWARM_RESOURCEMGR_ALLOWLIST=${IPFS_SWARM_RESOURCEMGR_ALLOWLIST:-} + - IPFS_SWARM_RESOURCEMGR_ENABLED=${IPFS_SWARM_RESOURCEMGR_ENABLED:-} + - IPFS_SWARM_RESOURCEMGR_MAXFILEDESCRIPTORS=${IPFS_SWARM_RESOURCEMGR_MAXFILEDESCRIPTORS:-} + - IPFS_SWARM_RESOURCEMGR_MAXMEMORY=${IPFS_SWARM_RESOURCEMGR_MAXMEMORY:-} + - IPFS_SWARM_TRANSPORTS_NETWORK_QUIC=${IPFS_SWARM_TRANSPORTS_NETWORK_QUIC:-} - IPFS_SWARM_TRANSPORTS_NETWORK_RELAY=${IPFS_SWARM_TRANSPORTS_NETWORK_RELAY:-} + - IPFS_SWARM_TRANSPORTS_NETWORK_TCP=${IPFS_SWARM_TRANSPORTS_NETWORK_TCP:-} + - IPFS_SWARM_TRANSPORTS_NETWORK_WEBRTCDIRECT=${IPFS_SWARM_TRANSPORTS_NETWORK_WEBRTCDIRECT:-} + - IPFS_SWARM_TRANSPORTS_NETWORK_WEBSOCKET=${IPFS_SWARM_TRANSPORTS_NETWORK_WEBSOCKET:-} + - IPFS_SWARM_TRANSPORTS_NETWORK_WEBTRANSPORT=${IPFS_SWARM_TRANSPORTS_NETWORK_WEBTRANSPORT:-} + - IPFS_SWARM_TRANSPORTS_SECURITY_NOISE=${IPFS_SWARM_TRANSPORTS_SECURITY_NOISE:-} + - IPFS_SWARM_TRANSPORTS_SECURITY_TLS=${IPFS_SWARM_TRANSPORTS_SECURITY_TLS:-} + - IPFS_SWARM_TRANSPORTS_MULTIPLEXERS_YAMUX=${IPFS_SWARM_TRANSPORTS_MULTIPLEXERS_YAMUX:-} image: ${DOCKER_REPOSITORY}/ipfs:${DOCKER_IMAGE_TAG} labels: - SERVICE_4001_CHECK_TCP=true