Independent services
Each application owns its Compose file and documentation. A change to one service does not require bringing every other service down with it.
Explicit. Repeatable.
Easy to understand.
A small Linux server running independently managed services. Docker Compose makes each service clear; Caddy gives them one dependable way in.
The point was not to add another management layer. It was to understand and operate the system underneath.
The server runs Arch Linux with Docker and Docker Compose. Each application sits in its own directory and Compose project, so it can be started, updated, backed up, or troubleshot without affecting the rest.
That tradeoff keeps the environment small enough to inspect, but structured enough to grow one service at a time.
Small conventions that make a server
less mysterious to operate.
Each application owns its Compose file and documentation. A change to one service does not require bringing every other service down with it.
Caddy routes requests to services through a shared Docker network, keeping internal service ports private where direct access is unnecessary.
Infrastructure configuration is version-controlled with Git, while secrets remain out of the repository and service-specific setup stays documented beside each service.
Services that need HTTP access join an external Docker network. Caddy can reach them by Compose service name, so containers communicate directly rather than looping back through the server’s LAN address.
n8n handles recurring operational work such as backups. The value is not just a scheduled job—it is an executable workflow that can be inspected and improved over time.
Each service is meant to carry enough local documentation to be operated later: required environment values, volumes, networks, proxy routes, update steps, and troubleshooting notes.
This page describes the design and operating conventions behind the infrastructure. It intentionally does not expose service credentials, internal addresses, or operational secrets.