# Portainer — setup token (archiwum) > **Portainer usunięty 2026-07-04.** Aktualny Docker UI: [Server UI](../stacks/server-ui/README.md) na porcie **8091**. Od Portainer **2.43** (w tym `portainer-ce:latest`) przy **pierwszej** konfiguracji panelu potrzebny jest **setup token** — jednorazowy kod z logów kontenera. Chroni to świeżą instalację przed przejęciem przez kogoś innego w sieci LAN. **To nie jest** token API z menu użytkownika (ten tworzysz później, po zalogowaniu). --- ## Czy mnie to dotyczy? | Sytuacja | Co robić | |----------|----------| | Logujesz się już **loginem i hasłem** | Setup token **nie** jest potrzebny | | W przeglądarce widzisz pole **Setup token** | Potrzebujesz kodu z logów (poniżej) | | Plik `/data/apps/portainer/data/portainer.db` **istnieje** | Instancja została już zainicjowana — zwykle logujesz się hasłem, nie tokenem | Sprawdzenie na serwerze (SSH): ```bash ls -la /data/apps/portainer/data/portainer.db ``` Jeśli plik jest — konto admina mogło zostać utworzone. Jeśli nie pamiętasz hasła, patrz sekcja [Reset od zera](#reset-od-zera-ostrożnie). --- ## Jak znaleźć setup token (krok po kroku) ### 1. Upewnij się, że kontener działa ```bash docker ps --filter name=portainer ``` Powinien być **Up**. ### 2. Odczytaj token z logów Na maszynie z Dockerem (ten sam host co Portainer): ```bash docker logs portainer 2>&1 | grep setup_token ``` Szukaj linii w stylu: ```text setup_token=AbCdEf123456... ``` **Kopiujesz tylko część po znaku `=`** (bez `setup_token=`). Jeśli `grep` nic nie zwraca: ```bash docker logs portainer 2>&1 | less ``` W `less` wciśnij `/` i wpisz `setup_token`, Enter. ### 3. Wpisz token w przeglądarce 1. Otwórz **http://192.168.100.90:9000** 2. Wklej **Setup token** 3. Ustaw **hasło administratora** (minimum **12 znaków**) 4. Zatwierdź i wybierz środowisko **Local** (Docker na tym komputerze) ### 4. Ważne ograniczenia czasowe - Token jest **jednorazowy** — po udanym setupie nie musisz go zapisywać. - Masz około **5 minut** od startu kontenera na dokończenie konfiguracji. Po tym czasie token może wygasnąć. - Jeśli minęło za dużo czasu: zrestartuj kontener i **od razu** odczytaj nowy token: ```bash cd /home/tomasz-syn-grzegorza/cursor/ubuntu-bare-metal/stacks/portainer docker compose --profile portainer restart portainer sleep 3 docker logs portainer 2>&1 | grep setup_token ``` --- ## Gdy token „nie działa” | Problem | Rozwiązanie | |---------|-------------| | „Invalid setup token” | Ponownie `docker logs portainer \| grep setup_token` — literówka, stary token | | Minęło > 5 min | Restart kontenera (jak wyżej), nowy token z logów | | Panel mówi, że admin już istnieje | **Nie** szukaj tokena — loguj się hasłem ustawionym wcześniej | | Brak linii `setup_token` w logach | Możliwe, że setup już zakończony (`portainer.db` istnieje) lub starsza wersja obrazu | --- ## Jak pominąć setup token (tylko zaufana sieć LAN) Jeśli Portainer działa **wyłącznie** w domowej sieci (`192.168.100.x`) i **nie** jest wystawiony na internet, możesz wyłączyć wymóg tokena. W [`stacks/portainer/docker-compose.yml`](../stacks/portainer/docker-compose.yml) dodaj pod serwisem `portainer`: ```yaml command: --no-setup-token ``` Potem: ```bash cd stacks/portainer docker compose --profile portainer up -d ``` **Uwagi:** - Działa sensownie przy **nowej** instalacji (brak `portainer.db`). Przy istniejącej bazie ta flaga **nie zmienia** hasła ani konta. - **Nie używaj** `--no-setup-token`, jeśli port 9000 jest dostępny z internetu. - To świadome osłabienie zabezpieczenia przy pierwszym starcie — akceptowalne na izolowanym LAN. --- ## Własny token (zamiast losowego z logów) Przydatne przy skryptach — **nie commituj** tej wartości do git. ```yaml command: --setup-token TwojTajnyKodNaSetup ``` Ten sam ciąg wpisujesz w polu **Setup token** w przeglądarce. --- ## Hasło admina z pliku (bez tokena) Rekomendowane przez Portainer przy instalacjach, gdzie nie masz wygodnego dostępu do logów. ### 1. Plik z hasłem (poza repozytorium) ```bash echo -n 'TwojeSilneHasloMin12Znakow' > /data/apps/portainer/admin-password chmod 600 /data/apps/portainer/admin-password ``` Plik musi zawierać **samą treść hasła** — bez pustej linii na końcu (`echo -n`). ### 2. Zmiany w `docker-compose.yml` ```yaml command: --admin-password-file /run/portainer/admin-password volumes: # ... istniejące wolumeny ... - ${DATA_ROOT:-/data}/apps/portainer/admin-password:/run/portainer/admin-password:ro ``` ### 3. Pierwszy start ```bash cd stacks/portainer docker compose --profile portainer up -d ``` Portainer tworzy konto **admin** z tym hasłem. **Setup token nie jest potrzebny.** **Uwaga:** przy **istniejącym** `portainer.db` ta flaga **nie nadpisuje** hasła. --- ## Setup token vs Access token (API) | | Setup token | Access token | |---|-------------|--------------| | **Kiedy** | Pierwsza konfiguracja panelu | Po zalogowaniu do UI | | **Gdzie go wziąć** | `docker logs portainer` | UI → ikona użytkownika → **My account** → **Access tokens** | | **W pliku `.env` w repo** | Nie | Nie | | **Do czego** | Jednorazowe utworzenie admina | Wywołania API Portainera (skrypty) | W [`stacks/portainer/.env`](../stacks/portainer/.env) **nie ma** żadnego tokena — to normalne. --- ## Reset od zera (ostrożnie) Gdy utknąłeś: nie znasz hasła, token wygasł, a setup się nie udał. ```bash cd /home/tomasz-syn-grzegorza/cursor/ubuntu-bare-metal/stacks/portainer docker compose --profile portainer down mv /data/apps/portainer/data /data/apps/portainer/data.bak.$(date +%Y%m%d) ./scripts/start.sh docker logs portainer 2>&1 | grep setup_token ``` **Stracisz:** zapisane ustawienia Portainer w UI (endpointy, preferencje). Kontenery Docker (`localai`, `npmplus`, …) **nie są** usuwane — tylko konfiguracja samego Portainera. Przy reinstalacji możesz od razu dodać `command: --no-setup-token` lub `--admin-password-file` (sekcje wyżej). --- ## Rekomendacja dla RTX1 (tylko LAN, headless) | Scenariusz | Najprostsza droga | |------------|-------------------| | **Domyślnie w repo** | `--admin-password-file` + plik na `/data` — **bez tokena, bez limitu 5 min** | | Masz SSH, setup token | `docker logs portainer \| grep setup_token` → przeglądarka (w ciągu 5 min) | | Chcesz bez tokena na LAN | `--no-setup-token` przy **czystej** instalacji (nadal ~5 min na hasło w UI) | Stack w repo: [`stacks/portainer/docker-compose.yml`](../stacks/portainer/docker-compose.yml) używa **`--admin-password-file`**. --- ## Stan na hoście (2026-07-04) - Naprawiono timeout pierwszej konfiguracji przez `--admin-password-file` w compose. - Hasło: `/data/apps/portainer/admin-password` (utworzone przy wdrożeniu, **nie** w git). - Logowanie: użytkownik **admin**, hasło z pliku. - `portainer.db` istnieje — konto admin utworzone przy starcie z pliku hasła. --- ## Powiązane dokumenty - [`DOCKER-UI-DEPLOYMENT.md`](DOCKER-UI-DEPLOYMENT.md) - [`DOCKER-UI-HANDOFF.md`](DOCKER-UI-HANDOFF.md) - [`stacks/portainer/README.md`](../stacks/portainer/README.md) - Oficjalna dokumentacja: [How do I find, skip, or customize my setup token?](https://docs.portainer.io/) (Portainer 2.43+)