Skip to content

Commit 1b5da60

Browse files
committed
docs: applied the Diátaxis approach to the docs
1 parent e5d6554 commit 1b5da60

59 files changed

Lines changed: 1579 additions & 2180 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.cursor/rules/learned-memories.mdc

Lines changed: 0 additions & 29 deletions
This file was deleted.

.env.dist

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,16 @@ DOVEADM_API_KEY=changeme2
3434
WAITSTART_TIMEOUT=2m
3535

3636
# Configure local address extension
37-
# @see docs/configuration/local-address-extension.md
37+
# Check the documentation for more information.
3838
RECIPIENT_DELIMITER=-
3939

4040
# Interval in seconds for fetchmail to check for new mails
4141
FETCHMAIL_INTERVAL=300
4242

43-
## @see docs/REVERSE_PROXY.md
4443
# Expects the PROXY protocol on imap(s) and pop3(s) ports
44+
# Check the documentation for more information.
4545
MDA_UPSTREAM_PROXY=false
4646

4747
# Expects the PROXY protocol on smtp and submission ports
48+
# Check the documentation for more information.
4849
MTA_UPSTREAM_PROXY=false

.mkdocs.yaml

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -15,40 +15,49 @@ exclude_docs: |
1515
requirements.txt
1616
nav:
1717
- Welcome: README.md
18-
- Quick Start:
19-
- installation.md
20-
- upgrade.md
21-
- Configuration:
22-
- configuration/environment-variables.md
23-
- "mailserver-admin": configuration/mailserver-admin.md
24-
- configuration/dns-configuration.md
25-
- configuration/external-mysql.md
26-
- configuration/relayhost.md
27-
- configuration/local-address-extension.md
28-
- configuration/php-sessions.md
29-
- configuration/reverse-proxy.md
30-
- configuration/roundcube.md
31-
- configuration/tls.md
32-
- Administration:
33-
- administration/login.md
34-
- administration/dashboard.md
35-
- administration/manage-domains.md
36-
- administration/manage-users.md
37-
- administration/manage-aliases.md
38-
- administration/manage-fetchmail.md
39-
- administration/dkim-signing.md
40-
- administration/dns-validation-wizard.md
41-
- administration/user-roles.md
42-
- administration/ios-macos-profile.md
43-
- Observability:
44-
- observability/intro.md
18+
- Tutorial:
19+
- Getting Started: tutorials/getting-started.md
20+
- How-to guides:
21+
- Install with Docker: how-to/install-docker.md
22+
- Install on Kubernetes: how-to/install-kubernetes.md
23+
- Upgrade: how-to/upgrade.md
24+
- Configure DNS: how-to/configure-dns.md
25+
- Configure DKIM: how-to/configure-dkim.md
26+
- Validate DNS (wizard): how-to/validate-dns.md
27+
- Configure relay host: how-to/configure-relayhost.md
28+
- Configure reverse proxy: how-to/configure-reverse-proxy.md
29+
- Configure TLS certificates: how-to/configure-tls.md
30+
- Configure OAuth2: how-to/configure-oauth2.md
31+
- Configure external MySQL: how-to/configure-external-mysql.md
32+
- Configure Roundcube plugins: how-to/configure-roundcube-plugins.md
33+
- Configure PHP sessions: how-to/configure-php-sessions.md
34+
- Manage domains: how-to/manage-domains.md
35+
- Manage users: how-to/manage-users.md
36+
- Manage aliases: how-to/manage-aliases.md
37+
- Manage fetchmail: how-to/manage-fetchmail.md
38+
- iOS / macOS profile: how-to/ios-macos-profile.md
39+
- Reference:
40+
- Environment variables: reference/environment-variables.md
41+
- Ports: reference/ports.md
42+
- DNS records: reference/dns-records.md
43+
- Service architecture: reference/service-architecture.md
44+
- User roles: reference/user-roles.md
45+
- mailserver-admin config: reference/mailserver-admin-config.md
46+
- Local address extension: reference/local-address-extension.md
47+
- Upgrade changelog: reference/upgrade-changelog.md
48+
- Administration (web UI):
49+
- Login: administration/login.md
50+
- Dashboard: administration/dashboard.md
51+
- Explanation:
52+
- Service architecture: explanation/architecture.md
53+
- DNS and email delivery: explanation/dns-and-email.md
54+
- Observability: explanation/observability.md
4555
- Recipes:
4656
- Docker:
4757
- Traefik Reverse Proxy: https://github.com/jeboehm/docker-mailserver/tree/main/docs/example-configs/compose/traefik-reverse-proxy
4858
- Kubernetes:
4959
- External Database and HTTPS Ingress: https://github.com/jeboehm/docker-mailserver/tree/main/docs/example-configs/kustomize/external-db-and-https-ingress
5060
- Development:
51-
- development/architecture.md
52-
- development/development.md
53-
- "mailserver-admin": development/mailserver-admin.md
61+
- Development guide: development/development.md
62+
- mailserver-admin development: development/mailserver-admin.md
5463
- Issues: https://github.com/jeboehm/docker-mailserver/issues

