Open-source infrastructure monitoring and tooling platform for corporate engineering teams https://carrtech-dev.github.io/ct-ops/
  • TypeScript 72.1%
  • Go 15.9%
  • JavaScript 5.9%
  • Shell 4.7%
  • Python 0.7%
  • Other 0.6%
Find a file
simon 622ccb8a0c
All checks were successful
CI Policy / Workflow runner policy (push) Successful in 3s
PR Checks (Docker images) / Ansible API contract (push) Successful in 3s
PR Checks (Docker images) / Ansible API Docker image (push) Successful in 1m29s
PR Checks (Docker images) / Ingest Docker image (push) Successful in 1m41s
SAST / gosec (agent) (push) Successful in 1m7s
SAST / semgrep (push) Successful in 50s
SAST / gosec (ingest) (push) Successful in 1m5s
SAST / crypto-lint (no weak hashes / ciphers) (push) Successful in 4s
SAST / trivy (filesystem) (push) Successful in 12s
SAST / trivy (config / IaC) (push) Successful in 13s
Secret Scan / gitleaks (push) Successful in 10s
PR Checks (Docker images) / Web Docker image (push) Successful in 4m29s
ci(release): publish bundle after app images
Publish the customer bundle automatically after web and ingest image publish workflows complete.

The bundle job derives bundle/v* from .release-please-manifest.json at the component tag, pins WEB_IMAGE_TAG or INGEST_IMAGE_TAG to the just-published image tag, and runs deploy/scripts/publish-forgejo-release.sh so upgrade.sh has a fresh bundle to consume.

