359afb3a59
Infrastructure configs for GMKtec K11 (Docker, vLLM, LocalAI, ComfyUI, control-plane, gpu-fan agent, Server UI with CLI/file explorer/GPU fan curve). Co-authored-by: Cursor <cursoragent@cursor.com>
226 lines
7.2 KiB
Markdown
226 lines
7.2 KiB
Markdown
# 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+)
|