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">
  Перш ніж починати, переконайтеся, що сервер і клієнти відповідають [системним
  вимогам](/ua/platform/v3/requirements).
</Alert>

## Завантаження файлів встановлення

Завантажити інсталяційні образи IIoT Платформи можна двома способами.

<Tabs labels={['Зі зовнішнього носія', 'Через інтернет']}>
  <Fragment slot="panel-0">
    Коли сервер не має доступу до інтернету — наприклад, через корпоративну політику безпеки —
    платформу можна встановити в автономному режимі. Інсталяційні образи переносяться на сервер зі
    зовнішнього носія.
  </Fragment>
  <Fragment slot="panel-1">
    Коли сервер має доступ до інтернету, інсталяційні образи завантажуються на сервер із віддаленого
    репозиторію.
  </Fragment>
</Tabs>

## Кроки встановлення

<Steps>

### Скопіюйте потрібний пакет даних

Скопіюйте інсталяційний пакет на сервер (потрібні права адміністратора):

- Скопіюйте завантажений архів `unicloud.tgz` і теку `images` (автономний інсталяційний
  пакет з архівованими образами) до домашньої теки користувача. Архів також містить
  конфігураційні файли `docker-compose.yml` і `.env` (`.env` прихований, тож увімкніть показ
  прихованих файлів).

<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' },
      ],
    },
  ]}
/>

- Скопіюйте конфігураційні файли до `/opt/vadtelnewweb/`.

- Задайте системні логіни та паролі у файлі `.env`:

```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 і Docker Compose

#### У дистрибутиві на базі CentOS

Встановіть Docker і Docker Compose:

```bash
sudo dnf install docker-ce docker-compose
```

Запустіть Docker і додайте його до автозавантаження:

```bash
sudo systemctl enable --now docker && systemctl start docker
```

#### У дистрибутиві на базі Debian

Встановіть Docker і Docker Compose:

```bash
sudo apt update
sudo apt install docker docker-compose
```

### Встановіть систему

Решта кроків однакові для всіх операційних систем. Додайте користувача, від імені якого
працюватиме застосунок, до групи `docker`:

```bash
sudo usermod -aG docker ${USER}
```

<Alert type="warning">
  Після виконання цієї команди завершіть сеанс і ввійдіть знову, щоб застосувати нові права.
</Alert>

Розпакуйте архів `unicloud.tgz` у домашній теці користувача:

```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' },
      ],
    },
  ]}
/>

Відкрийте розпаковану теку `unicloud` у домашній теці користувача та запустіть інсталяційний сценарій:

```bash
sudo ./remote_install.sh
```

Після встановлення пакета відкрийте `/var/lib/unicloud` з правами адміністратора та змініть
власника й групу файлу `.env` на поточного користувача.

Сценарій генерує логін і пароль бази даних у `/var/lib/unicloud/.env`. Скопіюйте ці значення
до `/opt/vadtelnewweb/.env`:

```bash
VADTEL_UNICLOUD_TEST_USERNAME=NEED_USERNAME

VADTEL_UNICLOUD_TEST_PASSWORD=NEED_PASSWORD
```

### Розпакуйте та завантажте образи

Розпакуйте файли образів у раніше скопійованій теці `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
```

Завантажте образи в 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
```

Перевірте, що образи доступні:

```bash
docker images
```

Усі дев'ять завантажених образів мають з'явитися у списку.

Якщо образи завантажилися без помилок, виконайте з теки `/var/lib/unicloud` таку команду:

```bash
docker-compose up -d
```

Створіть каталог для застосунку `vadtelnewweb` у `/opt`:

```bash
sudo mkdir /opt/vadtelnewweb
cd /opt/vadtelnewweb
```

Потім скопіюйте файли `docker-compose.yml` і `.env` (якщо ви не скопіювали їх раніше для нового
встановлення) до `/opt/vadtelnewweb`.

Під час першого запуску створіть базу даних:

```bash
docker-compose run app bundle exec rails db:create
```

Тепер запустіть застосунок:

```bash
docker-compose up -d
```

<Details title="Усунення несправностей">
Якщо після запуску застосунок повідомляє про таку помилку:

```bash
network unicloud_unicloud-net declared as external, but could not be found
```

це означає, що зовнішню мережу не було створено під час встановлення. Виконайте початкове встановлення з
архіву `unicloud.tar.tgz`, як описано в розділі [Встановіть систему](#install-the-system), після чого знову запустіть
застосунок:

```bash
docker-compose up -d
```

</Details>

Перевірте запущені контейнери:

```bash
docker ps
```

Усі контейнери мають бути у списку зі статусом `Up`.

### Перевірте систему

Після запуску застосунку відкрийте у браузері IP-адресу сервера, на якому він працює, щоб
переконатися, що система працює:

```bash
http://127.0.0.1/auth/users/sign_in
```

<Image
  src="/images/deployment/sign-in-en.webp"
  alt="Сторінка входу IIoT Платформи з полями електронної пошти та пароля"
  caption="Сторінка входу IIoT Платформи"
  width={1873}
  height={902}
/>

Електронну пошту та пароль для входу задано у `/opt/vadtelnewweb/.env`:

```shell title=".env"
VADTEL_SUPER_ADMIN_EMAIL= (login)
VADTEL_SUPER_ADMIN_PASSWORD= (password)
```

</Steps>

## Подальші кроки

Коли платформу встановлено й запущено, налаштуйте її на коректне оновлення та автоматичний перезапуск разом із сервером.

<Cards>
  <Card
    icon="refresh-cw"
    title="Оновлення та автозапуск"
    description="Оновлюйте платформу до нових версій образів і налаштуйте її автоматичний запуск разом із сервером."
    href="/ua/platform/v3/installation/updates"
  />
</Cards>