Índice do diárioDockup / nota de campo
Note / self-host-shlink

Como fazer self-host do Shlink em 2026: domínios, chaves de API e estatísticas

Um guia prático para fazer self-host do Shlink, abordando Docker, portas, dados persistentes, TLS, segurança, backups e as falhas que impedem o uso em produção. Passo a passo.

Fazer self-host do Shlink se torna interessante no primeiro redeploy, não no primeiro docker run. Se os links gerados usam HTTP ou as migrações não conseguem acessar o banco de dados, o Docker ainda pode informar que o processo está perfeitamente saudável. A implantação abaixo é organizada em torno de comportamentos observáveis: criar uma URL curta pela API, seguir o redirecionamento, registrar visitas e consultar estatísticas pelo cliente web.

A finalidade do Shlink é clara: um encurtador de links API-first com estatísticas. Essa descrição mostra o que precisa permanecer público, o que deve continuar privado e o que um backup precisa reconstruir.

Do que o Shlink depende

A saúde do processo e a saúde do produto são coisas distintas no Shlink. A porta 8080 pode responder enquanto a transação voltada ao usuário continua falhando. O contrato de rede do Shlink é Postgres ou MariaDB, além de Redis opcional para produção. Mantenha os endpoints privados em DNS interno, permita apenas as chamadas de saída necessárias e forneça ao Shlink uma credencial de serviço com escopo limitado.

Use este exercício de prontidão após mudanças relevantes na configuração: crie uma URL curta pela API, siga o redirecionamento, registre visitas e consulte estatísticas pelo cliente web. Mantenha verificações externas dispendiosas fora das probes de liveness para que uma indisponibilidade do provedor não provoque um loop de reinicialização. O trabalho de capacidade deve acompanhar o throughput de redirecionamentos, as gravações no banco de dados, os downloads de geolocalização e o comportamento do cache, que refletem melhor a pressão real sobre o Shlink do que as solicitações de páginas.

Volumes são apenas a primeira camada de recuperação

Não se espera que exista estado gravável da aplicação dentro da imagem padrão do Shlink. Preserve o banco de dados, as chaves de API e quaisquer dados de visitas importados, incluindo o digest fixado e a configuração de rotas revisada, em vez de fazer backup de um sistema de arquivos vazio do container.

Crie o Shlink do zero em outro host e verifique se os domínios, códigos curtos, tags e registros de visitas são restaurados e se todas as URLs curtas testadas redirecionam de forma idêntica. Se um banco de dados separado, um servidor de sala ou uma camada de autenticação for adicionada, atribua a esse componente seu próprio responsável explícito pela recuperação. O guia do Git à produção mostra como um artefato reproduzível substitui um backup de container.

Registre o comando de reconstrução e o teste com saída conhecida junto ao release. Um plano de recuperação stateless é bem-sucedido ao reproduzir o comportamento a partir de entradas confiáveis; ele não deve depender da cópia de um container em execução e opaco.

Proteja a parte valiosa do Shlink

Uma implantação segura do Shlink começa pela remoção de autoridade. Evite expor a chave da API REST ou alterar o domínio público depois que os links forem publicados; em vez disso, mantenha as chaves de API fora do código do navegador, use HTTPS e restrinja a administração, deixando os redirecionamentos públicos.

DEFAULT_DOMAIN é uma configuração, não um segredo; mantenha seu valor explícito enquanto protege as credenciais separadas usadas pelo Shlink. Restrinja as rotas administrativas, use DNS privado para as dependências e revise cada bind mount. Quando os logs forem enviados para um sistema central, filtre segredos e conteúdo privado antes que deixem o servidor.

Transforme o smoke test do Shlink em uma verificação de release

Para o Shlink, defina uma transação conhecida como válida antes do lançamento: crie uma URL curta pela API, siga o redirecionamento, registre visitas e consulte estatísticas pelo cliente web. Coloque no controle de versão os pré-requisitos, a resposta esperada e as etapas de limpeza, sem valores secretos. Fixe a imagem usada para estabelecer essa referência.

Use a transação para validar uma substituição e uma restauração independente. O serviço restaurado só será aceitável quando os domínios, códigos curtos, tags e registros de visitas forem recuperados e todas as URLs curtas testadas redirecionarem de forma idêntica. Ao mesmo tempo, observe o throughput de redirecionamentos, as gravações no banco de dados, os downloads de geolocalização e o comportamento do cache, transformando a parte mais lenta ou mais limitada em um alerta de nível de serviço.

O gate também precisa de um caso negativo: negue temporariamente à identidade de teste o acesso ao Postgres ou MariaDB, além do Redis opcional para produção. Confirme que o Shlink produz um erro acionável enquanto preserva os dados, restaure a condição válida e repita a transação conhecida como válida. Manter os dois resultados impede que um endpoint de health superficial se torne a única evidência em produção.

