# Aktualizacja z wiersza poleceń

Gdy w instalacji działa updater, najwygodniej aktualizować w interfejsie –
opisuje to strona [Aktualizacja przez updater](/pl/admin/updating-with-the-updater).
Tutaj jest to samo postępowanie z wiersza poleceń; działa zawsze, z updaterem
i bez niego. Wszystkie polecenia uruchamia się w katalogu instalacji.

## Aktualizacja do nowej wersji

Każde wydanie to nowa paczka. Albo przekaż ją bezpośrednio poleceniu:

```
./draften update --bundle /path/to/draften-<new version>.tar
```

albo skopiuj ją do folderu `updates/` i uruchom:

```
./draften update <new version>
```

Aktualizacja **nie powoduje przerwy** i przebiega krok po kroku:

1. sprawdza paczkę względem kluczy zainstalowanego wydania – zanim użyje
   z niej czegokolwiek,
2. zapisuje zrzut bazy danych do `backups/` (przechowywane są trzy ostatnie
   kopie sprzed aktualizacji, liczbę ustala `DRAFTEN_BACKUPS` w `.env`; kopie
   codzienne liczą się osobno, zobacz
   [Kopia zapasowa i odtwarzanie](/pl/admin/backup-and-restore)),
3. wykonuje migracje bazy danych,
4. podmienia workery,
5. uruchamia nową wersję interfejsu obok tej, która obsługuje ruch, i przełącza
   się na nią, gdy tylko jest sprawna.

Jeśli nowa wersja nie stanie się sprawna, nic nie zostaje przełączone,
a poprzednia dalej obsługuje ruch.

Paczkę można też sprawdzić bez instalowania:

```
./draften check draften-<new version>.tar
```

## Po aktualizacji

```
./draften status
```

pokazuje, który kolor interfejsu obsługuje ruch, wersję i stan obu kolorów oraz
workerów, stan HTTPS i zrzuty bazy danych. Na stronie **Utrzymanie** workery
się zgłaszają, a werdykt brzmi „przepustowość wystarcza”. Co zmieniło wydanie,
jest w pliku `NOTES.md`.

## Powrót do poprzedniej wersji

Wersja, która obsługiwała ruch przed aktualizacją, działa dalej bez ruchu.
Przełączysz się na nią natychmiast:

```
./draften rollback
```

To działa, bo baza danych pozostaje czytelna także dla poprzedniej wersji.

## Powrót do jeszcze starszej wersji

Prowadzi do tego tylko odtworzenie zrzutu bazy danych. Każdy zrzut
w `backups/` ma w nazwie wersję, która działała, gdy powstał
(`<time>-<version>.sql.gz` sprzed aktualizacji,
`<time>-<version>.backup.sql.gz` codzienne i na żądanie):

```
docker compose stop worker
gunzip -c backups/<dump>.sql.gz | docker compose exec -T db sh -c 'mariadb -uroot -p"$MARIADB_ROOT_PASSWORD"'
./draften update <version> --no-backup
```

Wszystko, co wydarzyło się w draften po utworzeniu zrzutu, przepada.

!> Zrzut sprzed wymiany klucza szyfrowania otwiera się tylko poprzednim
kluczem, `MASTER_KEY_PREVIOUS` w `.env`. Zobacz [Kopia zapasowa i odtwarzanie](/pl/admin/backup-and-restore).

## Maszyna bez internetu

Updater pobiera nowe wydania kluczem z licencji. Maszyna bez internetu niczego
nie pobiera: skopiuj paczkę do `updates/` i zaktualizuj poleceniem
`./draften update <version>` – albo updater zaproponuje ci ją stamtąd
w interfejsie.

## Co się samo nie zmienia

- **Ustawienia, wytyczne i źródła asystentów** są w bazie danych i aktualizacja
  ich nie dotyka.
- **Client secret rejestracji Entra** wygasa po okresie, na jaki go wystawiono;
  odnawiasz go w interfejsie (Organizacja → Integracje → Nowy sekret), nie
  aktualizacją.
- **Certyfikat HTTPS** odnawiasz samodzielnie: `./draften certificate new.pem new.key`.
