diff --git a/servers/containers/conduwuit-limited-federation.container b/servers/containers/conduwuit-limited-federation.container new file mode 100644 index 00000000..f6e1eadd --- /dev/null +++ b/servers/containers/conduwuit-limited-federation.container @@ -0,0 +1,92 @@ + + +[Unit] +Description=Conduwuit limited federation (matrix) +Wants=network-online.target +Wants=traefik.service +After=network-online.target +Documentation=https://conduwuit.puppyirl.gay/ + +[Container] +ContainerName=conduwuit-limited-federation +NoNewPrivileges=true +Image=ghcr.io/jadedblueeyes/conduwuit:federation-allow-list +ReadOnly=true +Volume=/var/opt/conduwuit-limited-federation:/var/lib/conduwuit:z,U +AutoUpdate=registry + +# conduwuit uses quite a few file descriptors, and on some systems it defaults to 1024 +Ulimit=nofile=1048567:1048567 + +Label="traefik.enable=true" +Label="traefik.http.routers.conduwuit-limited-federation.rule=(Host(`matrix-limited-federation.pissing.dev`))" + +Label="traefik.http.services.conduwuit-limited-federation.loadbalancer.server.port=6168" +Environment="CONDUWUIT_PORT=6168" + +Network=web.network:ip=10.89.0.246,ip6=fd76:6f6d:f45e:ea1a::f10 +Label="traefik.docker.network=systemd-web" +Environment="CONDUWUIT_ADDRESS=[\"10.89.0.246\", \"fd76:6f6d:f45e:ea1a::f10\"]" + +Label="traefik.http.routers.conduwuit-limited-federation.entrypoints=https,matrix" + +Label="traefik.http.routers.conduwuit-limited-federation.middlewares=default@file" + +Label="homepage.group=Public" +Label="homepage.name=Conduwuit (limited federation)" +# https://github.com/girlbossceo/conduwuit/blob/032b199129f8648a77bde285f755a78e9ec349a7/src/api/client/unversioned.rs#L142 +# Endpoint provided by sliding sync proxy used by some clients such as Element Web as a non-standard health check. +Label="homepage.siteMonitor=https://matrix-limited-federation.pissing.dev/client/server.json" +Label="homepage.description=Matrix homeserver (matrix-limited-federation.pissing.dev)" +Label=kuma.__monitor='' +Environment='CONDUWUIT_ALLOWED_REMOTE_SERVER_NAMES=["pissing.dev"]' + +Environment="CONDUWUIT_SERVER_NAME=matrix-limited-federation.pissing.dev" + +Environment="CONDUWUIT_DATABASE_PATH=/var/lib/conduwuit" +Environment="CONDUWUIT_DATABASE_BACKEND=rocksdb" +# in bytes, ~20 MB +Environment="CONDUWUIT_MAX_REQUEST_SIZE=20000000" + +Environment="CONDUWUIT_ALLOW_REGISTRATION=true" +Environment="CONDUWUIT_REGISTRATION_TOKEN=pissing-atlantic-proclaim-canine-drivable" +Environment='CONDUWUIT_AUTO_JOIN_ROOMS=["!UgUxfVZAEj2pcBRRdv:ellis.link", "!C8jPKMPkMsnd1wmm5j:ellis.link"]' +Environment="CONDUWUIT_ALLOW_FEDERATION=true" +Environment="CONDUWUIT_ALLOW_PUBLIC_ROOM_DIRECTORY_OVER_FEDERATION=true" + +Environment="CONDUWUIT_ALLOW_LEGACY_MEDIA=false" + +Environment="CONDUWUIT_TRUSTED_SERVERS=[\"matrix.org\", \"matrix.pissing.dev\", \"matrix.ellis.link\", "tchncs.de", "envs.net"]" +Environment="CONDUWUIT_LOG=info,hickory_proto::xfer::dns_exchange=error" +Environment="CONDUWUIT_WELL_KNOWN={ \ +client=https://matrix-limited-federation.pissing.dev, \ +server=matrix-limited-federation.pissing.dev:443 \ +}" + +Environment="CONDUWUIT_TURN_URIS=[\"turns:coturn.ellis.link?transport=udp\",\"turns:coturn.ellis.link?transport=tcp\",\"turn:coturn.ellis.link?transport=udp\",\"turn:coturn.ellis.link?transport=tcp\"]" +Environment="CONDUWUIT_TURN_SECRET=qjRh55G51K7V0ZqB7Z8ZEkxZjBLJMgkwEs8acFjx" + +Network=conduwuit-url.network:interface_name=pub +Environment="CONDUWUIT_URL_PREVIEW_DOMAIN_EXPLICIT_ALLOWLIST=[\"*\"]" +Environment="CONDUWUIT_URL_PREVIEW_BOUND_INTERFACE=pub" + +# Environment="CONDUWUIT_SENTRY=true" +# Environment="CONDUWUIT_SENTRY_ENDPOINT=https://c885d1475cef5c54bbd32b1512e0ae20@o4507835405369344.ingest.de.sentry.io/4508059491696720" + +# Environment="CONDUWUIT_EMERGENCY_PASSWORD=" + +StopTimeout=100 + +[Service] + +Restart=on-failure +RestartSec=5 + +TimeoutStopSec=2m +TimeoutStartSec=2m + +# StartLimitInterval=1m +StartLimitBurst=5 + +[Install] +WantedBy=default.target \ No newline at end of file diff --git a/servers/containers/conduwuit-source.build b/servers/containers/conduwuit-source.build new file mode 100644 index 00000000..5a323e3f --- /dev/null +++ b/servers/containers/conduwuit-source.build @@ -0,0 +1,19 @@ + + +[Unit] +Description=Conduwuit image build +Wants=network-online.target +After=network-online.target + + +[Build] + +ImageTag=localhost/conduwuit:git + +# File=https://gist.githubusercontent.com/JadedBlueEyes/01848fc7388ab5bc0b0fbd552e075a67/raw/Containerfile +File=/etc/containers/systemd/conduwuit.Containerfile + +SetWorkingDirectory=https://github.com/girlbossceo/conduwuit.git +PodmanArgs=--build-arg TARGET_CPU=native + # --build-arg COMMIT_SHA= +Annotation=org.opencontainers.image.title=Conduwuit (custom build) \ No newline at end of file diff --git a/servers/containers/conduwuit-testing.container b/servers/containers/conduwuit-testing.container index 3d5378e4..691cda58 100644 --- a/servers/containers/conduwuit-testing.container +++ b/servers/containers/conduwuit-testing.container @@ -10,7 +10,8 @@ Documentation=https://conduwuit.puppyirl.gay/ [Container] ContainerName=conduwuit-testing NoNewPrivileges=true -Image=ghcr.io/girlbossceo/conduwuit:main +# Image=ghcr.io/girlbossceo/conduwuit:main +Image=conduwuit-source.build ReadOnly=true Volume=/var/opt/conduwuit-testing:/var/lib/conduwuit:z,U AutoUpdate=registry diff --git a/servers/containers/conduwuit.Containerfile b/servers/containers/conduwuit.Containerfile new file mode 100644 index 00000000..cec02f2f --- /dev/null +++ b/servers/containers/conduwuit.Containerfile @@ -0,0 +1,169 @@ +ARG RUST_VERSION=1.84 + +FROM --platform=$BUILDPLATFORM docker.io/tonistiigi/xx AS xx +FROM --platform=$BUILDPLATFORM rust:${RUST_VERSION}-slim-bookworm AS base +FROM --platform=$BUILDPLATFORM rust:${RUST_VERSION}-slim-bookworm AS builder + +# Prevent deletion of apt cache +RUN rm -f /etc/apt/apt.conf.d/docker-clean + +# Match Rustc version as close as possible +# rustc -vV +ARG LLVM_VERSION=19 +ENV RUSTUP_TOOLCHAIN=${RUST_VERSION} + +# Install repo tools +# Line one: compiler tools +# Line two: curl, for downloading binaries +# Line three: for xx-verify +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked <> /etc/environment + echo "PKG_CONFIG=/usr/bin/$(xx-info)-pkg-config" + echo "PKG_CONFIG_ALLOW_CROSS=true" >> /etc/environment +EOF + +# Configure cc to use clang version +RUN <> /etc/environment + echo "CXX=clang++" >> /etc/environment +EOF + +# Cross-language LTO +RUN <> /etc/environment + echo "CXXFLAGS=-flto" >> /etc/environment + echo "RUSTFLAGS='-Clinker-plugin-lto -Clinker=clang -Clink-arg=-fuse-ld=lld'" >> /etc/environment +EOF + +# Apply CPU-specific optimizations if TARGET_CPU is provided +ARG TARGET_CPU= +ARG TARGET_CPU +RUN <> /etc/environment + echo "CXXFLAGS='${CXXFLAGS} -march=${TARGET_CPU}'" >> /etc/environment + echo "RUSTFLAGS='${RUSTFLAGS} -C target-cpu=${TARGET_CPU}'" >> /etc/environment + fi +EOF + +# Conduwuit version info +ARG COMMIT_SHA= +ARG CONDUWUIT_VERSION_EXTRA= +ENV CONDUWUIT_VERSION_EXTRA=$CONDUWUIT_VERSION_EXTRA +RUN <> /etc/environment +fi +EOF + +# Verify environment configuration +RUN cat /etc/environment + +# Prepare output directories +RUN mkdir /out + +# Build the binary +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=/usr/local/cargo/git/db \ + --mount=type=cache,target=/app/target \ + bash < /out/sbom.spdx.json + +# Extract dynamically linked dependencies +# RUN lddtree /out/app +RUN lddtree /out/app | awk '{print $(NF-0) " " $1}' | sort -u -k 1,1 | awk '{print "install", "-D", $1, (($2 ~ /^\//) ? "/out/libs-root" $2 : "/out/libs/" $2)}' +RUN <