r/selfhosted • • 56m ago

Email Management I switched my mail server plans from Mailcow to Stalwart – an honest comparison (Oct 2026)

• Upvotes

I've been running my own mail for a while. My first setup was Mailcow, and for my homelab I've now decided to go with Stalwart. Before switching I compared both in detail, so here's the short version. Maybe it helps someone facing the same decision.

Mailcow

  • ~15 containers: Postfix, Dovecot, Rspamd, SOGo, ClamAV, MariaDB, Redis, Nginx…
  • Official minimum is 6 GiB RAM + 1 GiB swap, 8 GiB recommended for 5–10 users
  • Everything included: webmail, CalDAV/CardDAV, ActiveSync, antivirus
  • Battle-tested components, big community, roughly monthly releases
  • LXC isn't supported, needs a full VM

Stalwart

  • One Rust binary: SMTP, IMAP, POP3, JMAP, CalDAV/CardDAV/WebDAV, spam filter, ACME
  • ~100 MB RAM idle, 1 GB is enough for 5–10 users
  • Pluggable storage (RocksDB, Postgres, S3…)
  • JMAP support is great if you like building your own tools
  • But: still 0.16.x, 1.0 isn't out yet. No built-in webmail (planned after 1.0), no built-in AV, some features are Enterprise-only. Read the release notes before updating – one recent update needed manual ALTER TABLE on MySQL/MariaDB setups.

Why I picked Stalwart: my Proxmox host runs lots of other services, and I'd rather give my mail server 1 GB than 6+. One process, one log, one config fits how I like to run things. And I barely use webmail anyway.

Why you might still pick Mailcow: you want everything (webmail, AV, calendar) working out of the box today, you host mail for non-technical people, and you have the RAM.

One thing applies to both: neither will fix your deliverability for you. Check outbound port 25 before you start, and set PTR records for IPv4 and IPv6. Gmail rejected my mail until the IPv6 PTR was set for the exact address, not just the /64.

I wrote up the full comparison (table, pros/cons, who should pick what) on my blog. It's in German, but browser translation handles it fine: https://frickelfabrik.de/blog/stalwart-vs-mailcow/

Curious about your experience: anyone running Stalwart in production yet? How did your Mailcow → Stalwart migration go?


r/selfhosted • • 15h ago

Guide How do you feel about telemetry in local AI agents?

0 Upvotes

Do you care if your agent sends usage analytics, or do you just leave it on? I looked through the code of 8 local agents on GitHub to see what's on by default. Here's what I found.

TL;DR: 5 of 8 send usage analytics by default. goose and Atomic Agent ask first. OpenCode's CLI has no product analytics at all. Only Crush respects DO_NOT_TRACK.

Agent Analytics on by default? Where it goes How to turn it off
OpenCode No (none in the CLI) Nowhere, unless you set your own OTLP endpoint Nothing to turn off
goose No, asks on first run PostHog Say no, or GOOSE_TELEMETRY_OFF=1
Atomic Agent Yes PostHog + Sentry (crash reports) /privacy analytics off, or ATOMIC_AGENT_ANALYTICS=off
Cline Yes ("unset" counts as on) PostHog / OpenTelemetry Settings → Telemetry off, or VS Code telemetry.telemetryLevel: off
Codex CLI Yes Statsig + chatgpt.com [analytics] enabled = false in ~/.codex/config.toml
Crush Yes PostHog via data.charm.land DO_NOT_TRACK=1 or CRUSH_DISABLE_METRICS=1
Kilo Code Yes, with GeoIP on PostHog KILO_TELEMETRY_LEVEL=off, or "experimental": {"openTelemetry": false}
Qwen Code Yes Alibaba Cloud (*.rum.aliyuncs.com) "privacy": {"usageStatisticsEnabled": false} in ~/.qwen/settings.json

OpenCode. No PostHog, Sentry or similar in the CLI, core or TUI. OpenTelemetry only runs if you point it at your own endpoint (if (!options?.endpoint) return []). It still checks for updates (OPENCODE_DISABLE_AUTOUPDATE=1) and fetches the model list from models.dev (OPENCODE_DISABLE_MODELS_FETCH=1).

goose. The code says it straight: telemetry is get_telemetry_choice().unwrap_or(false), and the CLI shows a consent dialog if you haven't chosen yet.

Atomic Agent. Connects to the network by itself for 3 things: analytics + crash reports, a llama.cpp build check when starting a local model, and a release check on startup. Each has its own switch. Analytics has 10 event types (app opened, message sent, model configured, etc.). Message events carry provider, model, token counts, latency, step count and estimated cost, but no message text, paths or tool arguments. The IP is replaced with 0.0.0.0, GeoIP is off, and crash reports drop error messages by default. /privacy shows all of it in one place.

