GitHunt

Cenit

Cenit banner

Smoke: Docker Compose + UI Login
codebeat
License

Cenit is an open-source integration-platform-as-a-service (iPaaS). It helps teams design integrations, orchestrate data flows, expose APIs, and manage data pipelines across external systems.

Table of contents

What you can build

  • Backendless data APIs from JSON Schema-based Data Types.
  • Integration flows for routing, orchestration, and automation.
  • Data transformation pipelines across JSON, XML, ASN, EDIFACT, X12, UBL, and more.
  • API and integration connectors for third-party services.
  • Event- and schedule-driven integration workloads.

Architecture and stack

Core runtime:

  • Ruby (Rails + Unicorn)
  • MongoDB
  • Redis
  • RabbitMQ

Default local ports:

  • Backend: http://localhost:3000
  • UI: http://localhost:3002
  • RabbitMQ management: http://localhost:15672

Related repository:

Project status

The repository is actively maintained. Current local migration baseline in this branch/repo:

  • Ruby 3.2.2
  • MongoDB 7.0
  • Docker Compose local runtime

Additional migration context is documented in upgrading_notes.md.

Quick start (local Docker Compose)

Prerequisites

  • Docker Desktop (or Docker Engine + Compose v2 plugin)
  • git
  • UI repository checked out as a sibling directory at ../ui (or set CENIT_UI_CONTEXT)

1) Clone repositories

# backend
git clone git@github.com:cenit-io/cenit.git

# UI (sibling directory required by default compose config)
git clone git@github.com:cenit-io/ui.git ../ui

If your UI checkout lives elsewhere:

export CENIT_UI_CONTEXT=/absolute/path/to/ui

2) Start the stack

cd /path/to/cenit
scripts/compose-dev.sh up -d
scripts/compose-dev.sh ps

This uses:

  • docker-compose.yml as shared base
  • docker-compose.dev.yml as development overrides (build + local branch code)

2.1) Fast UI development mode (live reload from sibling ../ui)

Use this when iterating on UI code to avoid rebuilding the nginx UI image:

cd /path/to/cenit
scripts/compose-dev.sh --profile dev up -d mongo_server redis rabbitmq server ui_dev
scripts/compose-dev.sh --profile dev ps

Notes:

  • ui_dev serves Vite on http://localhost:3002 with source mounted from ${CENIT_UI_CONTEXT:-../ui}.
  • Keep ui (nginx image service) for production-like checks and CI parity.

2.2) Image-only (prod-like) mode

cd /path/to/cenit
scripts/compose-prod.sh up -d
scripts/compose-prod.sh ps

This uses:

  • docker-compose.yml + docker-compose.prod.yml
  • published images from GHCR (pull_policy defaults to missing)

GHCR tag policy (from publish workflows):

  • master branch -> ghcr.io/cenit-io/cenit:latest and ghcr.io/cenit-io/ui:latest
  • develop branch -> ghcr.io/cenit-io/cenit:develop and ghcr.io/cenit-io/ui:develop
  • release tags v*.*.* -> semver tags
  • every publish -> immutable sha-<gitsha> tag

Run prod-like using develop images:

CENIT_SERVER_IMAGE=ghcr.io/cenit-io/cenit:develop \
CENIT_UI_IMAGE=ghcr.io/cenit-io/ui:develop \
scripts/compose-prod.sh up -d

Run prod-like pinned to immutable SHA tags:

CENIT_SERVER_IMAGE=ghcr.io/cenit-io/cenit:sha-<server_sha> \
CENIT_UI_IMAGE=ghcr.io/cenit-io/ui:sha-<ui_sha> \
scripts/compose-prod.sh up -d

For strict refresh from registry each run:

CENIT_PULL_POLICY=always scripts/compose-prod.sh up -d

2.3) Repro mode with non-default host ports (redirect/debug)

Use this to reproduce host/port redirect issues (for example, verify UI does not fall back to localhost:3000).

cd /path/to/cenit
REPRO_SERVER_PORT=13000 REPRO_UI_PORT=13002 scripts/compose-repro.sh up -d
REPRO_SERVER_PORT=13000 REPRO_UI_PORT=13002 scripts/smoke/repro_runtime_ports.sh

Default repro port mapping:

  • Backend host port: 13000 -> container 8080
  • UI host port: 13002 -> container 80

Optional public URL overrides (if not using localhost):

REPRO_SERVER_PUBLIC_URL=http://127.0.0.1:13000 \
REPRO_UI_PUBLIC_URL=http://127.0.0.1:13002 \
scripts/smoke/repro_runtime_ports.sh

3) Verify services

curl -I http://localhost:3000
curl -I http://localhost:3002

On first bootstrap (fresh database), default admin credentials:

  • Email: support@cenit.io
  • Password: password

RabbitMQ default credentials:

  • User: cenit_rabbit
  • Password: cenit_rabbit
  • VHost: cenit_rabbit_vhost

Common local operations

# Follow backend logs
scripts/compose-dev.sh logs -f server

# Restart backend only
scripts/compose-dev.sh restart server

# Stop all services
scripts/compose-dev.sh down

# Full reset (containers + volumes)
scripts/compose-dev.sh down -v --remove-orphans

Configuration

