Self-host Psono
An end-to-end encrypted password manager aimed at IT teams, pairing a Django/PostgreSQL server with browser extensions and a built-in admin portal. The community edition has no user cap; SSO, audit logging, and policy enforcement live in the enterprise build.
Key facts
Choose Psono when you want an end-to-end encrypted vault for an IT team with its own admin portal, groups, and API keys, and you don't care about Bitwarden client compatibility. It is the most assembly-required option in this category — external Postgres, generated server keys, a hand-written config — so pick it for the admin portal and the API, not for a quiet evening. If you mainly want a personal or small-group vault, Vaultwarden does that in one container; if team sharing is the point, Passbolt's per-user key model is the more rigorous design.
Follow the Psono deploy guide →What you need
- Any VPS with at least 2560 MB of RAM
- A domain you control — most self-hosted setups need HTTPS in front of them
- About the better part of a day
Paid link — we earn a commission if you shop through it.
Install
Run these commands on your server:
# Psono CE — Postgres, then the combo image (server + web client + portal)
docker run -d --name psono-db --restart=unless-stopped \
-e POSTGRES_DB=psono -e POSTGRES_USER=psono -e POSTGRES_PASSWORD=CHANGEME \
-v psono-db:/var/lib/postgresql/data postgres:16
sudo mkdir -p /opt/docker/psono /opt/docker/psono-client
docker run --rm psono/psono-combo:latest python3 ./psono/generateserverkeys.py
# copy the printed keys into /opt/docker/psono/settings.yaml (see the CE install doc
# for the template) and create psono-client/config.json before the next step
docker run --rm -v /opt/docker/psono/settings.yaml:/root/.psono_server/settings.yaml \
psono/psono-combo:latest python3 ./psono/manage.py migrate
docker run --name psono-combo --sysctl net.core.somaxconn=65535 -d --restart=unless-stopped \
-v /opt/docker/psono/settings.yaml:/root/.psono_server/settings.yaml \
-v /opt/docker/psono-client/config.json:/usr/share/nginx/html/config.json \
-v /opt/docker/psono-client/config.json:/usr/share/nginx/html/portal/config.json \
-p 10200:80 psono/psono-combo:latest
# the admin portal also needs MANAGEMENT_ENABLED: True in settings.yaml (default False)What you take on
Psono is solid software with thin operational documentation, and both of those matter before you commit a vault to it:
An alternative to
Head-to-head
Two team vaults, two very different licences.
A single-container, 256 MB Bitwarden-compatible vault vs. a Django/PostgreSQL password manager built for IT teams with an admin portal and unlimited users in its community edition.
More in Password manager
Bitwarden
KeeWeb
Passbolt
TeamPass
Common questions
Does Psono need its own database?
Yes — PostgreSQL, and you have to provision it yourself before the container will start. The official CE install assumes a Postgres server already accepting connections, then runs a migrate step against it before the app comes up.
What is the difference between Psono CE and the enterprise edition?
The community edition is Apache-2.0 and unlimited on users, covering vaults, groups, sharing, and API keys. The enterprise edition adds LDAP/SAML/OIDC single sign-on, audit logging, and centrally enforced policies.
Is Psono harder to set up than Vaultwarden?
Noticeably, yes. Where Vaultwarden is one container and a volume, Psono wants an external Postgres, a generated server keypair, a hand-written settings.yaml, and a client config.json — budget an evening rather than five minutes.
What do I need to back up on a Psono server?
Two things, and missing either one loses the vault: the PostgreSQL database and the settings.yaml file. Psono's own docs are explicit that settings.yaml holds secrets needed to decrypt what is in the database, so a database-only backup restores to unreadable ciphertext.