Error 404 for /api/collections/anhgelus/inbox

I’m self-hosting WriteFreely in Docker. He is behind the reverse-proxy Traefik. I’m using my own custom Docker image.

When I try to follow my WriteFreely account (@anhgelus@blog.anhgelus.world) with my Mastodon account, I get a message saying something like “a follow request was sent”.
After a few searches, I understand the issue comes from my own installation.
So I looked in the log of Traefik and I found this (in the access logs):

X.X.X.X - - [31/Oct/2023:12:57:00 +0000] "POST /api/collections/anhgelus/inbox HTTP/1.1" 404 19 "-" "-" 5 "-" "-" 0ms

Basically, it’s an error 404 for /api/collections/anhgelus/inbox.

I’m currently using the latest stable version of WriteFreely (v0.14.0).

My config.ini:

[server]
hidden_host          = 
port                 = 80
bind                 = 0.0.0.0
tls_cert_path        = 
tls_key_path         = 
autocert             = false
templates_parent_dir = 
static_parent_dir    = 
pages_parent_dir     = 
keys_parent_dir      = 
hash_seed            = 
gopher_port          = 0

[database]
type     = sqlite3
filename = writefreely.db
username = 
password = 
database = writefreely
host     = localhost
port     = 3306
tls      = false

[app]
site_name             = Anhgelus Blog
site_description      = 
host                  = https://blog.anhgelus.world
theme                 = write
editor                = 
disable_js            = false
webfonts              = true
landing               = 
simple_nav            = false
wf_modesty            = false
chorus                = false
forest                = false
disable_drafts        = false
single_user           = true
open_registration     = false
open_deletion         = false
min_username_len      = 3
max_blogs             = 1
federation            = true
public_stats          = true
monetization          = false
notes_only            = false
private               = false
local_timeline        = false
user_invites          = 
default_visibility    = unlisted
update_checks         = false
disable_password_auth = false

[oauth.slack]
client_id          = 
client_secret      = 
team_id            = 
callback_proxy     = 
callback_proxy_api = 

[oauth.writeas]
client_id          = 
client_secret      = 
auth_location      = 
token_location     = 
inspect_location   = 
callback_proxy     = 
callback_proxy_api = 

[oauth.gitlab]
client_id          = 
client_secret      = 
host               = 
display_name       = 
callback_proxy     = 
callback_proxy_api = 

[oauth.gitea]
client_id          = 
client_secret      = 
host               = 
display_name       = 
callback_proxy     = 
callback_proxy_api = 

[oauth.generic]
client_id          = 
client_secret      = 
host               = 
display_name       = 
callback_proxy     = 
callback_proxy_api = 
token_endpoint     = 
inspect_endpoint   = 
auth_endpoint      = 
scope              = 
allow_disconnect   = false
map_user_id        = 
map_username       = 
map_display_name   = 
map_email          =

My Traefik’s config:

providers:
  docker:
    exposedByDefault: false
    network: http_proxy

entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"
api:
  dashboard: false

certificatesResolvers:
  anhgelus-codes_certs:
    acme:
      email: "john.doe@foo.bar"
      caServer: "https://acme-v02.api.letsencrypt.org/directory"
      storage: "/certs/acme.json"
      keyType: "EC384"
      httpChallenge:
        entryPoint: "web"

accessLog:
  filePath: "/logs/access.log"

log:
  filePath: "/logs/traefik.log"
  level: DEBUG

My docker-compose.yml file for WriteFreely:

version: '3'

services:
  writefreely:
    image: anhgelus/writefreely 
    restart: always
    networks:
      - http_proxy
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.blog.rule=Host(`blog.anhgelus.world`)"
      - "traefik.http.routers.blog.entrypoints=websecure,web"
      - "traefik.http.routers.blog.tls.certResolver=anhgelus-codes_certs"
    volumes:
      - "./writefreely:/app/writefreely"
networks:
  http_proxy:
    name: http_proxy
    external: true

The POST request doesn’t work with Traefik (error 404) but it works without.