Tutorial de Instalação e Configuração do MongoDB para C#
Guia Prático: Configuração Segura de MongoDB em Produção
Quando chega o momento de colocar uma aplicação em produção, garantir a segurança e a flexibilidade na configuração de conexão com o banco de dados MongoDB
O que é MongoDB e por que utilizá-lo com C# em 2025Descubra como MongoDB e C# unem flexibilidade e escalabilidade para criar soluções modernas e eficientes em um cenário NoSQL inovador em 2025. se torna um passo essencial. Variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de ambiente e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. strings
📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. de conexão são recursos fundamentais para isolar credenciais, apontar servidores distintos e facilitar o gerenciamento de configurações
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade., sem precisar alterar código fonte de forma manual.
Neste tutorial, exploraremos boas práticas
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. para:
- Definir variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de ambiente específicas. - Criar
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. e gerenciar strings
📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. de conexão para MongoDB
O que é MongoDB e por que utilizá-lo com C# em 2025Descubra como MongoDB e C# unem flexibilidade e escalabilidade para criar soluções modernas e eficientes em um cenário NoSQL inovador em 2025. em produção. - Ajustar a aplicação em diferentes cenários de implantação
Criando seu Primeiro Programa Assíncrono: do Zero ao DeployAprenda a configurar seu ambiente, criar e executar um projeto assíncrono em C# com async/await e prepare o deploy da sua aplicação com segurança. (Windows, Linux, servidores cloud, containers, etc.).
Ao final, você terá uma visão clara de como configurar
Instalando e configurando o MongoDB no Windows e Linux para uso com C#Aprenda a instalar e configurar o MongoDB no Windows e Linux, integrando-o com projetos C# para ambientes de desenvolvimento eficientes. variáveis de ambiente e strings de conexão de modo eficaz, mantendo segurança e simplicidade no ecossistema .NET com C#.
Visão Geral sobre Configuração via Variáveis de Ambiente🔗
Em produção, expor senhas e detalhes de conexão diretamente no código pode trazer riscos de segurança
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real., além de dificultar a manutenção. Variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de ambiente resolvem este problema
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. ao permitir:
1. Separar credenciais do código: Senhas e usuários ficam em configurações
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. do sistema ou serviços de orquestração, não sendo registrados no repositório de código.
2. Personalizar ambientes: É possível ter variáveis diferentes para desenvolvimento local, testes e produção, sem necessidade de alterar nenhum arquivo de configuração
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. na aplicação.
Alguns exemplos de variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de ambiente que você pode definir para MongoDB são:
- MONGODB_USER
- MONGODB_PASSWORD
- MONGODB_HOST
- MONGODB_PORT
A ideia é armazenar, pelo menos, o usuário, a senha e o host num local seguro
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real.. Em uma string de conexão
Conectando a aplicação C# ao banco de dados MongoDBNeste tutorial prático, descubra como conectar sua aplicação C# ao MongoDB com instruções detalhadas, ideais para desenvolvedores que buscam eficiência. típica, esses valores serão combinados para indicar como a aplicação C# acessará o MongoDB
O que é MongoDB e por que utilizá-lo com C# em 2025Descubra como MongoDB e C# unem flexibilidade e escalabilidade para criar soluções modernas e eficientes em um cenário NoSQL inovador em 2025..
Formato Básico de String de Conexão para MongoDB🔗
A string de conexão
Conectando a aplicação C# ao banco de dados MongoDBNeste tutorial prático, descubra como conectar sua aplicação C# ao MongoDB com instruções detalhadas, ideais para desenvolvedores que buscam eficiência. do MongoDB
O que é MongoDB e por que utilizá-lo com C# em 2025Descubra como MongoDB e C# unem flexibilidade e escalabilidade para criar soluções modernas e eficientes em um cenário NoSQL inovador em 2025. segue um padrão que indica o protocolo, as credenciais e o endereço do servidor:
mongodb://<username>:<password>@<host>:<port>/<database>?options
Exemplo simples (sem segurança
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. adicional):
mongodb://admin:MyStrongPassword@localhost:27017/sampledb
Em ambiente de produção, o ideal é que valores
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. como admin e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. MyStrongPassword venham de variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de ambiente e não fiquem no arquivo de código ou em configurações
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. versionadas.
Extraindo Variáveis de Ambiente em C#🔗
Para acessar variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de ambiente em C#, você pode utilizar a classe Environment, nativa do .NET:
string user = Environment.GetEnvironmentVariable("MONGODB_USER");
string password = Environment.GetEnvironmentVariable("MONGODB_PASSWORD");
string host = Environment.GetEnvironmentVariable("MONGODB_HOST");
string port = Environment.GetEnvironmentVariable("MONGODB_PORT");
Depois, basta construir dinamicamente a sua string de conexão
Conectando a aplicação C# ao banco de dados MongoDBNeste tutorial prático, descubra como conectar sua aplicação C# ao MongoDB com instruções detalhadas, ideais para desenvolvedores que buscam eficiência.:
string connectionString = $"mongodb://{user}:{password}@{host}:{port}";
Em muitos cenários de produção, você também pode empregar pacotes de configuração
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos., como Microsoft.Extensions.Configuration, para mapear variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de ambiente sem precisar lidar diretamente com Environment.GetEnvironmentVariable.
Configurando Variáveis de Ambiente em Diferentes Ambientes🔗
Windows
No Windows, as variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de ambiente podem ser definidas para o usuário ou para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! o sistema. Para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! defini-las de forma temporária, abra o Prompt de Comando
🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção. (cmd) ou PowerShell e execute
🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção.:
set MONGODB_USER=admin
set MONGODB_PASSWORD=MyStrongPassword
set MONGODB_HOST=production01
set MONGODB_PORT=27017
Para manter essas variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. persistentes no sistema, acesse:
Painel de Controle → Sistema e Segurança
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. → Sistema → Configurações
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. Avançadas do Sistema → Variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de Ambiente.
Linux
Em sistemas baseados em Linux
Instalando e configurando o MongoDB no Windows e Linux para uso com C#Aprenda a instalar e configurar o MongoDB no Windows e Linux, integrando-o com projetos C# para ambientes de desenvolvimento eficientes., você pode editar o arquivo /etc/environment (para variáveis globais) ou configurar
Instalando e configurando o MongoDB no Windows e Linux para uso com C#Aprenda a instalar e configurar o MongoDB no Windows e Linux, integrando-o com projetos C# para ambientes de desenvolvimento eficientes. em shell específicas. Exemplo com export em bash:
export MONGODB_USER=admin
export MONGODB_PASSWORD=MyStrongPassword
export MONGODB_HOST=production01
export MONGODB_PORT=27017
Vale lembrar que, em Linux, essas variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. ficam disponíveis apenas na sessão atual, a menos que sejam adicionadas a arquivos como ~/.bashrc ou ~/.profile.
Containers (Docker)
Para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! quem trabalha com Docker
🐳 Docker 101: Containerize sua API em 15 Minutos!Containerize sua API .NET em 15 minutos com Docker. Este tutorial prático ensina a construir e rodar containers de forma simples e eficiente., as variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de ambiente podem ser definidas diretamente no docker, utilizando a flag
🐳 Docker 101: Containerize sua API em 15 Minutos!Containerize sua API .NET em 15 minutos com Docker. Este tutorial prático ensina a construir e rodar containers de forma simples e eficiente. run-e, ou por meio de um arquivo
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades..env quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. se utiliza o docker. Por exemplo:
🐳 Docker 101: Containerize sua API em 15 Minutos!Containerize sua API .NET em 15 minutos com Docker. Este tutorial prático ensina a construir e rodar containers de forma simples e eficiente.-compose
docker run -d \
- e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. MONGODB_USER=admin \
- e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. MONGODB_PASSWORD=MyStrongPassword \
- e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. MONGODB_HOST=production01 \
- e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. MONGODB_PORT=27017 \
--name myapp \
myapp:latest
No docker
🐳 Docker 101: Containerize sua API em 15 Minutos!Containerize sua API .NET em 15 minutos com Docker. Este tutorial prático ensina a construir e rodar containers de forma simples e eficiente.-compose.yml, utilizam-se as chaves
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. environment ou slurping de um arquivo .env. Exemplo:
version: '3.8'
services:
myapp:
image: myapp:latest
environment:
- MONGODB_USER=admin
- MONGODB_PASSWORD=MyStrongPassword
- MONGODB_HOST=production01
- MONGODB_PORT=27017
Montando a Conexão em Produção🔗
Uma vez que as variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de ambiente estejam todas configuradas, a aplicação C# pode ler esses valores de forma flexível. Em produção, costuma-se incluir configurações
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. adicionais para autenticação, segurança e parâmetros de conexão, como ssl=true ou replicaSet=rs0 (dependendo da arquitetura de replicação). Exemplo:
var user = Environment.GetEnvironmentVariable("MONGODB_USER");
var password = Environment.GetEnvironmentVariable("MONGODB_PASSWORD");
var host = Environment.GetEnvironmentVariable("MONGODB_HOST");
var port = Environment.GetEnvironmentVariable("MONGODB_PORT");
// Possíveis parâmetros adicionais
var sslOption = Environment.GetEnvironmentVariable("MONGODB_SSL") ?? "true";
var replicaSet = Environment.GetEnvironmentVariable("MONGODB_REPLICA_SET") ?? "rs0";
string connectionString =
$"mongodb://{user}:{password}@{host}:{port}/?ssl={sslOption}&replicaSet={replicaSet}";
Se você estiver usando Microsoft.Extensions.Configuration, poderá organizar essas configurações
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. no appsettings.json e permitir que o arquivo seja sobreposto por variáveis de ambiente, garantindo uma hierarquia de configurações
📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável.
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos..
Boas Práticas de Segurança🔗
- Nunca exponha suas credenciais em repositórios
📦 Repository Pattern: Abstraia seu Acesso a Dados!Descubra como o Repository Pattern organiza o acesso a dados, isolando a lógica de persistência e facilitando manutenção, testes e escalabilidade. Git ou logs de build. - Use ferramentas de gerenciamento de segredos
Gerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. (como Azure Key Vault
🗝️ Azure Key Vault: Gerencie Segredos como um Especialista!Aprenda a proteger e gerenciar segredos, chaves e certificados com o Azure Key Vault em aplicações .NET, seguindo as melhores práticas de segurança na nuvem. ou AWS Secrets
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. Manager) quando for conveniente para projetos
🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades! em nuvem. - Aplique SSL/TLS para proteger a comunicação entre o cliente e o servidor MongoDB
O que é MongoDB e por que utilizá-lo com C# em 2025Descubra como MongoDB e C# unem flexibilidade e escalabilidade para criar soluções modernas e eficientes em um cenário NoSQL inovador em 2025.. - Validate periodicamente se as variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de ambiente foram definidas, evitando exceptions por campos nulos ou vazios.
Resumo e Próximos Passos🔗
Apesar de simples, configurar
Instalando e configurando o MongoDB no Windows e Linux para uso com C#Aprenda a instalar e configurar o MongoDB no Windows e Linux, integrando-o com projetos C# para ambientes de desenvolvimento eficientes. variáveis de ambiente e strings de conexão é um processo essencial para implantações de MongoDB em produção. Ao centralizar as credenciais em variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de ambiente, você ganha:
- Maior segurança
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. (as chaves e senhas não ficam no código). - Flexibilidade (fácil alterar host, porta e parâmetros
🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!Aprenda sobre a técnica de sobrecarga de métodos no C# com exemplos e práticas recomendadas para melhorar a organização e legibilidade do seu código.). - Escalabilidade
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. (diferentes configurações para cada ambiente de implantação).
Para seguir desenvolvendo com MongoDB em C#, verifique sempre se as credenciais estão seguras e mantenha a string de conexão
Conectando a aplicação C# ao banco de dados MongoDBNeste tutorial prático, descubra como conectar sua aplicação C# ao MongoDB com instruções detalhadas, ideais para desenvolvedores que buscam eficiência. atualizada conforme sua infraestrutura cresce ou se torna distribuída. Ajustar essas configurações faz parte do dia a dia de qualquer profissional que lida com aplicações em produção, garantindo eficiência e segurança na interação com as bases de dados.
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Artigos para desenvolvedores C# no MongoDB Developer Hub, que podem complementar as boas práticas e estratégias apresentadas para integração com MongoDB: www.mongodb.com/developer/languages/csharp/
- Documentação ASP.NET Core, útil para explorar como a configuração de variáveis de ambiente e gerenciamento de configurações é tratada em aplicações .NET: docs.microsoft.com/pt-br/aspnet/core
- Documentação oficial do MongoDB, fundamental para entender a estrutura e padrões da string de conexão e configurações do MongoDB: www.mongodb.com/docs/
- Driver oficial do MongoDB para C#, essencial para implementar a conexão com o banco de dados conforme demonstrado no tutorial: github.com/mongodb/mongo-csharp-driver
- Serviço gerenciado do MongoDB Atlas, relevante para ambientes de produção onde se utiliza uma solução gerenciada e escalável: www.mongodb.com/atlas
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás