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">
  Skôr než začnete, uistite sa, že server a klienti spĺňajú [systémové
  požiadavky](/sk/platform/v3/requirements).
</Alert>

## Stiahnutie inštalačných súborov

Inštalačné obrazy Platformy IIoT môžete stiahnuť dvoma spôsobmi.

<Tabs labels={['Z externého média', 'Cez internet']}>
  <Fragment slot="panel-0">
    Keď server nemá prístup na internet — napríklad pre podnikovú bezpečnostnú politiku — môžete
    platformu nainštalovať offline. Inštalačné obrazy sa na server prenesú z externého média.
  </Fragment>
  <Fragment slot="panel-1">
    Keď má server prístup na internet, inštalačné obrazy sa na server stiahnu zo vzdialeného
    repozitára.
  </Fragment>
</Tabs>

## Kroky inštalácie

<Steps>

### Skopírovanie potrebného dátového balíka

Skopírujte inštalačný balík na server (vyžadujú sa práva správcu):

- Skopírujte stiahnutý archív `unicloud.tgz` a priečinok `images` (samostatný inštalačný
  balík s archivovanými obrazmi) do domovského priečinka používateľa. Archív obsahuje aj
  konfiguračné súbory `docker-compose.yml` a `.env` (súbor `.env` je skrytý, preto zapnite zobrazovanie skrytých
  súborov).

<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' },
      ],
    },
  ]}
/>

- Skopírujte konfiguračné súbory do `/opt/vadtelnewweb/`.

- V súbore `.env` nastavte systémové prihlasovacie mená a heslá:

```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
```

### Inštalácia Dockera a Docker Compose

#### V distribúcii založenej na CentOS

Nainštalujte Docker a Docker Compose:

```bash
sudo dnf install docker-ce docker-compose
```

Spustite Docker a povoľte jeho spúšťanie pri štarte systému:

```bash
sudo systemctl enable --now docker && systemctl start docker
```

#### V distribúcii založenej na Debiane

Nainštalujte Docker a Docker Compose:

```bash
sudo apt update
sudo apt install docker docker-compose
```

### Inštalácia systému

Zvyšné kroky sú rovnaké na každom operačnom systéme. Pridajte používateľa, pod ktorým sa bude
aplikácia spúšťať, do skupiny `docker`:

```bash
sudo usermod -aG docker ${USER}
```

<Alert type="warning">
  Po spustení tohto príkazu ukončite reláciu a znova sa prihláste, aby sa uplatnili nové oprávnenia.
</Alert>

Rozbaľte archív `unicloud.tgz` v domovskom priečinku používateľa:

```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' },
      ],
    },
  ]}
/>

Otvorte rozbalený priečinok `unicloud` v domovskom priečinku používateľa a spustite inštalačný skript:

```bash
sudo ./remote_install.sh
```

Po nainštalovaní balíka otvorte `/var/lib/unicloud` s právami správcu a zmeňte
vlastníka a skupinu súboru `.env` na aktuálneho používateľa.

Skript vygeneruje prihlasovacie meno a heslo k databáze v súbore `/var/lib/unicloud/.env`. Tieto hodnoty skopírujte
do `/opt/vadtelnewweb/.env`:

```bash
VADTEL_UNICLOUD_TEST_USERNAME=NEED_USERNAME

VADTEL_UNICLOUD_TEST_PASSWORD=NEED_PASSWORD
```

### Rozbalenie a načítanie obrazov

Rozbaľte súbory obrazov v predtým skopírovanom priečinku `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
```

Načítajte obrazy do Dockera:

```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
```

Skontrolujte, či sú obrazy dostupné:

```bash
docker images
```

V zozname by sa malo zobraziť všetkých deväť načítaných obrazov.

Ak sa obrazy načítali bez chýb, spustite z priečinka `/var/lib/unicloud` nasledujúci príkaz:

```bash
docker-compose up -d
```

Vytvorte adresár pre aplikáciu `vadtelnewweb` v `/opt`:

```bash
sudo mkdir /opt/vadtelnewweb
cd /opt/vadtelnewweb
```

Potom skopírujte súbory `docker-compose.yml` a `.env` (ak ste ich pri novej
inštalácii neskopírovali skôr) do `/opt/vadtelnewweb`.

Pri prvom spustení vytvorte databázu:

```bash
docker-compose run app bundle exec rails db:create
```

Teraz spustite aplikáciu:

```bash
docker-compose up -d
```

<Details title="Riešenie problémov">
Ak aplikácia po spustení nahlási nasledujúcu chybu:

```bash
network unicloud_unicloud-net declared as external, but could not be found
```

externá sieť sa počas inštalácie nevytvorila. Vykonajte úvodnú inštaláciu z archívu
`unicloud.tar.tgz` podľa popisu v časti [Inštalácia systému](#inštalácia-systému) a aplikáciu potom
spustite znova:

```bash
docker-compose up -d
```

</Details>

Skontrolujte bežiace kontajnery:

```bash
docker ps
```

Všetky kontajnery by mali byť uvedené so stavom `Up`.

### Kontrola systému

Po spustení aplikácie otvorte v prehliadači IP adresu servera, na ktorom beží,
a potvrďte, že je systém v prevádzke:

```bash
http://127.0.0.1/auth/users/sign_in
```

<Image
  src="/images/deployment/sign-in-en.webp"
  alt="Prihlasovacia stránka Platformy IIoT s poľami pre e-mail a heslo"
  caption="Prihlasovacia stránka Platformy IIoT"
  width={1873}
  height={902}
/>

E-mail a heslo na prihlásenie sú nastavené v súbore `/opt/vadtelnewweb/.env`:

```shell title=".env"
VADTEL_SUPER_ADMIN_EMAIL= (login)
VADTEL_SUPER_ADMIN_PASSWORD= (password)
```

</Steps>

## Ďalšie kroky

Keď je platforma nainštalovaná a beží, nastavte jej čistú aktualizáciu a automatické spustenie spolu so serverom.

<Cards>
  <Card
    icon="refresh-cw"
    title="Aktualizácia a automatické spustenie"
    description="Aktualizujte platformu na nové verzie obrazov a zabezpečte jej automatické spustenie spolu so serverom."
    href="/sk/platform/v3/installation/updates"
  />
</Cards>