From 254d896802328de1e0cf3af5174d5f71617b5afd Mon Sep 17 00:00:00 2001 From: Tomas Dvorak Date: Mon, 21 Sep 2026 16:52:54 +0200 Subject: [PATCH] docs: tighten README - fold "What is" into a single intro paragraph, drop the heading - compress 15 feature bullets into 8 grouped lines - drop the port table (already in docs/guides + onboarding) - collapse quick-start subsections into prose; dev/self-hosted details point to docs/guides and infra/ - fold the Configuration section into two lines; footer links inline 170 -> 100 lines, no information lost that docs/ doesn't already carry. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- README.md | 158 +++++++++++++++--------------------------------------- 1 file changed, 44 insertions(+), 114 deletions(-) diff --git a/README.md b/README.md index a346ebf..40cb476 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,6 @@ Quick Start • Screenshots • Features • - Architecture • Guides • Contributing

@@ -23,17 +22,11 @@ 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. +Containr is an open-source control plane for Docker. Create a project, drop +services onto a visual canvas, wire them together with environment variables, +and deploy — no Kubernetes, no cloud bill. Services appear as nodes with +auto-inferred connections; logs, metrics, builds, and rollbacks are one +click away. ## Screenshots @@ -47,23 +40,41 @@ deployments, builds — is one click away. ## 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 +- **Project canvas** — visual service topology, groups, drag/drop, auto-inferred connections +- **Deployments & builds** — Docker deploys with history, logs, rollback, live build status +- **Git integration** — GitHub, GitLab, Bitbucket, Gitea; webhooks, GitHub App +- **Managed databases** — one-click provisioning with backup/restore +- **Metrics** — per-service Docker stats plus host CPU/memory/disk telemetry +- **Templates, cron, previews** — service catalog, scheduled jobs, preview deploys +- **Auth & security** — Better Auth sessions (email + OAuth), audit logs, vuln scans +- **Networking** — Traefik reverse proxy, optional Cloudflare Tunnel + +## Quick Start + +Requires Docker with the Compose plugin, `openssl`, and `curl`: + +```bash +curl -fsSL https://raw.githubusercontent.com/Dvorinka/Containr/main/install.sh | bash +``` + +Installs into `./containr`, generates secrets, pulls the published `:latest` +images, and starts the stack — UI at `http://localhost:3000`, API at +`http://localhost:8082`. Non-interactive; re-runs never overwrite `.env`. + +Override with env vars: + +```bash +curl -fsSL https://raw.githubusercontent.com/Dvorinka/Containr/main/install.sh | \ + HTTP_PORT=8080 CONTAINR_DIR=/opt/containr bash +``` + +`CONTAINR_VERSION` pins a release tag, `CONTAINR_REF` selects the git ref for +downloaded files, `CONTAINR_BUILD=1` builds from source. From a git checkout, +`./install.sh` installs in place; plain `docker compose up -d` pulls the same +images (`--build` to compile locally). + +Local development and self-hosted deployment (Traefik + Cloudflare Tunnel): +see [docs/guides/](docs/guides/) and `infra/docker-compose.yml`. ## Architecture @@ -74,97 +85,16 @@ 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 - -### Easy install (recommended) - -Requires Docker with the Compose plugin, `openssl`, and `curl`. One-liner, -no clone needed: - -```bash -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: - -```bash -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) - -```bash -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 - -```bash -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](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. +All configuration is via environment variables — see `.env.example`. Never +commit `.env` or `.env.prod`; if a secret was ever committed, rotate it. ## Documentation - [docs/guides/](docs/guides/) — setup, deployment, Cloudflare, autoscaling - [docs/api/openapi.yaml](docs/api/openapi.yaml) — API contract - [docs/developers/onboarding.md](docs/developers/onboarding.md) — contributor onboarding -- [docs/design/](docs/design/) — UI design references - `make help` — common tasks -## Contributing +--- -See [CONTRIBUTING.md](CONTRIBUTING.md). Issues and PRs welcome. - -## Security - -See [SECURITY.md](SECURITY.md). Report vulnerabilities privately — do not -open public issues. - -## License - -[MIT](LICENSE) © 2026 Tomas Dvorak +[Contributing](CONTRIBUTING.md) · [Security](SECURITY.md) · [MIT License](LICENSE) © 2026 Tomas Dvorak