Files
vps/hosts/mx2.windy.me.md
T
windyboy b03d7019c4 docs: onboard AdGuard Home to Ansible; retire check-mx2; migrate plan to Linear
- Add dns.windy.lan to Ansible inventory (adguardhome group/profile) with a
  read-only healthcheck template, systemd timer, and on-demand report parity
  with the other active hosts; verified green on the host.
- Add synapse.chans.xyz to the AGENTS.md active-host quick map.
- Remove plans/; migrate decisions/verification to a Linear vps project doc and
  file the remaining gaps as W1N-46..49 with blocking edges.
- Retire scripts/check-mx2.sh; point mailcow health/update runbooks and the
  mx2 host file at the Ansible health report.
- Trim us2 stub software to verified running services; note dormant dirs.
- Normalize repo docs to English; drop the non-existent CONTEXT.md/ADR claim
  and remove docs/agents/domain.md.
2026-08-06 15:48:48 +08:00

59 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# mx2.windy.me
| Item | Value |
|------|--------|
| Role | Mail server (mailcow) |
| SSH | `ssh -4 windy@mx2.windy.me` (pubkey; root denied; prefer IPv4 from WSL) |
| Install path | `/opt/mail` |
| Compose project | `cow` (`COMPOSE_PROJECT_NAME=cow`) |
| Compose file | `/opt/mail/docker-compose.yml` |
| Config | `/opt/mail/mailcow.conf` (`.env` → symlink) |
| Hostname | `MAILCOW_HOSTNAME=mx2.windy.me` |
| TZ | `Asia/Shanghai` |
| IPv4 | `194.163.160.244` |
| IPv6 | `2a02:c207:2284:8258::1` |
| Docker network | `IPV4_NETWORK=172.22.1` |
| UI | https://mx2.windy.me |
## Ports (host-published)
`25`, `465`, `587` (SMTP), `110`/`995` (POP), `143`/`993` (IMAP), `4190` (Sieve), `80`/`443` (UI)
## Domain & mailboxes
- Domain: `windy.me` (primary on this host)
- MX for `windy.me`: `mx2.windy.me` (prio 20), `mx.windy.me` (prio 30)
- Mailboxes (examples): `zhiqiang@windy.me`, `claw@windy.me`, `hermes@windy.me`
- ACME / Lets Encrypt enabled (`SKIP_LETS_ENCRYPT=n`); cert SAN includes `mx2`, `autoconfig`, `autodiscover`
- PTR (v4/v6) → `mx2.windy.me`
## Ops notes
- Use the Ansible health report for routine checks. Use the gated Ansible
Compose reconcile playbook for a reviewed full-stack recreate; retain direct
Compose access only for focused incident diagnosis and Mailcow's interactive
upstream updater.
- `SKIP_CLAMD=y` may still leave `clamd` running after updates; recreate if you need it truly skipped
- Host has ~8G RAM, no swap; watch memory under load
- Unrelated stopped containers may exist (`zc-*` monitoring stack) — not part of mailcow
## Client access (SMTP / IMAP)
See [mailcow-smtp-client](../runbooks/mailcow-smtp-client.md).
- Send: `mx2.windy.me:587` STARTTLS (or `:465` SSL), auth = full email + mailbox password
- IMAP: `mx2.windy.me:993` · POP: `:995`
- Webmail: https://mx2.windy.me
## Runbooks
- [mailcow-health](../runbooks/mailcow-health.md)
- [mailcow-update](../runbooks/mailcow-update.md)
- [mailcow-smtp-client](../runbooks/mailcow-smtp-client.md)
Routine health: `cd ansible && ansible-playbook playbooks/health-report.yml --limit mailcow`.
## Verified
Last checked: 2026-08-01 — Ansible mailcow health profile OK (compose up, watchdog 100%, empty queue, TLS LE OK, SMTP Postcow, A/AAAA/PTR/MX/SPF OK).