Cline. The default setting is "unset", and the check is telemetrySetting !== "disabled", so unset means on. It also follows VS Code's global telemetry switch. Telemetry keys are injected at release build time, so the source alone doesn't tell you exactly what the shipped build does. The CLI has --telemetry-selfcheck to print it.

Codex CLI. Two channels. A Statsig metrics exporter is the default and only turns off when analytics is off. Analytics events also go to chatgpt.com when you're logged in (with an API key, only plugin events). Feedback uploads have their own switch ([feedback] enabled = false).

Crush. PostHog through Charm's own domain. Three ways to turn it off, including DO_NOT_TRACK=1, the only agent in this list that honors it.

Kilo Code. 26 event types, including tool used, command used and LLM completion. It's the only one here with PostHog's GeoIP explicitly left on (disableGeoip: false). The VS Code extension follows VS Code's telemetry setting.

Qwen Code. usageStatisticsEnabled defaults to true, and stats go to an Alibaba Cloud RUM endpoint. The logger has around 45 event types.

Kill everything at once

Since only Crush honors DO_NOT_TRACK, you need each tool's own switch. For your shell profile:

export GOOSE_TELEMETRY_OFF=1

export ATOMIC_AGENT_ANALYTICS=off export KILO_TELEMETRY_LEVEL=off export CRUSH_DISABLE_METRICS=1 export DO_NOT_TRACK=1 Codex, Cline and Qwen Code need a config change (see the table).

How I checked

  • Cloned each repo on Oct 22 and read the telemetry code: defaults, opt-out logic, endpoints.
  • Source only, no traffic capture. Released binaries can differ (especially Cline, which sets telemetry at build time).
  • Checked three things per agent: default on/off, where data goes, how to disable. Not every data point.

r/selfhosted • • 13h ago

Docker Management Audit eMudhra compromised intermediate CAs

0 Upvotes

Inspired by u/jonmchan's post, here's a script to audit eMudhra's compromised intermediate CAs in your containers

Gist on GitHub


r/selfhosted • • 20h ago

Release (AI) Paperless Starfruit: a companion for paperless-ngx with better OCR and automatic metadata extraction

Thumbnail
gallery
1 Upvotes

I’ve been working on Paperless Starfruit for a few months and wanted to share it here.

It runs alongside paperless-ngx and helps with OCR and document metadata: titles, tags, correspondents and dates. Everything is configured through a web UI.

How it works

Add the psf-process tag to a document in paperless-ngx, manually or through a workflow. Starfruit picks it up, optionally runs OCR with a vision model, and extracts the metadata.

Results can be applied automatically or sent to a review queue, where you can check and edit the suggestions before applying them. If paperless’s existing OCR is good enough, you can reuse that text and skip the extra OCR step.

Why a separate tool when paperless-ngx already has AI?

I wanted more control over how documents are processed:

  • Editable prompts: customize and test the instructions for OCR and metadata extraction.
  • Descriptions for tags and document types: explain what each one means and when to use it, so the model has more context than just a name.
  • A dedicated review queue: check suggestions against the document and manually correct metadata before applying it, or enable auto-apply.
  • Flexible processing: run OCR, metadata extraction, or both, with separate models and page limits.
  • Processing history: inspect the prompts and model responses behind each run.

Models and setup

You can use your own API keys for OpenAI, Anthropic, Google or Mistral, or connect local models through OpenAI-compatible endpoints such as Ollama.

Installation is through Docker Compose. Starfruit itself runs in a single container with SQLite, no additional database or Redis needed. Once it’s running, connect your paperless-ngx instance and configure your models in the web UI.

It’s free, open source and self-hosted. Requests go directly from your instance to your chosen provider, or stay local if you use a local model.

GitHub

Website

I’d love to hear how it works with your documents and what you’d want improved.


r/selfhosted • • 15h ago

Need Help How safe is Tailscale tunnel?

0 Upvotes

Title. I'm running some software which acts a relay to allow collaborative document work with some friends, but to open it to the internet without forcing them to download Tailscale, I'm using Tailscale funnels. My concern is about how safe it is. Will this open me up to DDoS or hacking attacks?

I've already done some basic hardening for the specific container, however I'm still concerned about whether this is safe enough. I have everything in the same docker compose file and worry about whether this is bad practice.

Any help is greatly appreciated!


r/selfhosted • • 10h ago

Need Help Hypothetically, what would I need?

0 Upvotes

I'm back.

https://www.reddit.com/r/selfhosted/comments/1x9ldb1/self_hosted_llm_goals_possible/

I posted this earlier this week or something and I'm at a cross roads.

Part of me wants to set up a local AI model for the learning ability of it. (how to do it) but I got a lot of people saying i shouldn't bother due to too low of compute.

What sort of computer (specs) would you suggest I get for an average AI model and can also use for some other things (tail scale exit node, plug into TV to use as a better OS / compute for TV)

