import Tabs from '@/components/docs/Tabs.astro';
import Steps from '@/components/docs/Steps.astro';
import FileTree from '@/components/docs/FileTree.astro';
import Image from '@/components/docs/Image.astro';
import Alert from '@/components/docs/Alert.astro';
import Details from '@/components/docs/Details.astro';
import Cards from '@/components/docs/Cards.astro';
import Card from '@/components/docs/Card.astro';

<Alert type="note">
  Stellen Sie vor Beginn sicher, dass Server und Clients die
  [Systemanforderungen](/de/platform/v3/requirements) erfüllen.
</Alert>

## Installationsdateien herunterladen

Sie können die Installations-Images der IIoT-Plattform auf zwei Arten herunterladen.

<Tabs labels={['Von externem Datenträger', 'Über das Internet']}>
  <Fragment slot="panel-0">
    Wenn der Server keinen Internetzugang hat — etwa aufgrund einer unternehmensweiten
    Sicherheitsrichtlinie — können Sie die Plattform offline installieren. Die Installations-Images
    werden von einem externen Datenträger auf den Server übertragen.
  </Fragment>
  <Fragment slot="panel-1">
    Wenn der Server Internetzugang hat, werden die Installations-Images aus einem Remote-Repository
    auf den Server geladen.
  </Fragment>
</Tabs>

## Installationsschritte

<Steps>

### Das erforderliche Datenpaket kopieren

Kopieren Sie das Installationspaket auf den Server (Administratorrechte sind erforderlich):

- Kopieren Sie das heruntergeladene Archiv `unicloud.tgz` und den Ordner `images` (das eigenständige
  Installationspaket mit den archivierten Images) in das Benutzer-Homeverzeichnis. Das Archiv enthält
  außerdem die Konfigurationsdateien `docker-compose.yml` und `.env` (`.env` ist versteckt, aktivieren
  Sie daher die Anzeige versteckter Dateien).

<FileTree
  tree={[
    {
      name: 'images',
      children: [
        { name: 'vadtel-nginx-latest.tar.gz' },
        { name: 'vadtel-app-latest.tar.gz' },
        { name: 'anytelemetry-latest.tar.gz' },
        { name: 'pgbouncer-latest.tar.gz' },
        { name: 'vadteljsondaemon-latest.tar.gz' },
        { name: 'logrotate-latest.tar.gz' },
        { name: 'postgres-15.1-alpine.tar.gz' },
        { name: 'redis-6.0.16-alpine.tar.gz' },
        { name: 'vector-latest.tar.gz' },
      ],
    },
  ]}
/>

- Kopieren Sie die Konfigurationsdateien nach `/opt/vadtelnewweb/`.

- Legen Sie die Systembenutzernamen und -kennwörter in der Datei `.env` fest:

```bash title=".env"
#key
SECRET_KEY_BASE=0356080kcn0ejgk4lwekrf

#DB PGSQL login
PG_APP_USER=ppppp

#DB PGSQL password
PG_APP_PASSWORD= ppppp

#WEB interface login
VADTEL_SUPER_ADMIN_EMAIL=NEED_USERNAME

#WEB interface password
VADTEL_SUPER_ADMIN_PASSWORD=NEED_PASSWORD

#DB PGSQL unicloud login
VADTEL_UNICLOUD_TEST_USERNAME=NEED_USERNAME

#DB PGSQL unicloud password
VADTEL_UNICLOUD_TEST_PASSWORD=NEED_PASSWORD
```

### Docker und Docker Compose installieren

#### Auf einer CentOS-basierten Distribution

Installieren Sie Docker und Docker Compose:

```bash
sudo dnf install docker-ce docker-compose
```

Starten Sie Docker und aktivieren Sie den Start beim Booten:

```bash
sudo systemctl enable --now docker && systemctl start docker
```

#### Auf einer Debian-basierten Distribution

Installieren Sie Docker und Docker Compose:

```bash
sudo apt update
sudo apt install docker docker-compose
```

### Das System installieren

Die übrigen Schritte sind auf jedem Betriebssystem identisch. Fügen Sie den Benutzer, der die
Anwendung ausführen wird, der Gruppe `docker` hinzu:

```bash
sudo usermod -aG docker ${USER}
```

<Alert type="warning">
  Beenden Sie nach Ausführung dieses Befehls die Sitzung und melden Sie sich erneut an, damit die
  neuen Berechtigungen wirksam werden.
</Alert>

Entpacken Sie das Archiv `unicloud.tgz` im Benutzer-Homeverzeichnis:

```bash
tar -xf unicloud.tgz
```

<FileTree
  tree={[
    {
      name: 'unicloud',
      children: [
        {
          name: 'run',
          state: 'closed',
          children: [{ name: 'db-unicloud', type: 'folder', state: 'closed' }],
        },
        { name: 'remote_install.sh' },
        { name: 'init-db', children: [{ name: 'create_tables.sql' }] },
        { name: 'script_conf.sh' },
        { name: 'docker-compose.yml' },
        {
          name: 'logs',
          state: 'closed',
          children: [
            { name: 'crontab', type: 'folder', state: 'closed' },
            { name: 'vadteljsondaemon', type: 'folder', state: 'closed' },
            { name: 'anytelemetry', type: 'folder', state: 'closed' },
          ],
        },
        { name: 'backups', type: 'folder', state: 'closed' },
        {
          name: 'data',
          state: 'closed',
          children: [{ name: 'db-unicloud', type: 'folder', state: 'closed' }],
        },
        {
          name: 'local-images',
          children: [
            { name: 'pgbouncer.tar.gz' },
            { name: 'postgres.tar.gz' },
            { name: 'vadteljsondaemon.tar.gz' },
            { name: 'anytelemetry.tar.gz' },
            { name: 'logrotate.tar.gz' },
          ],
        },
        { name: 'unicloud.service' },
      ],
    },
  ]}
