When you want to deploy a service on your own server, you can of course look up options via Google or ChatGPT. But searching has a precondition: you first have to know the service exists, and know what name to search for.
This article isn’t an installation tutorial for an All-in-One setup — it’s a service map. I’ll briefly introduce, by purpose, the services I use or manage myself, including GitLab, Immich, Transmission, Jellyfin, Nextcloud, and others. Readers can get acquainted with them first, then dig deeper into whichever direction interests them.
1. Development and Content Publishing
1.1 GitLab: code hosting and continuous integration
GitLab is a complete DevOps platform. Besides hosting Git repositories, it also provides issues, merge requests, CI/CD, a package registry, and user permission management.
In my All-in-One, GitLab is the center of code and automation workflows. The website, service configuration, and deployment scripts can all be reviewed through branches and merge requests, then have testing, building, or deployment completed by CI/CD. It’s a good fit for anyone who wants to keep code and automation under their own control.
1.2 BookOrbit: personal library and reading management
BookOrbit manages ebooks and reading-related data. It’s more than just a file directory — it provides search, metadata, and application-layer management for books, using PostgreSQL and pgvector for storage and vector capability.
If ebooks are scattered across multiple directories, or you’d like to keep adding search, recommendation, and AI features around your library, a dedicated application like this is more convenient than browsing the filesystem directly.
1.3 Overleaf: online LaTeX writing
Overleaf is an online LaTeX editor, well suited for writing papers, reports, and technical documentation with complex formulas. The browser provides the editing interface, while the server handles storing projects and running LaTeX compilation.
A self-hosted deployment suits users who want control over their documentation data, need internal-network collaboration, or want to build a stable LaTeX build environment. It’s made up of the application plus components like MongoDB and Redis, so it needs more resources and security management than a plain text editor.
2. Photos, Files, and Personal Data
2.1 Immich: photo and video management
Immich is a photo and video management service built for self-hosting, often used as a phone photo-album backup and browsing tool. It provides a timeline, albums, search, face recognition, maps, and automatic backup from mobile devices.
My deployment also includes PostgreSQL/VectorChord, Valkey, and a CUDA-based machine learning service. Immich suits anyone who wants to keep the original photos while still getting a user experience close to a modern cloud photo album — but the photo library and database both need a solid backup plan.
2.2 Nextcloud: file sync and collaboration
Nextcloud can be thought of as a self-hosted file cloud. It supports browser access, desktop and mobile sync, file sharing, version history, and can be extended with apps for calendar, contacts, and collaboration features.
It’s well suited for syncing documents across multiple devices, or giving family members a unified file entry point. Compared to an ordinary network share, Nextcloud focuses more on cross-device sync and web collaboration, at the cost of maintaining a database, cache, and background jobs.
Nextcloud also provides a standard WebDAV interface, which can act as a file-sync endpoint for other apps and devices. For example, Obsidian can sync a knowledge base across devices via a WebDAV sync plugin, and a Sony Digital Paper (DPT) can sync PDFs and annotated documents over WebDAV too. This way, both kinds of tools can keep using their existing workflow, while the files are all stored on your own server.
2.3 Joplin Server: note-sync backend
Joplin is a Markdown-friendly note-taking app, and Joplin Server provides a self-hosted sync service for its desktop and mobile clients.
If you’re already using Joplin to write notes and don’t want to depend on a third-party sync platform, this lets you centrally store notes, attachments, and sync state. Its role is clear: it handles syncing between Joplin clients, rather than replacing a full online documentation platform.
2.4 Vaultwarden: lightweight password management
Vaultwarden is a self-hosted password-management server compatible with the Bitwarden client. Browser extensions and mobile apps can keep using the familiar Bitwarden ecosystem, while the server side runs on your own infrastructure.
It’s a great fit for storing passwords, keys, and secure notes for an individual or family. That said, self-hosting a password manager doesn’t automatically make it more secure — access control, HTTPS, updates, and offline backups all need to be handled carefully.
3. Media and Downloads
3.1 Transmission: a lightweight BitTorrent client
Transmission is a low-resource-footprint BitTorrent client. It can run continuously on a server, letting you add torrents, check progress, set speed limits, and manage download directories through a web UI, without needing to leave a personal computer powered on all the time.
It’s well suited for handling long-running download tasks. The web management interface can be accessed over HTTPS, while peer traffic uses separate TCP and UDP ports — the two kinds of traffic should have separate network and security rules.
3.2 Jellyfin: a personal media center
Jellyfin organizes and plays local media such as movies, TV shows, and music. It reads media directories, fetches metadata, and provides a unified media-library interface to TVs, browsers, and mobile devices.
It’s a common open-source alternative to Plex, well suited for anyone who wants to control their own media files and playback service. Transmission handles downloading, and Jellyfin handles presenting already-organized content; the two can use adjacent data flows without being tied into a single inseparable system.
4. Storage and Communication
4.1 Garage: S3-compatible object storage
Garage is S3-compatible object storage designed for self-hosted and distributed environments. Applications can use the standard S3 API to store attachments, backups, and other objects without depending on public-cloud object storage.
My All-in-One uses single-node Garage, mainly to get a unified object-storage interface — it doesn’t mean high availability or data redundancy has been achieved. Data on a single node still needs backups, and the management interface should only be exposed on a trusted network.
4.2 Stalwart Mail Server: a self-hosted mail system
Stalwart Mail Server is a modern mail server covering protocols like SMTP, IMAP, and JMAP, usable for building your own mailbox service.
Mail service depends much more heavily on public DNS, TLS, reverse resolution, port reachability, and anti-spam reputation than a typical web application, so it’s managed as an independent service. Knowing about this project helps with understanding self-hosted mail options, but dedicated planning is still needed before actually deploying it publicly.
4.3 Certbot: obtaining and renewing local HTTPS certificates
Certbot is an automation tool for obtaining and renewing Let’s Encrypt certificates. In my All-in-One, it verifies domain ownership through Cloudflare DNS, so no HTTP port needs to be opened just for certificate issuance.
The issued certificate and private key are stored locally, mounted read-only by Nginx and provided to different domains. Once renewal succeeds, reloading Nginx lets every service keep using a browser-trusted HTTPS certificate. “Local certificate” here means the certificate file is stored and managed locally — it is not a self-signed certificate.
5. Monitoring and Logging
5.1 Prometheus: collecting and querying metrics
Prometheus periodically collects timestamped metrics — such as CPU, memory, disk space, network traffic, container resources, and application-internal state — and provides a query language for analyzing this data.
My Prometheus aggregates metrics from the host, containers, and applications like Immich. It answers “what’s happening in the system right now” — for example, whether disk space is nearly full, whether a container is persistently consuming a lot of memory, or whether a photo-processing job has stalled.
5.2 Grafana: turning metrics and logs into dashboards
Grafana is the visualization and observability entry point. It can connect to data sources like Prometheus and Loki, organize query results into dashboards, and set up alerts further on top of that.
The All-in-One overview shows the status of the whole host and each container, and dedicated pages can also be built for key services like Immich and GitLab. Grafana itself doesn’t collect data — its job is to put scattered observability information somewhere easy to read.
5.3 Loki: centralized log storage
Loki is a storage and query system built for logs, often used together with Grafana. It brings different containers’ logs into a single query entry point, so troubleshooting doesn’t require checking machine by machine and container by container.
Loki in this environment uses filesystem storage for a period’s worth of logs and stays within the private network. It’s a good fit for a small-scale All-in-One: simple in structure, yet providing a much more complete history than casually checking Docker logs.
5.4 node_exporter, cAdvisor, and Alloy: data collectors
The monitoring system also needs agents responsible for collecting data:
- node_exporter collects CPU, memory, disk, filesystem, and network metrics for the whole Linux host;
- cAdvisor collects per-container resource usage;
- Grafana Alloy discovers Docker containers and forwards their logs to Loki.
They usually don’t have elaborate user interfaces, but they’re the starting point of the observability pipeline. What Prometheus, Loki, and Grafana can see depends entirely on what these collectors provide.
6. How These Services Form a Whole
6.1 A unified entry point, running independently
Nginx acts as the unified HTTPS entry point, forwarding requests to each web application based on domain name. Only application containers that need to receive web requests join the shared proxy network; databases, caches, and management endpoints stay on their own internal networks.
Each service is still its own independent Git repository and Docker Compose project. Upgrading Immich doesn’t require restarting GitLab at the same time, and pausing Jellyfin doesn’t affect Nextcloud. The All-in-One repository is only responsible for recording these projects’ versions, networking, and deployment differences in the current environment.
6.2 Configuration, secrets, and data are managed separately
Git stores configuration that can be publicly reviewed and re-run; passwords, certificates, and environment variables are stored outside the repository; photos, documents, databases, and media files go into a persistent storage and backup system.
This boundary matters more than how many applications are installed. Containers and source code can usually be recreated; personal data and secrets can’t be rebuilt out of nothing after a failure.