the device I have could be upgraded to have an SSD instead of HDD and up to 32GB ram. But not sure if worth it.

Thanks!


r/selfhosted • • 1h ago

Release (No AI) Open-source DDoS detection and mitigation for Linux, with Prometheus metrics and Discord alerts

• Upvotes

https://github.com/0vm/NetDeflect (Apache-2.0, active commit history, screenshots and a demo video in the README)

If you expose anything you self-host, a game server, a VPN, a web app, a Jellyfin server, you eventually get DDoS attacks, floods and reflection attacks hitting the server. Most answers are either a paid DDoS protection service (like Cloudflare (no Jellyfin or UDP) or OVH) or writing your own rules that you have to figure out yourself and those will happily block real users when they misfire.

It runs on a VPS or whatever server faces the internet, installs in one command and only if you want to, it sets up as a systemd service. It exposes Prometheus metrics (node_exporter textfile or a built-in /metrics page) so it drops straight into Grafana, has a watch-only mode so you can test it against your normal traffic before it blocks anything, validates WireGuard and OpenVPN on your VPN ports and only filters the interfaces you pick so Docker networks are left alone. Honest limit: an attack bigger than your connection fills the line before it reaches you, and that has to be handled upstream. It handles everything that does reach the machine.

fail2ban works on logs, so it's too slow for packet floods and honestly useless against spoofed traffic. Plain nftables or a script can ratelimit, but it has no idea what the attack is and will ban forged source addresses which is exactly how you end up blocking your own users. NetDeflect samples the traffic, classifies the attack on real header fields (110 signatures, plus it fingerprints ones it doesn't know) and drops it in the kernel, while never banning spoofed sources. It also learns your regular users and lets them through first during an attack. I wanted something that does the detection and responds automatically and tells me what happened, rather than me writing rules mid attack.

I've been building this since 2021 and I designed and built it myself: the detection logic, the classifier, the mitigation, all of it. AI helped around the edges, generating novel DDoS variations to throw at it (basically trying to evade my own detection, until the model's safeguards kicked in and it refused to attack further), confirming whether detection was actually working during tests against my own services and helping track down bugs. I brought my own, somewhat outdated, knowledge of past DDoS attacks to the design. My bug-finding process is "push to prod and wait for someone to open an issue" (joke). More seriously, it's been audited by AI, by other network engineers and by the lovely people who open issues and PRs on GitHub.


r/selfhosted • • 15h ago

Release (No AI) Ordo — AGPL job scheduler, Docker, no account required

0 Upvotes

Ordo is a hierarchical job scheduler.

It schedules work across servers with explicit dependencies and a defined recovery path when a job fails, misses its window, or runs too long.

AGPL v3. Self-hosted with Docker Compose. No signup.

git clone https://github.com/nathanielgraham/ordo.git

Project Homepage: https://ordoscheduler.com


r/selfhosted • • 12h ago

Need Help How much more personal information are you comfortable giving self-hosted AI models?

0 Upvotes

Currently in the process of planning to host my own AI models for 2 core reasons:

  1. Extra Privacy
  2. Little to no guardrails

Without these two points, there’s little reason for me to host my own models which are in all rights less capable and more inefficient than my Claude subscription. But I am still a bit uneasy about giving a model, say qwen 3.5 4b with or without internet access, personal information.

So for people who are going this route, what do you share that you wouldn’t share with public AI models?


r/selfhosted • • 11h ago

Wiki's What should I add to my Wiki?

12 Upvotes

I'd like to expand my private Wiki beyond the contents of my notebook collection and a few random thoughts.

What topics would you recommend?


r/selfhosted • • 20h ago

Software Development What would you want from a self hosted free open source Roon alternative? (music server and library)

0 Upvotes

Hello All. I've seen a lot of chatter over the years about a free roon alternative.

A little background you can skip. My dad has a decades long classic music broadcast recording collection thousands of live performances many unavailable anywhere outside of private collections. After organizing all his external hard drives on my NAS I was kind of dissatisfied with the software to stream your own library so I made my own classical music streaming app just for friends and family. part roon, part every other classical music app with a really novel "liner notes" experience that includes a program in Markdown and links to reviews and interviews about the performance or production. I realized that I have built half of roon, including the heaviest lifts like a working server and client

I've been programming since the 80s. I program for a living and run a programming tutoring company nights and weekends. AI coding tools have really changed the kinds of projects I can do. yes this will be vibe coded but not by a naive programer.

I wanted to ask people who already pay for Roon or would like a free alternative what features do you NEED. What features are nice to have? I probably won't have a dsp library anywhere near as good, but I'll have stuff like the open headphone peq project and common dsp.

