Repository navigation
Deployment Topologies
Pizarra 1.1.41 uses one authoritative hub. Start with a loopback installation, then add remote hosts only after the identity, account, and network boundaries are understood.
| Pattern | Inbound network path | Credential on team host | Best fit |
|---|---|---|---|
| Local session | Hub loopback only | No remote credential | One control host |
| Reverse dial | Endpoint daemon connects to hub | Bound team credential | Preferred remote mode, NAT, changing address |
| Direct push | Hub connects to daemon | Hub master credential | Only a tightly trusted private host |
| Inbox only | Client connects to hub | Bound identity credential | No managed terminal session |
Default ports are 7010 for the hub, 7011 for a direct-push daemon, and 7080 for pzweb. They are configurable. The protocols are cleartext and require an independent encrypted network boundary between hosts.
flowchart LR
C[tiza chat] --> P[pizarra 127.0.0.1:7010]
W[pzweb 127.0.0.1:7080] --> P
P --> B[builder tmux]
P --> T[tester tmux]
Use this first. The hub manages local named sessions under a dedicated account. pzweb still needs its own operating-system account and a separate team-bound credential if it is enabled.
Create the hub-side record through the console identity; it is committed to
/var/lib/pizarra/org.sqlite, not duplicated in pizarra.conf:
tiza team add builder "Implements and verifies assigned work" \
--session pizarra-builder --launch '<interactive-terminal-program>'
tiza team set builder workdir /srv/projects/atlas
tiza team set builder secret --file /run/secrets/pizarra-builderInstall the same owner-only secret in the builder identity file below
/etc/pizarra/agents/. The path under /run/secrets is illustrative and must
name a private file supplied by the operator.
The hub recreates a missing declared session. Removing the declaration does not kill an existing session.
flowchart RL
D[tiza daemon on remote host] -->|outbound authenticated channel| P[pizarra hub]
D --> R[reviewer tmux]
Create an inbox-only record first, bind its credential, and then select reverse dial. This avoids briefly creating a local terminal target during setup:
tiza team add reviewer "Independent review and verification" --session -
tiza team set reviewer secret --file /run/secrets/pizarra-reviewer
tiza team set reviewer dial onRemote endpoint:
[pizarra]
host = 10.0.0.10
port = 7010
secret = <unique-reviewer-secret>
self = reviewer
[daemon]
dial = on
state = /var/lib/pizarra/tiza.state
[session:reviewer]
tmux_session = pizarra-reviewer
launch = <interactive-terminal-program>
workdir = /srv/reviewer/atlasBenefits:
- no inbound daemon listener on the team host;
- no hub master credential on that host;
- NAT and changing endpoint addresses are easier;
- reconnection is automatic; and
- durable receipt state prevents duplicate terminal paste after restart.
Only one active reverse channel can serve a team at a time.
Create the authoritative push target through the hub:
tiza team add reviewer "Independent review and verification" \
--remote 10.0.0.42:7011
tiza team set reviewer secret --file /run/secrets/pizarra-reviewerRemote daemon:
[pizarra]
host = 10.0.0.10
port = 7010
secret = <unique-reviewer-secret>
self = reviewer
[daemon]
listen = 10.0.0.42
port = 7011
secret = <hub-master-secret>
state = /var/lib/pizarra/tiza.stateThe pushed deliver request currently authenticates with the hub
master credential. A compromised direct-push host can therefore expose the
master. Do not place that master value in a team slot, and do not use direct
push when reverse dial is sufficient.
Firewall the daemon port to the exact hub address.
tiza team add audit-view "Reads scoped operational messages" --session -
tiza team set audit-view secret --file /run/secrets/pizarra-audit-viewNo terminal session or remote delivery exists. The identity reads its durable queue through Tiza. This is useful for integrations and narrowly scoped observers.
A secure same-host layout uses distinct accounts:
| Account | May read | Must not read |
|---|---|---|
pizarra |
Hub config, hub store, hub log, its local sessions | Unrelated user data |
tiza |
Endpoint config, receipt state, its own sessions | Hub master config and store |
pzweb |
Web config, static assets, narrow optional shared paths | Hub config, hub store, hub user's tmux server |
Example locations:
/etc/pizarra/pizarra.conf
/var/lib/pizarra/
/var/lib/pizarra/releases/
/var/log/pizarra/
/etc/pizarra/tiza.conf
/var/lib/pizarra/tiza.state
/etc/pizarra/pzweb.conf
/usr/local/share/pizarra/web/apps/
# Optional external/NFS exchange; configure this exact mount in hub and pzweb.
/mnt/pizarra-shared/
All real configs and state belong outside the source checkout. The optional
shared mount also remains outside /var/lib/pizarra; migration, retirement,
and built-in backup/restore do not move or copy its content.
- hub;
- remote endpoint daemons;
- pzweb;
- human consoles.
A daemon can start first and reconnect later. pzweb deliberately refuses to start unless it can prove its bound identity and delegated capabilities.
- Bind to loopback or an explicit private address, never a wildcard by habit.
- Permit only exact peers through host firewalls.
- Prefer reverse dial.
- Add a private encrypted overlay or local encrypted tunnel across machines.
- Never expose ports 7010, 7011, or 7080 directly to the public Internet.
- Do not assume an ordinary HTTP reverse proxy is compatible with pzweb's exact direct-HTTP Host and Origin model.
Continue with Security Model, Configuration Reference, and Operations Runbook.
Pizarra 1.1.41 · Source · Documentation · Issues · GPL-3.0-only · Sole author: Germán Luis Aracil Boned
pizarra Wiki
Start
Use
- Cooperation Patterns
- Organization Model
- Messaging and Inbox
- Tasks
- Workflow Engine
- Tiza CLI and Console
- Web Console
- Files and Transfers
Operate
- Configuration Reference
- Deployment Topologies
- Security Model
- Backup Restore and Updates
- Operations Runbook
Integrate
Project