Saltar para o conteúdo
Ambiente de teste com Docker

Ambiente de teste com Docker

O ambiente de teste sobe, em containers, o Riversoft STCP Gemini e o Riversoft STCP DirectLink completos, com o banco de dados, a Riversoft STCP Gemini API e o Riversoft Console Portal. Ele serve para avaliar os produtos, treinar equipes, reproduzir problemas e validar versões novas antes de atualizar a produção.

Somente para testes

O ambiente roda sem TLS, guarda senhas e segredos no arquivo .env e publica o banco de dados no host. Não use estes arquivos como base para um ambiente de produção. Para produção, siga Instalação e Segurança.

Download

Baixe o pacote com os arquivos do ambiente: stcp-test-environment.zip.

ArquivoConteúdo
DockerfileImagem base Oracle Linux 9 com o repositório Riversoft e um alvo por serviço.
docker-compose.ymlServiços, volumes, portas e perfis do ambiente.
.env.exampleModelo das variáveis: instância, banco, segredos, licenças, portas e versão do portal.
entrypoints/Scripts que geram a configuração de cada componente a partir do modelo do pacote e iniciam o processo em primeiro plano.
db/init/ e scripts/download-db-scripts.sh (Linux e macOS) ou scripts/download-db-scripts.ps1 (Windows)Criação dos bancos com os scripts da Riversoft para MariaDB e do usuário de banco dos produtos. O script de Linux e macOS usa unzip, bsdtar, python3 ou, na falta deles, um contêiner temporário.
README.mdResumo do ambiente, comandos e links para esta página nos três idiomas.

O ambiente foi testado com Oracle Linux 9, MariaDB 10.11 e stcpdirectlink-portal 3.12.1-0.

O que o ambiente sobe

ServiçoConteúdoPorta no host
dbMariaDB 10.11, com o banco de configuração e o banco de log.3306
stcpgemini-apiRiversoft STCP Gemini API e Riversoft Console Portal (modo -lite).33070
stcpgemini-serverRiversoft STCP Gemini Server e Riversoft STCP Gemini Rename.3305 (OFTP)
stcpdirectlinkRiversoft STCP DirectLink, Riversoft STCP DirectLink Portal e Riversoft STCP Gemini Rename.8080
    flowchart LR
    NAV[Navegador] -->|33070| API[stcpgemini-api<br/>Gemini API e Console Portal]
    NAV -->|8080| DL[stcpdirectlink<br/>DirectLink e DirectLink Portal]
    PARC[Parceiro OFTP] -->|3305| SRV[stcpgemini-server<br/>Gemini Server e Rename]
    API -->|Supervisão 33050| SRV
    API -->|Supervisão 33060| DL
    API --> DB[(db<br/>MariaDB)]
    SRV --> DB
    DL --> DB
    SRV --- CP[(Volume<br/>mailboxes)]
    DL --- CP
  

O Riversoft STCP Gemini Server e o Riversoft STCP DirectLink compartilham o volume das caixas postais (/usr/local/stcp/data). As portas de supervisão ficam acessíveis só na rede interna do compose, para a Riversoft STCP Gemini API.

Pré-requisitos

  • Docker com o plugin Compose.
  • Em computadores ARM, como Mac com Apple Silicon, a emulação amd64 habilitada. Os pacotes da Riversoft são distribuídos para x86_64, e os serviços dos produtos usam platform: linux/amd64.
  • Acesso a repo.riversoft.com.br e a www.riversoft.com.br durante o build.
  • Arquivo de licença do Riversoft STCP DirectLink e, se houver, do Riversoft STCP Gemini Rename, fornecidos pela Riversoft.
  • No Windows, Docker Desktop e PowerShell 5.1 ou superior. Se a política de execução bloquear o script, execute powershell -ExecutionPolicy Bypass -File .\scripts\download-db-scripts.ps1.
  • A chave de criptografia das senhas (STCP_CONFIG_PASSPHRASE), usada por todos os componentes. Veja Chave de criptografia das senhas.

Passo a passo

Prepare os arquivos

unzip stcp-test-environment.zip && cd stcp-test-environment
cp .env.example .env
./scripts/download-db-scripts.sh
cp <licenca>.jwt licenses/stcpdirectlink-license.jwt

