Self-host (Docker + Helm)
ChannelForge runs unmodified on your infrastructure. Two paths:
- Single-node Docker Compose: every service on one host with MinIO for object storage. Right for solo operators and dogfood deploys.
- Kubernetes (Helm chart): one Deployment per service, ingress, horizontal scaling. Right for teams and agencies.
Quick start (Docker Compose)
git clone https://github.com/channelforge/channelforge.git
cd channelforge
cp .env.example .env # fill secrets
docker compose -f deploy/docker-compose.yml up --build
# visit http://localhost:3000
Quick start (Kubernetes)
kubectl create namespace channelforge
kubectl -n channelforge create secret generic channelforge-env \
--from-env-file=./.env
helm install cf deploy/helm/channelforge \
--namespace channelforge \
--set ingress.host=app.example.com
Read the full playbook in docs-internal/self-host/README.md (ships
with the source tree) for tuning notes + GPU pool wiring + migration
flow.
Hybrid pipeline
A self-host install can still use Cloud BYOC pools (Runpod / Vast.ai)
for spillover render capacity. Configure pools from
/settings/gpu-pools; the scheduler routes per project based on
render_mode (cloud / local / auto).
Known limitations
- BYOK Claude Code discount is a SaaS-only mechanic (the discount is applied on the platform's Stripe invoice, which self-host installs do not have).
- Lifecycle emails require a Resend API key.
- BetterUptime status page is a SaaS add-on; bring your own.