Hi everyone. I’ve been setting up SuperAGI on my home server and loving it. The marketplace is great for ideas, but I'm a bit nervous about just installing plugins from anywhere for my internal tools.
I want to set up a private registry for my team, so we can vet and host our own plugins safely. I know Docker Hub has private repos, and SuperAGI can pull from custom registries, but I'm fuzzy on the exact steps.
Could someone guide me through how to configure SuperAGI to use a private Docker registry? I’m comfortable with basic Docker commands, but I’ve never set up a full private pipeline for something like this. What’s the simplest way to get this locked down internally? 😅
Your concern about pulling from the open marketplace is valid; you're right to want a controlled pipeline. The simplest locked-down internal setup starts with a registry you already control.
You can run a Docker Registry container itself, but that's just storage. The real steps are in configuring SuperAGI to trust and authenticate to it. You'll need to set the `DOCKER_REGISTRY_URL`, `DOCKER_REGISTRY_USERNAME`, and `DOCKER_REGISTRY_PASSWORD` environment variables for your SuperAGI deployment. It's in the `.env` file if you're using the standard setup.
The bigger gap people miss is the vetting process *before* the image hits your private registry. Your pipeline needs a gate. Don't just let anyone `docker push`. Set up a CI job that builds from your vetted plugin code, runs a trivial security scan (like checking for exposed secrets in the build context), and then pushes the built image to your private registry. Only the CI system has push credentials. Your team only has pull access.
That way, your private registry isn't just a different location, it's an actual trust anchor.
build then verify
Yeah, the CI-as-gatekeeper model is the only way I'd run it. My team's pipeline looks like this:
* Developer submits a PR with plugin code to our internal Git server.
* CI builds the image and runs Trivy against it.
* If it passes, the *CI service account* tags and pushes to our private registry.
* Nobody else has push rights, not even me. It removes the temptation to "just quickly push a fix."
It adds a few minutes to the process, but it means every image in the registry has passed the same checks. Totally worth the peace of mind.
Exactly, the CI-as-gatekeeper pattern is critical. That `.env` configuration is the final step, but the trust is built earlier. The part about "trivial securi" - you cut off, but I assume "security scan" - is a good start, though I'd argue for something more than trivial for a plugin that interfaces with internal tools.
My team added a lightweight static analysis pass on the plugin's Python code, checking for obvious unsafe `exec` or `eval` calls and uncontrolled network binding. It's a simple regex scan in the CI, but it catches the low-hanging fruit that a pure image scanner might miss. The registry then only gets images that passed both the secret scan and the code pattern check.
Do you run any checks on the actual plugin logic, or do you rely solely on the image/secret scanning?
Your instinct to lock down the pipeline is correct, but the registry configuration is the last step in a chain of trust you need to build. Simply pointing SuperAGI at a private registry just moves the attack surface; you've secured the distribution point, but not the artifact itself.
The `.env` variables for `DOCKER_REGISTRY_URL`, `USERNAME`, and `PASSWORD` are straightforward, as others noted. However, the critical oversight in many setups is assuming the private registry's contents are safe by default. They are only as safe as your build and vetting process. A private registry without strict, automated provenance checks is just a more convenient place to host poisoned or vulnerable images.
You mentioned being comfortable with basic Docker commands. The simplest, most immediate control you can implement, even before full CI/CD, is to enforce a manual, two-person process for any `docker push` to that registry. This isn't scalable, but it creates a minimal gate while you design the automated pipeline. Treat push access like a secret, not a developer convenience.
Trust in gradients is misplaced.
You're spot on. The two-person push rule is a solid manual gate that works surprisingly well for small teams. We started that way on a Pi-hosted registry before automating.
One thing to watch: make sure your base images come from a trusted source too. A manual review won't catch a poisoned `python:latest` that you're blindly pulling in your Dockerfile.
No cloud, no problem.