No .env, ajuste as senhas, os segredos e a chave de criptografia (STCP_CONFIG_PASSPHRASE). O mesmo valor é usado por todos os componentes. Confira no script 0-STCPGeminiCreateDatabase_*.sql os nomes dos bancos criados e, se forem diferentes, ajuste STCP_DB_CONFIG e STCP_DB_LOG.

Suba o banco, a API e o Console Portal

docker compose up -d --build

Na primeira inicialização, o MariaDB executa os scripts da Riversoft e cria o usuário de banco dos produtos.

Crie a instância no Riversoft Console Portal

Abra http://localhost:33070, entre com o operador administrador padrão (stcpadmin) e troque a senha. Depois:

  1. Crie a instância com o nome definido em STCP_INSTANCE.
  2. Cadastre os serviços de rede do OFTP (porta 3305) e da API do Riversoft STCP DirectLink (porta 8080). Ao criar o serviço da API, o Console Portal preenche os caminhos padrão das páginas estáticas e dos templates.
  3. Cadastre os serviços Supervisão (gemini), na porta 33050, e Supervisão (directlink), na porta 33060, com o endereço 0.0.0.0 e uma credencial de supervisão para cada um.
  4. No cadastro API/Supervisão, informe stcpgemini-server, porta 33050, e stcpdirectlink, porta 33060, com as credenciais de supervisão.
  5. Cadastre um usuário de teste.

Veja Serviços de supervisão.

Suba o Gemini Server e o DirectLink

docker compose --profile transfer up -d --build

Os dois serviços não iniciam sem a instância. Veja Criação da instância.

Teste

  • Riversoft STCP DirectLink Portal: http://localhost:8080/portal, com o usuário de teste.
  • API do Riversoft STCP DirectLink: siga o Início rápido da Riversoft STCP DirectLink API com http://localhost:8080/directlink/v2.
  • OFTP: configure um parceiro apontando para a porta 3305 do host.

Remova o ambiente

Ao terminar os testes, pare os containers e apague os volumes, as imagens criadas no build e a rede do ambiente:

docker compose --profile transfer down -v --rmi local

Atenção

O -v apaga o banco de dados e as caixas postais do ambiente, incluindo a instância e os cadastros feitos no Console Portal. Para manter os dados e só parar o ambiente, use docker compose --profile transfer down.

Depois, apague a pasta stcp-test-environment, que contém o .env com as senhas e o arquivo de licença.

Configuração gerada

Na primeira inicialização, cada container gera o seu arquivo de configuração a partir do modelo instalado pelo pacote (example-*.json), com os valores do .env. Assim, a configuração acompanha a versão instalada. Para usar um arquivo próprio, monte-o como volume no mesmo caminho: se o arquivo existir, ele é mantido.

ComponenteArquivo
Riversoft STCP Gemini API/usr/local/stcpgemini-api/configs/config.json
Riversoft Console Portal/usr/local/stcpgemini-api/portal/app/configs/config.json
Riversoft STCP Gemini Server/usr/local/stcp/configs/stcpserver.config.json
Riversoft STCP DirectLink/usr/local/stcpdirectlink/configs/config.json
Riversoft STCP DirectLink Portal/usr/local/stcpdirectlink/static/portal/assets/configs/config.json
Riversoft STCP Gemini Rename/usr/local/stcpren/configs/config.json
docker-compose.yml
# Riversoft STCP Gemini and Riversoft STCP DirectLink test environment.
# Step 1:  docker compose up -d --build                    (database + API + Console Portal)
# Step 2:  create the instance and a test user in the Riversoft Console Portal
# Step 3:  docker compose --profile transfer up -d --build (Gemini Server + DirectLink)
name: stcp-test

x-stcp-env: &stcp-env
  STCP_INSTANCE: ${STCP_INSTANCE:?set STCP_INSTANCE in .env}
  STCP_DB_HOST: db
  STCP_DB_PORT: "3306"
  STCP_DB_USER: ${STCP_DB_USER:-stcp}
  STCP_DB_PASSWORD: ${STCP_DB_PASSWORD:?set STCP_DB_PASSWORD in .env}
  STCP_DB_CONFIG: ${STCP_DB_CONFIG:-GEMINI_DBConfig}
  STCP_DB_LOG: ${STCP_DB_LOG:-GEMINI_DBLog}
  STCP_CONFIG_PASSPHRASE: ${STCP_CONFIG_PASSPHRASE:?set STCP_CONFIG_PASSPHRASE in .env}
  STCPREN_LICENSE: ${STCPREN_LICENSE:-}
  TZ: ${TZ:-America/Sao_Paulo}

