# Установка

### Системные требования для работы Security Center:

* Минимальные системные ресурсы: 16 ГБ ОЗУ и 4 ядра ЦПУ.
* Свободное дисковое пространство для установки и хранения данных Security Center.
* Сетевой доступ для внешних пользователей (пользователи должны иметь возможность подключаться к Security Center по сети).
* Операционная система с поддержкой Docker или Kubernetes (рекомендуется любая Linux-система).

{% hint style="danger" %}
Для улучшения стабильности работы рекомендуется устанавливать Auditor и Security Center на **разных машинах** (физических или виртуальных)
{% endhint %}

### Подготовка

Перед установкой Security Center, убедитесь что у вас установлены следующие компоненты (для установки с помощью Docker Compose):

* [**Docker**](https://docs.docker.com/get-docker/) (версия 19.03 или выше).
* [**Docker Compose**](https://docs.docker.com/compose/install/) (версия 1.26 или выше).

<details>

<summary>Создание SSH-ключей</summary>

Чтобы безопасно подключиться к серверу Linux, вам нужно настроить SSH-ключи.

Если у вас еще нет SSH-ключей, вы можете сгенерировать их с помощью следующей команды в терминале сервера:

```bash
ssh-keygen
```

:warning: При копировании ключей убедитесь, что они **скопированы без пробелов**.

**Установка SSH-ключа на сервер**

После генерации SSH-ключей вам нужно скопировать **открытый SSH-ключ** на сервер Linux. Используйте следующую команду для копирования открытого ключа:

```bash
ssh-copy-id <имя_пользователя>@<ip-адрес_сервера>
```

Замените *<имя\_пользователя>* на имя пользователя вашей учетной записи Linux-сервера, а *\<ip-адрес\_сервера>* на IP-адрес Linux-сервера. Вам будет предложено ввести пароль для аутентификации.

Откройте на локальной машине файл, в котором хранится **закрытый SSH-ключ**. Закрытый ключ обычно сохраняется с расширением .pem или .ssh.

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

</details>

{% hint style="info" %}
Обратите внимание, что Security Center в настоящее время несовместим с базой данных Amazon Aurora.
{% endhint %}

{% hint style="warning" %}
В случае развертывания платформы CyberCodeReview в **закрытом контуре**, убедитесь, что у машин Security Center и Auditor имеются необходимые сетевые доступы
{% endhint %}

Критичным для функционирования платформы является:

* Единоразовый сетевой доступ к **серверу лицензирования** (<https://license.cybercodereview.ru>) для активации лицензии.
* Сетевая связность машин **Security Center** и **Auditor.**
* Доступность **системы контроля версий** (GitLab, GitHub и пр.) и **таск-трекера** (Jira, YouTrack, Kaiten и др.).
* **SSO-провайдера** организации к Security Center.

\
Установка

* Вариант 1: [**Установка с помощью Helm**](#install-using-helm) (установка в среде Kubernetes)
* Вариант 2: [**Установка с помощью Docker-compose**](#docker-compose-installation) (ручная установка docker-compose)

<details>

<summary>Установка с использованием Helm</summary>

Перед использованием установите менеджер пакетов "Helm" для Kubernetes и сконфигурируйте подключение к кластеру

### **Шаг 1:** **Добавьте пакет Helm**

Добавьте на локальный компьютер пакет Helm:

```bash
helm repo add securitycenter https://gitlab.cybercodereview.ru/api/v4/projects/47/packages/helm/stable
```

### **Шаг 2: Обновите репозиторий с чартом**

Это позволит получить информацию о последней версии нашего чарта

```shellscript
helm repo update
```

### **Шаг 3: Создайте файл values с настройками чарта**

Перейдите в вашу рабочую папку, где впоследствии будете изменять некоторые параметры настройки чарта и создайте файл с любым наименованием, а также с расширением `.yaml` или `.yml` . Далее в качестве примера будет использоваться `values.yaml`.

### **Шаг 4:** **Задайте переменные настройки чарта**

Далее необходимо заполнить файл `values.yaml`.

```yaml
global:
  image:
    tag: "<актуальный_тег>"

configs:
  configmap:
    variables:
      COOKIES_SECURE: "True"
      DOMAIN: "https://security-center.example.com"

  secret:
    variables:
      DB_HOST: "security-center-postgres" # имя Service в Kubernetes или внешний хост
      DB_PORT: "5432"
      DB_NAME: "securitycenter"
      DB_USER: "user"
      DB_PASS: "pass" 
      # auditor-rabbitmq - имя Service в Kubernetes или внешний хост
      AMQP_HOST_STRING: "amqp://user:pass@security-center-rabbitmq:5672"

ingress:
  enabled: true
  host: "security-center.example.com"
  class: nginx
  tls:
    enabled: true
    secretName: "<имя секрета>"
  annotations:
  labels: {}
```

Далее необходимо отредактировать values под Ваши нужды.&#x20;

#### **Тег**

Начнем с поля `global.image.tag`. Чтобы узнать актуальный тег, необходимо перейти в [список релизов нашего репозитория](https://gitlab.cybercodereview.ru/cybercodereview/security-center/-/releases). Берем самый верхний тег, например, на скриншоте `2.7.1`.

<figure><img src="/files/37zZLin6BFGpCDGg5sJc" alt=""><figcaption></figcaption></figure>

Например:

```yaml
global:
  image:
    tag: "2.7.1"
```

#### &#x20;**Webhook для интеграции с Jira**

Для настройки Webhook добавьте в файл `values.yaml` следующие поля:

```yaml
webhook:
  ingress:
    path: "/api/v1/jira-helper/jira-event/<your-webhook>/"
```

Замените "your-webhook" в значении переменной на предварительно сгенерированный Webhook в Jira.

#### **Домен**

Для указания доменного имени Вашего Auditor необходимо отредактировать поле `configs.configmap.variables.DOMAIN`.\
Например:

```yaml
configs:
  configmap:
    variables:
      COOKIES_SECURE: "True"
      DOMAIN: "https://security-center.example.com"
```

`COOKIES_SECURE`: переменная определяет флаг безопасной передачи cookies. Она должна быть установлена в значение True, если вы используете HTTPS.

Укажите в переменной `DOMAIN` хост, по которому будет доступен Security Center.

**Подключение к СУБД PostgreSQL**

Для настройки подключения в PostgreSQL необходимо заполнить следующие поля:

* `configs.configmap.variables.DB_HOST` - Это может быть как именем сервиса в kubernetes, так и внешним хостом.
* `configs.configmap.variables.DB_PORT` - Порт, на котором PostgreSQL "слушает" подключения.
* `configs.configmap.variables.DB_NAME` - Имя базы данных, созданной для Auditor.
* `configs.configmap.variables.DB_USER` - Пользователь для базы данных из верхнего пункта.
* `configs.configmap.variables.DB_PASS` - Пароль от пользователя из пункта выше.

Значения по умолчанию:

```yaml
configs:
  secret:
    variables:
      DB_HOST: "security-center-postgres" # имя Service в Kubernetes или внешний хост
      DB_PORT: "5432"
      DB_NAME: "auditor"
      DB_USER: "user"
      DB_PASS: "pass" 
```

Чтобы поменять значения по-умолчанию(которые принимает сама Postgre), необходимо изменить следующие поля:

```yaml
postgresql:  
  auth:
    database: auditor
    username: user
    password: pass
  containerPorts:
    postgresql: 5432
```

**Подключение к брокеру сообщений RabbitMQ**

Данная строчка строится из нескольких частей:

* `amqp://` - Не меняем, служебная часть.
* `user` - Логин для подключения.
* `:` - Разделитель для пароля и логина.
* `pass` - Пароль для подключения
* `@` - Разделитель для данных и хоста.
* `auditor-rabbitmq` - Либо имя сервиса в Kubernetes, либо внешний хост.
* `:` - Разделитель между хостом и портом.
* `5672` - Порт, на котором RabbitMQ "слушает" подключения.
* Значения по-умолчанию:

<pre class="language-yaml"><code class="lang-yaml"><strong>configs:
</strong>  secret:
    variables:
      AMQP_HOST_STRING: "amqp://user:pass@security-center-rabbitmq:5672" # auditor-rabbitmq - имя Service в Kubernetes или внешний хост
      
</code></pre>

Чтобы поменять значения по-умолчанию(которые принимает именно RabbitMQ), необходимо изменить следующие поля:

```yaml
rabbitmq:
  auth:
    username: user
    password: pass
```

#### **Ingress**

Ingress-контроллер - компонент Kubernetes, который управляет входящим трафиком для сервисов.&#x20;

* `ingress.host` - Доменное имя Вашего Auditor.
* `ingress.class` - Класс контроллера в Вашем кластере.
* `ingress.tls.enabled` - Включение TLS для Вашего Auditor.
* `ingress.tls.secretName` - Имя Kubernetes секрета, в котором лежит Ваш сертификат. Если верхнее поле `false`, можно игнорировать данное поле.

Значения по-умолчанию:

```yaml
ingress:
  enabled: true
  host: "security-center.example.com"
  class: nginx
  tls:
    enabled: true
    secretName: "" ## Имя секрета
  annotations:
  labels: {}
```

### **Другие настройки** <a href="#drugie-nastroiki" id="drugie-nastroiki"></a>

#### **Секреты**

При необходимости использования внешних хранилищ секретов необходимо выключить создание секретов при помощи Helm-чарта:

```yaml
configs:
  secret:
    create: false
```

### **Шаг 5: Развертывание приложения в кластер Kubernetes** <a href="#shag-5-razvertyvanie-prilozheniya-v-klaster-kubernetes" id="shag-5-razvertyvanie-prilozheniya-v-klaster-kubernetes"></a>

В примере по умолчанию используется установленный ранее ingress controller "nginx" и PostgreSQL и RabbitMQ из Helm-чарта от Bitnami:

```bash
helm upgrade --install security-center securitycenter/securitycenter -n security-center --create-namespace -f ./values.yaml
```

### **Шаг 6: Создайте пользователя с привилегированными правами**

Для создания пользователя с привилегированными правами выполните следующие команды:

```bash
kubectl get pods -n <namespace>
kubectl exec -it -n <namespace> <security-center-backend_pod> -c backend -- /bin/sh 
python3 manage.py createsuperuser --username admin
```

Этот пользователь и пароль позволяют выполнить вход в установленный Security Center

**Следующий шаг:** [Запустите Security Center и добавьте лицензию](/security-center/install/get-started-with-the-appsec-portal.md)

</details>

<details>

<summary>Установка через Docker-compose</summary>

**Шаг 1:** Клонируйте репозиторий

Клонируйте репозиторий Security Center на Ваш сервер:

```bash
git clone https://gitlab.cybercodereview.ru/cybercodereview/security-center.git security-center
```

**Шаг 2:** Перейдите в корневой каталог

Перейдите в корневой каталог Security Center, выполнив следующую команду:

```bash
cd security-center/
```

**Шаг 3**: Переместите файлы из папки docker-compose

В корневом каталоге проекта Security Center выполните следующую команду:

```
mv docker-compose/* ./
```

**Шаг 4:** Настройте переменные окружения

В корневом каталоге проекта Security Center выполните следующую команду:

<pre class="language-bash"><code class="lang-bash"><strong>./set_vars.sh
</strong></code></pre>

Сценарий запрашивает значения для следующих переменных окружения, включая необязательные. Вы также можете принять значения по умолчанию для необязательных переменных, нажав Enter:

<pre class="language-bash"><code class="lang-bash">DB_NAME{default=postgres}
DB_USER{default=postgres}
DB_PASS{default=postgres}
DB_HOST{default=postgres}
DB_PORT{default=5432}
<strong>RABBITMQ_DEFAULT_USER{default=admin}
</strong><strong>RABBITMQ_DEFAULT_PASS{default=mypass}
</strong><strong>AMQP_HOST_STRING{default=amqp://admin:mypass@rabbitmq:5672/}
</strong>COOKIES_SECURE{default=True}
<strong>DOMAIN=http://localhost
</strong>IMAGE_VERSION=&#x3C;актуальный тег>
</code></pre>

* Переменная <mark style="color:blue;">`IMAGE_VERSION`</mark> <mark style="color:red;">обязательно</mark> должна быть задана. Укажите версию приложения, например, **1.0.0,** и скрипт установит последнюю актуальную версию. Актуальный тег Вы можете найти в [репозитории](https://gitlab.cybercodereview.ru/cybercodereview/security-center).
* Переменная <mark style="color:blue;">`DOMAIN`</mark> <mark style="color:red;">обязательно</mark> должна быть задана. Укажите домен, в котором будет доступен Security Center
* <mark style="color:blue;">`DB_NAME`</mark>, <mark style="color:blue;">`DB_USER`</mark>, <mark style="color:blue;">`DB_PASS`</mark>, <mark style="color:blue;">`DB_HOST`</mark>, <mark style="color:blue;">`DB_PORT`</mark> <mark style="color:green;">необязательные переменные</mark><mark style="color:blue;">.</mark> Укажите переменные, необходимые для настройки базы данных, или используйте значения по умолчанию.
* Если брокер сообщений размещен на внешнем сервере, то переменная <mark style="color:blue;">`AMQP_HOST_STRING`</mark> должна быть задана. Однако, если контейнер установлен локально, то все три переменные <mark style="color:blue;">`RABBITMQ_DEFAULT_USER`</mark> , <mark style="color:blue;">`RABBITMQ_DEFAULT_PASS`</mark> также должны быть заданы.\
  Имя пользователя и пароль в переменных <mark style="color:blue;">`RABBITMQ_DEFAULT_PASS`</mark> и <mark style="color:blue;">`RABBITMQ_DEFAULT_USER`</mark> должны быть идентичны переменной <mark style="color:blue;">`AMQP_HOST_STRING`</mark>.
* Переменная <mark style="color:blue;">COOKIES\_SECURE</mark> определяет флаг безопасности cookie. Она должна иметь значение <mark style="color:purple;">`True`</mark> при использовании HTTPS.

Скрипт set\_vars.sh создает файл .env с настроенными переменными окружения и генерирует пару JWT-ключей, которые используются для подписи JWT-ключей, а SECRET\_KEY используется для генерации хэшей в Django.

<mark style="background-color:red;">НЕ ЗАПУСКАЙТЕ команду ./set\_vars.sh дважды.</mark>\
Если вам нужно изменить значение переменной, сделайте это в файле .env.

**Шаг 5:** Запустите Security Center

Чтобы запустить Security Center, выполните следующую команду:

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

**Шаг 6:** Создайте учетную запись администратора

Чтобы создать учетную запись администратора, выполните следующую команду:

```bash
docker compose exec back python3 manage.py createsuperuser --username admin
```

<img src="/files/I0SyLg2C8yyWhwX1UmhT" alt="" data-size="original">

Это имя пользователя и пароль позволят вам **войти** в установленный Security Center

или

Создайте пользователей с помощью панели администратора Django

Чтобы получить доступ к настройкам администратора, перейдите по URL-адресу `<ваш-домен>.com/admin` и войдите в систему, используя учетные данные суперпользователя, затем выберите **Users** на левой панели. Отсюда вы можете добавлять пользователей. Не забудьте назначить пользователям необходимые разрешения.

<img src="/files/FU1SMH5PAQHqGhOnAnbt" alt="" data-size="original"> <img src="/files/itrka3P64WEBzAjHzNvM" alt="" data-size="original">

**Следующий шаг:** [Запустите Security Center и добавьте лицензию](/security-center/install/get-started-with-the-appsec-portal.md)

</details>

Поздравляем, вы завершили установку Security Center!\ <mark style="background-color:green;">Далее добавьте полученную</mark> [<mark style="color:blue;background-color:green;">**лицензию**</mark>](/security-center/install/get-started-with-the-appsec-portal.md)<mark style="background-color:green;">**.**</mark>

> Если у вас возникнут какие-либо вопросы или проблемы в процессе установки или использования приложения, обратитесь за помощью в нашу службу поддержки <sales@cybercodereview.ru>.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.cybercodereview.ru/security-center/install/installation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
