# Сервис импорта Mpp

Mpp-Importer — это инструмент обработки mpp-файлов в Диаграмму Ганта в формате JSON. Используется для загрузки файла проекта с расширением .mpp, созданного в Microsoft Project, в проектном управлении "Первой Формы". После настройки необходимо указать адрес подключения к сервису в параметре ganttImportMppUrl кастомной настройки приложения custom-app-settings.

## Системные требования

Операционная система

Linux x86-64 с поддержкой Docker (например, Ubuntu/Debian).

CPU

Минимум 1 vCPU (рекомендуется ≥ 2 ядра при высокой нагрузке).

Память (RAM)

Минимум 1 GB (рекомендуется ≥ 2 GB).

## Docker-образ mpp-importer от Первая Форма

Для обеспечения максимальной совместимости с .NET-приложением "Первая Форма" рекомендуется использовать преднастроенный Docker-образ mpp-importer, подготовленный компанией docker-public.1forma.ru/mpp-importer.

> ℹ️ Актуальный адрес образа уточняйте у службы технической поддержки. Адрес зависит от вашего договора и условий поставки.

Образ оптимизирован под использование в связке c другими компонентами приложения "Первая Форма". Не требует авторизации для загрузки (анонимный pull доступ).

## Настройка сервиса в Docker

Установите Docker и Docker Compose с официальных ресурсов под нужный дистрибутив.

Выполните docker login. Используйте логин и пароль, полученные у сотрудников "Первой Формы".

```bash
docker login docker.1forma.ru
```

```
Username: USER
Password:
Login Succeeded
```

Создайте файл docker-compose.yml:

```yaml
services:

 mpp-importer:

   image: docker.1forma.ru/1forma/mpp-gantt-converter:latest

   container_name: mpp-gantt-converter

   ports:

     - "8084:80"

   healthcheck:

     test: ["CMD", "curl", "-f", "http://localhost"]

     interval: 30s

     timeout: 10s

     retries: 3

   restart: unless-stopped
```

где:

- image — используется образ docker.1forma.ru/1forma/mpp-gantt-converter:latest.

- container\_name — читаемое имя контейнера — mpp-gantt-converter.

- ports — перенаправление хоста контейнера.

- healthcheck:

Проверяется способность контейнера отвечать на PING через CLI:

- interval: 30s — интервал проверки;

- timeout: 10s — тайм-аут выполнения;

- retries: 3 — контейнер считается нездоровым после 3 неудачных попыток.

- restart: unless-stopped: автоматический перезапуск контейнера при сбоях.

Запустите сервис:

`docker compose up -d`

Контейнер запускается в фоновом режиме, контролируется на предмет работоспособности. В случае сбоев осуществляется автоматический перезапуск.

## Использование сервиса за прокси-сервером

Обычный сценарий (прокси на локальный сервер)

Используется, если необходимо просто перенаправить входящий трафик на локальный сервер с MPP import.

Готовая конфигурация Nginx:

upstream docservice {

server backendserver-address;

}

map $http\_host $this\_host {

"" $host;

default $http\_host;

}

map $http\_x\_forwarded\_proto $the\_scheme {

default $http\_x\_forwarded\_proto;

"" $scheme;

}

map $http\_x\_forwarded\_host $the\_host {

default $http\_x\_forwarded\_host;

"" $this\_host;

}

map $http\_upgrade $proxy\_connection {

default upgrade;

"" close;

}

proxy\_set\_header Upgrade $http\_upgrade;

proxy\_set\_header Connection $proxy\_connection;

proxy\_set\_header X-Forwarded-Host $the\_host;

proxy\_set\_header X-Forwarded-Proto $the\_scheme;

proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;

server {

listen 0.0.0.0:80;

listen \[::\]:80 default\_server;

server\_tokens off;

location / {

proxy_pass http://docservice/php/load.php; # Примечание: путь /php/load.php унаследован из конфигурации OnlyOffice. Уточните актуальный путь в документации к используемой версии mpp-importer.

proxy_http_version 1.1;

add\_header 'Access-Control-Allow-Origin' 'APP\_URL';

add\_header 'Access-Control-Allow-Methods' 'GET ,POST, OPTIONS';

add\_header 'Access-Control-Allow-Headers' '\*';

}

}

Виртуальный путь (виртуальный префикс)

Подходит в ситуациях, когда нужно разместить сервис импорта по определенному URL-префиксу (например, /mppImporter/ ) в рамках существующего веб-приложения:

upstream docservice {

server backendserver-address;

}

map $http\_x\_forwarded\_proto $the\_scheme {

default $http\_x\_forwarded\_proto;

"" $scheme;

}

map $http\_x\_forwarded\_host $the\_host {

default $http\_x\_forwarded\_host;

"" $host;

}

map $http\_upgrade $proxy\_connection {

default upgrade;

"" close;

}

proxy\_set\_header Upgrade $http\_upgrade;

proxy\_set\_header Connection $proxy\_connection;

proxy\_set\_header X-Forwarded-Host $the\_host/office;

proxy\_set\_header X-Forwarded-Proto $the\_scheme;

proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;

server {

listen 0.0.0.0:80;

listen \[::\]:80 default\_server;

server\_tokens off;

location /mppImporter/ {

proxy\_pass http://docservice/php/load.php;

proxy\_http\_version 1.1;

add\_header 'Access-Control-Allow-Origin' 'APP\_URL';

add\_header 'Access-Control-Allow-Methods' 'GET ,POST, OPTIONS';

add\_header 'Access-Control-Allow-Headers' '\*';

}

}

где:

APP\_URL — адрес приложения Первой Формы, обращающегося к сервису импорта MPP.

> ℹ️  Мы рекомендуем работу с виртуальным префиксом домена "Первой Формы"