Important environment knobs used by local scripts:

  • CENIT_SERVER_URL (default http://localhost:3000)
  • CENIT_UI_URL (default http://localhost:3002)
  • CENIT_UI_CONTEXT (path to UI repository for Docker build)
  • CENIT_SERVER_IMAGE (prod-like server image tag, default ghcr.io/cenit-io/cenit:latest)
  • CENIT_UI_IMAGE (prod-like UI image tag, default ghcr.io/cenit-io/ui:latest)
  • CENIT_PULL_POLICY (prod-like pull policy, default missing; use always for strict pulls)
  • CENIT_COMPOSE_FILES (default: docker-compose.yml:docker-compose.dev.yml)
  • CENIT_COMPOSE_FILE (legacy single-file override, still supported)
  • CENIT_BASE_COMPOSE_FILE (helper override for base file)
  • CENIT_DEV_COMPOSE_FILE (helper override for dev file)
  • CENIT_PROD_COMPOSE_FILE (helper override for prod-like file)
  • CENIT_REPRO_COMPOSE_FILE (helper override for repro file)
  • CENIT_E2E_AUTOSTART (1 to auto-start stack in E2E scripts)
  • CENIT_E2E_RESET_STACK (1 to reset containers/volumes before E2E)
  • CENIT_E2E_BUILD_STACK (1 to rebuild images before E2E, default 0)
  • CENIT_E2E_HEADED (1 for headed browser runs)

Image labels:

  • GHCR images are published with OCI metadata labels (source/revision/created) via docker/metadata-action.

Testing and quality checks

Login E2E smoke

scripts/e2e/cenit_ui_login.sh

Browser smoke: no localhost redirect during auth bootstrap

# Default URL
scripts/smoke/cenit_ui_no_localhost_redirect.sh

# Repro stack URL
CENIT_UI_URL=http://localhost:13002 scripts/smoke/cenit_ui_no_localhost_redirect.sh

This smoke fails if any browser request hits http://localhost:3000 during initial auth flow.

Pre-apply repro gate (runtime + browser checks)

REPRO_SERVER_PORT=13000 REPRO_UI_PORT=13002 scripts/smoke/repro_preapply_gate.sh

Use this as the required gate before Terraform apply or other deploy steps when validating the localhost redirect fix path.

Contact data type + records E2E

scripts/e2e/cenit_ui_contact_flow.sh

Driver note:

  • CENIT_E2E_DRIVER=pwcli may hit parser/runtime limits on large run-code payloads.
  • The contact-flow runner automatically falls back to the node-playwright driver when this is detected.

Useful overrides:

# Reuse already-running stack (skip deterministic reset)
CENIT_E2E_AUTOSTART=0 scripts/e2e/cenit_ui_contact_flow.sh

# Deterministic default (clean DB each run, no image rebuild)
CENIT_E2E_RESET_STACK=1 CENIT_E2E_BUILD_STACK=0 scripts/e2e/cenit_ui_contact_flow.sh

# Run headed
CENIT_E2E_HEADED=1 scripts/e2e/cenit_ui_contact_flow.sh

# Slower machines
CENIT_E2E_SERVER_READY_RETRIES=240 \
CENIT_E2E_UI_READY_RETRIES=180 \
scripts/e2e/cenit_ui_contact_flow.sh

UI user journey E2E

scripts/e2e/cenit_ui_user_journey.sh

Flow execution + RabbitMQ smoke

scripts/e2e/cenit_flow_execution_smoke.sh

Artifacts are written under output/playwright/.

Git hooks (pre-push E2E)

Install hooks:

npm install
npm run prepare

Current pre-push behavior:

  • Runs scripts/e2e/cenit_ui_contact_flow.sh
  • Uses fresh stack defaults:
    • CENIT_E2E_RESET_STACK=1
    • CENIT_E2E_BUILD_STACK=0
    • CENIT_E2E_CLEANUP=0 (cleanup disabled for hook stability)

Overrides:

# Reuse running stack
CENIT_E2E_AUTOSTART=0 git push

# Keep current volumes/state
CENIT_E2E_RESET_STACK=0 git push

# Skip image rebuild
CENIT_E2E_BUILD_STACK=0 git push

# Force cleanup phase
CENIT_E2E_CLEANUP=1 git push

# Skip hooks once
HUSKY=0 git push

Troubleshooting

Backend does not become reachable on :3000

scripts/compose-dev.sh ps -a
scripts/compose-dev.sh logs --no-color --tail=200 server

If needed, run a full reset and rebuild:

scripts/compose-dev.sh down -v --remove-orphans
scripts/compose-dev.sh up -d --build

E2E instability after many local runs

Use a clean boot:

CENIT_E2E_RESET_STACK=1 \
CENIT_E2E_BUILD_STACK=0 \
scripts/e2e/cenit_ui_contact_flow.sh

Contributing

Contributions are welcome and appreciated.

Before opening a PR:

  • Reproduce and describe the problem clearly.
  • Include tests or reproducible validation steps.
  • Keep scope focused and documented.

Security

Please do not report security vulnerabilities in public issues.

Code of conduct

This project follows the code of conduct in CODE_OF_CONDUCT.md.

License

Distributed under the terms in LICENSE.

Screenshots

menu
tenants
cenit_type
mobile_view

cenit-io/cenit | GitHunt