services:

  db:
    image: mariadb:10.11
    environment:
      MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD:?set MARIADB_ROOT_PASSWORD in .env}
      STCP_DB_USER: ${STCP_DB_USER:-stcp}
      STCP_DB_PASSWORD: ${STCP_DB_PASSWORD}
      STCP_DB_CONFIG: ${STCP_DB_CONFIG:-GEMINI_DBConfig}
      STCP_DB_LOG: ${STCP_DB_LOG:-GEMINI_DBLog}
      TZ: ${TZ:-America/Sao_Paulo}
    command: ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
    volumes:
      - db-data:/var/lib/mysql
      - ./db/init:/docker-entrypoint-initdb.d:ro
    ports:
      - "${DB_PORT:-3306}:3306"
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 30
      start_period: 30s

  stcpgemini-api:
    platform: linux/amd64
    build:
      context: .
      target: stcpgemini-api
    environment:
      <<: *stcp-env
      STCP_API_PORT: "33070"
      STCP_PORTAL_API_URL: http://localhost:${API_PORT:-33070}
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "${API_PORT:-33070}:33070"
    restart: unless-stopped

  stcpgemini-server:
    platform: linux/amd64
    profiles: ["transfer"]
    build:
      context: .
      target: stcpgemini-server
    environment:
      <<: *stcp-env
    depends_on:
      db:
        condition: service_healthy
      stcpgemini-api:
        condition: service_started
    volumes:
      - mailboxes:/usr/local/stcp/data
      - ./licenses:/licenses:ro
    # Gemini supervision: reached only by stcpgemini-api, on the compose internal network.
    expose:
      - "33050"
    ports:
      - "${OFTP_PORT:-3305}:${OFTP_PORT:-3305}"
    restart: unless-stopped

  stcpdirectlink:
    platform: linux/amd64
    profiles: ["transfer"]
    build:
      context: .
      target: stcpdirectlink
      args:
        STCPDIRECTLINK_PORTAL_VERSION: ${STCPDIRECTLINK_PORTAL_VERSION:-3.12.1-0}
    environment:
      <<: *stcp-env
      STCPDIRECTLINK_SECRET: ${STCPDIRECTLINK_SECRET:?set STCPDIRECTLINK_SECRET in .env}
      STCPDIRECTLINK_LICENSE_FILE: /licenses/${STCPDIRECTLINK_LICENSE:-stcpdirectlink-license.jwt}
      STCPDIRECTLINK_PORTAL_API_URL: http://localhost:${DIRECTLINK_PORT:-8080}/directlink/v2
    depends_on:
      db:
        condition: service_healthy
      stcpgemini-api:
        condition: service_started
    volumes:
      - mailboxes:/usr/local/stcp/data
      - ./licenses:/licenses:ro
    # DirectLink supervision: reached only by stcpgemini-api, on the compose internal network.
    expose:
      - "33060"
    ports:
      - "${DIRECTLINK_PORT:-8080}:${DIRECTLINK_PORT:-8080}"
    restart: unless-stopped

volumes:
  db-data:
  mailboxes:

Comandos úteis

docker compose --profile transfer ps
docker compose --profile transfer logs -f stcpgemini-server stcpdirectlink
docker compose --profile transfer down       # para, mantendo os volumes
docker compose --profile transfer down -v    # para e apaga banco e caixas postais

Solução de problemas

SintomaCausa provávelSolução
stcpgemini-server ou stcpdirectlink reinicia em seguida.A instância não existe ou o nome difere de STCP_INSTANCE.Crie a instância no Console Portal com o mesmo nome e suba o perfil transfer de novo.
O Console Portal não mostra a supervisão.Os serviços de supervisão ou o cadastro API/Supervisão não foram configurados.Confira os serviços na instância e use os nomes dos containers no cadastro API/Supervisão.
O Riversoft STCP DirectLink Portal não abre.O caminho das páginas estáticas do serviço da API não é o padrão.Confira se o caminho é /usr/local/stcpdirectlink/static, sem barra no fim.
O build falha ao instalar os pacotes em computador ARM.A emulação amd64 não está habilitada.Habilite a emulação no Docker.