Handleiding - 8 min

De Archestack-images draaien

Archestack is twee container-images en een PostgreSQL-database. Elke manier om het te draaien, van een laptop tot een Kubernetes-cluster, start dezelfde twee images met andere instellingen. Deze pagina zegt wat ze zijn, wat elke opstelling ze moet geven, en welke manier om ze te draaien waar past. Elke instelling die de images aannemen, staat op Instellingen van de images.

De images

ImageWat het isLuistert op
nickpeelman/omnicore-apiDe API: elk verzoek, achtergrondtaken (planningen, mail, back-ups) en live updates. /health zegt wanneer hij klaar is.8080
nickpeelman/omnicore-webnginx met de builder en de gepubliceerde app.80
postgres:16De database, of in plaats daarvan een beheerde PostgreSQL 16.5432
nickpeelman/omnicore-grafana, -prometheus, -tempo, -loki, -otel-collectorOptionele monitoring: Grafana met de Archestack-dashboards en wat het voedt.

Elke release krijgt zijn versie als tag, zoals 1.0.42, en de nieuwste is ook latest. Draai in productie een versienummer, zodat je weet wat er draait en dezelfde versie van test naar productie kunt brengen. De API- en de web-image van één release horen bij elkaar.

Wat elke opstelling ze geeft

  1. PostgreSQL 16, met een gebruiker die databases mag aanmaken. De API maakt bij de eerste start zijn eigen databases aan en daarna een paar voor elke werkruimte, dus er is niets voor te bereiden. Geef PostgreSQL 1 GB gedeeld geheugen (--shm-size 1g in Docker): zijn statistieken groeien met elke database, en de standaard raakt op bij ongeveer duizend werkruimtes.
  2. Twee mappen die een herstart overleven, /files voor uploads en /backups voor back-ups. Zonder die mappen verdwijnen uploads bij de volgende update.
  3. Een route naar elke image. De browser laadt de web-image en roept de API aan onder /api, met live updates over een WebSocket onder /hubs. Beide kunnen één adres delen, zoals de starterkits doen, of de API krijgt een eigen adres:
    One address (the kits do this)          Two addresses
    
    https://apps.example.com                https://editor.example.com  ->  omnicore-web
      /api/...   ->  omnicore-api :8080     https://api.example.com     ->  omnicore-api
      /hubs/...  ->  omnicore-api :8080
      /...       ->  omnicore-web :80       VITE_API_URL=https://api.example.com
    
    VITE_API_URL empty
    Onder een pad van een hostnaam, zoals https://apps.example.com/archestack/, krijgen beide images het pad mee (BASE_PATH en Http__PathBase).
  4. Een eerste admin. Stel Identity__InitialAdminEmail en Identity__InitialAdminPassword in, of open de builder meteen na de eerste start en maak de admin daar aan. Tot iemand dat doet, wordt wie de builder als eerste bereikt de admin, dus laat een verse installatie niet open staan op internet.
  5. Tijd om te starten. De API beantwoordt /health pas met {"status":"ok"} zodra elke database gemigreerd is. Een eerste start duurt een minuut of twee, en langer met veel werkruimtes, dus controleer op /health of hij klaar is en geef de start genoeg tijd.

De manieren om ze te draaien

ManierVoorHandleiding
VS Code-projectApplicaties bouwen op je eigen machine. De extensie draait Archestack voor je, zonder Docker op Windows.VS Code-extensie
docker runArchestack in vijf minuten uitproberen op een laptop.Hieronder
Docker ComposeEén server, met certificaten op eigen houtje of achter een proxy die je al draait, en nachtelijke updates.Hosten met Docker
Kubernetes-manifestenEen cluster dat je al hebt, onder een pad van een hostnaam die het al bedient.Hosten op Kubernetes
Helm-chart op AKSEigen hostnamen, een beheerde database, meerdere API-replica's, nachtelijke updates.Hosten op AKS
Andere containerplatformenAzure Container Apps, Amazon ECS, Google Cloud Run en dergelijke.Hieronder

Wat je ook kiest, je applicaties komen er op dezelfde manier: vanuit de repository, via een pipeline.

Uitproberen met docker run

