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">
  پیش از شروع، مطمئن شوید که سرور و کاربران، [پیش‌نیازهای سامانه](/fa/platform/v3/requirements) را
  برآورده می‌کنند.
</Alert>

## دانلود فایل‌های نصب

ایمیج‌های نصب پلتفرم IIoT را به دو روش می‌توانید دانلود کنید.

<Tabs labels={['از رسانه خارجی', 'از طریق اینترنت']}>
  <Fragment slot="panel-0">
    هنگامی که سرور دسترسی به اینترنت ندارد — برای نمونه، تحت سیاست امنیتی سازمانی — می‌توانید پلتفرم
    را به‌صورت آفلاین نصب کنید. ایمیج‌های نصب از روی یک رسانه خارجی به سرور منتقل می‌شوند.
  </Fragment>
  <Fragment slot="panel-1">
    هنگامی که سرور به اینترنت دسترسی دارد، ایمیج‌های نصب از یک مخزن راه‌دور روی سرور دریافت (pull)
    می‌شوند.
  </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` همان‌گونه که در
[نصب سامانه](#نصب-سامانه) شرح داده شده انجام دهید، سپس برنامه را دوباره راه‌اندازی کنید:

```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="/fa/platform/v3/installation/updates"
  />
</Cards>