Validation:
- bash deploy/scripts/test-forgejo-web-release.sh
- bash deploy/scripts/test-forgejo-bundle-release.sh
- bash deploy/scripts/test-docker-publish-web-workflow.sh
- bash deploy/scripts/test-docker-publish-ingest-workflow.sh
- ruby YAML parse check for changed workflows
- PR checks green on Forgejo
2026-05-20 20:08:59 +00:00
.github ci(release): publish bundle after app images 2026-05-20 20:08:59 +00:00
agent refactor: remove remaining organisation residue (#1411) 2026-05-13 22:38:22 +01:00
apps chore(release): prepare web 0.160.0 2026-05-20 16:57:04 +00:00
consumers feat: initial monorepo commit — Phase 0 foundation 2026-03-28 15:06:44 +00:00
deploy ci(release): publish bundle after app images 2026-05-20 20:08:59 +00:00
docs fix(ci): resolve Forgejo migration conflicts 2026-05-18 13:11:11 +00:00
packages/proto-ts feat: initial monorepo commit — Phase 0 foundation 2026-03-28 15:06:44 +00:00
proto feat(proto): add Docker telemetry contract 2026-05-12 19:27:14 +01:00
.dockerignore feat(web): bake agent binaries into the web image (#508) 2026-04-22 19:35:06 +01:00
.env.example fix(release): publish customer images to Docker Hub 2026-05-18 12:26:09 +00:00
.gitignore feat(terminal): support custom SSH ports 2026-05-16 20:20:03 +00:00
.npmrc feat: initial monorepo commit — Phase 0 foundation 2026-03-28 15:06:44 +00:00
.release-please-manifest.json chore(release): prepare bundle 0.28.7 2026-05-20 18:23:26 +00:00
AGENTS.md docs: sync shared agent instructions (#1405) 2026-05-14 10:45:49 +00:00
CLAUDE.md fix(ci): resolve Forgejo migration conflicts 2026-05-18 13:11:11 +00:00
dev-stack.sh fix(dev): connect agent containers to dev network 2026-05-15 13:24:31 +00:00
docker-compose.dev-stack.yml fix(dev-stack): run web containers as local user 2026-05-14 19:48:04 +00:00
docker-compose.dev.yml chore: rename infrawatch → ct-ops across repo 2026-04-22 11:06:45 +01:00
docker-compose.single.yml fix(release): publish customer images to Docker Hub 2026-05-18 12:26:09 +00:00
go.work feat(checks): add cert_file check type and fix cert JSON display 2026-04-09 07:54:57 +01:00
install.sh fix(upgrade): download bundles from Forgejo 2026-05-19 11:51:27 +00:00
Makefile fix(deploy): include ct-ops in generated TLS cert SANs 2026-05-09 11:08:04 +01:00
ORGANISATION_REMOVAL_TASKS.md refactor: remove remaining organisation residue (#1411) 2026-05-13 22:38:22 +01:00
package.json build(deps-dev): bump the dev-dependencies group across 3 directories with 6 updates (#1262) 2026-05-11 15:22:12 +01:00
PENTEST.md ci(release): prove Forgejo release publishing 2026-05-17 23:35:09 +00:00
pnpm-lock.yaml build(deps): bump tanstack query packages (#1294) 2026-05-11 16:12:12 +01:00
pnpm-workspace.yaml feat: initial monorepo commit — Phase 0 foundation 2026-03-28 15:06:44 +00:00
PROGRESS.md fix(release): publish customer images to Docker Hub 2026-05-18 12:26:09 +00:00
README.md fix(release): install Docker Hub bundle from Forgejo 2026-05-18 12:49:33 +00:00
release-please-config.json fix(bundle): release customer bundle independently 2026-05-12 13:24:34 +01:00
SECURITY.md fix(release): publish customer images to Docker Hub 2026-05-18 12:26:09 +00:00
SECURITY_DISCLOSURE.md ci(release): prove Forgejo release publishing 2026-05-17 23:35:09 +00:00
start.sh fix(release): publish customer images to Docker Hub 2026-05-18 12:26:09 +00:00
TASK.md refactor: remove remaining organisation residue (#1411) 2026-05-13 22:38:22 +01:00
turbo.json feat(docs): add Docusaurus v3 documentation site with GitHub Pages deployment 2026-04-15 21:41:26 +01:00

CT-Ops

Infrastructure monitoring built for engineering teams that can't phone home.

CT-Ops is an open-source monitoring and operations platform designed to run entirely on your own infrastructure — no SaaS dependencies, no telemetry, no licence servers. Deploy it in five minutes on a single Docker host or scale it to a Redpanda-backed HA cluster. Either way, it works in an air-gapped environment out of the box.

Documentation →


Features

  • Agent-based host monitoring — lightweight Go agent, single binary, communicates over gRPC/mTLS on port 9443. Browser traffic terminates TLS on 443 via a bundled nginx container.
  • Real-time metrics — CPU, memory, disk, and network graphs backed by TimescaleDB, visible seconds after agent enrolment.
  • Alerting & notification routing — rule-based alerts with configurable thresholds and multi-channel notification delivery.
  • Certificate lifecycle management — inspect, validate, and track X.509 certificates from URL or file upload. Expiry alerts built in.
  • Network inventory — CIDR-based network management with a live topology graph view.
  • Directory user lookup — query LDAP/Active Directory in real time, no sync job required. Community tier (no paywall).
  • Service account & identity tracking — inventory SSH keys, API tokens, and service identities across your estate.
  • Host groups & tagging — flexible key:value tags on any resource, group-based access control for teams.
  • Terminal workspace — split-pane browser terminal for ad-hoc investigation without leaving the dashboard.
  • Air-gap agent bundles — download a self-contained zip (binary + config + install script) for hosts that can't reach the internet.
  • Instance-scoped RBACsuper_admininstance_adminengineerread_onlyagent role hierarchy.
  • Three deployment profilessingle (one host), standard (Redpanda), ha (clustered) — same codebase, different docker-compose files.

Quick Start

Requirements: Docker, curl, unzip, openssl. Do not run as root.

# Download and unpack the latest release
# The installer verifies the published SHA-256 checksum before unpacking.
curl -fsSL https://forgejo.carrtech.dev/carrtech/ct-ops/raw/branch/main/install.sh | bash

cd ct-ops

# First run creates .env from the example file
./start.sh

# Set your domain and credentials
$EDITOR .env

# Boot the stack
./start.sh

Open https://localhost (or the domain you configured) to complete setup. Your browser will warn about the self-signed certificate on first visit — accept it, or drop a real cert into deploy/tls/server.{crt,key} and restart the nginx container.

To pin a specific version:

curl -fsSL https://forgejo.carrtech.dev/carrtech/ct-ops/raw/branch/main/install.sh \
  | CT_OPS_VERSION=v0.3.0 bash

Enrol your first agent

Once the stack is running, go to Administration → Agents → Enrolment in the UI. Copy the one-line install command or download an offline bundle for air-gapped hosts.


Documentation

Full docs — installation, configuration, architecture, deployment profiles, and feature guides — are at:

https://forgejo.carrtech.dev/carrtech/ct-ops


Deployment Profiles

Profile When to use
docker-compose.single.yml Single host, in-process queue, up to ~50 agents
docker-compose.standard.yml Single Redpanda node, production workloads
docker-compose.ha.yml Redpanda cluster, multiple ingest and web nodes, HAProxy

All profiles produce a self-contained tarball suitable for air-gap deployment via deploy/scripts/airgap-bundle.sh.


Licence

Component Licence
Core platform & web app Apache 2.0
Agent Apache 2.0
Enterprise features (apps/web/enterprise/) Proprietary (source-available)

The agent is always open source — security teams need to audit what runs on their hosts.


Contributing

Issues and PRs are welcome. See CLAUDE.md for architecture decisions and conventions.