AGENTS.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Agent instructions for docker-mailserver
2+
3+
This file gives AI agents and contributors the project conventions, documentation framework, and structure they need to work consistently on the codebase and docs.
4+
5+
## Documentation framework: Diátaxis
6+
7+
Documentation follows **[Diátaxis](https://diataxis.fr)** (“A systematic approach to technical documentation authoring”). Diátaxis defines four kinds of documentation, each with a different purpose and style:
8+
9+
| Kind | Purpose | Serves | Style |
10+
| ---------------- | ---------------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
11+
| **Tutorial** | Learning by doing | Acquisition of skill (study) | Lesson: take the learner through a concrete path; minimal explanation; visible results early; one main path, no branching. |
12+
| **How-to guide** | Accomplish a specific task | Application of skill (work) | Task-oriented: clear steps to reach a goal; for users who already know what they want; no teaching, no long explanations. |
13+
| **Reference** | Look up facts | Application of skill (work) | Technical description: accurate, complete, neutral; structure mirrors the product; consulted, not read. |
14+
| **Explanation** | Understand context and “why” | Acquisition of skill (study) | Background and discussion: design, trade-offs, connections; can include opinion and perspective. |
15+
16+
**Guidelines:**
17+
18+
- **Tutorials:** One or few. One main path; show the result early; avoid options and long explanations; link to reference/explanation for depth.
19+
- **How-to guides:** One goal per guide; title = “How to …”; steps only; link to reference for options and formats.
20+
- **Reference:** Describe the machinery (env vars, ports, record formats, APIs); austere; structured like the product; no instruction or opinion.
21+
- **Explanation:** Answer “why?” and “how does it fit together?”; can compare alternatives and give context; do not mix in procedures or reference tables.
22+
23+
Do not mix the four types in a single doc. When in doubt, use the [Diátaxis compass](https://diataxis.fr/compass/): “Does it inform action or cognition? Does it serve study or work?”
24+
25+
## Documentation structure (docs/)
26+
27+
The docs are organised by Diátaxis type:
28+
29+
- **`tutorials/`** — Learning path (e.g. `getting-started.md`).
30+
- **`how-to/`** — Task guides: install (Docker/Kubernetes), upgrade, configure (DNS, DKIM, TLS, relay, reverse proxy, OAuth2, MySQL, Roundcube, PHP sessions), manage (domains, users, aliases, fetchmail), iOS/macOS profile.
31+
- **`reference/`** — Technical reference: `environment-variables.md`, `ports.md`, `dns-records.md`, `service-architecture.md`, `user-roles.md`, `mailserver-admin-config.md`, `local-address-extension.md`, `upgrade-changelog.md`.
32+
- **`explanation/`** — Context: `architecture.md`, `dns-and-email.md`, `observability.md`.
33+
- **`administration/`** — Short reference for the web UI: `login.md`, `dashboard.md`; other admin topics live as how-to or reference and are linked from here.
34+
- **`configuration/`** — Legacy entry points; these files redirect to the appropriate how-to or reference.
35+
- **`development/`** — Developer how-to: `development.md` (Make, test, lint), `mailserver-admin.md` (mailserver-admin repository setup); `architecture.md` redirects to reference + explanation.
36+
- **`observability/`**`intro.md` redirects to `explanation/observability.md`.
37+
38+
MkDocs config is **`.mkdocs.yaml`**; the `nav` there reflects this structure (Tutorial, How-to guides, Reference, Administration, Explanation, Recipes, Development).
39+
40+
## Documentation writing style
41+
42+
- Use **technical documentation language**, not marketing. Avoid subjective terms (“powerful”, “particularly useful”, “sophisticated”).
43+
- Use **direct, factual** statements about what the software does. Include **technical references** (e.g. RFCs) and **concrete examples** where useful.
44+
- Focus on **implementation and configuration**; keep prose concise and suitable for technical readers.
45+
- Prefer **functional descriptions** over promotional copy.
46+
47+
## Project structure
48+
49+
- **Architecture:** The mailserver is made of multiple containers/pods (MTA, MDA, Web, Filter, SSL, Database, Redis, Unbound, Fetchmail) that together provide mail and management.
50+
- **Container images:** Built under **`target/`**. Each subdirectory is one service (e.g. `target/mta/`, `target/mda/`, `target/filter/`, `target/web/`, `target/db/`, `target/unbound/`, `target/ssl/`).
51+
- **Deployment manifests:**
52+
- **Docker Compose:** `deploy/compose/` (e.g. `mta.yaml`, `mda.yaml`, `web.yaml`, `db.yaml`).
53+
- **Kubernetes (Kustomize):** `deploy/kustomize/` (e.g. `mta/`, `mda/`, `web/`, `ingress/`).
54+
- **Deployment consistency:** The same capabilities should be reflected in both Compose and Kustomize. When you change one (e.g. env vars, volumes, services), update the other so Docker and Kubernetes deployments stay in parity.
55+
56+
## Quick reference for agents
57+
58+
- **Adding a new feature that needs docs:** Add or update the right Diátaxis type (tutorial step, how-to, reference section, or explanation). Keep one purpose per doc; link between them.
59+
- **Adding env vars or ports:** Document in **`reference/environment-variables.md`** or **`reference/ports.md`**; mention in the relevant how-to if it affects a procedure.
60+
- **Adding a new how-to:** Create under **`how-to/`** with a “How to …” title; add the page to **`.mkdocs.yaml`** under “How-to guides”.
61+
- **Changing deployment (Compose or Kustomize):** Apply the same logical change in **`deploy/compose/`** and **`deploy/kustomize/`** where applicable.

docs/README.md

Lines changed: 51 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -8,58 +8,69 @@
88

99
This project enables you to operate your own email services, providing independence from large email providers. The solution is built on Alpine Linux and vendor base images, keeping container images lightweight while maintaining comprehensive functionality.
1010

11-
## Key Features
12-
13-
- **Email Protocols**: POP3, IMAP, and SMTP with user authentication
14-
- **Web Management**: Web-based interface for account, domain, and alias administration
15-
- **Webmail**: Integrated webmail interface
16-
- **External Mail Retrieval**: Fetchmail integration for retrieving emails from external providers
17-
- **Email Authentication**: DKIM message signing for email authenticity
18-
- **Spam Filtering**: Server-side mail filtering with configurable rules via web frontend
19-
- **Spam Training**: Train spam filters by moving emails to or from the junk folder
20-
- **Real-time Protection**: RBL (Real-Time Blackhole List) integration for spam prevention
21-
- **Greylisting**: Selective greylisting for likely spam
22-
- **Address Management**: Support for catch-all addresses and send-only accounts
23-
- **Security**: Sender address restrictions and configurable address extensions
24-
- **Quota Management**: Email quota management with notifications
25-
- **TLS**: Enforced TLS for secure communication
26-
- **Full-Text Search**: FTS support for efficient message searching
27-
- **Health Monitoring**: Continuous self-monitoring via Docker healthcheck
28-
29-
## Quick Start
30-
31-
1. **[Installation Guide](installation.md)** - Get started with Docker or Kubernetes deployment
32-
2. **[Upgrade Guide](upgrade.md)** - Upgrade procedures and version migration notes
33-
34-
## Service Architecture
11+
## Documentation structure
12+
13+
The documentation is organised by purpose:
14+
15+
- **[Tutorial: Getting Started](tutorials/getting-started.md)** — A step-by-step lesson to install docker-mailserver with Docker Compose and create your first mailbox.
16+
- **How-to guides** — Task-oriented guides for specific goals (install on Kubernetes, configure DNS, manage users, configure TLS, and more). See the [How-to](how-to/install-docker.md) section in the navigation.
17+
- **Reference** — Technical descriptions: [environment variables](reference/environment-variables.md), [DNS records](reference/dns-records.md), [ports](reference/ports.md), [service architecture](reference/service-architecture.md), [user roles](reference/user-roles.md), and related topics.
18+
- **Explanation** — Background and context: [architecture](explanation/architecture.md), [DNS and email delivery](explanation/dns-and-email.md), [observability](explanation/observability.md).
19+
20+
## Key features
21+
22+
- **Email protocols:** POP3, IMAP, and SMTP with user authentication
23+
- **Web management:** Web-based interface for account, domain, and alias administration
24+
- **Webmail:** Integrated webmail interface
25+
- **External mail retrieval:** Fetchmail integration for retrieving emails from external providers
26+
- **Email authentication:** DKIM message signing for email authenticity
27+
- **Spam filtering:** Server-side mail filtering with configurable rules via web frontend
28+
- **Spam training:** Train spam filters by moving emails to or from the junk folder
29+
- **Real-time protection:** RBL integration for spam prevention
30+
- **Greylisting:** Selective greylisting for likely spam
31+
- **Address management:** Catch-all addresses, send-only accounts, local address extension (RFC 5233)
32+
- **Security:** Sender address restrictions and configurable address extensions
33+
- **Quota management:** Email quota management with notifications
34+
- **TLS:** Enforced TLS for secure communication
35+
- **Full-text search:** FTS support for efficient message searching
36+
- **Health monitoring:** Continuous self-monitoring via Docker healthcheck
37+
38+
## Quick start
39+
40+
1. **[Tutorial: Getting Started](tutorials/getting-started.md)** — Install with Docker Compose and create your first account
41+
2. **[How to install with Docker](how-to/install-docker.md)** — Docker Compose installation steps
42+
3. **[How to install on Kubernetes](how-to/install-kubernetes.md)** — Kubernetes deployment steps
43+
4. **[How to upgrade](how-to/upgrade.md)** — Upgrade procedures and [upgrade changelog](reference/upgrade-changelog.md)
44+
45+
## Service architecture
3546

3647
The mailserver consists of multiple microservices:
3748

38-
- **MTA (Mail Transfer Agent)** - Postfix for SMTP
39-
- **MDA (Mail Delivery Agent)** - Dovecot for IMAP/POP3
40-
- **Web** - Admin interface and Roundcube webmail
41-
- **Filter** - RSpamd for spam filtering
42-
- **SSL** - Certificate generation and management
43-
- **Database** - MySQL for user and configuration data
44-
- **Redis** - Caching and session storage
45-
- **Unbound** - DNS resolver for the filter service
46-
- **Fetchmail** - External mail retrieval (optional)
49+
- **MTA (Mail Transfer Agent)** Postfix for SMTP
50+
- **MDA (Mail Delivery Agent)** Dovecot for IMAP/POP3
51+
- **Web** Admin interface and Roundcube webmail
52+
- **Filter** RSpamd for spam filtering
53+
- **SSL** Certificate generation and management
54+
- **Database** MySQL for user and configuration data
55+
- **Redis** Caching and session storage
56+
- **Unbound** DNS resolver for the filter service
57+
- **Fetchmail** External mail retrieval (optional)
4758

48-
See [Architecture Documentation](development/architecture.md) for detailed information.
59+
See [Service architecture reference](reference/service-architecture.md) for a concise list and [About the service architecture](explanation/architecture.md) for context.
4960

50-
## Getting Help
61+
## Getting help
5162

52-
- **[GitHub Issues](https://github.com/jeboehm/docker-mailserver/issues)** - Report bugs and request features
53-
- **[Releases](https://github.com/jeboehm/docker-mailserver/releases)** - View release notes and changelog
63+
- **[GitHub Issues](https://github.com/jeboehm/docker-mailserver/issues)** Report bugs and request features
64+
- **[Releases](https://github.com/jeboehm/docker-mailserver/releases)** View release notes and changelog
5465

55-
## Container Images
66+
## Container images
5667

5768
Container images are available at:
5869

5970
- [GitHub Container Registry](https://github.com/jeboehm?tab=packages&repo_name=docker-mailserver)
6071
- [Docker Hub](https://hub.docker.com/u/jeboehm?page=1&search=mailserver)
6172

62-
## Component References
73+
## Component references
6374

6475
- [Dovecot Documentation](https://doc.dovecot.org/2.4.1/)
6576
- [Postfix Documentation](https://www.postfix.org/documentation.html)
@@ -68,6 +79,6 @@ Container images are available at:
6879
- [Redis Documentation](https://redis.io/docs/latest/)
6980
- [Unbound Documentation](https://unbound.docs.nlnetlabs.nl/en/latest/)
7081

71-
## Star History
82+
## Star history
7283

7384
[![Star History Chart](https://api.star-history.com/svg?repos=jeboehm/docker-mailserver&type=date&legend=top-left)](https://www.star-history.com/#jeboehm/docker-mailserver&type=date&legend=top-left)

docs/administration/dashboard.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Dashboard
22

3-
The dashboard is the main page of the administration tool. It provides a quick overview of the mailserver and the most important information.
3+
The dashboard is the main page after login. It shows an overview of the mailserver: domains, users, and quick links to common tasks.
44

55
![Dashboard](../images/admin/dashboard.png)
6+
7+
From the dashboard you can navigate to domain, user, alias, fetchmail, and DKIM management, and to the DNS Validation Wizard and observability dashboards when available.

0 commit comments

Comments
 (0)