From ec3206331b6ec8110678e00f2f200a037998fed5 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sun, 16 Oct 2022 19:03:34 +0100 Subject: [PATCH 1/6] Add basic docker setup --- .dockerignore | 4 +- .gitignore | 7 ++ Dockerfile | 51 +++++--------- config/docker.exs | 16 ++--- docker-compose.yml | 43 ++++++++++++ docker-entrypoint.sh | 4 +- docker-resources/build.sh | 4 ++ docs/docs/installation/docker_en.md | 100 ++++++++++++++++++++++++++++ 8 files changed, 183 insertions(+), 46 deletions(-) create mode 100644 docker-compose.yml create mode 100755 docker-resources/build.sh create mode 100644 docs/docs/installation/docker_en.md diff --git a/.dockerignore b/.dockerignore index 2b5f1abff..89cf5ee31 100644 --- a/.dockerignore +++ b/.dockerignore @@ -6,12 +6,10 @@ COPYING *file elixir_buildpack.config test/ -instance/ -_build -deps test benchmarks docs/site +docker-db # Required to get version !.git diff --git a/.gitignore b/.gitignore index 8fa79b68f..eba0fcadf 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,10 @@ secret /instance /priv/ssh_keys vm.args +.cache/ +.hex/ +.mix/ +.psql_history # Prevent committing custom emojis /priv/static/emoji/custom/* @@ -65,3 +69,6 @@ pleroma.iml # Generated documentation docs/site + +# docker stuff +docker-db diff --git a/Dockerfile b/Dockerfile index 42ba9616b..80c098500 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,10 @@ -FROM elixir:1.13.4-alpine as build +FROM hexpm/elixir:1.13.4-erlang-24.3.4.5-alpine-3.15.6 as build -COPY . . ENV MIX_ENV=prod -RUN apk add git gcc g++ musl-dev make cmake file-dev &&\ - echo "import Config" > config/prod.secret.exs &&\ - mix local.hex --force &&\ - mix local.rebar --force &&\ - mix deps.get --only prod &&\ - mkdir release &&\ - mix release --path release - -FROM alpine:3.16 - -ARG BUILD_DATE -ARG VCS_REF +ARG HOME=/opt/akkoma +ARG DATA=/var/lib/akkoma LABEL org.opencontainers.image.title="akkoma" \ org.opencontainers.image.description="Akkoma for Docker" \ @@ -26,25 +15,21 @@ LABEL org.opencontainers.image.title="akkoma" \ org.opencontainers.image.revision=$VCS_REF \ org.opencontainers.image.created=$BUILD_DATE -ARG HOME=/opt/akkoma -ARG DATA=/var/lib/akkoma - -RUN apk update &&\ - apk add exiftool ffmpeg imagemagick libmagic ncurses postgresql-client &&\ - adduser --system --shell /bin/false --home ${HOME} akkoma &&\ - mkdir -p ${DATA}/uploads &&\ - mkdir -p ${DATA}/static &&\ - chown -R akkoma ${DATA} &&\ - mkdir -p /etc/akkoma &&\ - chown -R akkoma /etc/akkoma - -USER akkoma - -COPY --from=build --chown=akkoma:0 /release ${HOME} - -COPY ./config/docker.exs /etc/akkoma/config.exs -COPY ./docker-entrypoint.sh ${HOME} +RUN apk add git gcc g++ musl-dev make cmake file-dev exiftool ffmpeg imagemagick libmagic ncurses postgresql-client EXPOSE 4000 -ENTRYPOINT ["/opt/akkoma/docker-entrypoint.sh"] +ARG UID=1000 +ARG GID=1000 +ARG UNAME=akkoma + +RUN addgroup -g $GID $UNAME +RUN adduser -u $UID -G $UNAME -D -h $HOME $UNAME + +WORKDIR /opt/akkoma + +USER $UNAME +RUN mix local.hex --force &&\ + mix local.rebar --force + +CMD ["/opt/akkoma/docker-entrypoint.sh"] diff --git a/config/docker.exs b/config/docker.exs index f9f27d141..fc24a4d67 100644 --- a/config/docker.exs +++ b/config/docker.exs @@ -24,11 +24,11 @@ config :pleroma, Pleroma.Repo, config :web_push_encryption, :vapid_details, subject: "mailto:#{System.get_env("NOTIFY_EMAIL")}" config :pleroma, :database, rum_enabled: false -config :pleroma, :instance, static_dir: "/var/lib/pleroma/static" -config :pleroma, Pleroma.Uploaders.Local, uploads: "/var/lib/pleroma/uploads" +config :pleroma, :instance, static_dir: "/var/lib/akkoma/static" +config :pleroma, Pleroma.Uploaders.Local, uploads: "/var/lib/akkoma/uploads" # We can't store the secrets in this file, since this is baked into the docker image -if not File.exists?("/var/lib/pleroma/secret.exs") do +if not File.exists?("/var/lib/akkoma/secret.exs") do secret = :crypto.strong_rand_bytes(64) |> Base.encode64() |> binary_part(0, 64) signing_salt = :crypto.strong_rand_bytes(8) |> Base.encode64() |> binary_part(0, 8) {web_push_public_key, web_push_private_key} = :crypto.generate_key(:ecdh, :prime256v1) @@ -52,16 +52,16 @@ if not File.exists?("/var/lib/pleroma/secret.exs") do web_push_private_key: Base.url_encode64(web_push_private_key, padding: false) ) - File.write("/var/lib/pleroma/secret.exs", secret_file) + File.write("/var/lib/akkoma/secret.exs", secret_file) end -import_config("/var/lib/pleroma/secret.exs") +import_config("/var/lib/akkoma/secret.exs") # For additional user config -if File.exists?("/var/lib/pleroma/config.exs"), - do: import_config("/var/lib/pleroma/config.exs"), +if File.exists?("/var/lib/akkoma/config.exs"), + do: import_config("/var/lib/akkoma/config.exs"), else: - File.write("/var/lib/pleroma/config.exs", """ + File.write("/var/lib/akkoma/config.exs", """ import Config # For additional configuration outside of environmental variables diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..2de1d62fc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,43 @@ +version: "3.7" + +services: + db: + image: postgres:14 + restart: unless-stopped + user: ${DOCKER_USER} + environment: { + # This might seem insecure but is usually not a problem. + # You should leave this at the "akkoma" default. + # The DB is only reachable by containers in the same docker network, + # and is not exposed to the open internet. + # + # If you do change this, remember to update "config.exs". + POSTGRES_DB: akkoma, + POSTGRES_USER: akkoma, + POSTGRES_PASSWORD: akkoma, + } + env_file: + - .env + volumes: + - ./docker-db:/var/lib/postgresql/data + + akkoma: + image: akkoma:latest + build: . + restart: unless-stopped + env_file: + - .env + links: + - db + ports: [ + # Uncomment/Change port mappings below as needed. + # The left side is your host machine, the right one is the akkoma container. + # You can prefix the left side with an ip. + + # Webserver (for reverse-proxies outside of docker) + # If you use a dockerized proxy (see README), you can leave this commented + # and use a container link instead. + "127.0.0.1:4000:4000", + ] + volumes: + - .:/opt/akkoma diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index f56f8c50a..778ef08e2 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -8,7 +8,7 @@ while ! pg_isready -U ${DB_USER:-pleroma} -d postgres://${DB_HOST:-db}:5432/${DB done echo "-- Running migrations..." -$HOME/bin/pleroma_ctl migrate +mix ecto.migrate echo "-- Starting!" -exec $HOME/bin/pleroma start +mix phx.server diff --git a/docker-resources/build.sh b/docker-resources/build.sh new file mode 100755 index 000000000..daa653da6 --- /dev/null +++ b/docker-resources/build.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +docker-compose build --build-arg UID=$(id -u) --build-arg GID=$(id -g) akkoma +docker-compose build --build-arg UID=$(id -u) --build-arg GID=$(id -g) db diff --git a/docs/docs/installation/docker_en.md b/docs/docs/installation/docker_en.md new file mode 100644 index 000000000..a657c7488 --- /dev/null +++ b/docs/docs/installation/docker_en.md @@ -0,0 +1,100 @@ +# Installing in docker + +{! installation/otp_vs_from_source_source.include !} + +## Installation + +This guide will show you how to get akkoma working in a docker container, +if you want isolation, or if you run a distribution not supported by the OTP +releases. + +### Prepare the system + +* Install docker and docker-compose + * [Docker](https://docs.docker.com/engine/install/) + * [Docker-compose](https://docs.docker.com/compose/install/) + * This will usually just be a repository installation and a package manager invocation. +* Clone the akkoma repository + * `git clone https://akkoma.dev/AkkomaGang/akkoma.git -b stable` + * `cd akkoma` + +### Set up basic configuration + +```bash +cp docker-resources/env.example .env +``` + +This probably won't need to be changed, it's only there to set basic environment +variables for the docker-compose file. + +### Building the container + +The container provided is a thin wrapper around akkoma's dependencies, +it does not contain the code itself. This is to allow for easy updates +and debugging if required. + +```bash +./docker-resources/build.sh +``` + +This will generate a container called `akkoma` which we can use +in our compose environment. + +### Generating your instance + +```bash +./docker-resources/manage.sh mix deps.get +./docker-resources/manage.sh mix compile +./docker-resources/manage.sh mix pleroma.instance gen +``` + +This will ask you a few questions - the defaults are fine for most things, +the database hostname is `db`. + +Now we'll want to copy over the config it just created + +```bash +cp config/generated_config.exs config/prod.secret.exs +``` + +### Setting up the database + +We need to run a few commands on the database container, this isn't too bad + +```bash +docker-compose run --rm -d db +# Note down the name it gives here, it will be something like akkoma_db_run +docker-compose run --rm akkoma psql -h db -U akkoma -f config/setup_db.psql +docker stop akkoma_db_run # Replace with the name you noted down +``` + +Now we can actually run our migrations + +```bash +./docker-resources/manage.sh mix ecto.migrate +# this will recompile your files at the same time, since we changed the config +``` + +### Start the server + +We're going to run it in the foreground on the first run, just to make sure +everything start up. + +```bash +docker-compose up +``` +#### Create your first user + +If your instance is up and running, you can create your first user with administrative rights with the following task: + +```shell +doas -u akkoma env MIX_ENV=prod mix pleroma.user new --admin +``` + +{! installation/frontends.include !} + +#### Further reading + +{! installation/further_reading.include !} + +{! support.include !} -- 2.34.1 From 8210345ca44d48d61a3659f5e7e56e81b17d2677 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sun, 16 Oct 2022 19:28:16 +0100 Subject: [PATCH 2/6] add extra caddy setup --- .dockerignore | 2 ++ .gitignore | 2 ++ Dockerfile | 3 +- docker-compose.yml | 20 +++++++++++-- docker-resources/Caddyfile | 14 +++++++++ docker-resources/Caddyfile.example | 14 +++++++++ docker-resources/database/Dockerfile | 10 +++++++ docker-resources/manage.sh | 3 ++ docs/docs/installation/docker_en.md | 43 +++++++++++++++++++++++++--- 9 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 docker-resources/Caddyfile create mode 100644 docker-resources/Caddyfile.example create mode 100644 docker-resources/database/Dockerfile create mode 100755 docker-resources/manage.sh diff --git a/.dockerignore b/.dockerignore index 89cf5ee31..1d4f80bdf 100644 --- a/.dockerignore +++ b/.dockerignore @@ -10,6 +10,8 @@ test benchmarks docs/site docker-db +uploads +instance # Required to get version !.git diff --git a/.gitignore b/.gitignore index eba0fcadf..e7ddb7dc1 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,8 @@ vm.args .hex/ .mix/ .psql_history +docker-resources/Dockerfile +pgdata # Prevent committing custom emojis /priv/static/emoji/custom/* diff --git a/Dockerfile b/Dockerfile index 80c098500..730730ce3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,4 @@ -FROM hexpm/elixir:1.13.4-erlang-24.3.4.5-alpine-3.15.6 as build - +FROM hexpm/elixir:1.13.4-erlang-24.3.4.5-alpine-3.15.6 ENV MIX_ENV=prod diff --git a/docker-compose.yml b/docker-compose.yml index 2de1d62fc..a43f21be4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,8 @@ version: "3.7" services: db: - image: postgres:14 + image: akkoma-db:latest + build: ./docker-resources/database restart: unless-stopped user: ${DOCKER_USER} environment: { @@ -19,7 +20,9 @@ services: env_file: - .env volumes: - - ./docker-db:/var/lib/postgresql/data + - type: bind + source: ./pgdata + target: /var/lib/postgresql/data akkoma: image: akkoma:latest @@ -41,3 +44,16 @@ services: ] volumes: - .:/opt/akkoma + + # Uncomment the following if you want to use a reverse proxy + proxy: + image: caddy:2-alpine + restart: unless-stopped + links: + - akkoma + ports: [ + "443:443", + "80:80" + ] + volumes: + - ./docker-resources/Caddyfile:/etc/caddy/Caddyfile \ No newline at end of file diff --git a/docker-resources/Caddyfile b/docker-resources/Caddyfile new file mode 100644 index 000000000..4db738c3a --- /dev/null +++ b/docker-resources/Caddyfile @@ -0,0 +1,14 @@ +# default docker Caddyfile config for Akkoma +# +# Simple installation instructions: +# 1. Replace 'example.tld' with your instance's domain wherever it appears. + +akkoma.local.live { + log { + output file /var/log/caddy/akkoma.log + } + + encode gzip + + reverse_proxy akkoma:4000 +} diff --git a/docker-resources/Caddyfile.example b/docker-resources/Caddyfile.example new file mode 100644 index 000000000..47b8c7c74 --- /dev/null +++ b/docker-resources/Caddyfile.example @@ -0,0 +1,14 @@ +# default docker Caddyfile config for Akkoma +# +# Simple installation instructions: +# 1. Replace 'example.tld' with your instance's domain wherever it appears. + +example.tld { + log { + output file /var/log/caddy/akkoma.log + } + + encode gzip + + reverse_proxy akkoma:4000 +} diff --git a/docker-resources/database/Dockerfile b/docker-resources/database/Dockerfile new file mode 100644 index 000000000..2a38dd16b --- /dev/null +++ b/docker-resources/database/Dockerfile @@ -0,0 +1,10 @@ +FROM postgres:14-alpine + +ARG UID=1000 +ARG GID=1000 +ARG UNAME=akkoma + +RUN addgroup -g $GID $UNAME +RUN adduser -u $UID -G $UNAME -D -h $HOME $UNAME + +USER akkoma diff --git a/docker-resources/manage.sh b/docker-resources/manage.sh new file mode 100755 index 000000000..944f5e2e2 --- /dev/null +++ b/docker-resources/manage.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +docker-compose run --rm akkoma $@ diff --git a/docs/docs/installation/docker_en.md b/docs/docs/installation/docker_en.md index a657c7488..a176787a6 100644 --- a/docs/docs/installation/docker_en.md +++ b/docs/docs/installation/docker_en.md @@ -49,7 +49,9 @@ in our compose environment. ``` This will ask you a few questions - the defaults are fine for most things, -the database hostname is `db`. +the database hostname is `db`, and you will want to set the ip to `0.0.0.0` +if you want to access the instance from outside the container (i.e you're using +a reverse proxy on the host) Now we'll want to copy over the config it just created @@ -62,7 +64,7 @@ cp config/generated_config.exs config/prod.secret.exs We need to run a few commands on the database container, this isn't too bad ```bash -docker-compose run --rm -d db +docker-compose run --rm --user akkoma -d db # Note down the name it gives here, it will be something like akkoma_db_run docker-compose run --rm akkoma psql -h db -U akkoma -f config/setup_db.psql docker stop akkoma_db_run # Replace with the name you noted down @@ -83,14 +85,47 @@ everything start up. ```bash docker-compose up ``` -#### Create your first user + +If everything went well, you should be able to access your instance at http://localhost:4000 + +You can `ctrl-c` out of the docker-compose now to shutdown the server. + +### Running in the background + +```bash +docker-compose up -d +``` + +### Create your first user If your instance is up and running, you can create your first user with administrative rights with the following task: ```shell -doas -u akkoma env MIX_ENV=prod mix pleroma.user new --admin +./docker-resources/manage.sh mix pleroma.user new MY_USERNAME MY_EMAIL@SOMEWHERE --admin ``` +And follow the prompts + +### Reverse proxies + +This is a tad more complex in docker than on the host itself. It + +You've got two options. + +#### Running caddy in a container + +This is by far the easiest option. It'll handle HTTPS and all that for you. + +```bash +cp docker-resources/Caddyfile.example docker-resources/Caddyfile +``` + +Then edit the TLD in your caddyfile to the domain you're serving on. + +Uncomment the `caddy` section in the docker-compose file, +then run `docker-compose up -d` again. + +```bash {! installation/frontends.include !} #### Further reading -- 2.34.1 From f1ddda7580b4c11d1d53fa3dd15b4e31c5fdc349 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sun, 16 Oct 2022 19:37:50 +0100 Subject: [PATCH 3/6] add example env --- docker-resources/env.example | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 docker-resources/env.example diff --git a/docker-resources/env.example b/docker-resources/env.example new file mode 100644 index 000000000..d6cf0c7b8 --- /dev/null +++ b/docker-resources/env.example @@ -0,0 +1,4 @@ +MIX_ENV=prod +DB_NAME=akkoma +DB_USER=akkoma +DB_PASS=akkoma -- 2.34.1 From b28ebdcfb023827a43bdbef17c2c1b5fdecd7c13 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sun, 16 Oct 2022 20:22:01 +0100 Subject: [PATCH 4/6] Add caddy docs --- docker-compose.yml | 26 ++++++++-------- docs/docs/installation/docker_en.md | 39 +++++++++++++++++++----- docs/docs/installation/frontends.include | 6 ++++ 3 files changed, 52 insertions(+), 19 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a43f21be4..b8da67a22 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -38,7 +38,7 @@ services: # You can prefix the left side with an ip. # Webserver (for reverse-proxies outside of docker) - # If you use a dockerized proxy (see README), you can leave this commented + # If you use a dockerized proxy, you can leave this commented # and use a container link instead. "127.0.0.1:4000:4000", ] @@ -46,14 +46,16 @@ services: - .:/opt/akkoma # Uncomment the following if you want to use a reverse proxy - proxy: - image: caddy:2-alpine - restart: unless-stopped - links: - - akkoma - ports: [ - "443:443", - "80:80" - ] - volumes: - - ./docker-resources/Caddyfile:/etc/caddy/Caddyfile \ No newline at end of file + #proxy: + # image: caddy:2-alpine + # restart: unless-stopped + # links: + # - akkoma + # ports: [ + # "443:443", + # "80:80" + # ] + # volumes: + # - ./docker-resources/Caddyfile:/etc/caddy/Caddyfile + # - ./caddy-data:/data + # - ./caddy-config:/config \ No newline at end of file diff --git a/docs/docs/installation/docker_en.md b/docs/docs/installation/docker_en.md index a176787a6..ecb927649 100644 --- a/docs/docs/installation/docker_en.md +++ b/docs/docs/installation/docker_en.md @@ -1,6 +1,4 @@ -# Installing in docker - -{! installation/otp_vs_from_source_source.include !} +# Installing in Docker ## Installation @@ -22,6 +20,7 @@ releases. ```bash cp docker-resources/env.example .env +echo "DOCKER_USER=$(id -u):$(id -g)" >> .env ``` This probably won't need to be changed, it's only there to set basic environment @@ -43,15 +42,17 @@ in our compose environment. ### Generating your instance ```bash +mkdir pgdata +# if you want to use caddy +mkdir caddy-data +mkdir caddy-config ./docker-resources/manage.sh mix deps.get ./docker-resources/manage.sh mix compile ./docker-resources/manage.sh mix pleroma.instance gen ``` This will ask you a few questions - the defaults are fine for most things, -the database hostname is `db`, and you will want to set the ip to `0.0.0.0` -if you want to access the instance from outside the container (i.e you're using -a reverse proxy on the host) +the database hostname is `db`, and you will want to set the ip to `0.0.0.0`. Now we'll want to copy over the config it just created @@ -125,9 +126,33 @@ Then edit the TLD in your caddyfile to the domain you're serving on. Uncomment the `caddy` section in the docker-compose file, then run `docker-compose up -d` again. -```bash +#### Running a reverse proxy on the host + +If you want, you can also run the reverse proxy on the host. This is a bit more complex, but it's also more flexible. + +Follow the guides for source install for your distribution of choice, or adapt +as needed. Your standard setup can be found in the [Debian Guide](../debian_based_en/#nginx) + +### You're done! + +All that's left is to set up your frontends. + +The standard from-source commands will apply to you, just make sure you +prefix them with `./docker-resources/manage.sh`! + {! installation/frontends.include !} +### Updating Docker Installs + +```bash +git pull +./docker-resources/build.sh +./docker-resources/manage.sh mix deps.get +./docker-resources/manage.sh mix compile +./docker-resources/manage.sh mix ecto.migrate +docker-compose restart akkoma +``` + #### Further reading {! installation/further_reading.include !} diff --git a/docs/docs/installation/frontends.include b/docs/docs/installation/frontends.include index 585be71ae..6da4018a9 100644 --- a/docs/docs/installation/frontends.include +++ b/docs/docs/installation/frontends.include @@ -21,5 +21,11 @@ For most installations, the following will suffice: mix pleroma.frontend install admin-fe --ref stable ``` +=== "Docker" + ```sh + ./docker-resources/manage.sh mix pleroma.frontend install pleroma-fe --ref stable + ./docker-resources/manage.sh mix pleroma.frontend install admin-fe --ref stable + ``` + For more customised installations, refer to [Frontend Management](../../configuration/frontend_management) -- 2.34.1 From 771217b1b8a01ae1136b5716cc200a195e527328 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sun, 16 Oct 2022 20:22:28 +0100 Subject: [PATCH 5/6] Add changelog entry --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44d518528..f1c2e4460 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Unreleased +## Added +- Officially supported docker release + ## Changes - Follows no longer override domain blocks, a domain block is final - Deletes are now the lowest priority to publish and will be handled after creates -- 2.34.1 From d9b9c1a0f73d0b5a4efd1e4b9df8e687794f253a Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sun, 16 Oct 2022 20:24:56 +0100 Subject: [PATCH 6/6] Remove testing caddyfile --- .gitignore | 1 + docker-resources/Caddyfile | 14 -------------- 2 files changed, 1 insertion(+), 14 deletions(-) delete mode 100644 docker-resources/Caddyfile diff --git a/.gitignore b/.gitignore index e7ddb7dc1..f9de4ed49 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ vm.args .mix/ .psql_history docker-resources/Dockerfile +docker-resources/Caddyfile pgdata # Prevent committing custom emojis diff --git a/docker-resources/Caddyfile b/docker-resources/Caddyfile deleted file mode 100644 index 4db738c3a..000000000 --- a/docker-resources/Caddyfile +++ /dev/null @@ -1,14 +0,0 @@ -# default docker Caddyfile config for Akkoma -# -# Simple installation instructions: -# 1. Replace 'example.tld' with your instance's domain wherever it appears. - -akkoma.local.live { - log { - output file /var/log/caddy/akkoma.log - } - - encode gzip - - reverse_proxy akkoma:4000 -} -- 2.34.1