Drie containers op één Docker-netwerk: PostgreSQL, de API op poort 8080 en de builder op poort 8081. Kies een eigen wachtwoord in plaats van change-me.

# Archestack on this machine with plain docker run: the builder on http://localhost:8081
docker network create archestack
docker volume create archestack-postgres

docker run -d --name archestack-postgres --network archestack --shm-size 1g \
  -e POSTGRES_USER=archestack -e POSTGRES_PASSWORD=change-me -e POSTGRES_DB=postgres \
  -v archestack-postgres:/var/lib/postgresql/data postgres:16

docker run -d --name archestack-api --network archestack -p 8080:8080 \
  -e ASPNETCORE_URLS=http://+:8080 \
  -e "ConnectionStrings__DefaultConnection=Host=archestack-postgres;Database=omnicore-db;Username=archestack;Password=change-me" \
  -e "ConnectionStrings__Core=Host=archestack-postgres;Database=omnicore-core;Username=archestack;Password=change-me" \
  -e "ConnectionStrings__Identity=Host=archestack-postgres;Database=omnicore-identity;Username=archestack;Password=change-me" \
  -e ConnectionStrings__Keycloak= \
  -e Database__CreateMissing=true \
  -e Identity__Provider=Builtin -e Identity__AppBaseUrl=http://localhost:8081 \
  -e Files__Directory=/files -e Backup__Directory=/backups \
  -v archestack-files:/files -v archestack-backups:/backups \
  nickpeelman/omnicore-api:latest

docker run -d --name archestack-web --network archestack -p 8081:80 \
  -e VITE_API_URL=http://localhost:8080 -e VITE_UI_MODE=dashboard \
  -e API_INTERNAL_URL=http://archestack-api:8080 \
  nickpeelman/omnicore-web:latest

Open http://localhost:8081 zodra http://localhost:8080/health antwoordt, en maak de eerste admin aan. De builder en de gepubliceerde app (/app) staan allebei op die poort, en de API op 8080 antwoordt de browser rechtstreeks. Om het weer te verwijderen:

docker rm -f archestack-web archestack-api archestack-postgres
docker network rm archestack
# Everything you made is in the volumes; this deletes it:
docker volume rm archestack-postgres archestack-files archestack-backups

Dit is om uit te proberen. Een server heeft herstarts, updates, certificaten en back-ups buiten de machine nodig, en dat zet Hosten met Docker op.

Andere containerplatformen

Azure Container Apps, Amazon ECS, Google Cloud Run en vergelijkbare platformen draaien dezelfde images. Controleer het volgende voordat je er een kiest:

  • De database. Gebruik de beheerde PostgreSQL 16 van het platform (Azure Database for PostgreSQL, Amazon RDS, Cloud SQL), met een gebruiker die databases mag aanmaken. Draai PostgreSQL zelf niet op een netwerkshare.
  • Een volume voor /files en /backups, zoals Azure Files, Amazon EFS of Filestore. Met meer dan één API-instantie koppelt elke instantie hetzelfde volume.
  • Minstens één API-instantie die altijd draait. Scheduled events, de outbox voor mail en back-ups draaien in de API, dus een platform dat naar nul schaalt, stopt ze. Zet het minimum op één instantie, en houd op Cloud Run de CPU ook buiten verzoeken toegewezen.
  • WebSockets naar /hubs voor live updates. Een verbinding die het platform verbreekt, wordt opnieuw geopend, maar een heel korte idle timeout laat updates te laat aankomen.
  • Grote verzoeken. Imports van packages en bestandsuploads kunnen groot zijn: sta request bodies van minstens 100 MB toe, en verzoeken die een paar minuten duren.
  • Meer dan één API-instantie werkt zonder sticky sessions: ze delen hun toestand via PostgreSQL. Elke instantie heeft daarvoor een rechtstreekse verbinding ermee nodig, dus met een connection pooler zoals PgBouncer ertussen zet je ConnectionStrings__Cluster op PostgreSQL zelf.

Waar dit naartoe gaat

Instellingen van de images somt elke instelling van beide images op. Capaciteit en dimensionering zegt hoeveel één installatie bedient, en Werkruimtes en hosting hoe werkruimtes ze delen.