I don't want to reveal too much of my plans until it's ready but this will mostly work like roon but incorporate elements from software like plex amp and jellyfin. The biggest differences are you can stream your collection with as many people as your hardware can serve with no cost per user just like Jellyfin. It will be federated. you won't just be able to connect to one server at once. your main server controls your home electronics, but you can access your friends' libraries if they share it with you. The other feature will be huge for fans of bands that allow recording of their shows, like jam bands or bands like the mountain goats. We will aggregate thousands of shows and make the software able to crawl the web and the Wayback Machine to get you the set list, fan photos, posters, and fan art from the show in a Roon-like liner notes experience, but for live shows. Another thing I want to do is support streamers made for $5-10 ESP32 microcontrollers. roon uses a lot of capable hardware but I'd love to use lighter-weight stuff if I can make it work. it's not just about saving money on the parts but using lower power devices for always on electronics is a good idea.

If you already use roon you will probably want to stay with roon. If you're into homelabbing and like free and open source software projects this is for you. if you're an obsessive jam band fan who collects rarities and loves listening to bootlegs this software really is for you like nothing that's come before. If you love roon but wish it was easier to share your library with all your friends you might even run this next to roon. I love Roon and have used it for years; I think it will always be the best, like Adobe Photoshop, but I think a lot of people might prefer something community made and free even if it's not as polished. Also if you like to tinker and want to code your own clients for obscure devices this is a good option. Don't expect a giant killer expect somethign that appeals to the self hosted open source community. If you just want something free welcome to the open source community. We don't want your money but we have a lot of opinions.

For me, I'm a huge fan of the mountain goats. This software will let me mix up my collection of unreleased albums with all the studio albums on streaming and have hundreds of their live shows available all in one app for free. I can share an invite with my friends I hang out with in shows and they can have my extensive collection of unreleased or vinyl exclusive albums and all the bootlegs available online in one free app that's free to host on hardware you already own.

the scope of what I want to make is an iOS app with carplay and a web based app for desktop.I'll put it all on a git so you can make an android or PC client. I'm mostly focused on unix and apple systems.

If you'd like to test the software or even help code for the project feel free to reach out. like an ecosystem like jellyfin I would eventually encourage people to make their own clients and modifications to have a diverse ecosystem that's not based on what I think can be in this software. we're not up to that point. right now I'm trying to make something that works and is robust.

Those are my ideas, but as music lovers what have you always wanted in music server/library software. And for people who love and collect bootlegs I want to hear from you.


r/selfhosted • • 20h ago

Need Help Compromised LiteLLM 1.107.0 Docker container

0 Upvotes

Hi,

Unfortunately, my stack is compromised because the LiteLLM container I use is running the latest version. I’ve already removed all the API keys available in the environment as soon as possible, but I’m not sure whether the stealer could reach outside the container and access the environment variables of other containers, especially my Vaultwarden container, or even host credentials like SSH keys.

Here what it collects https://safedep.io/litellm-pypi-compromise-credential-stealer-backdoor/

