Deployments
My own awesome self hosted list (https://github.com/awesome-selfhosted/awesome-selfhosted) of things currently deployed.
AI and Machine Learning
LocalAI
- GitHub: https://github.com/mudler/LocalAI
- Purpose: Host and run various local LLMs with API compatibility
- Notes: Allows testing multiple models with OpenAI-compatible API. Models in the library are uncensored but llama3 based ones were buggy, had better results with mistral / qwen based ones. Also can run any model from huggingface so long as VRAM allows. Can do code completion with https://www.continue.dev/ VSCode extension.
Nvidia Container Runtime / Device plugin
- GitHub: https://github.com/NVIDIA/k8s-device-plugin
- Purpose: Plugin to expose NVIDIA GPUs to kubernetes pods
- Notes: Gives access to a new resource
nvidia.com/gpu.sharedthat can be used in pods to allocate shared and controlled usage of a GPU resource. Works with a regular RTX card.
Tabby
- GitHub: https://github.com/TabbyML/tabby
- Purpose: IDE code auto completion
- Notes: Not personally fond of copilot like products so not using it so much. It can connect to an external ollama server for the model. It has its own VSCode extension. It takes quite a while to start (~10min).
Whisper ASR
- GitHub: https://github.com/ahmetoner/whisper-asr-webservice
- Purpose: Automatic Speech Recognition local service
- Notes: Used for transcribing audio files locally. Theoretically can be used by bazarr to generate subtitles.
Rhasspy Wyoming
- GitHub:
https://github.com/rhasspy/wyoming
https://github.com/rhasspy/wyoming-openwakeword
https://github.com/rhasspy/piper
https://github.com/rhasspy/wyoming-porcupine1
https://github.com/rhasspy/wyoming-snowboy
https://github.com/rhasspy/wyoming-faster-whisper - Purpose: Collection of voice assistant bridge tools for Home Assistant
- Notes: Includes wakeword, stt, tts, etc. Basically deploy and reference in Home Assistant UI and it works.
Development Tools
ArgoCD
- Website: https://argo-cd.readthedocs.io/en/stable/
- Purpose: GitOps continuous delivery tool
- Notes: I have not tested alternative tools because it just works. Initial setup requires allowing the project, namespace, github, etc. But afterwards it's just about managing the applications. It's great to sync from a webui, to inspect or edit resources when cannot directly connect to the cluster, to rollback versions, etc.
Gitea / Forgejo
- GitHub: https://github.com/go-gitea/gitea
- Codeberg: https://codeberg.org/Forgejo/forgejo
- Purpose: Self-hosted Git service
- Notes: Initially deployed Gitea, then switched to the Forgejo fork when Gitea was privately acquired. Private git repositories that I do not want to have on GitHub as well as git repository mirrors. UI is clean.
Glitchtip
- GitHub: https://github.com/GlitchTip/
- Purpose: Error tracking platform
- Notes: Self-hosted alternative to Sentry. It also has an uptime feature for websites but it is not very performant for that purpose. I use it for my own application as well as for Nextcloud which makes it possible to override the sentry DSN.
Harbor
- GitHub: https://github.com/goharbor/harbor
- Purpose: Container registry with security scanning
- Notes: Used for storing private container images and also to cache docker.io pulls since they implemented rate limit. Alternative to the simpler registry V2 (https://hub.docker.com/_/registry). Was a headache to deploy just because of how the helm chart is made, I ended up rewriting my own kustomize files.
OpenGist
- GitHub: https://github.com/thomiceli/opengist
- Purpose: Code snippet manager
- Notes: Alternative to GitHub Gists. Straightforward and has login feature.
PyPI
- GitHub: https://github.com/pypiserver/pypiserver
- Purpose: Private Python package index
- Notes: For hosting my private Python packages
Verdaccio
- GitHub: https://github.com/verdaccio/verdaccio
- Purpose: Private NPM registry
- Notes: For hosting internal JavaScript packages although I don't have any. It's just there.
Lifestyle
Tandoor
- GitHub: https://github.com/TandoorRecipes/recipes
- Purpose: Recipe management system
- Notes: Django based. Parses websites from a simple link extracting the recipe as well as photos. Then recipes can be scaled per person, etc. which is cool.
Media Management
Bazarr
- GitHub: https://github.com/morpheus65535/bazarr
- Purpose: Subtitle management for Sonarr/Radarr
- Notes: In an ideal world it would automatically download missing subtitles in the languages I have set up. In reality it fails and crashes most of the time. I like the concept but it has never worked reliably for me.
Calibre
- GitHub: https://github.com/kovidgoyal/calibre
- Purpose: E-book management server
- Notes: Runs Calibre server and has a retro webUI using https://guacamole.apache.org/. I used to use https://github.com/janeczku/calibre-web alongside with it.
Invidious
- GitHub: https://github.com/iv-org/invidious
- Purpose: Alternative YouTube frontend
- Notes: I mostly use https://newpipe.net/ on my phone and was using https://freetubeapp.io/ on my computer but it is way too sluggish. I deployed Invidious and it's a bit slow or has bugs but it works most of the time. Also the only software I know coded in Crystal.
Jellyfin
- GitHub: https://github.com/jellyfin/jellyfin
- Purpose: Media streaming server
- Notes: Fork of Emby, open source alternative to Plex, etc. It had issues in the past with some memory leaks or cpu going crazy, etc. but it works pretty stable most of the time. Sometimes requires fiddling with metadata to get it to recognize properly some shows. The webui works better than the apps on Android at least. I use https://github.com/jarnedemeulemeester/findroid to download episodes offline when I commute. Also has a feature to sync watch content with people that are distant.
Kavita
- GitHub: https://github.com/Kareadita/Kavita
- Purpose: Digital book and comic server
- Notes: Great for manga and comics collection. Can be used as a server for Mihon (https://mihon.app)
Lidarr
- GitHub: https://github.com/Lidarr
- Purpose: Music collection manager
- Notes: Automated music library organization in the *arr family. I used to use it with https://github.com/RandomNinjaAtk/docker-lidarr-extended but said repo was abandoned to become a bash script that downloads other scripts at runtime so I noped out.
Lunasea
- GitHub: https://github.com/JagandeepBrar/LunaSea
- Purpose: Controller as in remote controller for *arr apps
- Notes: I am just discovering there is a self hostable web UI but I have been using the Android application https://docs.lunasea.app/releases/android for the past 2 years. A nice paid alternative is https://www.nzb360.com/
Navidrome
- GitHub: https://github.com/navidrome/navidrome
- Purpose: Music streaming server
- Notes: Implements Subsonic API, functional WebUI, used as server for dSub (https://f-droid.org/packages/github.daneren2005.dsub/) for offline listening
Owncast
- GitHub: https://github.com/owncast/owncast
- Purpose: Self-hosted live streaming
- Notes: Alternative to Twitch. Slightly buggy but I could get it to work which is quite good for a project still in v0.2.1 when tested.
Prowlarr
- GitHub: https://github.com/Prowlarr/Prowlarr
- Purpose: Indexer management
- Notes: Central management for all *arr apps. Basically define torrent and usenet index sources here and radarr, sonarr, lidarr, readarr, etc. all get them synchronized.
Qbittorrent
- GitHub: https://github.com/qbittorrent/qBittorrent/
- Purpose: Torrent client
- Notes: Used for automated downloads with *arr apps using category tags. The retro web UI still works to add magnetic links manually. I tested transmission too. Both work fine I just ended up using this one more.
Radarr
- GitHub: https://github.com/Radarr/Radarr
- Purpose: movie collection manager.
- Notes: I use Sonarr more but it works just as well.
Readarr
- GitHub: https://github.com/Readarr/Readarr
- Purpose: eBook collection manager.
- Notes: I don't use it so much but it works in general.
Sabnzbd
- GitHub: https://github.com/sabnzbd/sabnzbd
- Purpose: Usenet downloader
- Notes: Also tested nzbget which was fine. I just prefer the UI here.
Sonarr
- GitHub: https://github.com/Sonarr/Sonarr
- Purpose: TV show management
- Notes: Probably don't need to introduce this one. I use it constantly.
Tidalidarr
- GitHub: https://github.com/DorskFR/tidalidarr
- Purpose: Tidal integration for Lidarr
- Notes: Reads the missing albums from Lidarr and search / download from Tidal then trigger an import in Lidarr. It does not rely on external projects for the Lidarr / Tidal API integration.
Monitoring
Botkube
- GitHub: https://github.com/kubeshop/botkube
- Purpose: Kubernetes monitoring chatbot
- Notes: Sends alerts and cluster info to chat platforms. I use it with mattermost. I don't really rely on it but it's just there if I need to.
Dashy
- GitHub: https://github.com/Lissy93/dashy
- Purpose: Dashboard for homelab services
- Notes: I tried many dashboards: heimdall, homepage, organizrr, etc. I end up using none. This is just the latest I will sooner or later give up on using.
Diun
- GitHub: https://github.com/crazy-max/diun
- Purpose: Docker image update notifier
- Notes: I don't think I really understand if it alerts me of available tags so that I update my deployments or if it alerts me of deployments which have been updated. I don't pay much attention since I use renovabot.
Grafana
- GitHub: https://github.com/grafana/grafana
- Purpose: Metrics visualization and dashboards. Also logs.
- Notes: Usefulness depends on the quality of the dashboards. Tried different tools to collect metrics. Technically also have logs integrated but I do not like the UI. I don't look at it as much as I thought I would.
Grafana-alloy
- GitHub: https://github.com/grafana/alloy
- Purpose: Collects metrics
- Notes: Successor to grafana agent which allowed for cool rewriting of the metrics collection configuration file from prometheus to River to Alloy format. It uses more resources than it should with 1.3G per node which is 13 times more than vector or fluent-bit...
Grafana-loki
- GitHub: https://github.com/grafana/loki
- Purpose: Log aggregation system
- Notes: It works and can be used as a datasource for Grafana. Technically logs can be viewed in Grafana but I do not like the querying system or the UI and end up not using it. Graylog had a better UI but no color coding per log level.
Kube-state-metrics
- GitHub: https://github.com/kubernetes/kube-state-metrics
- Purpose: Kubernetes cluster metrics
- Notes: It does what it says ¯\_(ツ)_/¯
Vector
- GitHub: https://github.com/vectordotdev/vector
- Purpose: Log and metrics pipeline
- Notes: It's DataDog's open source metrics and logs collection tool written in Rust. If only they open sourced their log UI too.
Victoria-logs
- GitHub:
https://github.com/VictoriaMetrics/VictoriaMetrics
https://github.com/VictoriaMetrics/victorialogs-datasource - Purpose: Log storage system
- Notes: Long-term log storage solution, similar to Loki
Victoria Metrics
- GitHub: https://github.com/VictoriaMetrics/VictoriaMetrics
- Purpose: Time series database and Prometheus replacement
- Notes: Setup and forgot about it. It just works. Used as a datasource for Grafana.
Network
MetalLB
- GitHub: https://github.com/metallb/metallb
- Purpose: Load balancer implementation
- Notes: Can't say I understand everything that it can do but for my usage: it creates a floating IP which then becomes accessible to all machines in the CIDR and is able to reach any node that has a metallb listener deployed. What this allows to do is to use services of type
LoadBalancersuch as in Nginx ingress controller.
Kubernetes Nginx Ingress Controller
- GitHub: https://github.com/kubernetes/ingress-nginx
- Purpose: Ingress controller
- Notes: The free one by kubernetes. There are different proxy vendors and many seem quite good. k3s ships with traefik by default but I just install this one and never had to think about it.
PiHole
- GitHub: https://github.com/pi-hole/pi-hole
- Purpose: Network-wide ad blocking / DNS
- Notes: I used it for ~2 years and now use Adguard Home directly on my openwrt custom router / firewall. I still have it deployed though.
Office & Productivity
Bookstack
- GitHub: https://github.com/BookStackApp/BookStack
- Purpose: Wiki platform
- Notes: Documentation and knowledge base. I don't use it so much but I still have it deployed for now.
Collabora
- GitHub: https://github.com/CollaboraOnline/online
- Purpose: Online office suite
- Notes: Integration with Nextcloud and Paperless. It parses office documents and allows for in-browser viewing / editing.
Email: Dovecot / MbSync / Roundcube
- GitHub: https://github.com/roundcube/roundcubemail
+ custom Dockerfiles to installdovecot-imapdandisync
on a Debian base - Purpose: Email backup server
- Notes: Cronjobs are running mbsync which syncs my different gmail accounts to a dovecot pod. Then using roundcube for a webUI to view backed up emails. It is also possible to connect directly using a client like Thunderbird.
ESPHome
- GitHub: https://github.com/esphome/esphome
- Purpose: ESP32/ESP8266 firmware management
- Notes: I use it for an ESP32 bluetooth bridge which I found more stable than Home Assistant's integrated Bluetooth for some devices.
Filebrowser
- GitHub: https://github.com/filebrowser/filebrowser
- Purpose: Web file manager
- Notes: Simple file access interface. I only use it to access my NFS share through a webUI.
Fileflows
- GitHub: https://github.com/revenz/FileFlows
- Purpose: File processing automation
- Notes: For now I only have one Flow to convert all my h264 videos to h265. I initially wanted to convert everything to AV1 but the codec integration had a bug with the quality settings range so I went ahead with h265. It saved me around 5TB on a 14TB library.
Firefly III
- GitHub: https://github.com/firefly-iii/firefly-iii
- Purpose: Personal finance manager
- Notes: Don't use it so much anymore due to the lack of banking APIs. Otherwise was working fine for basic reconciliation and budgeting.
Frigate
- GitHub: https://github.com/blakeblackshear/frigate
- Purpose: NVR with object detection
- Notes: Had stability issues with it (disk getting filled by logs or temp files, etc.). v0.15 introduced a nice UI revamp. It also has the benefit of supporting Google USB accelerator Coral https://coral.ai/products/accelerator which I had laying around and speeds up inference. I do not connect it directly to my cameras and instead use a separate go2rtc deployment so that the load is separated and due to aforementioned stability issues. It is possible to setup notifications in Home Assistant that arrive directly as Android notifications with picture and video.
Ghost
- GitHub: https://github.com/TryGhost/Ghost
- Purpose: Blogging platform
- Notes: This very blog. It's simple and just works.
Go2rtc
- GitHub: https://github.com/AlexxIT/go2rtc
- Purpose: RTSP/WebRTC streaming
- Notes: Connects to my webcams to lower the load on them. Then serves the camera feed to Home Assistant and to Frigate separately.
Home Assistant
- GitHub: https://github.com/home-assistant/core
- Purpose: Home automation platform
- Notes: I don't use as many features as I should / could. I use it for temperature viewing / controlling, to control Hue lights automatically / remotely without a Hue account, Live camera feed, some switchbot bots and meter plugs. I don't have fancy dashboards.
Matter python server
- GitHub: https://github.com/home-assistant-libs/python-matter-server/tree/main
- Purpose: Matter / Thread server
- Notes: IoT device communication
Mosquitto
- GitHub: https://github.com/eclipse-mosquitto/mosquitto
- Purpose: MQTT broker
- Notes: IoT device communication such as for esphome.
Nextcloud
- GitHub: https://github.com/nextcloud/server
- Purpose: File sync and collaboration platform
- Notes: Used for file sharing, for Nextcloud Talk occasionally. The Web UI is a bit slow though.
NTP
- GitHub: https://github.com/cturra/docker-ntp
- Purpose: Network time server
- Notes: I use it for IoT devices on an otherwise offline LAN.
Odoo
- GitHub: https://github.com/odoo/odoo
- Purpose: Business management suite
- Notes: I don't use it but it seems useful so I keep it around.
Owntracks
- GitHub:
https://github.com/owntracks/recorder
https://github.com/owntracks/frontend - Purpose: Location tracking
- Notes: Deployed both frontend and recorder. The recorded is compatible with different Android apps such as owntracks' and nextcloud phonetrack too. The webUI is a bit slow and lacks features but it is there. It is far from a perfect replacement for Google Timeline. Also tried https://github.com/Freika/dawarich but found it not mature enough.
Paperless-ngx
- GitHub: https://github.com/paperless-ngx/paperless-ngx
- Purpose: Document management system
- Notes: Downloads and parses attachments from my mailboxes, I sometimes upload scans to it as well. It generally works.
Rustpad
- GitHub: https://github.com/ekzhang/rustpad
- Purpose: Collaborative text editor
- Notes: I use it to share ephemeral (24h) snippets, often between my own machines. Can be used anonymously. Real time editing with multiple editors. File based.
Vaultwarden
- GitHub: https://github.com/dani-garcia/vaultwarden
- Purpose: Password manager server
- Notes: I use it every day. It's good and stable. Client apps are just the normal Bitwarden apps.
Youtrack
- Website: https://www.jetbrains.com/help/youtrack/server/youtrack-docker-installation.html
- Purpose: Project management tool
- Notes: Use it for my personal projects, mostly issues / agile board
Photos
Immich
- GitHub: https://github.com/immich-app/immich
- Purpose: Photo backup and management. Google Photos alternative.
- Notes: Tried it many times in its early versions but was not mature enough to switch. In the meantime tried everything that I could find: photoprism, photostructure, librephotos, piwigo, etc. Then end of 2024, tried again and it worked out of the box with external libraries, reverse proxy, multiple workers, gpu acceleration, albums, multiple users, etc. It is now the best open source photos solution.
SPIS
- GitHub: https://github.com/gbbirkisson/spis
- Purpose: Photo indexing system / timeline
- Notes: In my quest to find a good open source photos solution I stumbled upon this rust project. I still find it excellent for its purpose: throw a photo folder and it will scan everything and create a timeline of it. And it does so very quickly: indexing the photos takes around 5min for 120k or ~700GB photos for me.
Security
Authelia
- GitHub: https://github.com/authelia/authelia
- Purpose: Authentication and SSO solution
- Notes: I use it to add a login screen to apps that do not have one. This allows me to have an external URL pointing directly to internal services such as Longhorn's dashboard.
Bank-vaults
- GitHub: https://github.com/bank-vaults/bank-vaults
- Purpose: Vault operator
- Notes: I use its mutating webhook which reads from vault and injects secrets to each pod based on role annotations and service accounts. It is also possible to use it to deploy vault, unseal it, etc. but I have not experimented with this.
Cert-manager
- GitHub: https://github.com/cert-manager/cert-manager
- Purpose: Certificate management
- Notes: Automates SSL/TLS certificates, used with Let's Encrypt as an issuer.
Clean-dead-pods (custom script)
- Purpose: Pod cleanup utility
- Notes: Kubernetes seems to keep around pods in various broken states and when used with strategy recreate which does not allow multiple similar pods (especially for volume mounting). I am sure there is a better way such as Eviction Policies but I have not researched enough.
LLDAP
- GitHub: https://github.com/lldap/lldap
- Purpose: Lightweight LDAP server
- Notes: Used along with Authelia. It is minimal and works.
Renovate
- GitHub: https://github.com/renovatebot/renovate
- Purpose: Dependency update automation
- Notes: Run as a cronjob, it opens PRs to update packages and tags. Sometimes has issues with wrong tags so I manually approve each PR.
- Post: https://ghost.dorsk.dev/renovate/
Unseal (custom script)
- Purpose: Vault auto-unseal in a secure way
- Notes: Handles Vault initialization / unsealing when the pods restart. I tested with vault high availability but I find a single vault pod along with an unseal script to be more performant / reliable. Bank-vault has an unseal feature too for the vault server it deploys.
Hashicorp Vault
- GitHub: https://github.com/hashicorp/vault
- Purpose: Secrets management
- Notes: Configured via terraform and integrated in kubernetes via bank-vaults. This removes the need to have
secret.yamlfiles in the repository as well as base64 encoded secrets in the cluster. Secrets are injected in the environment of the main process when pods start.
Social
Answer
- GitHub: https://github.com/apache/answer
- Purpose: Q&A platform
- Notes: Project that got integrated in the Apache foundation. I don't use it so much but it is well made enough that I don't want to remove it.
Libreddit
- GitHub: https://github.com/libreddit/libreddit
- Purpose: Alternative Reddit frontend written in Rust
- Notes: I would probably use this more if I used a tool to replace all reddit links with my personal instance. It works well when I need to use it.
Mattermost
- GitHub: https://github.com/mattermost/mattermost
- Purpose: Slack like chat platform
- Notes: I use it for bots, notifications, webhooks, etc. It supports push notifications on Android.
Monica
- GitHub: https://github.com/monicahq/monica
- Purpose: Personal CRM
- Notes: I forget too many things so I always wanted a system like this where I can save some facts about people for my own usage. Contrary to Facebook like networks, this requires inputting all the info so it does require some work. It could probably be extended through its API to automatically ingest info from emails, chat logs, etc. but I keep it simple.
Signal
- GitHub: https://github.com/bbernhard/signal-cli-rest-api
- Purpose: Signal messenger proxy
- Notes: I use it to send messages on Signal via terminal
Slackdump
- GitHub: https://github.com/rusq/slackdump
- Purpose: Slack backup tool
- Notes: Backing up things is a hobby
Storage
Democratic-CSI
- GitHub: https://github.com/democratic-csi/democratic-csi
- Purpose: Storage provisioner
- Notes: CSI driver for TrueNAS. In other words allows to have a storage class that will trigger volume (ZVOL based) creation in TrueNAS via iSCSI. It is stable.
Longhorn
- GitHub: https://github.com/longhorn/longhorn
- Purpose: Distributed block storage
- Notes: Provides persistent storage for stateful applications. Along with the appropriate storage class it allows to answer Kubernetes PVC requests and create a PersistentVolume for it. The UI is clean. Scheduled backup jobs are available. Live volume expansion works. Having multiple replicas ensure resilience. It is on the way to maturity but settings are sometimes confusing and bugs can be pretty annoying (volumes refusing to detach, etc.)
MinIO
- GitHub: https://github.com/minio/minio
- Purpose: S3-compatible object storage
- Notes: Used for backup storage and general object storage. It's the most stable deployment I have experienced in 3 years.
Proxmox
- GitHub: https://www.proxmox.com/en/
- Purpose: Virtualization management
- Notes: Technically not a deployment, but I make use of cert-manager, nginx, etc. to route to proxmox web UI which allows me to manage my cluster from anywhere.
TrueNAS
- GitHub: https://www.truenas.com/truenas-scale/
- Purpose: Storage management
- Notes: Same as above, this is a proxy to the web UI
Velero
- GitHub: https://velero.io/
- Purpose: Kubernetes backup
- Notes: Cluster-level backup solution. It backs up yaml resources, secrets, etc. to S3 and allows for transfer cluster to cluster, etc.
System
Upgrade-controller
- GitHub: https://docs.k3s.io/upgrades/automated
- Purpose: Automated upgrades
- Notes: Manages k3s version updates. It's almost too easy just apply a yaml and it handles everything.