Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dms-ui

Build Image License

A lightweight web admin panel for docker-mailserver (DMS).

DMS has no HTTP API, so all administration goes through its in-container setup. dms-ui is a single Go binary (with an embedded SvelteKit SPA) that drives setup over a mounted Docker socket, so Postfix/Dovecot stay consistent and DMS's change detector reloads gracefully (no mail disruption).

Note

A significant portion of this project was built by Claude in an afternoon. Don't use it if you don't trust it with your mail.

Features

  • Dashboard: env-aware service status, rspamd stats, account/alias/queue counts
  • Accounts: add / delete (optional mailbox purge) / change password, per-mailbox storage & per-folder message counts, quotas, send/receive restrictions
  • Aliases: virtual alias management
  • Dovecot masters: SASL master users
  • DKIM: list keys with ready-to-publish DNS TXT records, generate / rotate (rspamd)
  • Relay: relay domains, SASL credentials, per-domain exclusions
  • Fail2ban: per-jail status, ban / unban
  • Logs: mail log, fail2ban log, Postfix queue
  • Environment: the full DMS config surface, grouped & documented

Quick Start

Caution

dms-ui has no built-in authentication and is root-equivalent (it talks to the Docker socket). Run it behind a trusted authenticating reverse proxy (e.g. Traefik + Authentik); you are responsible for that exposure.

docker run -d --name dms-ui \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e MAIL_CONTAINER=mailserver \
  -p 127.0.0.1:8080:8080 \
  ghcr.io/workingrobot/dms-ui:edge

See deploy/ for a compose snippet and a Traefik + Authentik example.

Configuration

Var Default Notes
MAIL_CONTAINER mailserver Target docker-mailserver container name
LISTEN_ADDR :8080 HTTP bind
PROXY_EMAIL_HEADER X-Forwarded-Email Header the proxy sets to identify the admin
DOCKER_HOST unset Honoured by the docker client (e.g. ssh://host for remote dev)

Develop

make build          # builds web + binary
make run            # runs on 127.0.0.1:8099 (override MAIL_CONTAINER/DOCKER_HOST)
# or, with live reload of the UI:
cd web && bun run dev   # proxies /api to 127.0.0.1:8099

Contributing

Contributions, bug reports, and feature requests are welcome! Please open an issue or a pull request.

Releases

Packages

Contributors

Languages