Tomas DvorakandDevin 430370dbc7 docs: add app screenshots, default compose to published :latest images
- docker-compose.yml now references ghcr.io/dvorinka/containr-*:latest with
  pull_policy: missing, so `docker compose up` pulls published images by
  default; CONTAINR_VERSION pins a release tag, build config retained for
  source builds
- install.sh pulls instead of always building (CONTAINR_BUILD=1 or a failed
  pull falls back to a source build)
- README gains a Screenshots section (dashboard, canvas, service detail,
  databases) captured from a live local stack, plus updated install docs

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-21 16:20:16 +02:00
2026-04-10 12:02:36 +02:00
2026-04-10 12:02:36 +02:00
2026-04-10 12:02:36 +02:00
2026-04-10 12:02:36 +02:00
2026-04-10 12:02:36 +02:00

Containr

Containr

Self-hosted platform for deploying and managing containerized services. Railway-style project canvases on your own hardware.

Quick Start • Screenshots • Features • Architecture • Guides • Contributing

CI License: MIT

What is Containr?

Containr is an open-source control plane for Docker. It gives you a project-first deployment workflow — create a project, drop services onto a visual canvas, wire them together with environment variables, and deploy — without Kubernetes, without a cloud bill, and without giving up control of your infrastructure.

The UI is inspired by Railway's project canvas: services appear as nodes, connections are inferred automatically, and everything — logs, metrics, deployments, builds — is one click away.

Screenshots

Projects dashboard Project canvas
Projects dashboard with host telemetry Visual service canvas with two services
Service detail Managed databases
Service view with metrics, logs and config tabs Managed database list showing a running PostgreSQL

Features

  • Project canvas — visual service topology with groups, drag/drop layout, and auto-inferred connections
  • Deployments — Docker-based deploys with history, logs, and rollback
  • Git integration — deploy from GitHub, GitLab, Bitbucket, or Gitea; repository and branch pickers, webhooks, GitHub App support
  • Builds — build pipeline with live status over WebSocket
  • Service metrics — real CPU/memory/network telemetry from Docker stats
  • Templates — one-click service catalog (databases, apps, tooling)
  • Databases — managed database services with backup/restore actions
  • Cron jobs — scheduled jobs with execution history
  • Preview environments — per-project preview deploys
  • Variables & environments — per-service env vars, production/preview/dev
  • Node monitoring — host CPU, memory, disk, and network telemetry
  • Security — audit logs, vulnerability scans, compliance reports
  • Auth — Better Auth sessions (email + OAuth), per-user resource scoping
  • Self-hosted networking — Traefik reverse proxy, optional Cloudflare Tunnel for exposure without port forwarding

Architecture

app/frontend/   React 19 + Vite + TypeScript + Tailwind + React Flow
app/backend/    Go API (Gin) · PostgreSQL · Redis · Docker SDK · Better Auth sidecar
infra/          Self-hosted compose: Traefik + Cloudflare Tunnel
docs/           Guides, OpenAPI spec, design documents
Component Default port
Frontend 3000 (prod) / 5173 (dev)
API 8082
Auth sidecar 3001
PostgreSQL 5432
Redis 6379

Quick Start

Requires Docker with the Compose plugin, openssl, and curl.

git clone https://github.com/Dvorinka/Containr.git
cd Containr
./install.sh

The script creates .env from .env.example, fills in all required secrets with random values, pulls the published :latest images from GHCR, and starts the stack. It keeps an existing .env untouched, so it is safe to re-run. Set CONTAINR_BUILD=1 to build from source instead, or CONTAINR_VERSION in .env to pin a release tag (e.g. 0.1.1).

Frontend at http://localhost:3000, API at http://localhost:8082.

Docker Compose (manual)

cp .env.example .env   # fill in secrets
docker compose up -d   # pulls ghcr.io/dvorinka/containr-*:latest

Compose pulls the published images by default; run docker compose up -d --build to build from source. Host ports can be remapped in .env (HTTP_PORT, API_PORT, POSTGRES_PORT, REDIS_PORT) if the defaults collide with other services.

Local development

docker compose up -d postgres redis   # data services only
cd app/backend && go run ./cmd/server # API + embedded auth sidecar
cd app/frontend && npm install && npm run dev

Frontend dev server at http://localhost:5173.

Self-hosted with Traefik + Cloudflare Tunnel

See infra/docker-compose.yml and docs/guides/CLOUDFLARE_SETUP.md.

Configuration

All configuration is via environment variables — see .env.example. Required for production: JWT_SECRET, BETTER_AUTH_SECRET, BETTER_AUTH_INTERNAL_TOKEN, database and Redis credentials.

Never commit .env or .env.prod. Both are gitignored; if a secret was ever committed, rotate it.

Documentation

Contributing

See CONTRIBUTING.md. Issues and PRs welcome.

Security

See SECURITY.md. Report vulnerabilities privately — do not open public issues.

License

MIT © 2026 Tomas Dvorak

S
Description
No description provided
Readme MIT
44 MiB
0 Stars 1 Watchers 0 Forks
Languages
Go 46.4%
TypeScript 44.2%
PLpgSQL 4.2%
CSS 1.9%
Shell 1.7%
Other 1.4%