Appsweet wordt geleverd als één container. Wijs die naar een Postgres-database en een OIDC-issuer, en de werkplek draait op hardware die jij beheert.
Wat je eerst nodig hebt
Twee dingen, allebei vereist terwijl het proces nog aan het opstarten is:
- Postgres met de
vector-extensie beschikbaar. Appsweet heeft geen ingebouwde database, en de eerste migratie voertCREATE EXTENSION IF NOT EXISTS vectoruit. De standaardpostgres-image heeft die niet aan boord;pgvector/pgvector:pg16wel. - Een Zitadel-instantie.
APPSWEET_OIDC_ISSUERenAPPSWEET_OIDC_CLIENT_IDworden tijdens het opstarten gelezen, niet pas bij de eerste aanmelding. Zonder die twee stopt de container voordat hij een poort opent, en antwoordt/readydus helemaal nooit. Zitadel is de enige provider die werkt: de backend vraagt om een Zitadel-specifieke scope en leest de organisatieclaims van Zitadel om een werkplek te bepalen, dus bij een andere OIDC-provider logt de gebruiker wel in en loopt het daarna vast op/v1/me. Docker Compose beschrijft dat in detail.
Heb je wel Postgres maar geen issuer, dan legt Docker Compose uit waar je Appsweet naartoe wijst en wat de stack uit de repository voor je meebrengt — het voorbeeld met twee services start Appsweet en Postgres, maar geen identity provider. Lees die pagina dus voordat je aanneemt dat het een complete deployment is.
Starten
Met een database en een issuer in handen is de container zelf één commando.
# exact version + digest from the release manifest — there is no :latest tag
docker run -p 3000:3000 \
--add-host host.docker.internal=host-gateway \
-e APPSWEET_DATABASE_URL=postgres://appsweet:secret@host.docker.internal:5432/appsweet \
-e APPSWEET_BIND_ADDR=0.0.0.0:3000 \
-e APPSWEET_PUBLIC_BASE_URL=http://localhost:3000 \
-e APPSWEET_OIDC_ISSUER=https://auth.example.com \
-e APPSWEET_OIDC_CLIENT_ID=your-client-id \
ghcr.io/blendable-dev/appsweet-backend:0.1.0-beta.1@sha256:<digest-from-the-release-manifest>Images worden gekozen op exacte versie plus digest, overgenomen uit het gevalideerde
release-manifest voor die versie. Er is geen latest-tag, en geen enkele veranderlijke tag
geldt als bron van waarheid — vul de versie en digest in van de release die je uitrolt.
Het pakket appsweet-backend is privé zolang de gesloten bèta loopt. Om het te pullen heb
je een registry-credential nodig met leesrechten op packages — zolang je Docker-daemon niet
met zo'n credential is ingelogd op ghcr.io, mislukt de pull alsof de image niet bestaat.
APPSWEET_BIND_ADDR doet ertoe: de standaardwaarde is 127.0.0.1:3000, en binnen een
container betekent dat de poortmapping niets bereikt.
--add-host host.docker.internal=host-gateway is wat dat database-adres laat resolven. Het
alias host.docker.internal wordt op macOS en Windows automatisch door Docker Desktop
geleverd, maar niet door Docker Engine op Linux — en daar draaien de meeste self-hosted
installaties. Zonder de vlag resolvet de naam daar niet, mislukt de verbinding terwijl het
proces nog opstart, en stopt de container. Op Docker Desktop is de vlag ongevaarlijk, dus
het commando hierboven werkt overal hetzelfde. Staat je Postgres ergens anders dan op de
Docker-host — een managed dienst, een andere machine — gebruik dan de echte hostnaam en
laat de vlag weg.
Dat adres gaat er ook van uit dat Postgres luistert op een interface die de container kan
bereiken, en niet alleen op localhost. Een distributiestandaard van
listen_addresses = 'localhost' weigert de verbinding zelfs als de naam wél resolvet.
Controleren of hij opkwam
Appsweet voert zijn migraties uit bij het opstarten en meldt zich pas gereed zodra de databasepool is aangesloten.
curl http://localhost:3000/ready
Volgende stappen
Het commando hierboven laat objectopslag weg, dus bestandsuploads staan uit — prima om Appsweet uit te proberen, niet iets om uit te rollen. De meegeleverde stack uit de repository zet opslag voor je klaar; Configuratie somt de variabelen op als je het zelf samenstelt.