op@fxmq:~$

fxmq.net · homelab · service registry — index 01 / 02

one box · seven doors — every service, indexed

A maximalist registry of the self-hosted stack running behind fxmq.net: a single Debian VPS behind a Cloudflare edge, fronted by Caddy. Each entry below lists the door, the software behind it, its upstream project and the config that runs it in the kefohaine/server repo.

$ cat /etc/homelab/motd
fxmq.net — self-hosted on one Debian VPS. [ok] edge: caddy 2.11.4 [ok]
tls: per-vhost Let's Encrypt, DNS-01 via Cloudflare [ok]
dns: proxied cloud/vault/kuma/www · dns-only mc/mail (non-HTTP ports) · tailnet-only tail
# note: talk.fxmq.net (Talk signaling + TURN) intentionally omitted from this index.
$ ls /etc/caddy/vhosts/ → see table below
#vhostproductdoor
01cloud.fxmq.netNextcloud 34 — files · calendar · talkhttps://cloud.fxmq.net
02vault.fxmq.netVaultwarden — password vaulthttps://vault.fxmq.net
03kuma.fxmq.netUptime Kuma — status monitorshttps://kuma.fxmq.net
04mc.fxmq.netPufferPanel + Minecraft (browser & java)https://mc.fxmq.net/panel · /play
05mail.fxmq.netRoundcube + Docker Mailserverhttps://mail.fxmq.net
06tail.fxmq.nettailnet cockpit — index + terminalhttps://tail.fxmq.net (tailnet only)
07www.fxmq.netfront door — drop folder + showcasehttps://www.fxmq.net · /download

01 · FILE / SYNC / COLLABcloud.fxmq.netNextcloud 34 — your data, your server

publiccf proxiedweb · sync clients

The centre of the homelab. Files & sync with desktop/mobile clients, calendar & contacts over CalDAV/CardDAV auto-discovery, photo memories, and built-in Talk chat/video calls. Emails out via the local mail platform; the database lives in PostgreSQL on the same box.

$ systemctl status cloud.fxmq.net — report 01/07
productNextcloud 34 (PHP-FPM) · PostgreSQL 17 · Redis 7 · Talk built-in
doorhttps://cloud.fxmq.net — CardDAV/CalDAV auto-discovery on /.well-known
backendnextcloud FPM container → php_fastcgi · postgresql · redis (cache + locking)
accesspublic · Cloudflare proxied. Non-browser clients (sync, curl) need a per-hostname CF WAF skip.
adminocc via make nc-* recipes (make nc-occ CMD="…")
repokefohaine/server · services/nextcloud (compose + fpm/opcache tuning + talk configs)
upstreamnextcloud/server

02 · PASSWORDS / SECRETSvault.fxmq.netVaultwarden — Bitwarden-compatible, self-hosted

publiccf proxiedany bitwarden client

Drop-in Bitwarden server — keep passwords, passkeys, TOTP seeds and notes in one encrypted vault. Works with the official Bitwarden browser extension, desktop and mobile apps pointed at this URL. Verification and invite email is sent by the homelab's own mail platform.

$ systemctl status vault.fxmq.net — report 02/07
productVaultwarden (Rust, single container)
doorhttps://vault.fxmq.net
accesspublic · Cloudflare proxied · SMTP out via [email protected]
repokefohaine/server · services/vaultwarden
upstreamdani-garcia/vaultwarden

03 · MONITORING / STATUSkuma.fxmq.netUptime Kuma — watchdogs for the whole stack

publiccf proxied

Fancy status page + uptime robot: heartbeats, HTTP(S)/TCP checks and notifications for every vhost on this box. The dashboard shows live green/red for the services below — the homelab's own self-check on itself.

$ systemctl status kuma.fxmq.net — report 03/07
productUptime Kuma (Node)
doorhttps://kuma.fxmq.net
accesspublic · Cloudflare proxied
repokefohaine/server · services/uptimekuma (seed monitors in seed-monitors.sql)
upstreamlouislam/uptime-kuma

04 · GAMES / MINECRAFTmc.fxmq.netPufferPanel + Minecraft — click, and play in the browser

publicdns-onlyno sign-up