/>

Öffnen Sie den entpackten Ordner `unicloud` im Benutzer-Homeverzeichnis und führen Sie das
Installationsskript aus:

```bash
sudo ./remote_install.sh
```

Öffnen Sie nach der Installation des Pakets `/var/lib/unicloud` mit Administratorrechten und ändern
Sie Eigentümer und Gruppe der Datei `.env` auf den aktuellen Benutzer.

Das Skript erzeugt Benutzernamen und Kennwort für die Datenbank in `/var/lib/unicloud/.env`. Kopieren
Sie diese Werte nach `/opt/vadtelnewweb/.env`:

```bash
VADTEL_UNICLOUD_TEST_USERNAME=NEED_USERNAME

VADTEL_UNICLOUD_TEST_PASSWORD=NEED_PASSWORD
```

### Die Images extrahieren und laden

Entpacken Sie die Image-Dateien im zuvor kopierten Ordner `images`:

```bash
gunzip vadtel-nginx-latest.tar.gz
gunzip vadtel-app-latest.tar.gz
gunzip anytelemetry-latest.tar.gz
gunzip pgbouncer-latest.tar.gz
gunzip vadteljsondaemon-latest.tar.gz
gunzip logrotate-latest.tar.gz
gunzip postgres-15.1-alpine.tar.gz
gunzip redis-6.0.16-alpine.tar.gz
gunzip vector-latest.tar.gz
```

Laden Sie die Images in Docker:

```bash
docker load -i vadtel-nginx-latest.tar
docker load -i vadtel-app-latest.tar
docker load -i anytelemetry-latest.tar
docker load -i pgbouncer-latest.tar
docker load -i vadteljsondaemon-latest.tar
docker load -i logrotate-latest.tar
docker load -i postgres-15.1-alpine.tar
docker load -i redis-6.0.16-alpine.tar
docker load -i vector-latest.tar.gz
```

Prüfen Sie, ob die Images verfügbar sind:

```bash
docker images
```

Alle neun geladenen Images sollten in der Liste erscheinen.

Wenn die Images fehlerfrei geladen wurden, führen Sie den folgenden Befehl aus dem Ordner
`/var/lib/unicloud` aus:

```bash
docker-compose up -d
```

Erstellen Sie unter `/opt` ein Verzeichnis für die Anwendung `vadtelnewweb`:

```bash
sudo mkdir /opt/vadtelnewweb
cd /opt/vadtelnewweb
```

Kopieren Sie anschließend die Dateien `docker-compose.yml` und `.env` (falls Sie sie nicht bereits
zuvor für eine Neuinstallation kopiert haben) nach `/opt/vadtelnewweb`.

Erstellen Sie beim ersten Start die Datenbank:

```bash
docker-compose run app bundle exec rails db:create
```

Starten Sie nun die Anwendung:

```bash
docker-compose up -d
```

<Details title="Fehlerbehebung">
Wenn die Anwendung nach dem Start den folgenden Fehler meldet:

```bash
network unicloud_unicloud-net declared as external, but could not be found
```

wurde das externe Netzwerk während der Installation nicht erstellt. Führen Sie die Erstinstallation
aus dem Archiv `unicloud.tar.tgz` wie unter [Das System installieren](#das-system-installieren)
beschrieben durch und starten Sie die Anwendung anschließend erneut:

```bash
docker-compose up -d
```

</Details>

Prüfen Sie die laufenden Container:

```bash
docker ps
```

Alle Container sollten mit dem Status `Up` aufgeführt sein.

### Das System überprüfen

Öffnen Sie nach dem Start der Anwendung die IP-Adresse des Servers, auf dem sie läuft, in Ihrem
Browser, um zu bestätigen, dass das System läuft:

```bash
http://127.0.0.1/auth/users/sign_in
```

<Image
  src="/images/deployment/sign-in-en.webp"
  alt="Anmeldeseite der IIoT-Plattform mit Feldern für E-Mail-Adresse und Kennwort"
  caption="Anmeldeseite der IIoT-Plattform"
  width={1873}
  height={902}
/>

E-Mail-Adresse und Kennwort für die Anmeldung werden in `/opt/vadtelnewweb/.env` festgelegt:

```shell title=".env"
VADTEL_SUPER_ADMIN_EMAIL= (login)
VADTEL_SUPER_ADMIN_PASSWORD= (password)
```

</Steps>

## Nächste Schritte

Nachdem die Plattform installiert ist und läuft, richten Sie sie so ein, dass sie sauber aktualisiert
wird und gemeinsam mit dem Server automatisch neu startet.

<Cards>
  <Card
    icon="refresh-cw"
    title="Aktualisierung und Autostart"
    description="Aktualisieren Sie die Plattform auf neue Image-Versionen und sorgen Sie dafür, dass sie automatisch mit dem Server startet."
    href="/de/platform/v3/installation/updates"
  />
</Cards>