Serwer Crunu w Docker Compose
Hostuj serwer Crunu na własnej maszynie przez Docker Compose: Caddy z automatycznym TLS albo Cloudflare Tunnel bez otwartych portów oraz SQLite lub Postgres.
- Obsługa
- Działa z Crunu już dziś: obsługa Docker jest częścią produktu.
- Funkcje Crunu
- Własny hosting i Zaszyfrowany sejf
- Sprawdzono
- Z wersją Crunu 6.0.0, 28 października 2026
Funkcje Crunu, które działają z Docker
Każda z poniższych funkcji działa tak samo w każdej integracji: serwer przechowuje zaszyfrowane dane, a odszyfrować je mogą tylko osoby, maszyny i tokeny, którym dasz dostęp.
Własny hosting
Uruchom ten sam serwer Crunu na własnym hoście z Dockerem, Cloudflare Workers, Vercel lub Google Cloud Run i przenoś go między nimi jednym archiwum.
Dowiedz się więcej
Zaszyfrowany sejf
Przechowuj pliki .env, dane dostępowe do chmury i klucze API w projektach i środowiskach, szyfrowane na twoich urządzeniach, zanim cokolwiek trafi na serwer.
Dowiedz się więcej
Jak to działa z Docker
Na tej stronie
Co Crunu robi z Dockerem
Crunu działa w chmurze na app.crunu.com, więc większość zespołów nigdy nie wdraża serwera. Jeśli wolisz trzymać go na własnej maszynie, serwer ma gotową konfigurację Docker Compose: kontener serwera oraz Caddy, który sam wystawia certyfikat TLS dla twojej domeny.
Gdziekolwiek działa, serwer nie może odczytać wartości. Jego baza danych zawiera zaszyfrowane dane, klucze publiczne, podpisane dokumenty i metadane, a serwer nie ma żadnego klucza, który odszyfrowałby wartość. Porównanie opcji znajdziesz na stronie o własnym hostingu.
Wymagania
- Maszyny z Dockerem i domeny z rekordem A lub AAAA, który na nią wskazuje.
- Otwartych portów 80 i 443, żeby Caddy mógł uzyskać certyfikat.
- Node.js 24 i plików serwera Crunu na tej maszynie. Poniższe polecenia uruchamia się z katalogu serwera.
Uruchomienie serwera
Adres serwera wybierz raz. Podpisy logowania, linki dostępu, klucze dostępu i zarejestrowane maszyny są z nim powiązane, a późniejsze przeniesienie na inną platformę zachowuje ten sam adres.
node scripts/server-init.mjs --origin https://vault.company.example --out deploy/docker/.env
docker compose -f deploy/docker/compose.yml up -d --buildserver-init zapisuje plik .env z uprawnieniami 0600 i nowymi wartościami SERVER_KEY, BOOTSTRAP_TOKEN i CRON_SECRET. Od razu zapisz jego kopię w menedżerze haseł: bez niego serwera nie da się przywrócić. Domyślną bazą danych jest SQLite w woluminie Dockera. Dla Postgresa obok serwera uruchom server-init z --docker-postgres.
Następnie sprawdź wdrożenie i utwórz pierwszego właściciela kluczem startowym z .env:
node scripts/doctor.mjs https://vault.company.exampleCloudflare Tunnel zamiast otwartych portów
Serwer może też łączyć się z internetem przez Cloudflare Tunnel. Na maszynie nic nie jest publikowane, cloudflared łączy się bezpośrednio z serwerem, a TLS kończy Cloudflare. Umieść token tunelu w deploy/docker/.env, skieruj publiczną nazwę hosta tunelu na usługę server:8080 i dodaj plik tunelu do głównego pliku:
docker compose -f deploy/docker/compose.yml -f deploy/docker/compose.tunnel.yml up -d --buildPlik tunelu daje cloudflared stały adres we własnej sieci Dockera, a serwer ufa nagłówkowi z adresem klienta tylko z tego adresu, więc ograniczenia sieciowe widzą prawdziwy adres klienta.
Jak działa kontener
Konfiguracja Compose uruchamia serwer z głównym systemem plików tylko do odczytu, bez uprawnień (capabilities) Linuksa i jako użytkownik bez uprawnień, a ponowne uruchomienie na tej samej bazie danych jest przetestowane. Migracje schematu serwer stosuje sam przy starcie. Aktualizacja to to samo docker compose … up -d --build po pobraniu nowej wersji.
Obraz zawiera gotowego klienta webowego z dist/web/. Jeśli tego katalogu brakuje albo zawiera inną wersję niż serwer, kompilacja się zatrzymuje, zamiast samodzielnie budować niepodpisanego klienta webowego.
Kopie zapasowe i przenoszenie
crunu-server export zapisuje całą bazę danych do jednego archiwum bez jawnych wartości, a crunu-server import wczytuje je do pustej bazy na dowolnej obsługiwanej platformie: Docker, Cloudflare Workers, Vercel lub Google Cloud Run. Zachowaj ten sam .env i ten sam adres, a zmieni się tylko rekord DNS.
To archiwum przenosi serwer, który prowadzisz. Przejście z app.crunu.com na własny serwer nie jest jednym krokiem, bo do bazy danych w chmurze ma dostęp tylko operator. Wyeksportuj każde środowisko jako plik .env albo pobierz kopię offline, a potem dodaj pliki na swoim serwerze. Historia, ustawienia dostępu i dziennik audytu nie przechodzą w ten sposób.
Agent crunu w kontenerach
Skrypt instalacyjny agenta crunu ma tryb bez roota dla CI i kontenerów. Jest testowany w obrazach node:24, Ubuntu 24.04 i Alpine 3.22. W CI i innych krótkotrwałych kontenerach crunu działa z tokenem usługowym: loguje się i odszyfrowuje wewnątrz własnego procesu, bez plików stanu. Minimalny obraz bez ca-certificates nie może zweryfikować certyfikatu serwera, a crunu podpowiada, który pakiet zainstalować.
Usługa agenta w tle wymaga systemd i działa na hostach z Linuksem. Zobacz systemd.
Zobacz także
Odpowiedzi na pytania
Nie ma tu odpowiedzi? Napisz na support@crunu.com, a odpowie ci człowiek.
Skąd wziąć serwer?
Serwer nie jest publikowany do publicznego pobrania. Napisz na support@crunu.com.
Jakiej bazy danych używa?
Domyślnie SQLite w woluminie Dockera albo Postgresa obok serwera.
Czy da się uniknąć otwierania portów?
Tak. Uruchom serwer za Cloudflare Tunnel z plikiem Compose dla tunelu, a TLS zakończy Cloudflare.
Czy mogę przejść z app.crunu.com na własny serwer?
Nie w jednym kroku. Wyeksportuj każde środowisko jako plik .env albo pobierz kopię offline. Historia, ustawienia dostępu i dziennik audytu nie przechodzą w ten sposób.