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
| Image | Wat het is | Luistert op |
|---|---|---|
nickpeelman/omnicore-api | De API: elk verzoek, achtergrondtaken (planningen, mail, back-ups) en live updates. /health zegt wanneer hij klaar is. | 8080 |
nickpeelman/omnicore-web | nginx met de builder en de gepubliceerde app. | 80 |
postgres:16 | De database, of in plaats daarvan een beheerde PostgreSQL 16. | 5432 |
nickpeelman/omnicore-grafana, -prometheus, -tempo, -loki, -otel-collector | Optionele 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
- 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 1gin Docker): zijn statistieken groeien met elke database, en de standaard raakt op bij ongeveer duizend werkruimtes. - Twee mappen die een herstart overleven,
/filesvoor uploads en/backupsvoor back-ups. Zonder die mappen verdwijnen uploads bij de volgende update. - 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:
Onder een pad van een hostnaam, zoalsOne 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 emptyhttps://apps.example.com/archestack/, krijgen beide images het pad mee (BASE_PATHenHttp__PathBase). - Een eerste admin. Stel
Identity__InitialAdminEmailenIdentity__InitialAdminPasswordin, 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. - Tijd om te starten. De API beantwoordt
/healthpas met{"status":"ok"}zodra elke database gemigreerd is. Een eerste start duurt een minuut of twee, en langer met veel werkruimtes, dus controleer op/healthof hij klaar is en geef de start genoeg tijd.
De manieren om ze te draaien
| Manier | Voor | Handleiding |
|---|---|---|
| VS Code-project | Applicaties bouwen op je eigen machine. De extensie draait Archestack voor je, zonder Docker op Windows. | VS Code-extensie |
| docker run | Archestack in vijf minuten uitproberen op een laptop. | Hieronder |
| Docker Compose | Eén server, met certificaten op eigen houtje of achter een proxy die je al draait, en nachtelijke updates. | Hosten met Docker |
| Kubernetes-manifesten | Een cluster dat je al hebt, onder een pad van een hostnaam die het al bedient. | Hosten op Kubernetes |
| Helm-chart op AKS | Eigen hostnamen, een beheerde database, meerdere API-replica's, nachtelijke updates. | Hosten op AKS |
| Andere containerplatformen | Azure 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
/filesen/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
/hubsvoor 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__Clusterop 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.