Oficjalne narzędzie wiersza poleceń Saplo. Instalujesz raz, deployujesz wielokrotnie - z terminala, skryptów CI/CD lub potoku GitHub Actions.
Instalacja
Wymagany Node.js 18+.
Sprawdź wersję po instalacji:
Logowanie
Przed pierwszym użyciem uwierzytelnij się tokenem API:
CLI wyświetli adres https://panel.saplo.pl/cli-auth - otwórz go w przeglądarce, zaloguj się i skopiuj token. Wklej go do terminala po prompcie.
Możesz też podać token bezpośrednio (tryb nieinteraktywny, CI):
Token jest zapisywany do ~/.saplo/config.json (chmod 600).
Szybki start
Trzy komendy wystarczają do pierwszego deployu:
saplo init sam wykrywa stack na podstawie plików w katalogu i generuje gotowy saplo.yaml. Jeśli nie podlinkujesz wcześniej aplikacji, saplo deploy automatycznie wyszuka aplikację o podanej nazwie lub utworzy nową - bez ręcznego klikania w panelu.
Autodetekcja stacka
Komenda saplo init wykrywa stack na podstawie plików w katalogu:
package.jsonz zależnościami: next, nuxt, vue, svelte, react, astro...manage.py- DjangoDockerfile- Dockerindex.htmlbezpackage.json- static- menadżer pakietów:
pnpm-lock.yaml/yarn.lock/ domyślnie npm
Referencja komend
saplo login
Uwierzytelnienie za pomocą tokenu API.
| Flaga | Opis |
|---|---|
| -t, --token | Token API (tryb nieinteraktywny) |
saplo whoami
Pokazuje zalogowanego użytkownika i szczegóły tokenu.
saplo init
Inicjalizuje saplo.yaml w bieżącym katalogu.
| Flaga | Opis |
|---|---|
| -s, --stack | Stack (pomija autodetekcję) |
| -n, --name | Nazwa aplikacji (slug) |
| --app-id | Podlinkuj od razu do istniejącego ID aplikacji |
| -f, --force | Nadpisz istniejący saplo.yaml |
Z TTY (terminal) - interaktywny wizard z pytaniami; wykryty stack jest zaznaczony na liście. Bez TTY (CI, pipe, skrypt) - nieinteraktywny; używa flag i autodetekcji.
saplo link
Podłączenie bieżącego katalogu do istniejącej aplikacji w Saplo. Zapisuje ID do .saplo/project.json.
| Flaga | Opis |
|---|---|
| -a, --app-id | ID aplikacji (pomija wybór z listy) |
saplo deploy
Wdraża bieżący katalog na Saplo.
| Flaga | Opis |
|---|---|
| -a, --app-id | ID aplikacji (nadpisuje .saplo/project.json) |
| --no-logs | Nie streamuj logów buildu, tylko kolejkuj deploy |
| --prebuilt | Pomiń build po stronie serwera (wgraj gotowy output) |
Kolejność ustalania ID aplikacji: --app-id > app_id w saplo.yaml > .saplo/project.json. Jeśli aplikacja nie istnieje, saplo deploy automatycznie ją tworzy.
Przebieg deployu:
- Odczyt
saplo.yaml - Spakowanie katalogu (tarball, z poszanowaniem
.gitignore) - Upload do API
- Streaming logów buildu (live)
- Po sukcesie - wyświetlenie URL aplikacji
saplo status
Pokazuje aktualny stan aplikacji i listę ostatnich deployów.
saplo logs
Wyświetla logi deployu.
| Flaga | Opis |
|---|---|
| -f, --follow | Śledź na bieżąco (polling) |
| -d, --deployment | ID konkretnego deployu (domyślnie: aktualny) |
| -a, --app-id | ID aplikacji |
| -n, --tail | Liczba ostatnich linii (domyślnie: 100) |
saplo rollback
Cofnięcie do poprzedniego deployu.
Bez argumentu - automatycznie cofa do poprzedniego pomyślnego deployu.
saplo open
Otwiera URL aplikacji w domyślnej przeglądarce. Działa na macOS (open), Windows (start) i Linux (xdg-open).
saplo env
Zarządzanie zmiennymi środowiskowymi aplikacji.
saplo env (lista)
Wyświetla wszystkie zmienne środowiskowe. Wartości oznaczone jako sekrety są ukryte.
saplo env set
Ustawia jedną lub więcej zmiennych. Zmienne są aktywne od następnego deployu.
saplo env rm
Usuwa zmienną lub zmienne. Zmiany aktywne od następnego deployu.
saplo env pull
Pobiera zmienne środowiskowe do lokalnego pliku .env. Sekrety są pomijane i wyświetlane jako komentarze.
| Flaga | Opis |
|---|---|
| -o, --output | Ścieżka pliku wyjściowego (domyślnie: .env.local) |
| -f, --force | Nadpisz istniejący plik |
| -a, --app-id | ID aplikacji |
.gitignore - nie commituj zmiennych środowiskowych!
saplo domain
Zarządzanie własnymi domenami.
saplo domain add
Dodaje niestandardową domenę do aplikacji i wyświetla instrukcje konfiguracji DNS. Certyfikat SSL jest wystawiany automatycznie po propagacji DNS (zazwyczaj 1-5 minut).
saplo domain ls
saplo domain rm
Pamiętaj o ręcznym usunięciu lub zaktualizowaniu rekordów DNS po stronie rejestratora.
Obsługiwane stacki
| Stack | Opis | Domyślny port |
|---|---|---|
| nextjs | Next.js (SSR/SSG) | 3000 |
| react | React SPA (Vite / CRA, build statyczny) | 80 |
| vue | Vue 3 + Vite SPA (build statyczny) | 80 |
| nuxt | Nuxt 3 (Node SSR) | 3000 |
| sveltekit | SvelteKit + adapter-node (Node SSR) | 3000 |
| astro | Astro (build statyczny) | 80 |
| angular | Angular SPA (build statyczny) | 80 |
| django | Django + Gunicorn (Python) | 8000 |
| node | Dowolna aplikacja Node.js | 3000 |
| static | Czysty HTML/CSS/JS bez builda | 80 |
| docker | Dowolny Dockerfile (port z EXPOSE) | 8080 |
Typowe scenariusze
Pierwszy deploy od zera
Redeploy po zmianach
Rollback po wadliwym deployu
Zmienne środowiskowe w CI/CD
Deploy z GitHub Actions
Pliki lokalne
| Plik | Opis |
|---|---|
| saplo.yaml | Konfiguracja projektu, commituj do repozytorium |
| .saplo/project.json | ID podłączonej aplikacji, można commitować |
| ~/.saplo/config.json | Token API i konfiguracja globalna (chmod 600) |
Zmienne środowiskowe CLI
| Zmienna | Opis |
|---|---|
| SAPLO_TOKEN | Token API (alternatywa dla saplo login) |
| SAPLO_API_URL | Niestandardowy adres API (domyślnie: https://api.saplo.pl) |