Pular para o conteúdo principal

Processing Server Em Docker

Instalação de um servidor de processamento em container.

Para Quem É

Use este caminho quando quiser rodar um processing server isolado em Docker.

Este guia usa a imagem local já construída pelo repositório. Ainda não assume imagem pública em registry.

Para suporte por arquitetura e GPU, consulte Compatibilidade.

Pré-requisitos

  • Docker.
  • Docker Compose.
  • Checkout do repositório Toposync.
  • Porta TCP liberada entre origin e processing server. O padrão é 49321.

Instalação

Primeiro construa a imagem local CPU:

docker compose build

Para CUDA, construa com o override CUDA:

docker compose -f docker-compose.yml -f docker-compose.cuda.yml build

Como Rodar

Docker Run

Sem Basic Auth:

docker run --rm -d \
--name toposync-processing \
--no-healthcheck \
-p 49321:49321 \
-v "$PWD/toposync-processing-data:/data" \
toposync:local \
toposync processing-serve --host 0.0.0.0 --port 49321 --data-dir /data

Com Basic Auth:

docker run --rm -d \
--name toposync-processing \
--no-healthcheck \
-e TOPOSYNC_PROCESSING_USERNAME=toposync \
-e TOPOSYNC_PROCESSING_PASSWORD='<senha-forte>' \
-p 49321:49321 \
-v "$PWD/toposync-processing-data:/data" \
toposync:local \
toposync processing-serve --host 0.0.0.0 --port 49321 --data-dir /data

--no-healthcheck é intencional aqui: a imagem local tem healthcheck padrão de origin em /api/health, mas o processing server responde em /api/processing/status.

Docker Compose Override

Crie um arquivo docker-compose.processing.yml na sua pasta de deploy:

services:
toposync-processing:
image: toposync:local
command:
- toposync
- processing-serve
- --host
- 0.0.0.0
- --port
- "49321"
- --data-dir
- /data
ports:
- "49321:49321"
volumes:
- ./toposync-processing-data:/data
environment:
TOPOSYNC_PROCESSING_USERNAME: toposync
TOPOSYNC_PROCESSING_PASSWORD: "<senha-forte>"
healthcheck:
test:
- CMD-SHELL
- >
python -c "import base64, os, sys, urllib.request;
req=urllib.request.Request('http://127.0.0.1:49321/api/processing/status');
user=os.getenv('TOPOSYNC_PROCESSING_USERNAME','');
password=os.getenv('TOPOSYNC_PROCESSING_PASSWORD','');
req.add_header('Authorization','Basic '+base64.b64encode(f'{user}:{password}'.encode()).decode());
sys.exit(0 if urllib.request.urlopen(req, timeout=3).status == 200 else 1)"
interval: 30s
timeout: 5s
start_period: 20s
retries: 5
restart: unless-stopped

Suba o serviço:

docker compose -f docker-compose.processing.yml up -d

Para CUDA, garanta que a imagem toposync:local foi construída com docker-compose.cuda.yml antes de subir esse serviço.

Como Acessar

O origin precisa alcançar:

http://<ip-do-processing-server>:49321

O processing server não serve a UI principal.

Como Verificar

Sem Basic Auth:

curl http://127.0.0.1:49321/api/processing/status

Com Basic Auth:

curl -u toposync:'<senha-forte>' http://127.0.0.1:49321/api/processing/status

Ver logs:

docker logs -f toposync-processing

ou, com Compose:

docker compose -f docker-compose.processing.yml logs -f toposync-processing

Registrar No Origin

No servidor origin:

curl -X PUT http://127.0.0.1:8000/api/processing-servers/docker_processing \
-H 'content-type: application/json' \
-d '{
"id": "docker_processing",
"name": "Docker Processing",
"kind": "http",
"url": "http://<ip-do-processing-server>:49321",
"username": "toposync",
"password": "<senha-forte>"
}'

Depois valide pelo origin:

curl http://127.0.0.1:8000/api/processing-servers/docker_processing/status

Como Atualizar

Recrie a imagem local:

git pull
docker compose build

Para CUDA:

git pull
docker compose -f docker-compose.yml -f docker-compose.cuda.yml build

Reinicie o processing server:

docker compose -f docker-compose.processing.yml up -d

Como Desinstalar

Com docker run:

docker stop toposync-processing
rm -rf ./toposync-processing-data

Com Compose:

docker compose -f docker-compose.processing.yml down
rm -rf ./toposync-processing-data

Remova também o processing server registrado no origin.

Troubleshooting

Container aparece unhealthy

Não use o healthcheck padrão da imagem de origin. O processing server deve verificar:

/api/processing/status

Se usar docker run, passe --no-healthcheck ou crie um healthcheck customizado.

401 Unauthorized

O usuário ou senha no origin não bate com TOPOSYNC_PROCESSING_USERNAME e TOPOSYNC_PROCESSING_PASSWORD.

Connection refused

Confirme o mapeamento 49321:49321, o comando --host 0.0.0.0 e o firewall do host.

Pipeline continua local

O pipeline ainda está usando processing_server_id: "local". Altere para o id registrado no origin.