Como instalar MinIO em um VPS Ubuntu 24.04
Instale o MinIO em um VPS Ubuntu 24.04 com binário verificado, systemd, comandos mc, URLs presignadas e um destino S3 para backups do restic.
O que o armazenamento de objetos self-hosted com MinIO oferece
O MinIO é uma solução de armazenamento de objetos self-hosted que utiliza a API Amazon S3. Aponte o restic ou qualquer SDK S3 para o seu próprio servidor, altere uma definição de endpoint e o cliente não consegue distinguir a diferença. Este guia cria um único nó no Ubuntu 24.04: um binário verificado, um utilizador de sistema dedicado, uma unidade systemd que mantém as credenciais root fora do ficheiro da unidade e um bucket para onde o restic faz as cópias de segurança.
O S3 (simple storage service) é uma API HTTP, não um sistema de ficheiros. Utilize PUT para inserir um objeto num bucket sob uma chave e GET para o obter, sem escrita parcial nem operação de renomeação. As ferramentas de cópia de segurança adaptam-se bem a este modelo, porque um objeto ou chega completo ou não chega.
Um único nó mantém uma única cópia dos seus dados. Esse é o compromisso que está a assumir. Obtém um endpoint S3 sob o seu controlo pelo preço de um VPS e também assume todas as tarefas que o fornecedor de cloud executava, desde substituir um disco avariado até aplicar patches ao software do servidor. A secção perto do fim explica claramente quando esse compromisso é adequado.
O estado da edição comunitária do MinIO em julho de 2026
Leia esta parte antes de criar a sua implementação, porque houve alterações recentes. Em maio de 2025, o MinIO removeu as funcionalidades de administração da consola Web da edição comunitária. No navegador, resta um explorador de objetos. Por isso, os buckets e as chaves de acesso são geridos através do cliente de linha de comandos mc.
Mais tarde, em 2025, o MinIO deixou de publicar binários comunitários pré-compilados. O README do projeto indica agora que a edição comunitária é distribuída apenas como código-fonte. Os URLs de download antigos continuam a funcionar. Em julho de 2026, disponibilizam a compilação do servidor RELEASE.2025-09-07T16-13-09Z e a compilação do cliente RELEASE.2025-08-13T08-35-41Z. Não foi publicada nenhuma compilação comunitária mais recente. Portanto, o binário abaixo é real, funciona e está congelado. As correções de segurança publicadas depois de setembro de 2025 não estão incluídas.
Esse facto determina o restante deste guia. É por isso que o MinIO escuta aqui em 127.0.0.1 e só chega à Internet através de um proxy que controla. Se preferir acompanhar as correções, compile a partir do código-fonte. O README do fornecedor fornece um único comando, go install github.com/minio/minio@latest, que requer uma toolchain Go e grava o binário em ~/go/bin/minio. Instale esse binário em /usr/local/bin/minio. Todos os outros passos permanecem inalterados.
Instale o binário do MinIO e verifique o download
Faça o download da release fixada e do respetivo checksum publicado. A flag -f faz com que curl falhe perante um erro HTTP, em vez de guardar a página de erro com o nome que pediu. É assim que alguém acaba por instalar uma página 404 e depois não percebe porque não a consegue executar.
cd /tmp
REL=RELEASE.2025-09-07T16-13-09Z
curl -fsSL "https://dl.min.io/server/minio/release/linux-amd64/archive/minio.$REL" -o minio
curl -fsSL "https://dl.min.io/server/minio/release/linux-amd64/archive/minio.$REL.sha256sum" -o minio.sha256sumCompare os dois hashes e compare apenas os hashes.
published=$(awk '{print $1}' minio.sha256sum)
downloaded=$(sha256sum minio | awk '{print $1}')
[ "$published" = "$downloaded" ] && echo "checksum ok"Não use sha256sum -c minio.sha256sum aqui. O rótulo escrito depois do hash nesse ficheiro é minio.RELEASE.2025-09-07T16-13-09Z, e guardámos o download como minio, por isso -c procura um ficheiro que não existe. O comando apresenta No such file or directory e depois WARNING: 1 listed file could not be read, o que parece indicar um download corrompido, mas não indica. O rótulo é apenas um nome. O hash é a parte que fornece a garantia.
Seja claro sobre o que esta verificação comprova. O binário e o hash vêm do mesmo fornecedor através da mesma ligação, por isso uma correspondência comprova que o download está completo e não foi danificado nem alterado durante o trânsito. Não comprova que o fornecedor é confiável. Esse é um problema diferente e nenhum comando sha256sum o resolve.
sudo install -o root -g root -m 755 minio /usr/local/bin/minio
minio --versionminio --version apresenta minio version RELEASE.2025-09-07T16-13-09Z seguido de algumas linhas de compilação. Um Permission denied neste caso significa que o modo está incorreto, e command not found significa que /usr/local/bin não está no seu PATH.
Crie um utilizador de sistema e um diretório de dados
O MinIO aceita carregamentos pela rede, por isso não deve ser executado como root. Atribua-lhe uma conta sem diretório pessoal e sem shell de início de sessão.
sudo groupadd -r minio-user
sudo useradd -M -r -g minio-user -s /usr/sbin/nologin minio-user
sudo mkdir -p /var/lib/minio/data
sudo chown -R minio-user:minio-user /var/lib/minio
sudo chmod 750 /var/lib/minio-r cria uma conta de sistema com um UID inferior a 1000, mantendo-a fora do intervalo utilizado por utilizadores humanos. -M não cria o diretório pessoal, porque uma conta que nunca inicia sessão não precisa de guardar nada nesse diretório. Confirme o resultado com id minio-user e com stat -c '%U %a' /var/lib/minio, que deve apresentar minio-user 750.
O diretório de dados tem de permitir escrita a esse utilizador, não apenas leitura. No primeiro arranque, o MinIO cria um diretório .minio.sys dentro do volume para guardar a sua própria configuração. Por isso, um diretório pertencente a root faz o MinIO terminar durante o arranque com uma mensagem que termina em permission denied. A mesma regra aplica-se a todos os serviços executados desta forma. O guia utilizadores de serviço com privilégios mínimos numa VPS explica este procedimento corretamente.
Coloque as credenciais de root num ficheiro de ambiente
As credenciais de root dão acesso a todos os buckets, por isso não devem ficar no ficheiro da unidade, que pode ser lido por qualquer utilizador. Crie primeiro o ficheiro com o modo correto e escreva nele depois. Assim, a palavra-passe nunca fica num ficheiro legível, nem por um instante.
sudo install -o root -g root -m 600 /dev/null /etc/default/minio
printf 'MINIO_ROOT_USER=minio-root\nMINIO_ROOT_PASSWORD=%s\nMINIO_VOLUMES="/var/lib/minio/data"\nMINIO_OPTS="--address 127.0.0.1:9000 --console-address 127.0.0.1:9001"\n' "$(openssl rand -base64 24)" | sudo tee /etc/default/minio > /dev/null
sudo sed -n 's/^MINIO_ROOT_PASSWORD=//p' /etc/default/miniotee trunca um ficheiro existente em vez de o recriar, por isso o modo mantém-se em 600 e o proprietário continua a ser root. Isto é deliberado. O systemd lê EnvironmentFile como root antes de remover os privilégios para User=. Assim, a conta de serviço nunca precisa de ler as próprias credenciais. Depois de o serviço estar em execução, confirme com sudo -u minio-user cat /etc/default/minio. Esse comando deve imprimir Permission denied.
Antes de iniciar o MinIO, é importante conhecer dois comportamentos. Sem MINIO_ROOT_USER e sem MINIO_ROOT_PASSWORD no ambiente, o MinIO não recusa iniciar. Inicia com as credenciais predefinidas documentadas minioadmin:minioadmin, que são o primeiro par que qualquer scanner tenta, e parece estar completamente saudável. Uma palavra-passe com menos de 8 caracteres é rejeitada. Nesse caso, o MinIO termina durante o arranque com um erro a indicar que as credenciais são inválidas, porque a chave de acesso precisa de ter pelo menos 3 caracteres e a chave secreta pelo menos 8.
MINIO_VOLUMES é o caminho dos dados e MINIO_OPTS contém as flags. Fazer o bind a 127.0.0.1 significa que nada fora deste VPS consegue ainda aceder à API S3, o que é a predefinição correta. Mais tarde, abra o acesso de forma deliberada através de um proxy que tenha um certificado.
Escreva a unidade systemd
Crie /etc/systemd/system/minio.service:
[Unit]
Description=MinIO object storage
Documentation=https://github.com/minio/minio
Wants=network-online.target
After=network-online.target
[Service]
User=minio-user
Group=minio-user
EnvironmentFile=/etc/default/minio
ExecStart=/usr/local/bin/minio server $MINIO_VOLUMES $MINIO_OPTS
Restart=always
RestartSec=5
LimitNOFILE=65536
NoNewPrivileges=true
[Install]
WantedBy=multi-user.targetNão existe - inicial em EnvironmentFile. Isto é uma decisão, não um erro de digitação. Com o hífen, o systemd ignora um ficheiro em falta e inicia o MinIO na mesma. Assim, um ficheiro eliminado ou um caminho escrito incorretamente disponibiliza silenciosamente um servidor em minioadmin:minioadmin. Sem o hífen, um ficheiro em falta faz a unidade falhar antes de o MinIO ser executado, e journalctl -u minio mostra Failed to load environment files: No such file or directory. É muito mais fácil detetar uma unidade que se recusa a iniciar do que um servidor que aceita silenciosamente a palavra-passe predefinida.
$MINIO_VOLUMES e $MINIO_OPTS não estão entre aspas de propósito, porque o systemd divide variáveis sem aspas nos espaços em branco, convertendo-as em argumentos separados. É assim que as quatro palavras em MINIO_OPTS se tornam quatro argumentos para minio server. LimitNOFILE=65536 aumenta o limite de descritores de ficheiros, porque cada ligação aberta e cada ficheiro de dados aberto consomem um descritor, e o valor predefinido de 1024 esgota-se sob carga.
sudo systemctl daemon-reload
sudo systemctl enable --now minio
systemctl is-active minio
curl -fsS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:9000/minio/health/liveis-active deve apresentar active, e o endpoint de health check deve responder 200. journalctl -u minio -n 20 --no-pager mostra o endereço da API onde o servidor está a escutar. Se a unidade continuar a reiniciar, o systemd desiste e regista Start request repeated too quickly. Isto significa que o MinIO termina em todas as tentativas. O motivo é apresentado nas linhas anteriores a essa mensagem, por isso leia para cima.
Para obter mais isolamento, adicione ProtectSystem=full e ProtectHome=true à secção [Service]. Ambos precisam de namespaces de montagem disponibilizados pelo kernel do host. Em virtualização de contentores que partilha o kernel do host, como OpenVZ ou LXC, podem falhar, e a unidade apresenta então status=226/NAMESPACE. Remova essas duas linhas para que a unidade inicie. A própria unidade é uma unidade normal, e serviços e temporizadores systemd num VPS explica as restantes diretivas.
Instale o mc e valide uma operação de ida e volta
O cliente MinIO é mc. Não o instale com apt install mc. Esse pacote é o Midnight Commander, um gestor de ficheiros sem relação com o MinIO.
cd /tmp
curl -fsSL https://dl.min.io/client/mc/release/linux-amd64/mc -o mc
curl -fsSL https://dl.min.io/client/mc/release/linux-amd64/mc.sha256sum -o mc.sha256sum
[ "$(awk '{print $1}' mc.sha256sum)" = "$(sha256sum mc | awk '{print $1}')" ] && echo "checksum ok"
sudo install -o root -g root -m 755 mc /usr/local/bin/mcRegiste o servidor como um alias e transfira um objeto através dele.
MINIO_PASS=$(sudo sed -n 's/^MINIO_ROOT_PASSWORD=//p' /etc/default/minio)
mc alias set local http://127.0.0.1:9000 minio-root "$MINIO_PASS"
mc mb local/backups
echo "hello object storage" > /tmp/hello.txt
mc cp /tmp/hello.txt local/backups/hello.txt
mc ls local/backups
mc cat local/backups/hello.txtmc ls deve listar hello.txt com o respetivo tamanho, e mc cat deve imprimir hello object storage. Essa operação de ida e volta é a prova real de que o servidor funciona, porque faz os mesmos pedidos S3 assinados que qualquer outro cliente fará. mc admin info local imprime o estado do servidor, caso queira uma segunda confirmação.
Execute agora mais uma verificação, enquanto o servidor ainda está vazio.
mc alias set defaultcheck http://127.0.0.1:9000 minioadmin minioadminEste comando tem de falhar. Se for bem-sucedido, o ficheiro de ambiente nunca chegou ao processo e o servidor está a usar as credenciais predefinidas. Corrija isso antes de qualquer outra operação na máquina.
mc armazena os aliases em ~/.mc/config.json em texto simples, pelo que essas credenciais ficam no diretório pessoal de quem executou o comando. Executar mc com sudo coloca as credenciais root em /root/.mc/config.json. Mantenha o alias root numa única conta de administrador e atribua a cada aplicação a sua própria chave.
Entregar um objeto com uma URL pré-assinada
Uma URL pré-assinada é um link HTTPS comum ao qual estão associados uma assinatura e um prazo de validade. Qualquer pessoa que tenha o link pode obter esse objeto sem uma conta e sem um cliente.
mc share download --expire 12h local/backups/hello.txtA saída inclui X-Amz-Signature e X-Amz-Expires na cadeia de consulta. Há dois aspetos que costumam surpreender. O link é criado a partir do endpoint do alias utilizado. Por isso, um alias em 127.0.0.1 produz um link que só pode ser aberto nesta máquina. Crie um segundo alias no seu hostname público para os links que pretende enviar. Além disso, não existe um botão para revogar o link. A assinatura permanece válida até expirar. Por isso, um prazo curto é o único controlo disponível. Sete dias é o máximo permitido pelo formato de assinatura S3.
Dê ao restic a sua própria chave e bucket
As credenciais de root podem ler e eliminar todos os buckets, por isso uma tarefa de backup não deve utilizá-las. Crie um bucket, uma política limitada a esse bucket e um utilizador sem permissões adicionais.
mc mb local/restic
cat > /tmp/restic-rw.json <<'EOF'
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket", "s3:GetBucketLocation"],
"Resource": ["arn:aws:s3:::restic"]
},
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
"Resource": ["arn:aws:s3:::restic/*"]
}
]
}
EOF
RESTIC_KEY=$(openssl rand -base64 24)
mc admin policy create local restic-rw /tmp/restic-rw.json
mc admin user add local restic-backup "$RESTIC_KEY"
mc admin policy attach local restic-rw --user restic-backupO MinIO inclui uma política readwrite integrada que reduziria o número de comandos em um, mas concede acesso total a todos os buckets do servidor. A política acima indica o bucket duas vezes de propósito: uma vez como arn:aws:s3:::restic, para permitir listar o bucket, e outra como arn:aws:s3:::restic/*, para os objetos dentro dele. No S3, um bucket e os seus objetos são recursos distintos. Por isso, uma política que indique apenas um deles falha de uma forma que parece ser um problema do cliente.
Teste o limite antes de confiar nele.
mc alias set resticuser http://127.0.0.1:9000 restic-backup "$RESTIC_KEY"
mc ls resticuser/restic
mc ls resticuser/backupsO primeiro ls é concluído com sucesso e o segundo falha com Access Denied. Uma política que não foi testada é apenas uma suposição.
Agora configure o restic para usar o bucket. O restic lê as credenciais S3 a partir das variáveis de ambiente AWS padrão, por isso não é necessário um ficheiro de credenciais específico do restic.
sudo apt install -y restic
export AWS_ACCESS_KEY_ID=restic-backup
export AWS_SECRET_ACCESS_KEY="$RESTIC_KEY"
restic -r s3:http://127.0.0.1:9000/restic init
restic -r s3:http://127.0.0.1:9000/restic backup /etc
restic -r s3:http://127.0.0.1:9000/restic snapshotsrestic init pede uma palavra-passe para o repositório. Essa palavra-passe cifra o repositório, por isso o MinIO armazena apenas texto cifrado. Se perder a palavra-passe, perde o backup. Uma execução iniciada por um temporizador do systemd não tem um terminal onde possa introduzir a palavra-passe, por isso defina RESTIC_PASSWORD_FILE como um ficheiro com permissões 600 para os backups agendados.
Uma regra de colocação é mais importante do que qualquer comando acima. Um repositório restic no mesmo VPS que os dados que protege permite recuperar de um rm defeituoso, mas não de outras falhas. O nó MinIO deve estar noutra máquina, idealmente noutra região. backups restic num VPS explica como configurar o agendamento e a retenção com base nesta configuração.
Terminar TLS com nginx
O MinIO escuta em localhost, por isso o nginx é a superfície pública. Emita primeiro o certificado, conforme descrito em Certificados Let's Encrypt com certbot e nginx, e depois use este bloco de servidor.
server {
listen 443 ssl;
server_name s3.example.com;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://127.0.0.1:9000;
}
}Várias destas linhas são essenciais. client_max_body_size 0 remove o limite padrão de 1 MB para o corpo do pedido. Sem essa diretiva, qualquer upload maior é rejeitado com 413 Request Entity Too Large antes de o MinIO receber o pedido. proxy_request_buffering off encaminha o upload diretamente, porque, por padrão, o pedido completo é primeiro gravado num ficheiro temporário. Assim, um objeto grande precisa de espaço em disco duas vezes. proxy_set_header Host $http_host é a diretiva mais subtil: uma assinatura S3 inclui o cabeçalho Host. Se o proxy o reescrever, todos os pedidos falham com SignatureDoesNotMatch, embora o access log mostre a chegada de um pedido normal.
Informe também o MinIO do seu nome público, para que os links gerados apontem para o proxy e não para localhost.
echo 'MINIO_SERVER_URL=https://s3.example.com' | sudo tee -a /etc/default/minio
sudo systemctl restart minioA configuração da firewall continua simples. Permita SSH e HTTPS, e não crie nenhuma regra para as portas 9000 e 9001, porque um endereço associado a 127.0.0.1 não pode ser alcançado a partir de outra máquina, independentemente da configuração da firewall. Noções básicas da firewall ufw num VPS contém os comandos.
Quando um MinIO de nó único é suficiente e quando deve escolher S3 gerido
Nó único significa, neste caso, uma unidade sem paridade. A documentação do próprio MinIO descreve este esquema como adequado para testes e cargas de trabalho pequenas sem requisitos de disponibilidade. Não existe uma segunda cópia dentro da implementação, pelo que a durabilidade de cada objeto é a durabilidade do disco de um único VPS. As funcionalidades que pressupõem um backend distribuído com codificação de eliminação, incluindo a replicação de buckets e o bloqueio de objetos, pertencem a implementações com várias unidades. Por isso, não prometa uma política de retenção imutável neste esquema.
É uma boa opção como destino do restic num segundo VPS noutra região e como endpoint S3 para desenvolvimento e artefactos de CI, quando perder um bucket implica apenas reconstruí-lo. Também é uma opção razoável para uploads de utilizadores numa aplicação pequena, desde que seja responsável pelo plano de recuperação e tenha testado efetivamente um restauro.
Escolha S3 gerido quando um contrato ou um regulador exigir bloqueio de objetos ou durabilidade em várias regiões, ou quando preferir não ser a pessoa contactada às 03:00 porque um disco ficou cheio. A versão congelada é o outro motivo objetivo. Em julho de 2026, o binário comunitário pré-compilado é de setembro de 2025 e não recebe correções. Executá-lo significa aceitar essa situação, ou compilar a partir do código-fonte e acompanhar o projeto por sua conta.
Vale a pena esclarecer um limite, porque esta questão surge com frequência. O armazenamento de objetos não é uma base de dados. Cada escrita substitui um objeto inteiro, pelo que um ficheiro SQL ativo num bucket S3 é lento e inseguro. Mantenha a base de dados no disco local e faça o backup para o bucket: executar SQLite em produção num VPS descreve essa separação.
Modos de falha e mensagens que serão apresentadas
A unidade falha logo depois de systemctl enable --now. Leia journalctl -u minio -n 30 --no-pager. Failed to load environment files: No such file or directory significa que /etc/default/minio está em falta ou que o respetivo caminho está escrito incorretamente na unidade. Uma mensagem terminada em permission denied significa que a conta de serviço não tem permissões de escrita no diretório de dados. Verifique se stat -c '%U' /var/lib/minio/data apresenta minio-user.
minioadmin:minioadmin continua a permitir o início de sessão. O ficheiro de ambiente nunca chegou ao processo. Confirme que a unidade contém EnvironmentFile=/etc/default/minio, execute sudo systemctl daemon-reload e reinicie o serviço. O MinIO lê as credenciais root uma vez, durante o arranque. Por isso, editar esse ficheiro sem reiniciar não altera nada.
Address already in use durante o arranque. Outro processo está a utilizar a porta 9000. Localize-o com sudo ss -ltnp | grep :9000 antes de alterar a porta do MinIO.
Os uploads com mais de 1 MB falham através do proxy. O nginx respondeu com 413 Request Entity Too Large e o MinIO nunca recebeu o pedido. Defina client_max_body_size 0 no bloco do servidor.
SignatureDoesNotMatch. A chave secreta está incorreta ou algum componente entre o cliente e o MinIO reescreveu o cabeçalho Host, que é abrangido pela assinatura.
RequestTimeTooSkewed. O relógio do cliente ou do servidor está incorreto. Cada pedido S3 inclui um timestamp e é rejeitado fora de uma janela de 15 minutos. Verifique timedatectl e confirme que a sincronização da hora está ativa.
Access Denied num bucket que sabe que existe. A chave está limitada a outro bucket. Apresente o que a política permite efetivamente com mc admin policy info local restic-rw e compare o nome do bucket nas linhas de recurso.
FAQ
O MinIO de nó único é suficiente para backups reais?
É suficiente como destino do restic executado numa máquina separada dos dados que protege. Não é suficiente como única cópia. Uma implementação com uma única unidade não tem paridade, portanto não existe uma segunda cópia dentro do MinIO. Se o disco dessa VPS perder dados, os objetos desaparecem. Mantenha um segundo destino noutro local e faça pelo menos uma restauração a partir de ambos, para confirmar que o processo funciona.
Por que motivo sha256sum -c falha no ficheiro de checksum do MinIO?
Porque a etiqueta depois do hash nesse ficheiro identifica a release, minio.RELEASE.2025-09-07T16-13-09Z, enquanto o ficheiro transferido normalmente se chama minio. sha256sum -c procura um ficheiro com o nome escrito no ficheiro de checksum, não o encontra e apresenta No such file or directory e WARNING: 1 listed file could not be read. A transferência está correta. Compare diretamente as cadeias de hash e ignore a etiqueta, que não tem significado de segurança.
Para onde foi a consola Web de administração do MinIO?
O MinIO removeu as funcionalidades de administração da consola da edição comunitária em maio de 2025, deixando um navegador de objetos na interface Web. Os buckets e os utilizadores são agora geridos com o cliente mc, usando comandos como mc admin user add e mc admin policy attach. Esse é o procedimento suportado na edição comunitária, e não uma solução alternativa. Por isso, este guia executa tudo a partir da linha de comandos.
Como configuro o restic para usar o MinIO como backend S3?
Defina AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY com uma chave de acesso do MinIO e o respetivo segredo. Depois, use uma cadeia de repositório no formato s3:https://s3.example.com/restic, em que o último elemento do caminho é o nome do bucket. Crie primeiro o bucket com mc mb, porque uma chave limitada a um bucket não tem permissão para criar buckets. O restic cifra tudo com a sua própria palavra-passe do repositório antes da transferência. Assim, o MinIO armazena texto cifrado e nunca vê os seus ficheiros.
Tenho de executar o MinIO atrás do nginx?
Precisa de TLS (transport layer security) sempre que um cliente não esteja na mesma máquina, porque as credenciais S3 e os dados dos objetos circulam dentro do pedido. Um proxy na porta 443 com um certificado do certbot é a forma mais simples de obter essa configuração e mantém a renovação do certificado separada do MinIO. O MinIO também pode terminar o TLS diretamente se apontar --certs-dir para um diretório que contenha public.crt e private.key. Nesse caso, a conta de serviço precisa de acesso de leitura à chave privada renovada, o que acrescenta trabalho para obter o mesmo resultado.