Installation
To try it on your machine
git clone https://github.com/ssergy/syncapos.git
cd syncapos
docker compose up
Open http://localhost:8080 and sign up: the first account owns the installation — there is no separate administrator to configure first.
There is no file to edit first: the passwords nobody chooses are generated by the server on its first start and kept in a volume. To set your own, copy deploy/quickstart/.env.example to .env and change them.
Four services come up:
| service | what it is |
|---|---|
db | PostgreSQL |
api | the server: the console, the ingestion API, the schema, the venues’ database roles |
ai-bundle | prepares what the assistant may answer for |
ai | the assistant itself |
The first build takes a while, most of it the assistant’s image.
To serve a real venue
The production stack adds TLS at the front, secrets as files, an allowlist for outbound model calls and resource limits:
deploy/production/init-secrets.sh # generates the passwords, once
$EDITOR deploy/production/.env # the site's hostname
docker compose --env-file deploy/production/.env \
-f docker-compose.yml -f deploy/production/compose.yaml up -d
The two databases
| Database | What it holds | If you lose it |
|---|---|---|
syncapos | accounts, venues, tills, tickets, sales, invoices, closes | gone — this is the one to back up |
syncapos_sync | each POS database’s mirror, one schema per venue | the agent re-reads the POS and sends it again |
Operations
| Script | What it does |
|---|---|
deploy/production/backup.sh | a full backup: both databases, the .env and the secrets |
deploy/production/restore.sh | restores that backup onto an empty installation |
deploy/production/upgrade.sh | upgrades in the right order, backing up first |
deploy/production/rollback.sh | back to the previous images; it never migrates down |
deploy/production/rotate-ai-db-key.sh | rotates the password the assistant reads with |
deploy/production/package-release.sh | builds a release that installs with no internet |