Uruchamianie obrazów Archestack
Archestack to dwa obrazy kontenerów i baza danych PostgreSQL. Każdy sposób jego uruchamiania, od laptopa po klaster Kubernetes, startuje te same dwa obrazy z innymi ustawieniami. Ta strona mówi, czym one są, co każda instalacja musi im zapewnić i który sposób uruchamiania pasuje do jakiego miejsca. Wszystkie ustawienia, które przyjmują obrazy, są na stronie Ustawienia obrazów.
Obrazy
| Obraz | Czym jest | Nasłuchuje na |
|---|---|---|
nickpeelman/omnicore-api | API: każde żądanie, zadania w tle (harmonogramy, poczta, kopie zapasowe) i aktualizacje na żywo. /health mówi, kiedy jest gotowe. | 8080 |
nickpeelman/omnicore-web | nginx z builderem i opublikowaną aplikacją. | 80 |
postgres:16 | Baza danych albo zamiast niej zarządzany PostgreSQL 16. | 5432 |
nickpeelman/omnicore-grafana, -prometheus, -tempo, -loki, -otel-collector | Opcjonalny monitoring: Grafana z dashboardami Archestack i to, co je zasila. |
Każde wydanie ma tag ze swoją wersją, na przykład 1.0.42, a najnowsze ma też tag
latest. Na produkcji uruchamiaj numer wersji, żeby wiedzieć, co działa, i móc przenieść
tę samą wersję z testów na produkcję. API i obraz web z jednego wydania należą do siebie.
Co zapewnia im każda instalacja
- PostgreSQL 16 z użytkownikiem, który może tworzyć bazy danych. API tworzy własne
bazy danych przy pierwszym starcie, a potem parę dla każdej przestrzeni roboczej, więc nie ma
niczego do przygotowania. Daj PostgreSQL 1 GB pamięci współdzielonej (
--shm-size 1gw Dockerze): jego statystyki rosną z każdą bazą danych, a wartość domyślna kończy się przy około tysiącu przestrzeni roboczych. - Dwa foldery, które przetrwają restart:
/filesna przesłane pliki i/backupsna kopie zapasowe. Bez nich przesłane pliki znikają przy następnej aktualizacji. - Droga do każdego obrazu. Przeglądarka ładuje obraz web i wywołuje API pod
/api, a aktualizacje na żywo idą przez WebSocket pod/hubs. Oba mogą dzielić jeden adres, jak w zestawach startowych, albo API dostaje własny adres:
Pod ścieżką nazwy hosta, na przykładOne 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/, oba obrazy dostają tę ścieżkę (BASE_PATHiHttp__PathBase). - Pierwszy administrator. Ustaw
Identity__InitialAdminEmailiIdentity__InitialAdminPasswordalbo otwórz builder zaraz po pierwszym starcie i utwórz tam administratora. Dopóki nikt tego nie zrobi, administratorem zostaje ten, kto pierwszy dotrze do buildera, więc nie zostawiaj świeżej instalacji otwartej w internecie. - Czas na start. API odpowiada na
/healthwartością{"status":"ok"}dopiero wtedy, gdy każda baza danych jest zmigrowana. Pierwszy start trwa minutę lub dwie, a przy wielu przestrzeniach roboczych dłużej, więc sprawdzaj gotowość na/healthi daj startowi wystarczająco dużo czasu.
Sposoby uruchamiania
| Sposób | Do czego | Przewodnik |
|---|---|---|
| Projekt VS Code | Budowanie aplikacji na własnym komputerze. Rozszerzenie uruchamia Archestack za Ciebie, na Windowsie bez Dockera. | Rozszerzenie VS Code |
| docker run | Wypróbowanie Archestack na laptopie w pięć minut. | Poniżej |
| Docker Compose | Jeden serwer, z automatycznymi certyfikatami albo za proxy, które już uruchamiasz, i z nocnymi aktualizacjami. | Hosting z Dockerem |
| Manifesty Kubernetes | Klaster, który już masz, pod ścieżką nazwy hosta, którą już obsługuje. | Hosting na Kubernetesie |
| Chart Helm na AKS | Własne nazwy hostów, zarządzana baza danych, kilka replik API, nocne aktualizacje. | Hosting na AKS |
| Inne platformy kontenerowe | Azure Container Apps, Amazon ECS, Google Cloud Run i podobne. | Poniżej |
Niezależnie od wyboru Twoje aplikacje trafiają tam w ten sam sposób: z repozytorium, przez pipeline.
Wypróbowanie z docker run
Trzy kontenery w jednej sieci Dockera: PostgreSQL, API na porcie 8080 i builder na porcie 8081.
Zamiast change-me wybierz własne hasło.
# 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
Otwórz http://localhost:8081, gdy http://localhost:8080/health zacznie
odpowiadać, i utwórz pierwszego administratora. Builder i opublikowana aplikacja (/app)
są na tym samym porcie, a API na 8080 odpowiada przeglądarce bezpośrednio. Aby znowu wszystko
usunąć:
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 To służy do wypróbowania. Serwer potrzebuje restartów, aktualizacji, certyfikatów i kopii zapasowych przenoszonych poza maszynę, a to konfiguruje Hosting z Dockerem.
Inne platformy kontenerowe
Azure Container Apps, Amazon ECS, Google Cloud Run i podobne platformy uruchamiają te same obrazy. Zanim którąś wybierzesz, sprawdź:
- Bazę danych. Użyj zarządzanego PostgreSQL 16 danej platformy (Azure Database for PostgreSQL, Amazon RDS, Cloud SQL) z użytkownikiem, który może tworzyć bazy danych. Nie uruchamiaj samego PostgreSQL na sieciowym udziale plików.
- Wolumin na
/filesi/backups, taki jak Azure Files, Amazon EFS czy Filestore. Przy więcej niż jednej instancji API każda instancja montuje ten sam. - Co najmniej jedną instancję API działającą zawsze. Zaplanowane zdarzenia, skrzynka nadawcza poczty i kopie zapasowe działają wewnątrz API, więc platforma skalująca do zera je zatrzymuje. Ustaw minimum na jedną instancję, a w Cloud Run pozostaw CPU przydzielony także poza żądaniami.
- WebSockety do
/hubsna potrzeby aktualizacji na żywo. Połączenie przerwane przez platformę jest otwierane ponownie, ale bardzo krótki limit bezczynności sprawia, że aktualizacje docierają z opóźnieniem. - Duże żądania. Importy pakietów i przesyłane pliki mogą być duże: dopuść body żądań o rozmiarze co najmniej 100 MB i żądania trwające kilka minut.
- Więcej niż jedna instancja API działa bez sticky sessions: instancje dzielą stan
przez PostgreSQL. Każda potrzebuje do tego bezpośredniego połączenia z nim, więc jeśli pomiędzy jest
connection pooler, taki jak PgBouncer, ustaw
ConnectionStrings__Clusterna sam PostgreSQL.
Co dalej
Ustawienia obrazów wymieniają wszystkie ustawienia obu obrazów. Wydajność i dobór serwerów mówi, ile obsłuży jedna instalacja, a Przestrzenie robocze i hosting jak przestrzenie robocze ją współdzielą.