Tutoriais de VPS
Implantação do MinIO Object Storage em VPS (2026): Docker, S3, HTTPS, backups e configuração de segurança
Partindo do Ubuntu 24.04, implante o MinIO em uma VPS com Docker Compose, configure HTTPS com Caddy, clientes S3, privilégio mínimo, regras de ciclo de vida, monitoramento de disco e backups externos — ideal para sites pessoais e equipes pequenas que precisam de armazenamento de objetos.

Implantação do MinIO Object Storage em VPS (2026): Docker, S3, HTTPS, backups e configuração de segurança
Se você precisa de armazenamento de objetos compatível com S3 para um site, serviço de imagens, scripts de backup ou aplicações de IA, o MinIO é uma solução mais organizada do que empilhar arquivos diretamente em um diretório da VPS. Usando Ubuntu 24.04 e Docker Compose como exemplo, este artigo percorre por completo um MinIO de nó único: da implantação, HTTPS, clientes S3 e regras de ciclo de vida até backups e endurecimento de segurança.
O MinIO de nó único é adequado para projetos pessoais, sites pequenos, bibliotecas de mídia e ambientes de desenvolvimento; não equivale a armazenamento de objetos de alta disponibilidade. Recomenda-se pelo menos 2 núcleos, 4 GB de RAM e 80 GB ou mais de SSD, com o diretório de dados em um volume expansível. Quando imagens e backups crescem rápido, a capacidade se torna o gargalo antes da CPU.
| Cenário | Configuração recomendada | Observações |
|---|---|---|
| Desenvolvimento e testes | 1 núcleo, 2 GB, 40 GB SSD | Poucos objetos; não pode ser o único backup |
| Site pessoal | 2 núcleos, 4 GB, 100 GB SSD | Imagens, anexos, artefatos de build |
| Produção de equipe pequena | 4 núcleos, 8 GB, 200 GB+ SSD | Adicione backups externos |
Se o disco da VPS apresentar picos de E/S com frequência, consulte primeiro o guia de diagnóstico de E/S de disco em VPS; não empilhe MinIO, bancos de dados e tarefas de compilação no mesmo disco de baixo desempenho.
sudo apt update
sudo apt install -y ca-certificates curl
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker "$USER"
newgrp docker
sudo mkdir -p /opt/minio/{data,config}
sudo chown -R "$USER":"$USER" /opt/minio
cd /opt/minio
Não coloque o diretório de dados em /tmp nem exponha as portas 9000 e 9001 diretamente à internet.
Crie .env com credenciais suficientemente longas e que não sejam reutilizadas de outros serviços:
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=替换为至少32位随机密码
Crie compose.yml:
services:
minio:
image: quay.io/minio/minio:latest
container_name: minio
restart: unless-stopped
env_file: .env
command: server /data --console-address ":9001"
ports:
- "127.0.0.1:9000:9000"
- "127.0.0.1:9001:9001"
volumes:
- ./data:/data
- ./config:/root/.minio
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:9000/minio/health/live"]
interval: 30s
timeout: 10s
retries: 3
Inicie e verifique:
docker compose up -d
docker compose ps
docker logs --tail=100 minio
Aponte s3.example.com e minio.example.com para a VPS e depois adicione o seguinte ao Caddyfile:
s3.example.com {
reverse_proxy 127.0.0.1:9000
}
minio.example.com {
reverse_proxy 127.0.0.1:9001
}
O Caddy solicita e renova os certificados automaticamente. Se você ainda não tem um ponto de entrada de proxy reverso unificado, leia primeiro Configurar HTTPS automático com Caddy em uma VPS. Após as alterações, execute:
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
curl -I https://s3.example.com/minio/health/live
Use domínios diferentes para a API S3 e o Console, para não misturar a interface de administração com o ponto de upload das aplicações.
Após fazer login em https://minio.example.com, crie o bucket uploads. Não deixe as aplicações usarem a conta root; crie um usuário dedicado em Access > Users e vincule apenas as políticas necessárias:
{
"Version": "2012-10-17",
"Statement": [
{"Action": ["s3:GetBucketLocation", "s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::uploads"]},
{"Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"], "Effect": "Allow", "Resource": ["arn:aws:s3:::uploads/*"]}
]
}
No lado da aplicação, guarde apenas o domínio da API, a Access Key, a Secret Key, o bucket e a região (normalmente us-east-1). Para uploads diretos pelo frontend, use URLs pré-assinadas de curta duração e nunca coloque a Secret Key no código do navegador.
aws configure --profile minio
aws --profile minio --endpoint-url https://s3.example.com s3 ls
echo "minio test" > /tmp/minio-test.txt
aws --profile minio --endpoint-url https://s3.example.com s3 cp /tmp/minio-test.txt s3://uploads/health/minio-test.txt
aws --profile minio --endpoint-url https://s3.example.com s3 cp s3://uploads/health/minio-test.txt -
Se aparecer SignatureDoesNotMatch, verifique se o endpoint tem um caminho extra, se a hora do sistema está correta, se o proxy reverso reescreve o Host e se o cliente habilitou o endereçamento no estilo host virtual.
Em Bucket > Lifecycle Rules, defina a expiração de objetos temporários, por exemplo tmp/ por 7 dias e backups/ por 30 dias. Acompanhe continuamente:
df -h /opt/minio/data
du -sh /opt/minio/data/*
docker stats minio --no-stream
Quando o uso do disco atingir 80%, expanda ou limpe; aos 90%, não espere mais. O diretório /data não é backup: mantenha pelo menos uma cópia externa:
mc alias set local https://s3.example.com ACCESS_KEY SECRET_KEY
mc alias set backup https://backup-s3.example.net BACKUP_KEY BACKUP_SECRET
mc mirror --overwrite --remove local/uploads backup/minio-uploads
Os scripts de backup devem registrar o código de saída, a quantidade de objetos e o tempo gasto, e você deve testar as restaurações periodicamente. Você pode continuar lendo o guia de simulação de backup e restauração em VPS.
- Defina as permissões de
.envcomo600e não o envie ao Git:chmod 600 /opt/minio/.env. - Abra apenas SSH, 80 e 443; mantenha 9000/9001 escutando somente no localhost.
- Crie uma Access Key independente para cada aplicação, limitando permissões por bucket e ação.
- Desative o acesso anônimo que você não precisa; para downloads públicos, use políticas somente leitura ou URLs temporárias.
- Configure alertas de disco, contêineres, certificados e backups, e faça um teste de restauração pelo menos uma vez por mês.
- Fixe a imagem do MinIO em uma versão testada; antes de atualizar, faça backup e leia as notas de versão.
Confirme que o navegador acessa o domínio do Console e que o endpoint S3 está configurado com o domínio da API; verifique também a política do bucket, a política do usuário e o CORS. Não use minio.example.com como endpoint S3.
Verifique se o Caddy preserva o cabeçalho Host, se o DNS aponta para a VPS atual e se a hora do sistema está correta. As assinaturas S3 dependem do Host e da hora da requisição; se a camada de proxy reescrever qualquer um dos dois, a autenticação pode falhar.
Confirme que o Compose usa o caminho de montagem correto e execute docker inspect minio para inspecionar os Mounts. Um diretório de trabalho incorreto pode fazer o contêiner montar outro diretório vazio.
O ponto-chave de um MinIO de nó único não é apenas colocar o contêiner em execução, mas projetar em conjunto o domínio da API, o domínio de administração, o privilégio mínimo, os alertas de disco e os backups externos. Projetos pessoais podem começar com 2 núcleos e 4 GB; assim que o armazenamento de objetos se tornar a única cópia dos seus dados, adicione backups independentes ou até migre para uma implantação multinó ou um serviço S3 gerenciado.