尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
An open source, privacy first, end to end encrypted enterprise collaboration suite
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Build status:
Multi-tenant collaboration platform on Kubernetes. Provides Matrix (chat), Element (web client), Docs (collaborative editing), Nextcloud (files), Jitsi (video conferencing), and email (Stalwart + Roundcube) per tenant — with shared infrastructure for auth (Keycloak), database (PostgreSQL), monitoring (Prometheus/Grafana), and ingress (NGINX).
Cloudflare DNS
|
NGINX Ingress (LKE)
/ | \
tenant-1/ tenant-2/ shared-infra/
┌──────────┐ ┌──────────┐ ┌──────────────┐
│ Matrix │ │ Matrix │ │ Keycloak │
│ Element │ │ Element │ │ PostgreSQL │
│ Docs │ │ Docs │ │ Postfix+DKIM │
│ Nextcloud│ │ Nextcloud│ │ Prometheus │
│ Jitsi │ │ Jitsi │ │ Grafana │
│ Stalwart │ │ Stalwart │ │ cert-manager │
│ Roundcube│ │ Roundcube│ └──────────────┘
└──────────┘ └──────────┘
Accounts:
Required CLI tools:
| Tool | Min Version | Purpose |
|---|---|---|
terraform | >= 1.0 | Infrastructure provisioning (LKE, DNS, Headscale, PostgreSQL VM) |
kubectl | >= 1.27 | Kubernetes cluster management |
helm | >= 3.0 | Kubernetes package management |
helmfile | >= 1.0 | Multi-chart Helm orchestration (v0.x will not work) |
kustomize | >= 5.0 | Kubernetes manifest customization (helmfile exec dependency) |
yq | >= 4.0 | YAML parsing (tenant config files) |
jq | any | JSON parsing (API responses, secrets) |
envsubst | any | Template variable substitution (from gettext package) |
openssl | any | TLS cert and secret generation |
curl | any | HTTP API calls |
node | >= 22 LTS | Admin and account portal development |
Note:
kustomizeis not called directly by any deploy script, but helmfile invokes it internally. If missing, helmfile will fail withexec: "kustomize": executable file not found in $PATH.
Optional tools (auto-detected; scripts degrade gracefully if absent):
| Tool | When needed |
|---|---|
ansible-playbook | VM configuration — Headscale, PostgreSQL, TURN (required by manage_infra --ansible) |
docker | Building container images |
gh | GitHub CLI (PR workflows) |
dig | DNS verification in deploy_infra and verify-endpoints (skipped if missing) |
swaks | Email delivery testing in test-email-system (skipped if missing) |
psql | Direct PostgreSQL administration |
linode-cli | Linode resource management, S3 buckets, teardown (skipped if missing) |
See CONTRIBUTING.md for detailed installation instructions on macOS and Linux.
# Initialize submodules (if you have access to private config repos)
make setup
# OR create your own tenant config from the example template
cp -r tenants/.example tenants/my-org
# Edit tenants/my-org/dev.config.yaml with your domain and settings
# Copy and fill in secrets: cp tenants/my-org/dev.secrets.yaml.example tenants/my-org/dev.secrets.yaml
# Copy Terraform and infra secrets
cp terraform.tfvars.example terraform.tfvars
cp secrets.tfvars.env.example secrets.tfvars.env
Deployment follows three phases:
# Phase 1: LKE cluster, Headscale, PostgreSQL VM, TURN server
./scripts/manage_infra dev
# Phase 2: Shared infra (ingress, certs, PostgreSQL, Keycloak, Postfix, monitoring)
./scripts/deploy_infra dev
# Phase 3: Tenant apps (Matrix, Element, Docs, Nextcloud, Jitsi, Stalwart, Roundcube)
./scripts/create_env --tenant=my-org dev
kubectl get pods -A | grep -E 'infra-|tn-my-org'
config/ Private config submodules (optional, for operators with access)
platform/ Container registry, infra sizing, theme overrides
tenants/ Real tenant configs (domains, databases, S3 buckets)
phase1/ Terraform: LKE cluster, Headscale, PostgreSQL VM, TURN server
modules/ Terraform modules: lke-cluster/, headscale/, postgres-server/, helm-bootstrap/
apps/ Application deployment layer
helmfile.yaml.gotmpl Main helmfile (Go-templated, env-aware)
values/ Base Helm values
environments/ Dev/prod-specific value overrides
manifests/ Raw K8s manifests per component
deploy-*.sh Per-component deployment scripts
themes/ Keycloak login/email themes
admin-portal/ Node.js admin app (Express + EJS + OIDC)
account-portal/ Node.js user self-service app
scripts/ Orchestration scripts (manage_infra, deploy_infra, create_env)
lib/ Shared libraries (common.sh, config.sh, paths.sh, etc.)
tenants/ Tenant config template (.example/) or local configs
ansible/ VM configuration (Headscale, PostgreSQL, TURN/CoTURN)
ci/ CI server (Woodpecker) — Terraform, Ansible, pipeline scripts
.woodpecker/ CI pipeline definitions
Each tenant gets isolated Kubernetes namespaces:
| Namespace | Contents |
|---|---|
tn-<tenant>-matrix | Synapse + Element Web + Synapse Admin |
tn-<tenant>-docs | Docs backend, frontend, y-provider, Redis |
tn-<tenant>-files | Nextcloud |
tn-<tenant>-jitsi | Jitsi (Prosody, Jicofo, JVB, Web) |
tn-<tenant>-mail | Stalwart mail server |
tn-<tenant>-webmail | Roundcube webmail |
tn-<tenant>-admin | Admin portal |
Shared infrastructure lives in infra-* namespaces (db, auth, ingress, monitoring, mail, cert-manager).
See tenants/README.md for tenant configuration details.
Woodpecker CI deploys automatically:
Pipeline: validate → build-images → deploy-dev → E2E → gate → deploy-prod
# Deploy all tenant apps
./scripts/create_env -e <env> -t <tenant>
# Deploy individual components
./apps/deploy-docs.sh -e dev -t my-org
./apps/deploy-jitsi.sh -e dev -t my-org
./apps/deploy-stalwart.sh -e dev -t my-org
./apps/deploy-nextcloud.sh -e dev -t my-org
# Helmfile (Synapse, Element)
cd apps && helmfile -e dev -l tier=apps sync
See CONTRIBUTING.md for development setup and contribution guidelines.
See CLOUDFLARE_CACHING.md for CDN cache configuration (Cloudflare Cache Rules + origin headers).
If you discover a security vulnerability, please report it responsibly by opening a GitHub issue marked [SECURITY] or contacting the maintainers directly. Do not open a public issue with exploit details.
This project is licensed under the GNU Affero General Public License v3.0 — see LICENSE for details.