Open the server Apps tab
Select your VPS, open the Apps tab, and start a new app deployment. Keep sensitive server details hidden before capturing or sharing screenshots.


Cloud-native identity management platform
Add your server credentials to Server Compass
Choose from our template library
Fill in settings and click Deploy
Use the ZITADEL template in Server Compass to deploy a self-hosted identity and access management server with Postgres on your VPS, then verify the ZITADEL web UI in a browser.
Select your VPS, open the Apps tab, and start a new app deployment. Keep sensitive server details hidden before capturing or sharing screenshots.

Click New App and choose the template deployment path so Server Compass can load the built-in catalog.

Use the template picker search to find ZITADEL in the Server Compass template catalog.

Choose the ZITADEL template. Server Compass fills the ZITADEL web service, external URL settings, master key, initial admin password, and Postgres password.

Confirm the app name and compose services. In this run, the app was named zitadel-demo and used host port 8080.

Review the generated environment values, confirm the external domain and port match the public URL, and click Deploy Now.

Keep the deployment modal open while Server Compass uploads the compose file, pulls the ZITADEL image, starts the container, and verifies the stack.

After deployment finishes, return to the Apps tab and confirm the ZITADEL app is marked Running with its application URL available.

Open the application URL in a browser. The ZITADEL web UI confirms the stack is reachable.

It deploys ZITADEL with a Postgres database service.
The tutorial verified ZITADEL on host port 8080, which maps to the ZITADEL web service on container port 8080.
The tutorial verifies the clean ZITADEL web UI because organizations, projects, applications, users, and identity providers depend on the production server.
No. The deployment guide should live on the ZITADEL template detail page and be linked from the reusable template deployment docs page.
Take the DIY route and deploy ZITADEL on your own server using Docker.
Fire up your terminal application and establish a connection to your remote server.
# Access your VPS
ssh root@YOUR_SERVER_IP
# With SSH key authentication
ssh -i ~/.ssh/your-private-key root@YOUR_SERVER_IPFirst time? Ensure Docker is installed first: curl -fsSL https://get.docker.com | sh
Create a folder to house your Docker Compose configuration.
# Create and navigate to project directory
mkdir -p ~/apps/zitadel
cd ~/apps/zitadelDefine your services in a docker-compose.yml file:
services:
zitadel:
image: ghcr.io/zitadel/zitadel:latest
command: start-from-init --masterkeyFromEnv --tlsMode disabled
ports:
- "8080:8080"
environment:
- ZITADEL_MASTERKEY=<your-master-key>
- ZITADEL_DATABASE_POSTGRES_HOST=db
- ZITADEL_DATABASE_POSTGRES_PORT=5432
- ZITADEL_DATABASE_POSTGRES_DATABASE=postgres
- ZITADEL_DATABASE_POSTGRES_USER_USERNAME=postgres
- ZITADEL_DATABASE_POSTGRES_USER_PASSWORD=<your-db-password>
- ZITADEL_DATABASE_POSTGRES_ADMIN_USERNAME=postgres
- ZITADEL_DATABASE_POSTGRES_ADMIN_PASSWORD=<your-db-password>
- ZITADEL_DATABASE_POSTGRES_USER_SSL_MODE=disable
- ZITADEL_EXTERNALSECURE=false
- ZITADEL_FIRSTINSTANCE_ORG_HUMAN_USERNAME=admin
- ZITADEL_FIRSTINSTANCE_ORG_HUMAN_PASSWORD=<your-admin-password>
restart: unless-stopped
depends_on:
db:
condition: service_healthy
db:
image: postgres:16-alpine
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=<your-db-password>
- POSTGRES_DB=postgres
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
volumes:
postgres_data:
PORTHost port(default: 8080)MASTER_KEYMaster keyADMIN_PASSWORDAdmin passwordDB_PASSWORDDB passwordStart your containers and verify they're running correctly.
# Launch the stack
docker compose up -d
# Verify container status
docker compose ps
# Follow the logs
docker compose logs --followUpdate UFW rules to allow traffic on the application port.
# Allow the application port through firewall
sudo ufw allow 8080/tcp
sudo ufw reload
# Access your app at:
# http://your-server-ip:8080Forget SSH and YAML files. Deploy ZITADEL visually with Server Compass in just a few clicks.
After deploying ZITADEL with Server Compass, complete these steps to finish setup
Login with admin credentials
Create organization
Configure identity providers
Need help? Check out our documentation for detailed guides.
Common questions about self-hosting ZITADEL
Simply download Server Compass, connect to your VPS, and select ZITADEL from the templates list. Fill in the required configuration and click Deploy. The entire process takes under 3 minutes.
ZITADEL requires a minimum of 512MB RAM. We recommend a VPS with at least 1024MB RAM for optimal performance. Any modern Linux server with Docker support will work.
Yes! Server Compass provides volume mapping that allows you to import existing data. You can also use standard ZITADEL backup and restore procedures.
Server Compass makes updates easy. Simply click the Update button in your deployment dashboard, and the latest ZITADEL image will be pulled and deployed with zero downtime.
ZITADEL is open-source software. You only pay for your VPS hosting (typically $5-20/month) and optionally Server Compass ($29 one-time). No subscription fees or per-seat pricing.

Open-source backend in a single file with realtime database, auth, and file storage

Open-source backend-as-a-service - self-hosted Firebase alternative

Open-source backend framework with dashboard

Full Supabase self-hosted with Kong, GoTrue Auth, Realtime, and Studio
Download Server Compass and deploy ZITADEL to your VPS in under 3 minutes. No Docker expertise required.
Download Server Compass