Self Hosting Guide
A guide for getting started with Self Hosting devices including software and hardware that will make you a better and more efficient Self Hosting.
Note: You can easily convert this markdown file to a PDF in VSCode using this handy extension Markdown PDF.
Note 2: This guide will constantly be updated with new info as becomes available and please feel to make an issue if you think something should be added.
Table of Contents
-
Getting Started with Self-Hosting
- Tools for Self-Hosting
- Containers
- CI/CD
- Development
- Web servers
- Large language models (LLMs)
- ChatGPT Chatbots
- Automation
- Configuration Management
- Cloud Storage
- Cloud
- Databases
- Remote Access
- Virtualization
- Password Management
- SSH
- VPN
- LDAP(Lightweight Directory Access Protocol)
- Log Management
- DNS
- Network Tools
- Service Discovery
- Security
- Troubleshooting
- Monitoring
- Dashboards
- Analytics
- Search
- Notifications
- RSS
- Websites/Blogs
- Social
- Nostr
- iMessage
- Communications
- Business Management
- Collaboration & Synchronization
- Encryption
- Backups
- Snapshots Management/System Recovery
- Archiving
- Home Server
- Media Server
- Smart Home Automation
- Voice Assistants
- Video Surveillance
- Text-To-Speech Synthesis (TTS)
- Video and Audio Processing
- Podcasting
- Audiobooks
- Health
- Gardening
- Maps
- Bookmarks
- Photos
- Pastebins
- Note-Taking
- Time Monitoring
- Wikis
- Gaming
- Foundations/Projects
- System Hardware
- Operating Systems
- Storage
- File systems
- Books
- Podcasts
- YouTube Channels
- Tutorials & Resources
- Useful Subreddits to Follow
- Tools for Self-Hosting
-
Getting Started with Self-Hosting
Self-Hosting is the practice of locally hosting(on premises & private web servers) and managing software applications by a person or organization instead of monthly subscriptions from Software as a service (SaaS) providers.
Most self-hosted software can be installed using Docker, a packaging system which allows software to bundle their configuration and dependencies and isolate them from your operating system. Software using docker can be installed using the command line or via graphical interfaces such as Portainer. Software is installed with Docker by downloading an image file containing the application, then creating a copy that sets up its own dependencies and configuration within what is called a container. Without containers you would often need to install different versions of the same programming languages or tools to satisfy the dependencies for the software you want to use which can get complicated.
Tools for Self-Hosting
Containers
Container is a standard unit of software that packages up code and all its dependencies(including CPU, memory, file storage, and network connections) so the application runs quickly and reliably from one computing environment to another.
Container Image is a lightweight, standalone, executable package of software that includes everything needed to run an application such as the code, runtime, system tools, system libraries, and settings.
Best places to get Container Images:
Docker Compose is a tool that was developed to help define and share multi-container applications. With Compose, we can create a YAML file to define the services and with a single command, can spin everything up or tear it all down.
Docker Include is a Compose application can declare dependency on another Compose application. This is useful if you want to reuse other Compose files. Also, if you need to factor out parts of your application model into separate Compose files so they can be managed separately or shared with others.
Kompose is a conversion tool for Docker Compose to container orchestrators such as Kubernetes or OpenShift.
SwarmKit is a toolkit for orchestrating distributed systems at any scale. It includes primitives for node discovery, raft-based consensus, task scheduling and more.
Containerd is a daemon that manages the complete container lifecycle of its host system, from image transfer and storage to container execution and supervision to low-level storage to network attachments and beyond. It is available for Linux and Windows.
ContainersSSH is an SSH Server that Launches Containers in Kubernetes and Docker on demand.
Podman is a daemonless, open source, Linux native tool designed to make it easy to find, run, build, share and deploy applications using Open Containers Initiative (OCI) Containers and Container Images. Podman provides a command line interface (CLI) familiar to anyone who has used the Docker Container Engine.
Lima is a tool that launches Linux virtual machines with automatic file sharing and port forwarding (similar to WSL2), and containerd. It's a great free and open-source alternative for Docker Desktop.
Colima is a container runtimes on macOS (and Linux) with minimal setup.
Portainer Community Edition is a lightweight service delivery platform for containerized applications that can be used to manage Docker, Swarm, Kubernetes and ACI environments. It is designed to be as simple to deploy as it is to use.
Yacht is a container management UI with a focus on templates and 1-click deployments.
Kitematic is a simple application for managing Docker containers on Mac, Linux and Windows letting you control your app containers from a graphical user interface (GUI).
HashiCorp Nomad is a simple and flexible scheduler and orchestrator to deploy and manage containers and non-containerized applications across on-premises and clouds at scale.
Open Container Initiative is an open governance structure for the express purpose of creating open industry standards around container formats and runtimes.
OpenNebula is an open source platform delivering a simple but