🛠️ Локальный запуск микросервисов PrimoART в Docker (Windows)
1. Подготовка архива
Загрузить архив PrimoART_Docker_dd_mm_yyyy на целевой сервер, разархивировать его и перейти в созданную директорию.
2. Загрузка Docker-образов
Перейти в каталог docker_images и загрузить все образы:
cd docker_images
docker load -i <image_1>
docker load -i <image_n>
cd ..3. Запуск хранилищ
docker compose -f docker-compose-storages.yml up -d4. Настройка nginx
Добавить в файл volumes/nginx/nginx.conf новый location.
⚠️ Изменить <trace_viewer_url> на ваш адрес.
location /api/v1/trace-viewer-url {
default_type application/json;
return 200 '{"url":"https://<trace_viewer_url>:5173"}';
}5. Запуск микросервисов
docker compose -f docker-compose-microservices.yml up -d6. Выпуск самоподписанных сертификатов
Доступны два способа:
- 6.1 mkcert (рекомендуется)
- 6.2 PowerShell (без сторонних утилит)
6.1 mkcert
Установка mkcert
Вариант 1 — через Chocolatey
⚠️ Установка менеджера пакетов Chocolatey не описывается в данной инструкции.
choco install mkcert -yВариант 2 — вручную
- Скачать: https://github.com/FiloSottile/mkcert/releases
- Файл:
mkcert-vX.X.X-windows-amd64.exe - Переименовать в:
mkcert.exe - Поместить, например, в:
C:\Tools\mkcert\ - Добавить в PATH (только для текущей сессии):
$env:Path += ";C:\Tools\mkcert"Создание локального CA
⚠️ Запускать PowerShell от имени администратора.
mkcert -install
mkcert -CAROOTrootCA.pem— корневой сертификат- Его нужно установить в доверенные CA на клиентских машинах
Создание сертификатов
⚠️ Изменить <project_dir> на вашу директорию.
cd <project_dir>
mkcert -cert-file volumes/certs/dev.crt -key-file volumes/certs/dev.key <portal_name> <portal_ip>
mkcert -cert-file volumes/certs/dev_tv.crt -key-file volumes/certs/dev_tv.key <tv_name> <tv_ip>6.2 PowerShell + (PowerShell 7+ || openssl)
⚠️ Запускать PowerShell от имени администратора.
Задать каталог сертификатов
⚠️ Изменить <project_dir> на вашу директорию.
$certDir = "<project_dir>\volumes\certs"
New-Item -ItemType Directory -Force -Path $certDir | Out-NullСоздать локальный Root CA
$rootCert = New-SelfSignedCertificate `
-Type Custom `
-Subject "CN=Dev Local Root CA" `
-KeyAlgorithm RSA `
-KeyLength 4096 `
-HashAlgorithm SHA256 `
-KeyExportPolicy Exportable `
-KeyUsageProperty Sign `
-KeyUsage CertSign, CRLSign, DigitalSignature `
-TextExtension @("2.5.29.19={critical}{text}CA=true") `
-NotAfter (Get-Date).AddYears(10) `
-CertStoreLocation "Cert:\LocalMachine\My"Экспорт Root CA (для клиентов)
Export-Certificate `
-Cert $rootCert `
-FilePath "$certDir\rootCA.cer" | Out-NullДобавить Root CA в доверенные (не удаляя из My)
Import-Certificate `
-FilePath "$certDir\rootCA.cer" `
-CertStoreLocation "Cert:\LocalMachine\Root" | Out-NullПроверки
Get-ChildItem Cert:\LocalMachine\My |
Where-Object Thumbprint -eq $rootCert.Thumbprint$rootCert.HasPrivateKeyОжидается: True
Создание сертификатов, подписанных CA
Сертификат портала
$portalCert = New-SelfSignedCertificate `
-Type Custom `
-DnsName "<portal_name>", "localhost", "<portal_ip>" `
-Subject "CN=<portal_name>" `
-KeyAlgorithm RSA `
-KeyLength 2048 `
-HashAlgorithm SHA256 `
-KeyExportPolicy Exportable `
-Signer $rootCert `
-NotAfter (Get-Date).AddYears(3) `
-CertStoreLocation "Cert:\LocalMachine\My"Сертификат TV
$tvCert = New-SelfSignedCertificate `
-Type Custom `
-DnsName "<tv_name>", "<tv_ip>" `
-Subject "CN=<tv_name>" `
-KeyAlgorithm RSA `
-KeyLength 2048 `
-HashAlgorithm SHA256 `
-KeyExportPolicy Exportable `
-Signer $rootCert `
-NotAfter (Get-Date).AddYears(3) `
-CertStoreLocation "Cert:\LocalMachine\My"Экспорт в PFX
$password = ConvertTo-SecureString "1234" -AsPlainText -Force
Export-PfxCertificate `
-Cert $portalCert `
-FilePath "$certDir\dev.pfx" `
-Password $password | Out-Null
Export-PfxCertificate `
-Cert $tvCert `
-FilePath "$certDir\dev_tv.pfx" `
-Password $password | Out-NullЭкспорт сертификатов в CRT (PEM)
Портал
Export-Certificate `
-Cert $portalCert `
-FilePath "$certDir\dev.cer" | Out-Null
certutil -encode `
"$certDir\dev.cer" `
"$certDir\dev.crt" | Out-NullTV
Export-Certificate `
-Cert $tvCert `
-FilePath "$certDir\dev_tv.cer" | Out-Null
certutil -encode `
"$certDir\dev_tv.cer" `
"$certDir\dev_tv.crt" | Out-NullЭкспорт приватных ключей в KEY (PEM)
6.2.1 PowerShell 7+
dev.key (портал)
$certDir = "<project_dir>\volumes\certs"
$password = ConvertTo-SecureString "1234" -AsPlainText -Force
$pfx = Get-PfxData -FilePath "$certDir\dev.pfx" -Password $password
$certWithKey = $pfx.EndEntityCertificates[0]
$rsa = [System.Security.Cryptography.X509Certificates.RSACertificateExtensions]::GetRSAPrivateKey($certWithKey)
$keyBytes = $rsa.ExportPkcs8PrivateKey()
$base64 = [Convert]::ToBase64String($keyBytes)
$pem = ($base64 -split "(.{1,64})" | Where-Object { $_ }) -join "`n"
@"
-----BEGIN PRIVATE KEY-----
$pem
-----END PRIVATE KEY-----
"@ | Set-Content "$certDir\dev.key" -NoNewlinedev_tv.key (TV)
$certDir = "<project_dir>\volumes\certs"
$password = ConvertTo-SecureString "1234" -AsPlainText -Force
$pfxTv = Get-PfxData -FilePath "$certDir\dev_tv.pfx" -Password $password
$certWithKeyTv = $pfxTv.EndEntityCertificates[0]
$rsaTv = [System.Security.Cryptography.X509Certificates.RSACertificateExtensions]::GetRSAPrivateKey($certWithKeyTv)
$keyBytesTv = $rsaTv.ExportPkcs8PrivateKey()
$base64Tv = [Convert]::ToBase64String($keyBytesTv)
$pemTv = ($base64Tv -split "(.{1,64})" | Where-Object { $_ }) -join "`n"
@"
-----BEGIN PRIVATE KEY-----
$pemTv
-----END PRIVATE KEY-----
"@ | Set-Content "$certDir\dev_tv.key" -NoNewline6.2.2 OpenSSL
Установка OpenSSL
Вариант 1 — через Chocolatey
choco install openssl -yВариант 2 — официальный инсталлятор
https://slproweb.com/products/Win32OpenSSL.html
Добавить в PATH (только для текущей сессии):
$env:Path += ";C:\Program Files\OpenSSL-Win64\bin"Извлечь приватные ключи из PFX
⚠️ Изменить <project_dir> на вашу директорию.
cd <project_dir>\volumes\certs
openssl pkcs12 -in dev.pfx -nocerts -nodes -out dev.key -passin pass:1234
openssl pkcs12 -in dev_tv.pfx -nocerts -nodes -out dev_tv.key -passin pass:1234✔️ Результат
В каталоге <project_dir>\volumes\certs будут:
- rootCA.pem
- dev.cer
- dev.crt
- dev.key
- dev.pfx
- dev_tv.cer
- dev_tv.crt
- dev_tv.key
- dev_tv.pfx
Не требуются для работы микросервисов:
dev.pfxdev_tv.pfxdev_tv.cerdev.cerrootCA.cer
⚠️ rootCA.cer — корневой сертификат.
Его нужно установить в доверенные CA на клиентских машинах.
7. Запуск trace-viewer
docker compose -f docker-compose-tv.yml up -d8. Запуск UI
docker compose -f docker-compose-portal.yml up -d✔️ Проверка работы UI
Откройте в браузере:
https://<host_address>:8443