Files
tomasz-syn-grzegorza 359afb3a59 Initial import: bare-metal stacks, Server UI, GPU fan, tutorials.
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>
2026-07-05 12:02:04 +00:00

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+)