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">
  Înainte de a începe, asigurați-vă că serverul și stațiile client îndeplinesc [cerințele de
  sistem](/ro/platform/v3/requirements).
</Alert>

## Descărcarea fișierelor de instalare

Imaginile de instalare ale subsistemului Data Platform se pot descărca în două moduri.

<Tabs labels={['De pe suporturi externe', 'Prin internet']}>
  <Fragment slot="panel-0">
    Când serverul nu are acces la internet – de exemplu, din cauza politicii de securitate a
    întreprinderii –, platforma se poate instala offline. Imaginile de instalare se transferă pe
    server de pe suporturi externe.
  </Fragment>
  <Fragment slot="panel-1">
    Când serverul are acces la internet, imaginile de instalare se descarcă pe server dintr-un
    depozit la distanță.
  </Fragment>
</Tabs>

## Pașii de instalare

<Steps>

### Copiați pachetul de date necesar

Copiați pachetul de instalare pe server (sunt necesare drepturi de administrator):

- Copiați arhiva descărcată `unicloud.tgz` și folderul `images` (pachetul de instalare autonom cu
  imaginile arhivate) în folderul personal al utilizatorului. Arhiva conține și fișierele de
  configurare `docker-compose.yml` și `.env` (fișierul `.env` este ascuns, așa că activați afișarea
  fișierelor ascunse).

<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' },
      ],
    },
  ]}
/>

- Copiați fișierele de configurare în `/opt/vadtelnewweb/`.

- Introduceți în fișierul `.env` numele de utilizator și parolele sistemului:

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

### Instalați Docker și Docker Compose

#### Pe o distribuție bazată pe CentOS

Instalați Docker și Docker Compose:

```bash
sudo dnf install docker-ce docker-compose
```

Porniți Docker și activați pornirea lui automată la inițializarea sistemului:

```bash
sudo systemctl enable --now docker && systemctl start docker
```

#### Pe o distribuție bazată pe Debian

Instalați Docker și Docker Compose:

```bash
sudo apt update
sudo apt install docker docker-compose
```

### Instalați sistemul

Pașii care urmează sunt aceiași pe orice sistem de operare. Adăugați în grupul `docker` utilizatorul
care va rula aplicația:

```bash
sudo usermod -aG docker ${USER}
```

<Alert type="warning">
  După executarea acestei comenzi, încheiați sesiunea și autentificați-vă din nou pentru ca noile
  drepturi să se aplice.
</Alert>

Extrageți conținutul arhivei `unicloud.tgz` în folderul personal al utilizatorului:

```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' },
      ],
    },
  ]}
/>

Deschideți folderul extras `unicloud` din folderul personal al utilizatorului și rulați scriptul de
instalare:

```bash
sudo ./remote_install.sh
```

După instalarea pachetului, deschideți `/var/lib/unicloud` cu privilegii de administrator și setați
utilizatorul curent ca proprietar și grup al fișierului `.env`.

Scriptul generează numele de utilizator și parola bazei de date în `/var/lib/unicloud/.env`.
Copiați aceste valori în `/opt/vadtelnewweb/.env`:

```bash
VADTEL_UNICLOUD_TEST_USERNAME=NEED_USERNAME

VADTEL_UNICLOUD_TEST_PASSWORD=NEED_PASSWORD
```

### Dezarhivați și încărcați imaginile

Dezarhivați fișierele imaginilor din folderul `images` copiat anterior:

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

Încărcați imaginile în 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
```

Verificați dacă imaginile sunt disponibile:

```bash
docker images
```

În listă trebuie să apară toate cele nouă imagini încărcate.

Dacă imaginile s-au încărcat fără erori, rulați următoarea comandă din folderul `/var/lib/unicloud`:

```bash
docker-compose up -d
```

Creați în `/opt` un director pentru aplicația `vadtelnewweb`:

```bash
sudo mkdir /opt/vadtelnewweb
cd /opt/vadtelnewweb
```

Apoi copiați fișierele `docker-compose.yml` și `.env` (dacă nu le-ați copiat mai devreme pentru o
instalare nouă) în `/opt/vadtelnewweb`.

La prima rulare, creați baza de date:

```bash
docker-compose run app bundle exec rails db:create
```

Acum porniți aplicația:

```bash
docker-compose up -d
```

<Details title="Depanare">
Dacă după pornire aplicația raportează următoarea eroare:

```bash
network unicloud_unicloud-net declared as external, but could not be found
```

rețeaua externă nu a fost creată în timpul instalării. Efectuați instalarea inițială din arhiva
`unicloud.tar.tgz`, așa cum este descris în [Instalați sistemul](#instalați-sistemul), apoi porniți
din nou aplicația:

```bash
docker-compose up -d
```

</Details>

Verificați containerele care rulează:

```bash
docker ps
```

Toate containerele trebuie să apară în listă cu starea `Up`.

### Verificați sistemul

După ce aplicația a pornit, deschideți în browser adresa IP a serverului pe care rulează,
pentru a confirma că sistemul funcționează:

```bash
http://127.0.0.1/auth/users/sign_in
```

<Image
  src="/images/deployment/sign-in-en.webp"
  alt="Pagina de autentificare Data Platform cu câmpurile pentru adresa de e-mail și parolă"
  caption="Pagina de autentificare Data Platform"
  width={1873}
  height={902}
/>

Adresa de e-mail și parola pentru autentificare se setează în `/opt/vadtelnewweb/.env`:

```shell title=".env"
VADTEL_SUPER_ADMIN_EMAIL= (login)
VADTEL_SUPER_ADMIN_PASSWORD= (password)
```

</Steps>

## Pașii următori

După ce platforma este instalată și funcționează, configurați-o astfel încât să se actualizeze fără probleme și să repornească automat odată cu serverul.

<Cards>
  <Card
    icon="refresh-cw"
    title="Actualizare și pornire automată"
    description="Actualizați platforma la versiuni noi ale imaginilor și configurați-o să pornească automat odată cu serverul."
    href="/ro/platform/v3/installation/updates"
  />
</Cards>