﻿# Развёртывание в Docker Compose

## Описание

PVS\-Studio Atlas Server разворачивается в Docker Compose в контейнерах с 64\-х битным Linux\.

Пример конфигурационного файла `docker-compose.yml`:

```cpp
services:
  database:
    image: postgres:18.2
    platform: linux/amd64
    container_name: atlas-database
    restart: unless-stopped
    shm_size: 1g
    environment:
      - TZ=Europe/Moscow
      - POSTGRES_DB=atlas
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password
    volumes:
      - ./postgresql_data:/var/lib/postgresql
    ports:
      - 8081:5432
    healthcheck:
      test: pg_isready -U postgres
      interval: 30s
      start_period: 10s
      timeout: 10s
      retries: 5
  dashboard:
    image: viva64/atlas-dashboard:latest
    platform: linux/amd64
    container_name: atlas-dashboard
    restart: unless-stopped
    shm_size: 1g
    depends_on:
      database:
        condition: service_healthy
    environment:
      - TZ=Europe/Moscow
      - "ATLAS_DB_CONNECTION_STRING=Server=database;Port=5432;\
           Username=postgres;Password=password;Database=atlas;\
           Timeout=300;CommandTimeout=300;"
      #- ATLAS_DB_CONNECTION_STRING_FILE=
      - "ATLAS_JWT_PRIVATE_TOKEN=DEMO_JWT_PRIVATE_TOKEN_\
          loH93fI6vNyL71M0bD6TmCTlZJa"
      #- ATLAS_JWT_PRIVATE_TOKEN_FILE=
      - ATLAS_SERVER_URL=http://localhost:8080
      #- ATLAS_SERVER_URL_FILE=
    volumes:
    # Хранение логов на локальном диске вне контейнера
      - ./dashboard_logs:/app/logs
    # Хранение ключей авторизации на локальном диске,
    # чтобы она не слетала при перезагрузке контейнера
      - ./dashboard_keys:/root/.aspnet/DataProtection-Keys
    # Хранение корневых сертификатов
      - ./dashboard_certs:/app/certs
    # Хранение отчётов .pvsmap
      - ./storage_data:/app/storage
    ports:
      - 8080:8080
  migrator:
    image: viva64/atlas-migrator:latest
    platform: linux/amd64
    container_name: atlas-migrator
    depends_on:
      - database
    environment:
      - "ATLAS_DB_CONNECTION_STRING=Server=database;Port=5432;\
          Username=postgres;Password=password;Database=atlas;\
          Timeout=300;CommandTimeout=300;"
      #- ATLAS_DB_CONNECTION_STRING_FILE=
    profiles:
      - manual
```

## Сервис базы данных

Название: **database**\.

Переменные окружения:

* **TZ** — таймзона для хранения дат\.
* **POSTGRES\_DB** — имя базы данных\. По умолчанию: `atlas`\.
* **POSTGRES\_USER** — имя суперпользователя базы данных\. По умолчанию: `postgres`\.
* **POSTGRES\_PASSWORD** – пароль суперпользователя базы данных\. По умолчанию: `password`\.

При первом запуске будет создана база данных с указанным именем и данными для входа\.

## Сервис для работы пользователей

Название: **dashboard**\.

* **TZ** — таймзона для хранения дат\.
* **ATLAS\_DB\_CONNECTION\_STRING** — строка подключения в Key\-Value формате\.
* **ATLAS\_JWT\_PRIVATE\_TOKEN** — JWT токен\.
* **ATLAS\_SERVER\_URL** — адрес будущего сервера\.

## Загрузка и запуск образов Docker

Перейдите в каталог с конфигом `docker-compose.yml` и выполните команды:

```cpp
docker compose --profile manual pull
docker compose up
```

Добавьте параметр `-d` для запуска сервера в режиме отключения от консоли:

```cpp
docker compose up -d
```

В первый раз рекомендуется запускать сервисы с выводом в консоль, чтобы убедиться в отсутствии ошибок\.

Перейдите по ссылке, указанной в `ATLAS_SERVER_URL`, и попробуйте залогиниться с помощью комбинации **admin** / **admin**\.

При успешном запуске и аутентификации продолжите настройку сервера:

* [Активация лицензии PVS\-Studio](https://pvs-studio.ru/ru/docs/manual/7200/)
* [Управление проектами и ветками](https://pvs-studio.ru/ru/docs/manual/7207/)
* [Отправка результатов анализа на сервер](https://pvs-studio.ru/ru/docs/manual/7205/)