Tomas DvorakandDevin a0141ae552 feat: standalone curl-pipe installer, no clone required
- install.sh works outside a checkout: installs into CONTAINR_DIR
  (default ./containr), downloads docker-compose.yml + .env.example from
  the repo, generates secrets, pulls published images
- CONTAINR_REF selects the git ref for downloads; CONTAINR_BUILD=1 or a
  failed pull fetches the source tarball and builds locally
- env-var overrides (HTTP_PORT/API_PORT/...) are persisted into .env;
  health-wait ports resolve env -> .env -> defaults
- drop fixed `name: containr` from root compose so installs in different
  directories get distinct project names
- README: curl one-liner is the primary install path

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

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-21 16:43:42 +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. One-liner, no clone needed:

curl -fsSL https://raw.githubusercontent.com/Dvorinka/Containr/main/install.sh | bash

Installs into ./containr, generates secrets, pulls the published :latest images from GHCR, and starts the stack. Non-interactive — configure with env vars:

curl -fsSL https://raw.githubusercontent.com/Dvorinka/Containr/main/install.sh | \
  HTTP_PORT=8080 API_PORT=8082 CONTAINR_DIR=/opt/containr bash

CONTAINR_VERSION pins a release tag (e.g. 0.1.1), CONTAINR_REF selects the git ref for downloaded files, and CONTAINR_BUILD=1 skips the registry and builds from source — the installer downloads the source tarball when it needs to build. An existing .env is never overwritten, so it is safe to re-run.

From a git checkout, ./install.sh does the same thing in place.

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%