The game corner. /play serves an in-browser Minecraft 1.8.8 client (EaglercraftX) — no install, no login. Java players of any version 1.7.10→latest join the same world on port 25565 via the Via family. The PufferPanel behind it (/panel) manages servers; public registration is closed, accounts are admin-created.

$ systemctl status mc.fxmq.net — report 04/07
productPufferPanel · Paper MC + EaglerXServer (EaglercraftX 1.8.8 client)
door
/panelPufferPanel web UI (prefix-stripped)
/play/in-browser Minecraft client (static, no install)
/play/serverbrowser websocket → EaglerXServer on the game port
:25565Java server — any client 1.7.10→latest (Via family); one server at a time
accesspublic · A record DNS-only at Cloudflare so game ports bypass the proxy · registration closed (edge 403 + backend toggle)
repokefohaine/server · services/pufferpanel + server templates
upstreamPufferPanel/PufferPanel · eaglercraft/eaglercraft

05 · EMAILmail.fxmq.netRoundcube webmail on Docker Mailserver (Postfix + Dovecot)

publicdns-only

Full mail platform for the fxmq.net domain: webmail in the browser plus plain SMTP/IMAP for any client. DKIM, SPF and DMARC are published; spoof protection locks each mailbox to its own send identity. TLS reuses the same Let's Encrypt certificate as the website — one cert path for web + mail.

$ systemctl status mail.fxmq.net — report 05/07
productRoundcube webmail + Docker Mailserver (Postfix / Dovecot / Rspamd)
door
https://mail.fxmq.netRoundcube webmail
SMTP 25 · 465 · 587inbound + authenticated submission (STARTTLS)
IMAPS 993Dovecot mailbox access
MX fxmq.netdomain mail routing — DNS-only at Cloudflare (SMTP can't be proxied)
accesspublic · A + MX records DNS-only (grey cloud) · per-mailbox quotas, disposable addresses & forward-only aliases
repokefohaine/server · services/mailserver
upstreamdocker-mailserver/docker-mailserver · roundcube/roundcubemail

06 · OPERATOR COCKPITtail.fxmq.nettailnet-only — the back door that isn't a door

tailnet onlynot in public dns

Private side of the lab, reachable only from devices on the Tailscale network — not in public DNS, and Caddy answers 403 to any non-tailnet source. / lists every vhost as links; /ttyd opens a real terminal on the host. This is where the operator sits.

$ systemctl status tail.fxmq.net — report 06/07
productCaddy vhost + ttyd (host systemd unit) behind Tailscale split-DNS
doorhttps://tail.fxmq.net — index · /ttyd — host terminal
accessTailscale membership only · remote_ip 100.64.0.0/10 → anything else 403
repokefohaine/server · services/fxmq.net (vhost) · config/ttyd (unit)
upstreamtailscale/tailscale · tsl0922/ttyd

07 · FRONT DOORwww.fxmq.netthis zone — empty homepage · drop folder · showcase pages

publiccf proxied

The public face of the domain. / serves an empty index.html placeholder; /download is a read-only public drop folder (Caddy file browser); /1 and /2 are two showcase indexes of the whole stack — two takes on the same seven doors.

$ systemctl status www.fxmq.net — report 07/07
productCaddy — static file_server browse over the download/ drop folder
doorhttps://www.fxmq.net · /download/ · /1 /2 (this page = /1)
accesspublic · Cloudflare proxied · anything dropped in /download is publicly readable
repokefohaine/server · services/fxmq.net
upstreamcaddyserver/caddy

S · UNDER THE HOODthe stackwhat runs the seven doors

all public vhosts: LE certs
$ dpkg -l | grep -i self-hosted — stack report
edgeCloudflare (proxy / DNS) → Caddy 2.11.4 (custom image, caddy-dns/cloudflare) on one Debian VPS
tlsper-vhost Let's Encrypt via DNS-01 — each cert scoped to its own vhost's SNI
containers11 docker containers on one net bridge (172.22.0.0/16), all with healthchecks + RAM caps
storagedata on-box; nightly pg_dump → a 1 TB storage VPS on the tailnet (migration pending)
repogithub.com/kefohaine/servereverything above is one git repo: compose files, vhosts, host config, scripts
▲ top