Inicie o Shlink sem ocultar as partes móveis

O comando a seguir torna visível o limite do container sem fingir provisionar todos os serviços externos.

docker run -d \
  --name shlink \
  --restart unless-stopped \
  -p 127.0.0.1:8080:8080 \
  -e DEFAULT_DOMAIN=go.example.com \
  shlinkio/shlink:stable

Antes de abrir o ingress, inspecione o ambiente resolvido, os mounts e o listener. Adicione as configurações de conexão revisadas para Postgres ou MariaDB, além do Redis opcional para produção; use nomes privados para serviços privados. Um lançamento bem-sucedido termina quando você consegue criar uma URL curta pela API, seguir o redirecionamento, registrar visitas e consultar estatísticas pelo cliente web, não quando o docker ps exibe Up.

Dê ao Shlink um endereço canônico

A fronteira pública do Shlink deve ser um único hostname canônico, com TLS automático e um único destino interno na porta 8080. Defina DEFAULT_DOMAIN e IS_HTTPS_ENABLED antes de criar URLs curtas para que os clientes retornem a um endereço reconhecido pelo serviço.

Se a transação de aceitação falhar, classifique o primeiro erro. Problemas de DNS, certificado e 502 pertencem ao checklist de validação de TLS. A condição “os links gerados usam HTTP ou as migrações não conseguem acessar o banco de dados” pertence ao lado da aplicação depois que uma solicitação alcançou o Shlink com sucesso.

Diagnostique um Shlink que parece saudável

No Shlink, monitore uma transação em vez de um processo: crie uma URL curta pela API, siga o redirecionamento, registre visitas e consulte estatísticas pelo cliente web. Combine a latência e a taxa de erros com o throughput de redirecionamentos, as gravações no banco de dados, os downloads de geolocalização e o comportamento do cache para que um alerta identifique o componente limitado.

O ensaio de upgrade deve abranger o staging das migrações do banco de dados e da compatibilidade da API, pois os links curtos publicados não podem esperar por uma correção manual. Restaure, faça a migração e execute a transação antes de substituir o serviço em produção. Se os links gerados usam HTTP ou as migrações não conseguem acessar o banco de dados, não apague dados para deixar a inicialização verde; compare, nessa ordem, a versão, as variáveis, os mounts e a conectividade com as dependências.

Mantenha o Shlink explícito enquanto o Dockup cuida do roteamento

A implantação do Shlink em um clique do Dockup deve tornar a substituição segura: a rota continua apontando para a porta 8080, os segredos não são incorporados à imagem e os caminhos persistentes retornam no novo container. A mesma implantação pode ser executada no compute do Dockup ou em uma máquina conectada.

Conclua o trabalho específico da aplicação conectando e testando Postgres ou MariaDB, além do Redis opcional para produção, aplicando o endereço público canônico e executando esta verificação de aceitação: crie uma URL curta pela API, siga o redirecionamento, registre visitas e consulte estatísticas pelo cliente web. Adicione o resultado da restauração ao runbook antes da chegada dos usuários reais.

Perguntas frequentes

O que o Shlink precisa para uma implantação em produção?

Encaminhe o container do Shlink na porta 8080 por meio de uma única origem HTTPS. O requisito de rede de suporte é Postgres ou MariaDB, além do Redis opcional para produção. Não considere o Shlink pronto até conseguir criar uma URL curta pela API, seguir o redirecionamento, registrar visitas e consultar estatísticas pelo cliente web.

Quais dados do Shlink devem fazer parte de um backup?

A imagem padrão do Shlink não tem nenhum mount obrigatório de dados da aplicação. Preserve a configuração da implantação e faça backup de qualquer estado conectado separadamente; a recuperação será aprovada quando os domínios, códigos curtos, tags e registros de visitas forem restaurados e todas as URLs curtas testadas redirecionarem de forma idêntica.

O Shlink exige HTTPS atrás de um reverse proxy?

Use HTTPS para a origem pública do Shlink e mantenha a porta 8080 na rota interna. Aplique corretamente a configuração do Shlink: defina DEFAULT_DOMAIN e IS_HTTPS_ENABLED antes de criar URLs curtas. No Shlink, o HTTPS protege credenciais ou conteúdo do usuário durante o trânsito e mantém consistente o comportamento do cliente sensível à origem.

Como testar um upgrade do Shlink?

Restaure o estado atual do Shlink em uma implantação isolada, aplique a versão candidata e repita sua transação de aceitação. Preste atenção especial, pois as migrações do banco de dados e a compatibilidade da API devem ser colocadas em staging, já que os links curtos publicados não podem esperar por uma correção manual. Mantenha a imagem anterior do Shlink até compreender os limites da migração de dados e do rollback.