Atualização e migração
Os componentes do Riversoft® STCP DirectLink são distribuídos como pacotes RPM no repositório Riversoft e são atualizados pelo gerenciador de pacotes do sistema, dnf ou yum:
| Componente | Pacote |
|---|---|
| Riversoft STCP DirectLink | stcpdirectlink |
| Riversoft STCP DirectLink Portal | stcpdirectlink-portal |
| Riversoft STCP Gemini API | stcpgemini-api |
| Riversoft Console Portal | stcpgemini-portal |
A migração da versão 8 para a versão 9 tem procedimento próprio, descrito em Migração da versão 8 para a versão 9.
Boas práticas
- Leia as notas de versão de todas as versões entre a instalada e a de destino. Elas informam mudanças de comportamento, novos parâmetros e procedimentos específicos.
- Atualize primeiro um ambiente de homologação e repita os testes dos fluxos críticos antes de atualizar a produção.
- Planeje uma janela de manutenção e comunique os parceiros quando houver indisponibilidade das transferências.
- Faça backup da configuração e dos bancos de dados antes de cada atualização.
- Atualize uma versão de destino por vez e mantenha a mesma versão em todos os servidores do ambiente.
- Registre a versão anterior de cada pacote para poder fazer a reversão.
Antes de atualizar
Levantamento
Registre as versões instaladas:
rpm -q stcpgemini-api stcpgemini-portal stcpdirectlink stcpdirectlink-portalConfira as versões disponíveis no repositório:
dnf makecache dnf list --showduplicates stcpgemini-api stcpgemini-portal stcpdirectlink stcpdirectlink-portalIdentifique as transferências em andamento e os links de download ainda válidos.
Defina o responsável pela mudança e o plano de reversão.
Backup
Arquivos de configuração:
Item Arquivo Riversoft STCP DirectLink /usr/local/stcpdirectlink/configs/config.jsonRiversoft STCP DirectLink Portal /usr/local/stcpdirectlink/static/portal/assets/configs/config.jsonRiversoft STCP Gemini API /usr/local/stcpgemini-api/configs/config.jsonRiversoft Console Portal /usr/local/stcpgemini-api/portal/app/configs/config.jsonArquivo de licença (
applLicense) e arquivos de segredos referenciados na configuração.Banco de configuração e banco de log, conforme as políticas de backup da organização.
Certificados e chaves usados pelos serviços.
Procedimento de atualização
Pare os serviços
Pare o Riversoft STCP DirectLink antes da API:
systemctl stop stcpdirectlink
systemctl stop stcpgemini-apiAtualize os pacotes
Atualize os metadados do repositório e os pacotes:
dnf clean all
dnf makecache
dnf upgrade stcpgemini-api stcpgemini-portal stcpdirectlink stcpdirectlink-portalPara atualizar para uma versão específica, informe a versão no nome do pacote, por exemplo dnf upgrade stcpdirectlink-9.0.1.
Revise a configuração
Os arquivos de configuração em uso, inclusive o do Riversoft STCP DirectLink Portal, não são substituídos pela atualização. Compare cada config.json com o modelo (example-config.json) da nova versão para identificar parâmetros novos ou alterados, conforme as notas de versão. Se o gerenciador de pacotes criar arquivos com a extensão .rpmnew, compare-os com os arquivos em uso:
find /usr/local/stcpgemini-api /usr/local/stcpdirectlink -name "*.rpmnew"Atualize o banco de dados, quando necessário
Quando a nova versão exigir alterações no banco de dados, as notas de versão informam os scripts e a ordem de execução. Execute-os com o acompanhamento da equipe de DBA.
Inicie os serviços
Inicie a API antes do Riversoft STCP DirectLink e confirme que os dois estão em execução:
systemctl start stcpgemini-api
systemctl start stcpdirectlink
systemctl status stcpgemini-api stcpdirectlinkNota
Quando o Riversoft STCP Gemini também estiver instalado, a Riversoft STCP Gemini API e o Riversoft Console Portal são compartilhados pelos dois produtos: atualize-os uma única vez, antes dos produtos, conferindo nas notas de versão a compatibilidade entre as versões.
Validação após a atualização
-
rpm -qmostra a versão de destino de cada pacote. -
systemctl statusmostrarunningpara a API e para o Riversoft STCP DirectLink, sem erros no log. - O Riversoft Console Portal abre e aceita o login.
- O Riversoft STCP DirectLink Portal abre em
/portale aceita o login de um usuário de teste. - Um upload e um download de teste são concluídos pelo portal e pela API.
- Os links seguros, as notificações e os conectores usados no ambiente funcionam.
Reversão (rollback)
Se a validação falhar e a causa não puder ser corrigida dentro da janela de manutenção:
Pare os serviços.
Volte os pacotes para a versão anterior registrada antes da atualização:
dnf downgrade stcpgemini-api-<versão-anterior> stcpgemini-portal-<versão-anterior> stcpdirectlink-<versão-anterior> stcpdirectlink-portal-<versão-anterior>Também é possível desfazer a transação inteira com
dnf history undo <id>, em que<id>é o identificador da transação mostrado emdnf history. Comyum, useyum downgradeeyum history undo.Restaure os arquivos de configuração do backup.
Se scripts de banco tiverem sido executados, restaure o backup dos bancos de dados.
Inicie os serviços e repita a validação.
Importante
A reversão depende de a versão anterior continuar disponível no repositório e de existir backup dos arquivos e dos bancos feito antes da atualização.
Migração da versão 8 para a versão 9
A migração da versão 8 para a versão 9 muda a forma de configuração e de autenticação e tem procedimento próprio, descrito nas seções a seguir. Ela é destinada aos administradores do ambiente e às equipes responsáveis pelas integrações com a API. Para outras versões, siga a atualização descrita acima e as notas de versão.
O que muda na versão 9
Na versão 8, parte da configuração operacional ficava no arquivo config.json. Na versão 9, a configuração passa a ser dividida entre o arquivo local e o banco de configuração da instância:
| Origem na versão 9 | Conteúdo | Onde é administrada |
|---|---|---|
config.json | Inicialização local, conexão com os bancos, notificações, roteamento, KMS, telemetria e serviço. | No servidor da aplicação. Veja Configuração. |
| Banco de configuração | Configuração operacional da instância, JWT, SSO e lock externo. | Riversoft Console Portal. |
A versão 9 também consolida a autenticação da API:
| Mudança | Efeito |
|---|---|
| Rotas protegidas exigem token Bearer | Upload, listagens, relatório e logout deixam de aceitar Basic. Basic continua aceito somente no login (/auth/login). |
API na versão v2 | O prefixo passa de /directlink/v1 para /directlink/v2, e a v1 não é mais atendida. Veja Migração da v1 para a v2. |
| Download de arquivo listado com token | /download/file e /download/file/backup exigem o token Bearer ou o cookie de sessão do mesmo usuário que fez a listagem. |
Campo time em ISO 8601 | As respostas da API informam a data e a hora no formato RFC 3339, por exemplo 2026-11-07T14:03:21-03:00. |
| Token aceito no header ou no cookie | Integrações usam Authorization: Bearer; o portal mantém a sessão no cookie __Host-dirl_session (HttpOnly, Secure, SameSite=Strict). O header tem prioridade. |
/auth/token e /oauth2/token equivalentes | Os dois endpoints emitem tokens por password grant ou token exchange, conforme os modos habilitados. |
| Token exchange com provedor | O JWT de origem é validado pelo provedor informado no campo provider ou, como alternativa, no header X-STCPDIRECTLINK-JWT-ISSUER. |
| Identidade validada | O usuário identificado pelas credenciais ou claims precisa existir e corresponder ao perfil carregado da configuração. |
| Token de impersonação | Integrações técnicas podem usar um token de longa duração, gerado na interface de supervisão, com identificador de sessão registrado. |
| Host validado | A API rejeita com 403 chamadas feitas por um host diferente do configurado para o serviço. |
| Cloudflare Turnstile (opcional) | Login, primeiro acesso e recuperação de senha podem exigir a verificação da Cloudflare. |
Parâmetros que saem do config.json
Os campos abaixo não devem ser copiados do config.json da versão 8. Na versão 9, eles são carregados da configuração da instância no banco:
| Campo na versão 8 | Destino na versão 9 |
|---|---|
General.oauthTokenMethodJWT | CfgInstance.Startup.JwtConfig.MethodName |
General.oauthTokenExpireSeconds | CfgInstance.Startup.JwtConfig.ExpirationTime |
General.lockProvider.lockType | CfgInstance.Startup.ExternalLock* |
General.ssoProviders[] | CfgInstance.Startup.SSOConfigs[] |
Quando não informados, o método de assinatura dos tokens é HS256 e a expiração é de 3600 segundos. Sem lock externo configurado, a aplicação usa lock em sistema de arquivos no diretório local. Os campos de conexão com o banco de configuração (cfgProvider, cfgDbHost, cfgDbPort, cfgDbName, cfgDbUser e cfgDbPswd) não mudam.
Impacto nas integrações
Adeque os consumidores da API antes de liberar a versão 9:
| Situação na versão 8 | Adequação para a versão 9 |
|---|---|
Cliente usando /directlink/v1 | Trocar o prefixo para /directlink/v2. |
Download pelo linkURL sem token | Enviar o token Bearer do mesmo usuário que fez a listagem. |
Leitura do campo time no formato anterior | Ler o campo no formato ISO 8601 (RFC 3339). |
Basic enviado diretamente para /upload, /download/list ou /report | Obter um token Bearer (login ou password grant) e enviar Authorization: Bearer <token>. |
| Token obtido por password grant | Confirmar o modo habilitado, a rota, o formulário e a validade do novo token. |
Token exchange sem provider | Informar o provedor JWT no campo provider ou no header X-STCPDIRECTLINK-JWT-ISSUER. |
| Automação com token de longa duração | Gerar e registrar um token de impersonação, proteger o segredo e testar a rotação. |
| Portal ou SPA recebendo o token pela URL | Usar a sessão por cookie seguro emitida no login ou no SSO. |
| Cliente chamando rota ou método não registrado | Usar o prefixo /directlink/v2 e o método indicado na referência da API. |
| Cliente acessando a API por outro nome de host | Corrigir URL, DNS, proxy ou header Host para o endereço configurado. |
Antes de migrar
Levantamento da versão 8
- Identifique a instância, o ambiente e o responsável pela mudança.
- Faça uma cópia controlada do
config.jsonda versão 8. - Registre o provider e os dados de conexão do banco de configuração.
- Registre os serviços habilitados e os fluxos críticos de upload, download, autenticação e SSO.
- Identifique as integrações que enviam Basic diretamente às rotas de transferência.
- Identifique as integrações que usam password grant, token exchange ou token de longa duração, e os provedores e emissores dos tokens.
- Liste os provedores SSO habilitados e o tipo de lock utilizado.
- Registre o método e a expiração efetivos dos tokens JWT.
- Defina uma janela de indisponibilidade e o plano de retorno.
Acessos e pré-requisitos
- Acesso ao servidor da aplicação, ao banco de configuração e ao Riversoft Console Portal.
- Backup do banco de configuração, do diretório de configuração e dos arquivos de controle.
- Certificados, chaves e segredos disponíveis no mecanismo seguro do ambiente.
- Espaço em disco e permissões do diretório da versão 9 conferidos.
Procedimento de migração
Prepare a versão 9
- Instale a versão 9 no diretório definido para a instância.
- Prepare o
config.jsonda versão 9, ajustando somente os parâmetros locais: diretórios, licença, conexão com os bancos, KMS, telemetria, notificações e serviço. - Remova do arquivo os parâmetros que passaram para o banco.
- Confira proprietário, grupo e permissões dos arquivos e valide o JSON (por exemplo, com
jq empty).
Prepare a configuração no banco
- Abra a instância no Riversoft Console Portal.
- Confira a configuração JWT (método de assinatura, expiração e material de assinatura).
- Confira os modos de autenticação habilitados para a API.
- Confira os provedores usados por token exchange e impersonação, o provider de lock e os provedores SSO. Habilite somente os provedores realmente usados.
- Salve e registre a data, o responsável e o ambiente da mudança.
Adeque e teste as integrações
- Altere os consumidores que usam Basic nas rotas protegidas para
Authorization: Bearer. - Informe o provedor do token exchange.
- Confirme o prefixo
/directlink/v2e o host configurado para a API. - Atualize o armazenamento seguro dos tokens técnicos.
- Execute os testes de autenticação antes dos testes de transferência.
Inicie e acompanhe
- Pare a versão 8 conforme o procedimento operacional.
- Inicie a versão 9 e acompanhe o log de inicialização.
- Confirme que a instância carregou o banco de configuração sem erros de JWT, lock ou SSO.
- Confirme que o serviço está disponível antes de liberar os usuários.
Validação após a migração
- O serviço inicia sem erro de conexão com o banco de configuração.
- O host usado pelos clientes corresponde ao configurado para a API.
- O login local com Basic em
/auth/loginfunciona, inclusive com MFA, quando aplicável. - Um token é emitido com o método e a expiração esperados; password grant e token exchange funcionam nos modos habilitados.
- O token é aceito no header
Authorizatione a sessão do portal funciona pelo cookie. - O logout remove o cookie e encerra o acesso aos recursos protegidos.
- O token de impersonação válido funciona e um identificador não registrado é rejeitado.
- O login de cada provedor SSO habilitado funciona, e os callbacks OAuth 2.0 e SAML 2.0 chegam à versão 9.
- Upload, listagens, download autenticado, download por link seguro e relatório funcionam.
- Credencial ausente ou inválida é rejeitada, e um token válido com conexão bloqueada recebe
403. - As notificações habilitadas funcionam e os logs não apresentam erros de configuração, autenticação ou permissão.
Registre as evidências (horário, instância, versão, rota, status HTTP e resultado). Nunca registre token, cookie, senha, PIN ou segredo nas evidências.
Problemas comuns na migração
| Sintoma | Verificações |
|---|---|
| A versão 9 não inicia | Caminho e validade do JSON, licença, permissões e log de inicialização. |
| Erro de conexão com o banco | Host, porta, usuário, senha, cfgDbName, opções TLS e firewall. |
| Tokens com método ou expiração inesperados | Configuração JWT da instância no Riversoft Console Portal. |
/auth/token rejeita o password grant | Modo habilitado, método POST, Content-Type, grant_type, usuário e senha. |
| Token exchange rejeitado | grant_type, subject_token_type, subject_token, provider, cadastro do provedor JWT, issuer e audience. |
Token válido recebe 401 | Assinatura, issuer, audience, expiração, provedor e correspondência do usuário com o perfil. |
Token válido recebe 403 | Host configurado, conexão bloqueada, janela de horário, comando de pré-conexão, serviço, filtros e locks. |
| Basic deixou de funcionar no upload, na listagem ou no relatório | O cliente ainda usa o contrato da versão 8. Obtenha um token e use Authorization: Bearer. |
| O cookie não mantém a sessão do portal | Publicação HTTPS, domínio, atributos Secure e SameSite, proxy e relógio. |
| Login SSO não aparece ou o callback falha | Provedor habilitado, nome usado na rota, URLs cadastradas no provedor, certificados e relógio. |
| Alteração no Portal não aparece na aplicação | Instância correta, salvamento e reinício ou recarga do serviço. |
Reversão da migração
Execute a reversão quando a versão 9 não puder ser estabilizada dentro da janela de mudança:
- Interrompa a versão 9 e preserve os logs da tentativa.
- Restaure o arquivo de configuração e o binário da versão 8.
- Confirme que a versão 8 aponta para a configuração e os serviços esperados e inicie-a.
- Restaure nos clientes o contrato de autenticação da versão 8, se ele tiver sido alterado.
- Valide autenticação, emissão de token, upload, download e os fluxos críticos.
- Registre as configurações alteradas no Portal. Preserve esses cadastros até a análise da falha.
Segurança durante a migração
- Não compartilhe o
config.jsoncompleto fora do grupo autorizado nem registre segredos em chamados, e-mails ou evidências. - Mantenha os tokens técnicos em cofre de segredos e defina a rotação.
- Habilite somente os modos de autenticação necessários ao ambiente.
- Publique o portal e a API por HTTPS para preservar o cookie
Secure. - Use
tls=skip-verifyna conexão com o banco somente em ambientes controlados de teste. Veja Requisitos › Conexão com TLS. - Troque as credenciais que tenham sido expostas.