# Сервис экспорта PDF

Сервис используется для экспорта проекта в PDF файл в проектном управлении "Первой Формы". После настройки необходимо указать адрес подключения к сервису в параметре ganttExportPdfUrl кастомной настройки приложения custom-app-settings.

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

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

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

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

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

```yaml
services:

 web:

   container_name: gantt-pdf-converter

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

   ports:

     - "8083:8080"

   healthcheck:

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

     interval: 30s

     timeout: 10s

     retries: 3

   restart: unless-stopped
```

где:

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

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

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

- healthcheck:

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

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

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

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

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

Запустите сервис командой:

`docker compose up -d`

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

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

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

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

```nginx
upstream docservice {

server backendserver-address;
```

}

```nginx
map $http_host $this_host {
```

"" $host;

default $http\_host;

}

```nginx
map $http_x_forwarded_proto $the_scheme {
```

default $http\_x\_forwarded\_proto;

"" $scheme;

}

```nginx
map $http_x_forwarded_host $the_host {
```

default $http\_x\_forwarded\_host;

"" $this\_host;

}

```nginx
map $http_upgrade $proxy_connection {
```

default upgrade;

"" close;

}

```nginx
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/;

proxy_http_version 1.1;

add_header 'Access-Control-Allow-Origin' 'APP_URL'; # Замените APP_URL на реальный URL вашего сервера 1Ф, например: https://1forma.company.ru

add_header 'Access-Control-Allow-Methods' 'GET ,POST, OPTIONS';

add_header 'Access-Control-Allow-Headers' '*';
```

}

}

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

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

```nginx
upstream docservice {

server backendserver-address;
```

}

```nginx
map $http_x_forwarded_proto $the_scheme {
```

default $http\_x\_forwarded\_proto;

"" $scheme;

}

```nginx
map $http_x_forwarded_host $the_host {
```

default $http\_x\_forwarded\_host;

"" $host;

}

```nginx
map $http_upgrade $proxy_connection {
```

default upgrade;

"" close;

}

```nginx
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 /pdfExport/ {

proxy_pass http://docservice/;

proxy_http_version 1.1;

add_header 'Access-Control-Allow-Origin' *;

add_header 'Access-Control-Allow-Methods' 'GET ,POST, OPTIONS';

add_header 'Access-Control-Allow-Headers' '*';
```

}

}

где:

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

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