Files
puter/selfhosted
Daniel Salazar 2de8807942 selfhost: fullstack self host p1 (#2902)
* wip: self hosted full setup

* wip: self hoast modes

* more wip self host stuff

* wip: full release

* fix: custom apps

* fix: readme

* full-stack md

* docs update

* fix

* fix: commands

* remove comments

* fix: docs and migs

* mysql mig

* fix: docker changes

* fix: mysql checks

* fix: mysql mig

* fix: docker more

* fix: redis conn issues
2026-05-04 15:58:03 -07:00
..

Self-hosting Puter

Three supported ways to run Puter, in increasing order of effort and capability. Pick one, follow that page, ignore the others.

Mode Best for External services
1. Dev (npm start) Hacking on the source / trying it on your laptop None — everything runs in-process
2. Docker (single container) Production single-host; bring your own DB / S3 None bundled — point at services you already run
3. Full self-hosted stack Production with a self-managed stack Bundled: MariaDB, Valkey, DynamoDB-local, RustFS S3, nginx

1. Dev (npm start) → npm.md

Clone, npm install, npm start. Backend, GUI, and puter.js run from the source tree on Node 24+. SQLite + in-process S3 / DynamoDB / Redis stand-ins start automatically — no external services needed. Best for contributing or kicking the tires.

Not safe to expose publicly — uses dev secrets and an in-process key store.

2. Docker (single container) → docker.md

One docker run against ghcr.io/heyputer/puter:latest. Out of the box uses the same in-process defaults as dev mode; drop a config.json into the mounted /etc/puter/ to point at real services (MariaDB, S3, DynamoDB, Redis) one block at a time. Best when you already operate the dependencies you want Puter to use.

3. Full self-hosted stack → full-stack.md

docker compose -f docker-compose.full.yml up -d brings up Puter plus every external service it needs (MariaDB, Valkey, DynamoDB-local, RustFS S3, nginx) wired together. Closest to production you can run on a single host; supports your own domain and TLS. Best when you want a public Puter and don't already run the dependencies.