> For the complete documentation index, see [llms.txt](https://docs.aamsystems.ru/passoffice/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aamsystems.ru/passoffice/passoffice-guide/admin-guide-doc/ustanovka-passoffice/sposoby-ustanovki/docker.md).

# Docker

{% hint style="success" %}
Запуск PassOffice в виде Docker-контейнера доступен только для [Linux](/passoffice/passoffice-guide/admin-guide-doc/ustanovka-passoffice/sistemnye-trebovaniya.md).
{% endhint %}

## **Требования**

Установите [Docker](https://docs.docker.com/install/) и [Docker Compose](https://docs.docker.com/compose/install/).

Прежде чем настраивать все остальное, настройте новую переменную среды `$PASSOFFICE_HOME`, указывающую на каталог, где будут находиться конфигурация, журналы и файлы данных. Убедитесь, что каталог существует и предоставлено соответствующее разрешение.

Рекомендуется использовать папку `/opt/passoffice`:

```bash
mkdir /opt/passoffice
export PASSOFFICE_HOME=/opt/passoffice
```

Для того, чтобы переменная `PASSOFFICE_HOME` была доступна во время следующей терминальной сессии, выполните команду:

```bash
echo "export PASSOFFICE_HOME=/opt/passoffice" >> ~/.bashrc
```

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

<table><thead><tr><th width="380.3333333333333">Папки</th><th>Использование</th></tr></thead><tbody><tr><td>$PASSOFFICE_HOME/data</td><td>Данные БД Postgres</td></tr><tr><td>$PASSOFFICE_HOME/logs</td><td>Логи сервера PassOffice</td></tr><tr><td>$PASSOFFICE_HOME/licence</td><td>Файлы лицензии</td></tr><tr><td>$PASSOFFICE_HOME/config</td><td>Файлы настроек</td></tr></tbody></table>

## Подготовка к запуску

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

{% hint style="info" %}
Docker-образы PassOffice доступны по ссылке [passoffice.ru/download](https://passoffice.ru/download)

Для получения пароля доступа обратитесь к вашему поставщику или на почту <support@passoffice.ru>
{% endhint %}

1. Скачайте docker-образы с файлового сервера по полученной ссылке на устройство, которое имеет доступ к Интернет. Вам требуются файлы `passoffice-{version}.tar`, `wdm-{version}.tar` , `postgres-{version}-alpine.tar` и `nginx-{version}-alpine.tar`.
2. Скопируйте архивы с docker-образами на сервер PassOffice в папку `$PASSOFFICE_HOME` любым удобным способом.
3. Перейдите в папку `$PASSOFFICE_HOME` и выполните импорт docker-образов из архивов, введя команды (вместо *{version}* укажите версию PassOffice):

```bash
cd $PASSOFFICE_HOME
docker load --input passoffice-{version}.tar
docker load --input wdm-{version}.tar
docker load --input postgres-{version}-alpine.tar
docker load --input nginx-{version}-alpine.tar
```

### Настройка окружения

При помощи [Docker Compose](https://docs.docker.com/compose/) вы можете легко настроить, установить и обновить PassOffice на базе Docker.

1. Создайте в папке `$PASSOFFICE_HOME` файл `.env` (вместо `{wdm_version}`, `{passoffice_version}`, `{postgres_version}`, `{nginx_version}` укажите номера версий программного обеспечения).

{% hint style="info" %}
Вместо `passoffice.yourdomain.ru` укажите доменное имя для сервиса PassOffice.
{% endhint %}

```properties
# Licence Web Manager
WDM_VERSION={wdm_version}
WDM_HOSTNAME=lwm
WDM_PORT=7010

# PassOffice
PASSOFFICE_VERSION={passoffice_version}
PASSOFFICE_HOSTNAME=passoffice
PASSOFFICE_PORT=4201
PASSOFFICE_LWM_URL=http://${WDM_HOSTNAME}:${WDM_PORT}

# Nginx
NGINX_HOSTNAME=passoffice.yourdomain.ru
NGINX_VERSION={nginx_version}

# Database
POSTGRES_VERSION={postgres_version}
DB_HOST=postgres
DB_NAME=passoffice
DB_USER=passoffice
DB_PASSWORD=passoffice
```

2. Создайте в папке `$PASSOFFICE_HOME` файл `docker-compose.yml` с следующим содержимым:

```yaml
services:

  passoffice:
    image: 'passoffice/passoffice:${PASSOFFICE_VERSION}'
    restart: unless-stopped
    hostname: ${PASSOFFICE_HOSTNAME}
    depends_on:
      - lwm
      - postgres
      - nginx
    environment:
      DB_HOST: '${DB_HOST}'
      DB_NAME: '${DB_NAME}'
      DB_USER: '${DB_USER}'
      DB_PASSWORD: '${DB_PASSWORD}'
      LWM_URL: '${PASSOFFICE_LWM_URL}'
    expose:
      - ${PASSOFFICE_PORT}
    volumes:
      - './logs/passoffice:/var/log/passoffice' # PassOffice Logs
      - './licence:/app/bin/license' # PassOffice Licence File
      - '/tmp/passoffice:/app/bin/activemq-data/localhost/tmp_storage' # ActiveMQ Tmp Storage

  lwm:
    image: 'passoffice/wdm:${WDM_VERSION}'
    restart: unless-stopped
    hostname: ${WDM_HOSTNAME}
    volumes:
      - './logs/wdm:/wdm/Logs'
      - './licence:/wdm/Licence'
      - './licence/apc_c2v:/wdm/bin/apc_c2v_output'
    ports:
      - '${WDM_PORT}:${WDM_PORT}'
    command: bash -c 'service aksusbd start && sleep 3s && /wdm/bin/ApcWebDrvManagerConsole -port=${WDM_PORT} -delayedDrvCreation'
    devices:
      - /dev/bus/usb:/dev/bus/usb # Sentinel Hardlock

  nginx:
    image: 'nginx:${NGINX_VERSION}-alpine'
    restart: unless-stopped
    ports:
      - '443:443'
      - '80:80'
    environment:
      HOSTNAME: ${NGINX_HOSTNAME}
      PASSOFFICE_HOSTNAME: ${PASSOFFICE_HOSTNAME}
      PASSOFFICE_PORT: ${PASSOFFICE_PORT}
    volumes:
      - './config/nginx/templates/passoffice.conf.template:/etc/nginx/templates/default.conf.template:ro'
      - './config/nginx/certs:/etc/nginx/certs:ro'

  postgres:
    image: 'postgres:${POSTGRES_VERSION}-alpine'
    restart: unless-stopped
    environment:
      POSTGRES_USER: '${DB_USER}'
      POSTGRES_PASSWORD: '${DB_PASSWORD}'
      POSTGRES_DB: '${DB_NAME}'
    volumes:
      - './data:/var/lib/postgresql/data'
```

3. Создайте папки для хранения конфигурационных файлов и сертификатов Nginx:

```bash
cd $PASSOFFICE_HOME
mkdir config && cd config
mkdir nginx && cd nginx
mkdir templates
mkdir certs
```

4. Создайте в папке `$PASSOFFICE_HOME/config/nginx/templates` файл с именем `passoffice.conf.template`, который будет содержать следующий шаблон:

```nginx
server {
    listen 80;
    server_name ${HOSTNAME};
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name ${HOSTNAME};

    ssl_certificate /etc/nginx/certs/${HOSTNAME}.crt;
    ssl_certificate_key /etc/nginx/certs/${HOSTNAME}.key;

    client_max_body_size 20M;

    location / {
        proxy_pass http://${PASSOFFICE_HOSTNAME}:${PASSOFFICE_PORT};
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
```

5. Поместите в папку `$PASSOFFICE_HOME/config/nginx/certs` сертификаты и ключи SSL, необходимые для работы Nginx.

{% hint style="warning" %}
Имена файлов сертификата и ключа SSL должны иметь формат `passoffice.yourdomain.ru.crt` и `passoffice.yourdomain.ru.key`, где *passoffice.yourdomain.ru* - ваше доменное имя для PassOffice.
{% endhint %}

### Лицензирование

{% hint style="info" %}
Для получение файлов лицензии и/или ключа аппаратной защиты обратитесь к вашему поставщику или на почту <support@passoffice.ru>
{% endhint %}

Для схемы лицензирования PassOffice с использованием LWM (*LicenceWebManager*) доступны два варианта запуска сервера лицензирования LWM:

* с использованием ключа аппаратной защиты Sentinel;
* с использованием программной лицензии, которая генерируется с привязкой к аппаратному обеспечению сервера, на котором запускается система.

<details>

<summary>Ключ аппаратной защиты Sentinel</summary>

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

* Установить ключ аппаратной защиты в USB-разъем сервера или выполнить проброс USB-over-IP при установке на виртуальную машину.
* Проверить, что устройство отображается в списке USB устройств в выводе команды `lsusb`
* Запросите файлы лицензии у вашего поставщика PassOffice или по почте <support@passoffice.ru>.

</details>

<details>

<summary>Программная лицензия LWM</summary>

Для запуска сервера лицензирования LWM с использованием программной лицензии необходимо:

* Перейти в папку с файлами PassOffice, выполнить команду генерации файла-слепка системы.

```bash
cd $PASSOFFICE_HOME
docker compose run lwm /wdm/bin/apc_c2v
cd licence/apc_c2v
```

* В результате выполнения команды в папке `$PASSOFFICE_HOME/licence/apc_c2v` появится файл с расширением **.ac2v**.
* Направьте результат вывода команды генерации и файл **.ac2v** вашему поставщику PassOffice или на почту <support@passoffice.ru> с запросом генерации файла лицензии.

</details>

После получения файлов лицензии перейдите в папку `$PASSOFFICE_HOME/licence` и скопируйте в нее файлы лицензии *Licence.bin* и *HWLicence.bin* любым удобным способом:

```bash
cd $PASSOFFICE_HOME
mkdir $PASSOFFICE_HOME/licence/
cp Licence.bin HWLicence.bin $PASSOFFICE_HOME/licence/
```

## Запуск

1. Убедитесь, что вы находитесь в папке с файлом `docker-compose.yml` и запустите сервер PassOffice:

```bash
cd $PASSOFFICE_HOME
docker compose up -d
```

2. Для просмотра лога работы сервера PassOffice выполните команду:

```bash
docker compose logs -f
```

3. Когда сервер PassOffice будет готов принимать входящие запросы, в логах появится надпись:

```bash
*************************************
     PassOffice Server is started     
*************************************
```

4. Сервер PassOffice доступен через веб-браузер по адресу `https://passoffice.yourdomain.ru`

{% hint style="info" %}
В случае возникновения проблем с запуском отправьте запрос на почту <support@passoffice.ru>
{% endhint %}

#### Остановка сервера

Убедитесь, что вы находитесь в папке с файлом `docker-compose.yml` и выполните команду:

```bash
docker compose down
```

{% hint style="danger" %}
Аварийное завершение работы серверного приложения PassOffice может повлечь за собой некорректное отключение от ключа аппаратной защиты или, в худшем случае, повреждение данных в БД.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.aamsystems.ru/passoffice/passoffice-guide/admin-guide-doc/ustanovka-passoffice/sposoby-ustanovki/docker.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
