# Aktualisieren über die Kommandozeile

Läuft auf der Installation der Updater, ist das Aktualisieren in der Oberfläche
am bequemsten – das beschreibt
[Aktualisieren mit dem Updater](/de/admin/updating-with-the-updater). Hier
steht derselbe Ablauf über die Kommandozeile; er funktioniert immer, mit oder
ohne Updater. Alle Befehle laufen im Verzeichnis der Installation.

## Auf eine neue Version aktualisieren

Jede Version ist ein neues Paket. Übergeben Sie es entweder direkt dem Befehl:

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

oder kopieren Sie es in den Ordner `updates/` und führen Sie aus:

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

Die Aktualisierung verursacht **keinen Ausfall** und läuft Schritt für Schritt:

1. sie prüft das Paket anhand der Schlüssel der installierten Version – bevor
   sie irgendetwas daraus verwendet,
2. sie speichert eine Datenbanksicherung in `backups/` (die letzten drei
   Sicherungen von vor einer Aktualisierung bleiben erhalten, die Zahl legt
   `DRAFTEN_BACKUPS` in `.env` fest; die täglichen Sicherungen werden getrennt
   gezählt, siehe
   [Sicherung und Wiederherstellung](/de/admin/backup-and-restore)),
3. sie führt die Migrationen der Datenbank aus,
4. sie ersetzt die Worker,
5. sie startet die neue Version der Weboberfläche neben der, die gerade
   bedient, und schaltet auf sie um, sobald sie gesund ist.

Wird die neue Version nicht gesund, wird nichts umgeschaltet, und die
vorherige bedient weiter.

Ein Paket lässt sich auch prüfen, ohne es zu installieren:

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

## Nach der Aktualisierung

```
./draften status
```

zeigt, welche Farbe der Weboberfläche bedient, die Version und den Zustand
beider Farben und der Worker, den Stand von HTTPS und die
Datenbanksicherungen. Auf der Seite **Betrieb** melden sich die Worker, und das
Urteil lautet „die Kapazität reicht“. Was die Version geändert hat, steht in
der Datei `NOTES.md`.

## Zur vorherigen Version zurückkehren

Die Version, die vor der Aktualisierung bedient hat, läuft ohne Verkehr weiter.
Auf sie schalten Sie sofort zurück:

```
./draften rollback
```

Das geht, weil die Datenbank auch für die vorherige Version lesbar bleibt.

## Zu einer noch älteren Version zurückkehren

Das geht nur über die Wiederherstellung einer Datenbanksicherung. Jede
Sicherung in `backups/` trägt im Namen die Version, die bei ihrer Erstellung
lief (`<time>-<version>.sql.gz` vor einer Aktualisierung,
`<time>-<version>.backup.sql.gz` täglich und auf Anfrage):

```
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
```

Alles, was in draften nach der Erstellung der Sicherung geschehen ist, geht
verloren.

!> Eine Sicherung von vor dem Ersetzen des Verschlüsselungsschlüssels öffnet
sich nur mit dem vorherigen Schlüssel, `MASTER_KEY_PREVIOUS` in `.env`. Siehe
[Sicherung und Wiederherstellung](/de/admin/backup-and-restore).

## Ein Rechner ohne Internet

Der Updater lädt neue Versionen mit dem Schlüssel aus der Lizenz herunter. Ein
Rechner ohne Internet lädt nichts herunter: Kopieren Sie das Paket in
`updates/` und aktualisieren Sie mit `./draften update <version>` – oder der
Updater bietet es Ihnen von dort in der Oberfläche an.

## Was sich nicht von selbst ändert

- **Einstellungen, Anweisungen und Quellen der Assistenten** stehen in der
  Datenbank, und eine Aktualisierung rührt sie nicht an.
- **Das Client secret einer Entra-Registrierung** läuft ab, je nachdem, für wie
  lange Sie es ausgestellt haben; erneuern Sie es in der Oberfläche
  (Organisation → Integrationen → Neues Geheimnis), nicht durch eine
  Aktualisierung.
- **Das HTTPS-Zertifikat** erneuern Sie selbst:
  `./draften certificate new.pem new.key`.
