lifeos handbook
Operations

Infrastructure

The hosts, the shared services, and what each hostname is.

Everything runs on the sawasoft server via Dokploy, behind Cloudflare. Web projects deploy as Cloudflare Workers; backends deploy as containers.

Hostnames

HostWhatNotes
iam.ringojr.ccIAM frontendWorker
iam-backend.ringojr.ccIAM backendDokploy
finloop.ringojr.ccFinloop frontendWorker
finloop-backend.ringojr.ccFinloop backendDokploy
docs.ringojr.ccthis handbookWorker
adminer.sawasoft.co.tzdatabase consolebehind basic auth
infisical.sawasoft.co.tzsecrets manager
rustfs.sawasoft.co.tzobject storage consoleat /rustfs/console/
s3.sawasoft.co.tzS3 APIDNS-only, deliberately

The shared services live in Dokploy's Infrastructure project; their compose files are the reference copies in tools/deploy/infra/, deployed with tools/deploy/infra/deploy.sh.

s3.sawasoft.co.tz must stay grey-cloud in Cloudflare. The proxy rewrites requests enough to break S3 SigV4 signatures and caps bodies at 100 MB, so authenticated and presigned access fail with SignatureDoesNotMatch. The console hostname can stay proxied; internal access over http://rustfs:9000 is unaffected.

RustFS is beta

Run single-node only — distributed mode is described upstream as still under testing. The image is pinned by digest for the same reason. Per-app scoped access keys are deferred while its IAM implementation matures; today there is one root credential pair.

Infisical is the root of trust

Every secret in Infisical's database is encrypted with its ENCRYPTION_KEY. A backup of that database without the key restores nothing, so the key belongs in a password manager, not only on the host.

Things that have already gone wrong here

docker system df misreports under Swarm mode. It has reported gigabytes of reclaimable space on hosts where the true figure is ≈0 B, because every "unused" image is backing a live service. Never act on its numbers; map image IDs to containers instead.

One image that reads as dangling backs eight running databases on the reference host. A blanket docker image prune -a would take down client services. Never blanket-prune either box.

There are no backups of the client databases on sawasoft. Several orphaned volumes are the only surviving copy of data belonging to real clients. Nothing gets deleted on a blanket instruction; each volume is an individual decision made against a dump and a manifest, not from memory.

On this page