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.
| Arquivo | Conteúdo |
|---|---|
Dockerfile | Imagem base Oracle Linux 9 com o repositório Riversoft e um alvo por serviço. |
docker-compose.yml | Serviços, volumes, portas e perfis do ambiente. |
.env.example | Modelo 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.md | Resumo 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ço | Conteúdo | Porta no host |
|---|---|---|
db | MariaDB 10.11, com o banco de configuração e o banco de log. | 3306 |
stcpgemini-api | Riversoft STCP Gemini API e Riversoft Console Portal (modo -lite). | 33070 |
stcpgemini-server | Riversoft STCP Gemini Server e Riversoft STCP Gemini Rename. | 3305 (OFTP) |
stcpdirectlink | Riversoft 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
amd64habilitada. Os pacotes da Riversoft são distribuídos parax86_64, e os serviços dos produtos usamplatform: linux/amd64. - Acesso a
repo.riversoft.com.bre awww.riversoft.com.brdurante 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.jwtNo .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 --buildNa 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:
- Crie a instância com o nome definido em
STCP_INSTANCE. - Cadastre os serviços de rede do OFTP (porta
3305) e da API do Riversoft STCP DirectLink (porta8080). Ao criar o serviço da API, o Console Portal preenche os caminhos padrão das páginas estáticas e dos templates. - Cadastre os serviços Supervisão (gemini), na porta
33050, e Supervisão (directlink), na porta33060, com o endereço0.0.0.0e uma credencial de supervisão para cada um. - No cadastro API/Supervisão, informe
stcpgemini-server, porta33050, estcpdirectlink, porta33060, com as credenciais de supervisão. - 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 --buildOs 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
3305do 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 localAtençã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.
| Componente | Arquivo |
|---|---|
| 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 postaisSolução de problemas
| Sintoma | Causa provável | Soluçã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. |