diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..66ce143 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM golang:1-alpine3.15 AS builder + +RUN apk add --no-cache git ca-certificates build-base su-exec olm-dev + +COPY . /build +WORKDIR /build +RUN go build -o /usr/bin/mautrix-discord + +FROM alpine:3.15 + +ENV UID=1337 \ + GID=1337 + +RUN apk add --no-cache ffmpeg su-exec ca-certificates olm bash jq yq curl + +COPY --from=builder /usr/bin/mautrix-discord /usr/bin/mautrix-discord +COPY --from=builder /build/example-config.yaml /opt/mautrix-discord/example-config.yaml +COPY --from=builder /build/docker-run.sh /docker-run.sh +VOLUME /data + +CMD ["/docker-run.sh"] diff --git a/docker-run.sh b/docker-run.sh new file mode 100755 index 0000000..054a636 --- /dev/null +++ b/docker-run.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +if [[ -z "$GID" ]]; then + GID="$UID" +fi + +# Define functions. +function fixperms { + chown -R $UID:$GID /data + + # /opt/mautrix-discord is read-only, so disable file logging if it's pointing there. + if [[ "$(yq e '.logging.directory' /data/config.yaml)" == "./logs" ]]; then + yq -I4 e -i '.logging.file_name_format = ""' /data/config.yaml + fi +} + +if [[ ! -f /data/config.yaml ]]; then + cp /opt/mautrix-discord/example-config.yaml /data/config.yaml + echo "Didn't find a config file." + echo "Copied default config file to /data/config.yaml" + echo "Modify that config file to your liking." + echo "Start the container again after that to generate the registration file." + exit +fi + +if [[ ! -f /data/registration.yaml ]]; then + /usr/bin/mautrix-discord -g -c /data/config.yaml -r /data/registration.yaml + echo "Didn't find a registration file." + echo "Generated one for you." + echo "See https://docs.mau.fi/bridges/general/registering-appservices.html on how to use it." + exit +fi + +cd /data +fixperms +exec su-exec $UID:$GID /usr/bin/mautrix-discord