← Back to projects

Project

Home server operations

I run GitLab, YouTrack, Zulip and other services on my home server with Docker Compose. It is an environment for keeping development and daily communication going without handing them to outside services. The configuration is kept in Git, and changes are checked in CI.

Tech:

  • Docker Compose
  • GitLab
  • YouTrack
  • Linux

What runs on it

GitLab
Repositories and CI. Configuration checks and failure notifications also run here.
YouTrack
Tickets and a knowledge base for specs and other documents. The spec and tickets of this site are managed here too.
Zulip
Chat and notifications. It receives CI failures and server alerts.

Architecture

  1. Entrance

    • Reverse proxyTakes connections from outside and routes them to each service
  2. Services

    • GitLab
    • YouTrack
    • Zulip
  3. Operations

    • MonitoringReports problems to Zulip
    • BackupsRegular backups and restore drills
    • CIChecks the configuration and reports failures
Home server architecture (requests flow from top to bottom)

Tech stack

Containers
Docker Compose. Each service has its own compose file, kept in Git.
Entrance
A reverse proxy takes connections from outside.
Scheduled jobs
Backups and deployments run automatically on a schedule.
CI
GitLab CI with GitLab Runner. The secret scan and the YAML syntax check both run from Docker images.
Alerts and monitoring
Zulip notifications and server monitoring are built with shell scripts.
Automation
Pulling in configuration, backups and restore drills are shell scripts.

Managing the configuration

The files on the server are the source of truth; the repository is a copy for history and checks. When I change Compose on the server, I pull it in with a sync script, review the diff and commit.

Secret scan
CI checks that no passwords or tokens slip in.
Syntax check
CI checks the syntax of the Compose YAML.
Failure alerts
When a pipeline fails, a notification arrives in Zulip.
What stays out
Secrets and data are not kept in the repository. Compose reads them through variables and file references.

What I keep in mind

I take backups and also rehearse restores, so restore drills are part of the routine. A monitoring setup checks that each service is up.