Module Targets
sysinfo, netinfo Host name, user, operating system, IP addresses, network settings
browser_pw Chromium saved passwords, decrypted with the profile master key (DPAPI on Windows). Firefox logins.json and key4.db
browser_hist Browser history
ssh_keys ~/.ssh/*
shell_hist bash and zsh history, PowerShell PSReadLine, cmd history
cloud_creds ~/.aws/credentials and config, Azure profile and tokens, gcloud credentials, ~/.kube/config, ~/.docker/config.json, gh hosts.yml, rclone.conf, ~/.netrc
dev_secrets .pem, .key, .pfx, .p12, .pk8, .ppk files under $HOME, Composer auth.json, FileZilla saved servers
container_creds Kubernetes service account token
cicd_secrets GitLab runner config.toml, Jenkins initialAdminPassword and master.key, .vault-token, Terraform credentials.tfrc.json, Packer settings
ai_devtools Claude Code, Claude Desktop, Cursor, Windsurf, Copilot, VS Code mcp.json, Gemini CLI, Codex auth.json, Continue, Aider, Goose, opencode, Qwen, Crush, Kiro, Zed, Hugging Face token
env_vars Its own environment and the environment of other processes through /proc/<pid>/environ
db_litellm Reads DATABASE_URL and dumps the LiteLLM_CredentialsTable and LiteLLM_ProxyModelTable tables, which hold the LLM provider API keys of a LiteLLM proxy
cloud_metadata AWS instance metadata service (IMDSv2, then v1): instance identity and role credentials
gpg_keys, tls_privkey GPG keys, TLS private keys

r/selfhosted • • 22h ago

Release (No AI) Android FreshRSS client with an offline archive and search (fork of ReadYou)

0 Upvotes

Not a server thing, sorry, but if you self-host FreshRSS and read on Android this might be useful.

I forked ReadYou and mostly worked on:

  • caching full articles and images on the phone during sync (it respects wifi only / charging only)
  • searching everything that's been synced
  • not losing changes made offline. stars, read later and read/unread get queued and replayed on the next sync instead of being overwritten by the server
  • Read Later synced as a FreshRSS label
  • a sync log, because I couldn't tell if background sync was running. it wasn't, battery optimization was killing it. there's a one tap fix for that in the app now

GPL, APK on GitHub: https://github.com/bennybar/ReadYou

If you're on Obtainium, add the repo URL and it'll track releases.

The GitHub build pings Aptabase once per app open to count users, nothing else is sent.


r/selfhosted • • 1h ago

Guide Three production architectures for repurposing old Kindles and tablets into local smart home dashboards

• Upvotes

In self-hosting setups, repurposing decommissioned Kindle e-readers, Kobo devices, and cheap Fire tablets as dedicated wall dashboards is a great way to give old hardware a second life without relying on proprietary cloud services or dealing with bloated lithium batteries.

Over the past few months, I documented three production architectures to achieve zero-lag local control:

  1. Passive E-Ink screensavers: Headless SVG rendering pipeline running automated deep sleep routines on the reader, achieving 3 to 6 weeks of battery life per charge on Kindle Paperwhite and Kobo hardware.

  2. Direct local ES5 touchscreen engines: Lightweight dashboard interface served straight out of Home Assistant local storage (/config/www) engineered specifically to render smoothly on older WebKit and legacy browser runtimes.

  3. Debloated Android and Fire OS wall kiosks: Fire OS debloated via ADB to strip background telemetry and lockscreen ads, running Fully Kiosk Browser on an isolated zero-trust IoT VLAN with local REST controls.

For permanent 24/7 wall mounting, the build uses 5V to 3.7V/4.2V step-down dummy battery bypasses so you can remove the swelling-prone lithium pouch entirely and power the tablet directly from low-voltage wall lines.

I compiled all three architectures, circuit schematics, and 3D print mount specs into a complete walkthrough. All reference configs and free download links are pinned directly on my Reddit profile for anyone building their own setup.

If you run an e-ink or wall-mounted dashboard in your self-hosted setup, what hardware are you using and how did you handle constant power? Happy to discuss hardware setups in the thread.


r/selfhosted • • 19h ago

Remote Access Ways to expose my services

0 Upvotes

My current setup exposed my services (jellyfin, nextcloud, etc) through simple port forwarding (443,80) to my nginx-proxy-manager, which then forwards it to my home server.

The way i deal with public ip is with duckdns that runs on my raspi. I am just using whatever public ip my isp currently gives me.

This has been working for about 2years now. Ive been recommended to switch to a vps, a vpn setup or something else. Is there a considerably high risk using my isp's public ip and port forwarding besided an application vulnerability? Any tips?

Edit: id like to have them accessible for friends and family without any hassle


r/selfhosted • • 7h ago

Finance Management Would You Be Interested in an Open-Source Native Android Client for Firefly III?

7 Upvotes

I’ve been looking for a good Android client for Firefly III, but Waterfly and Abacus haven’t quite met my expectations in terms of polish and overall user experience.

I’m considering building a native Android client for Firefly III and making it open source, but before I put in the effort, I’d like to know if there’s enough demand for it.

If you’d be interested in using such an app, what are the must-have features you’d want from Day 1?

Also, please mention your mobile platform: Android or iOS.

Your feedback will help me decide whether to pursue this project and prioritise the features that matter most.


r/selfhosted • • 3h ago

Monitoring Tools I got tired of status pages needing Postgres, Redis and a Node runtime, so I built one that's a single Go binary

0 Upvotes

Pulse is a status page and uptime monitor that runs as one Go binary with a SQLite file. No separate database, no Node, no Redis. The checks run inside the same process.

What it does:

- HTTP, TCP, ping, DNS and TLS certificate checks

- Several status pages on your own domains from one instance

- Incidents with a timeline, maintenance windows that mute alerts

- Scoped API keys, 2FA, Prometheus metrics

- Imports your monitors from Uptime Kuma

Install it with apt, Docker (amd64 and arm64) or one binary. Releases are signed and come with SBOMs.

Live instance: https://status.shreeda.xyz

Code (MIT): https://github.com/memetics19/pulse

Docs: https://docs.shreeda.xyz

I built it for my homelab and it's what I use every day. It's young (3.0 just shipped), so I'd really like to hear what breaks or what's missing. Alerts are email and Slack today, and ntfy, Gotify and Discord are next.


r/selfhosted • • 18h ago

Automation My local multi-node personal assistant setup (64 GB RAM cluster, 8 sub-agents & custom hardware integration)

0 Upvotes

Hey everyone,
I wanted to share my current architecture for a local-first, multi-node personal AI assistant ("Jarvis") that I've been building over the past few months.
Instead of relying on cloud APIs or simple smart home routines, the goal was to build a fully self-hosted, agentic system running on hardware I had on hand, with zero cloud dependency for core tasks.

Hardware & Cluster Setup:
Orchestrator Node: ASUS VivoBook (16GB RAM) running Linux/Ubuntu. Handles the primary routing and local 9B parameter LLM via Ollama.

Compute Nodes: 2x Fujitsu Esprimo D757 (32GB / 16GB RAM) acting as worker nodes for parallel sub-agent tasks and continuous background processing.

Peripherals & I/O: Grandstream GAC conference phone for multi-directional voice array capture, Sony Wi-Fi dashboard setup for visual status feeds, Sonoff Zigbee USB sticks for room telemetry, and Anycubic 3D printer integration for physical status notifications.

Agentic Architecture:
The system uses a Hermes-based orchestrator model that dispatches tasks to specialized sub-agents:

  1. System Agent: Node health, RAM/CPU allocation, and process management.
  2. Tactical Agent: Fast execution of quick commands and local shell routines.
  3. Voice Agent: STT/TTS pipeline integrated with the conference phone hardware.
  4. Brain Agent: Long-term memory indexing and context retrieval via local vector storage.
  5. Coder Agent: Development assistant executing local terminal workflows (Claude Code / Aider).
  6. Recon Agent: Web research, scraping, and real-time page parsing for factual verification.
  7. Hardware Agent: Interface for Zigbee sensors, microcontrollers, and IoT devices.

Integrations & Workflows:
It hooks directly into local transit APIs (VBN) for live schedule updates, local calendar/mail feeds for morning briefs, and automated 3D printer status tracking.

Curious to hear how others here structure their setups! Are you running everything on a single beefy workstation, or moving towards distributed multi-node architectures with dedicated agent roles?

P.S. Since I couldn't find a dedicated space focused purely on technical, local-first personal AI builds and hardware integrations, I started [r/CustomAIAssistants](r/CustomAIAssistants). Feel free to join or share your own setup there if you're building something similar!

Edit: For voice detection, I am running openWakeWord combined with Whisper so Jarvis triggers as soon as it hears its name. It then analyzes the last two minutes of rolling transcriptions to determine whether it was actually being addressed and what action to take. I am also currently integrating it with OpenSCAD so Jarvis can generate 3D models directly via code and send them straight to my Anycubic printer through OctoPrint.


r/selfhosted • • 21h ago

Personal Dashboard Pagerr 3.1.0: a phone-first homelab launcher in one HTML file, now with QR “Quick connect” between devices

0 Upvotes

I posted Pagerr a while back. It’s a small bookmark dashboard for your homelab: one HTML file served by nginx, no database, no accounts, no config files. All your data stays in your browser. I built it because I wanted a fast launcher on my phone, not a full dashboard with widgets and a backend.

3.1.0 is out today. What’s new:

  • Quick connect. On the new device, tap Receive and a QR code appears. Scan it with your other device’s camera, tap Send, and your dashboard moves across. There’s no typing and no passphrase. It goes through a tiny in-memory relay in the Docker image, with a one-shot slot that’s deleted as soon as it’s collected. It’s encrypted in the browser with a random key that never leaves the two devices, so the server only ever sees unreadable data.
  • Sync links and much shorter codes. Codes are compressed before encryption, so they’re about 80% smaller. A 30-service dashboard went from roughly 8,300 characters to about 1,600. You can also send a link that imports when opened.
  • Built-in Inter font. The font is embedded in the file, so there are no Google Fonts requests and it works offline. The page now only contacts the icon CDNs.
  • Bigger text and a layout pass for narrow phones.
  • Copy buttons now work on plain-HTTP addresses. Browsers block the clipboard API there, so they only used to select the text.

Still true: it’s a single index.html, so you can serve it from anywhere. The relay is optional, and without it Quick connect hides itself and the manual code and link options show instead. Images are multi-arch (amd64 and arm64).

yaml

services:
  pagerr:
    image: mortaljinx/pagerr:latest
    ports:
      - "10000:80"
    restart: unless-stopped

Honest caveats: the PIN is a convenience lock, not a security boundary, since anyone with access to the browser’s dev tools can read the stored data. Run it behind Tailscale or an authenticating proxy, and don’t expose it to the internet. Each address (LAN IP versus Tailscale, say) keeps its own copy, which is why I added Quick connect.

GitHub: https://github.com/mortaljinx/pagerr
Docker Hub: https://hub.docker.com/r/mortaljinx/pagerr

Disclaimer: Claude used to help build the project.


r/selfhosted • • 5h ago

Guide Best Cloud Hosting Solution for Multiple Dockerized AI/ML Applications

0 Upvotes

I have developed multiple applications using AI/ML models and Docker, and now I want to deploy them to the cloud. Is it possible to purchase a single cloud server or VM to host and run all my applications simultaneously instead of purchasing separate servers for each application?

Which cloud provider, such as AWS, Google Cloud, or Azure, would be the best choice for this purpose? What server specifications (CPU, RAM, GPU, and storage) would I need, and what would be the approximate monthly cost? I would also like to know the best approach for managing multiple Docker containers, domains, databases, and application deployments on a single cloud server while ensuring good performance, scalability, and security.


r/selfhosted • • 19h ago

Release (No AI) I built OTEL and Sentry file sink https://github.com/aivarsk/otelite for CI and development

0 Upvotes

I used to grep, join and split logfiles for decades and I'm not a big fan of looking at logs in the browser.

So this one takes OTEL telemetry and stores traces and metrics inside SQLite database, logs on the disk as JSONL files. Then I added Sentry error capture to files as well. It uses standard Python library, no dependencies. And packaged as a single file (zipapp, you can even make it executable and start as a regular binary). Since there are no external deps, it has a simple async HTTP server from scratch (Python does not include it) and I sacrificed SQLite durability to ingest 3500+ calls per second. For CI and dev that should not matter. There is also a simple UI.


r/selfhosted • • 8h ago

Need Help Should I just stop worrying and trust my AI?

0 Upvotes

Everyone making such a big deal about security of AI agents, but does it really apply to me?

I have a homelab guy with a VPS and two small servers. There's nothing of value saved anywhere, everything is backed up to git or my NAS and can be recovered. I just use it for personal projects.

I'm running an AI assistant in Docker, it's a minimal alternative to OpenClaw called Nanobot. I use this assistant for various IT tasks. I have it customize my docker compose files, vibecode apps, port x64 apps to my ARM server, troubleshoot general Linux issues (for example earlier today xrdp wasn't working).

So far I've been treating the AI as untrusted. I review the code/scripts it writes. I don't give it SSH access to my server. I have it spoonfeed me troubleshooting commands and I waste my time reviewing and copy-pasting them.

In the 2 years of using AI I've never had one tell me to do anything malicious. My assistant isn't visiting random websites likely to hijack it, assuming such a thing is even likely to happen. When it does a web search, it's usually looking up specific tech doc, for example how to use some Go library on Github.

I feel like if I just say "fuck it" and let go of the paranoia, my homelab life would become 10x simpler and I'd win back a lot of free time. And if my server was somehow hacked (which I don't think it will), well whatever, I'll format, reinstall, recover from backup, and lesson learned. I bet that would take less time than what I've been doing so far.

Should I just stop caring and free up my time? Have you given your AI assistant SSH access to your servers?

I know this sub will bury anything AI related and I'm gonna stay at 0 downvotes within a minute of clicking Submit, but I'm hoping a few people who have done the same will see this thread and can tell me how that went for them.


r/selfhosted • • 17h ago

Remote Access Anyone else moving their services exposed to internet in?

96 Upvotes

I was thinking with more and more exploits coming out, probably a good idea to close down the ole ports again and VPN for access, worked through that over the past day.

Luckily it was pretty straightforward, but was curious when I was doing it if anyone else is feeling the same? I always had the impression that exploits were difficult to take advantage of depending on the exploit, but AI makes it so much easier to take advantage of them, feels a bit more dangerous out there.

I have firewall, and some observability but still..

What's everyone feeling like?


r/selfhosted • • 20h ago

Internet of Things The weird engineering edge cases nobody warns you about when scaling a GPS telematics server (and happy to help if you're stuck)

0 Upvotes

Hey guys,

Over the past two years scaling our fleet platform (Vega) across vehicles, capacitive fuel probes, cold-chain reefer sensors, and cargo e-locks on Docker Swarm, the hardest issues were never the standard web stuff like CPU or RAM. They were the bizarre hardware and physical-world edge cases that hit you once real vehicles are out on the highway.

Thought I'd share a few hard-learned lessons—and if anyone here is wrestling with similar telematics/IoT bugs, feel free to drop a comment or DM, happy to help debug:

1. The "Midnight Boundary" bug in trip playback
A client flagged a 4-minute drive time discrepancy on a 19-day trip report between our web playback and executive summaries. We realized that partitioning raw points into daily calendar buckets severed continuous trips driving across midnight (e.g. 23:58 to 00:05). The boundary points got counted as idle/stop time in both daily buckets. If you run into this: calculate metrics across the continuous trajectory span first, then reconcile boundary steps back to the active driving days.

2. Fuel sensors: Dealing with slosh and tank calibration
When building out our fuel intelligence pipeline, raw capacitance probes in 400L diesel tanks fluctuated wildly on highway bends and braking. If you don't run an adaptive moving-average filter and calibrate tank geometry, your alerts will spam users with false "Fuel Theft" notifications at every speed breaker.

3. Cold Chain / Reefer sensors: Hardware firmware typos
You can spend weeks reading official protocol PDF specs, but actual device firmware will surprise you. We recently had reefer units sending "Retuen Temperature" (misspelled) in JSON packets and heading: null. We had to make the ingestion gateway tolerant to vendor typos and dynamically calculate vehicle bearing from historical coordinate deltas on the fly.

4. Cargo E-Locks: Deep sleep disconnects
Electronic container padlocks (like JT701/JT709) spend 95% of their lives in ultra-low-power sleep. If your TCP gateway doesn't reply with the exact proprietary ACK handshake within 5 milliseconds, the e-lock assumes the cellular link is dead and shuts down its modem for hours. The gateway (:5000) must ACK immediately, dump the payload into Redis streams, and let async workers handle the geofence and tamper evaluations.

5. SIM card churn and telemetry inventory
Fleet tracking isn't just code; it's managing thousands of M2M SIM cards. Devices mysteriously go offline because APNs expire, roaming fails, or telcos throttle data. We had to build an internal inventory hub tied to M2M carrier APIs just to track data quotas, IMEI-to-SIM mapping, and battery health in one dashboard.

6. Put PgBouncer in transaction mode on day one
Thousands of physical GPS trackers maintaining persistent TCP sockets will starve PostgreSQL connection pools within minutes. Putting PgBouncer in transaction mode in front of Timescale/Postgres dropped our DB CPU from 90% down to 15% on the exact same hardware.

For monitoring, we swapped heavy Prometheus for VictoriaMetrics + Loki + Grafana, which dropped our metrics memory footprint by over 60% across the Swarm cluster.

If anyone is currently fighting with raw tracker protocols (GT06, Teltonika, JT701), persistent socket timeouts, or trip reconciliation bugs, drop your setup below—happy to share configs or troubleshoot!


r/selfhosted • • 15h ago

Docker Management A 1-byte write to a file inside my container copied the whole 128MB and cost 170ms. The same write on plain ext4 takes 0.08ms

0 Upvotes

I was chasing a slow startup on a container that writes into a pre-seeded data file, so I stopped trusting the docs and measured overlayfs copy-up on my own box instead.

Setup: unprivileged overlay mount in a user namespace, lowerdir holding a 128MB file, upper and work dirs on the same ext4 volume (/dev/nvme0n1p3), kernel 7.2.6. Ten iterations, rebuilt from scratch each time.

I wrote a single byte at offset 4096 through the merged mount and the upper layer ended up holding exactly 134,217,728 bytes. Every run. The whole file, for one byte of application work. That part is documented and by design, copy-up works at file granularity rather than per block.

The cost split is what I did not expect. With the default fsync=auto that first write took 163, 165, 169, 172, 182, 183, 192, 204, 218 and 223ms. Same code, same file, same filesystem, so most of that spread is noise, but the floor sits around 165ms.

The kernel docs say overlayfs calls fsync(2) on the upper file before it finishes data copy-up, so I assumed the synchronous flush was most of that number. I re-mounted the same setup with fsync=volatile to check: 126, 128, 131, 132, 133ms. Removing every sync call saved about 40ms.

So the flush is real, but it is not the story. The other 130ms is the 128MB copy itself, roughly 1GB/s on this disk. My hypothesis was wrong and I am glad I checked, because "durability is expensive" is a far less useful takeaway than "you are paying for a full file copy and you cannot get out of it on this kernel".

As a control I did the same single byte write to the same 128MB file on plain ext4, with no overlay in the path: 0.08ms median, 0.07 to 0.19 across five runs. Two thousand times faster for the identical syscall.

Two other things I hit while doing this.

I chmod'ed a 64MB file that only existed in the lower layer and the upper layer came out at exactly 67,108,864 bytes. A metadata change pulled the entire data payload. The fast path for that is the metacopy feature, and CONFIG_OVERLAY_FS_METACOPY is not set in this kernel build, so it is not there to save you. On a kernel with metacopy enabled, or with data-only lower layers, that chmod would be close to free.

FICLONE against the upper dir returns ENOTSUP here because ext4 has no reflink support. On btrfs or XFS with reflink, copy-up should be a shared extent rather than a real copy, which would make this whole post moot. That is the obvious fix and I cannot test it on this box, so I would like those numbers if anyone has them.

Practical version for self-hosted services: if an image ships a large file and the app writes into it on first boot, that write pays a full read plus a full write of the file. Put those paths on a volume and it drops to the 0.08ms case, because volumes bypass the storage driver. If your Docker root sits on spinning disks or a network mount, the same stall shows up as slow service startup and looks like a badly behaved app instead of a filesystem event.

One caveat on my own numbers: an earlier run of the same test produced a single 2.7s sample that I could not reproduce in ten tries today. If you have hit that consistently under load, or you have copy-up timings from btrfs, I would like to hear them.