dadosabertosdefeira / iac Goto Github PK
View Code? Open in Web Editor NEWPlataforma de Infrastructure as Code do Dados Abertos de Feira 🛠
Plataforma de Infrastructure as Code do Dados Abertos de Feira 🛠
Fiz manualmente essa instalação do ticket #22 , mas precisamos automatizar isso.
Precisamos de um código para garantir que o bucket com um determinado nome exista, em uma determinada região.
A configuração deve permitir trocar as permissões do bucket, ao menos pra deixar público ou não. O padrão deve ser NÃO público.
Esse código deve ser testado no pipeline usando localstack ou algo equivalente.
Esse código deve ser um módulo a ser armazenado em repositório próprio: https://github.com/mentoriaiac/iac-modulo-s3
No repositório iac deve ter um arquivo terraform usado para consumir o módulo externo (que pode ser algo pronto ou feito por nós).
Esse modulo precisa ter ao menos um teste, que seria validar se o bucket se acessar via http, um bucket que não deveria ser público e validar se consegue upload de arquivos no bucket com a credencial correta.
Links que podem ajudar na solução do PR:
https://github.com/localstack/localstack
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/custom-service-endpoints
https://github.com/UlisesGascon/sample-terraform-localstack
https://blog.gruntwork.io/how-to-create-reusable-infrastructure-with-terraform-modules-25526d65f73d
Essa automação precisa acontecer na role https://github.com/DadosAbertosDeFeira/iac-role-services
Precisa capturar o log de:
Essa role deve ter o seguintes parâmetros:
O código IaC atual cria a infra basica do Dokku, cria a rede "dokku_services", coloca o container do tika na mesma rede, configura tudo, mas não faz deploy. Isso é esperado, mas precisamos na etapa do molecule simular o deploy do dokku.
Como eu imagino que possa ser feito:
Hoje o deploy do mariaquiteria está exibindo essa mensagem no passo "Push to Dokku":
Generating SSH_HOST_KEY from ssh-keyscan against nat-25434.nuvem-brasil-10.absamcloud.com:43841
# nat-25434.nuvem-brasil-10.absamcloud.com:43841 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
# nat-25434.nuvem-brasil-10.absamcloud.com:43841 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
# nat-25434.nuvem-brasil-10.absamcloud.com:43841 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
# nat-25434.nuvem-brasil-10.absamcloud.com:43841 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
# nat-25434.nuvem-brasil-10.absamcloud.com:43841 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
Isso é o nome do host dokku, com a porta. Eu sei que esconder esses dados não é o suficiente para oferecer uma real medida de segurança, afinal somente esconder é segurança por obscuridade, mas não sei se precisamos oferecer dados de "mão beijada para o atacante".
Precisamos criar um PR no repositório que é responsável por essa action: https://github.com/dokku/github-action
Nesse PR deve ter uma opção para ocultar o host e port, o default deve ser o comportamento padrão da action hoje, que é expor.
O CloudAMQP é um SaaS pra rabbitMQ usado no projeto.
Temos que alterar o playbook: https://github.com/DadosAbertosDeFeira/iac/blob/main/playbook.yml para que uma nova app seja criada e devidamente configurada.
Mais detalhes sobre como o dramatiq deveria ser configurado você encontra aqui: https://github.com/DadosAbertosDeFeira/maria-quiteria/blob/main/docker-compose.yml
Ele deve ser uma aplicação dokku como a outra que já tem lá hoje.
Fique atento que essa nova app é a partir do mesmo repo: https://github.com/DadosAbertosDeFeira/maria-quiteria mas ela deve ter um command diferente para iniciar o container, ok?
Critérios para aceitação de PR:
Obs: A distro usada será ubuntu 18.04 LTS.
Os deploys do iac-role-services acontecerão na rede "dokku_services" e por conta disso o app web e worker do mariaquiteria precisam estar nessa rede. Esse PR precisa garantir isso.
https://github.com/DadosAbertosDeFeira/iac-role-services
Fonte: https://github.com/dokku/ansible-dokku#dokku_docker_options
Seria apenas colocar o --network como opção.
Ao fazer deploy o dokku informa a seguinte mensagem:
Processing deployment checks
No CHECKS file found. Simple container checks will be performed.
For more efficient zero downtime deployments, create a CHECKS file. See http://dokku.viewdocs.io/dokku/deployment/zero-downtime-deploys/ for examples
O objetivo dessa issue é olhar a forma como o Dokku sugere que façamos o check e propor algo.
Precisamos reforçar a segurança fazendo hardening na configuração do SSH. Isso deve entrar na role: https://github.com/DadosAbertosDeFeira/iac-role-basica.
O escopo mínimo de hardening é:
Você pode sugerir mais, porém esse apresentado até aqui é o mínimo que deve ser aplicado ^
Seria muito bom ter um teste automatizado pra validar algumas coisas dessa role no molecule também.
Obs: fail2ban está fora desse escopo. Seria MUITO legal ter isso, mas façamos em outro ticket.
Links:
https://linux-audit.com/audit-and-harden-your-ssh-configuration/
https://www.digitalocean.com/community/tutorials/how-to-harden-openssh-on-ubuntu-18-04-pt
Precisamos executar o cloudflare antes do deploy em produção.
O modulo terraform está pronto: https://github.com/mentoriaiac/iac-modulo-cloudflare/releases/tag/v0.1
Deve ser usado a tag especifica e não branch master.
Ele só deve rodar no ambiente correto, com base comportamento correto. Só executa a parte de staging, quando for staging e produção quando for o momento de deploy em produção. Os critérios dessa diferença serão definidos nesse ticket: #52
Precisamos a manutenção do bucket S3 antes do deploy em produção.
O modulo terraform está pronto: https://github.com/mentoriaiac/iac-modulo-s3/releases/tag/v0.1
Deve ser usado a tag especifica e não branch master.
Ele só deve rodar no ambiente correto, com base comportamento correto. Só executa a parte de staging, quando for staging e produção quando for o momento de deploy em produção. Os critérios dessa diferença serão definidos nesse ticket: #52
Os dados de prod precisa ir primeiro para o staging.
Documento: https://devcenter.heroku.com/articles/heroku-postgres-import-export
Olá, acredito que no arquivo playbook.yml ficaria mais intuitivo e idiomático se fosse trocado tasks
por post_tasks
, pois penso que a primeira vista pode ser confundido a ordem de execução entre tasks
e roles
.
Replicar o que é feito pelo plugin dokku-letsencrypt em um role ansible.
Os passos são documentados neste artigo e podem ser complementados pelos scripts que compoem o plugin no github.
Esta atividade faz parte do issue #1
Criaremos uma conta enquanto nosso sistema de log não está em produção.
Hoje o projeto usa logentries. Precisamos levantar o que precisa para criar uma conta fora do heroku e conectar a app pra enviar logo para o logentries: https://logentries.com/
Precisamos seguir esse material: https://docs.newrelic.com/docs/agents/python-agent/installation/install-python-agent-docker/
Precisamos de uma imagem Packer para subir a infraestrutura do projeto de Dados Abertos de Feira.
Será utilizado o playbook
e roles
contidos neste projeto, porém o código Packer estará contido no repositório iac-imagem-dadosabertosfeira-gcp.
O PR deve ser feito nesse repositório: https://github.com/DadosAbertosDeFeira/iac-role-services
Essa role deve fazer:
Obs: A distro usada será ubuntu 18.04 LTS.
Inputs da role:
Obs: Esse deploy NÃO É PARA O DOKKU. É no Docker puro, é para fazer deploy de serviços que o Dokku não tiver suporte nativo.
Critérios para aceitação dessa role:
Sugestões de leitura:
Obs: Essas dicas não são limites, pode ser usado qualquer outra solução que funcione bem e que seja idempotente (rodar o ansible duas vezes e na segunda todos as tasks retornarem ok ao invés de changed ou failed)
Subir o mariaquiteria staging no ambiente staging do CloudAMQP.
Esse playbook não deverá aplicar nenhuma task especifica, apenas uso do roles baixadas via requirements.yml.
O que deve ser feito nessa task:
Siga o README e execute o teste. Ele deve passar para essa issue ser completada.
Obs: A distro usada será ubuntu 18.04 LTS.
Critérios para aceitação dessa role:
PS: Preciso criar um teste automatizado para validar que tem certificado válido (ver como fazer com let's encrypt de teste)
Documentação do Dokku: http://dokku.viewdocs.io/dokku/getting-started/installation/
Código ansible oficial do Dokku: https://github.com/dokku/ansible-dokku
PS: Estamos abertos a usar outra solução (de PaaS ou não), mas precisar ser algo simples como Dokku.
Precisamos colocar um github action no https://github.com/DadosAbertosDeFeira/maria-quiteria para que ele possa fazer deploy no dokku.
Meu conselho é que esse deploy seja feito via git, como aconselhado nesse link: http://dokku.viewdocs.io/dokku~v0.12.8/deployment/application-deployment/#deploy-the-app
Monitoramentos iniciais:
O projeto mariaquiteria usa sentry, mas não sei se está corretamente configurado na perspectiva de infra: https://github.com/DadosAbertosDeFeira/maria-quiteria
Precisamos revisar e ver se as melhores práticas na perspectiva de infra está sendo usada.
Links:
O projeto hoje usa o NewRelic via heroku, mas precisamos migrar pra uma conta separada do heroku.
Hoje ele consume muito recurso e inviabiliza a maquina. Precisamos avaliar o quanto de recurso é necessário e limitar pra evitar que a maquina seja "tomada".
Existem algumas variáveis seguras que precisam ser aplicadas na app dokku, mas elas não podem ser colocadas em texto plano no github. Elas precisam ser encriptadas.
Pretendemos usar ansible-vault pra isso.
Precisamos adaptar o playbook, pois o CI precisa de um comando pra fazer deploy APENAS em staging ou em produção por vez, para que staging possa ser testado antes de produção.
Pra começar, esse CI deve ter:
Sugestão de leitura: https://docs.github.com/pt/free-pro-team@latest/actions
A imagem padrão do Apache Tika - Dockerfile, não inclui o OCR para o Português.
O PR deve ser feito para esse repo: https://github.com/DadosAbertosDeFeira/iac-docker-tika
Por isso é necessário criar uma imagem docker contemplando as necessidades do projeto, seguindo os mesmos padrões da imagem oficial do grupo Apache, removendo as linguagens desnecessárias (ita, fra,...) e adicionando o português (por)
Critérios de aceitação:
O CI deve ter:
Precisamos de um modulo terraform que eu possa passar um conjunto de entradas e o modulo ser responsável por criar no dominio escolhido.
exemplo de input:
rules = [
{
type = "A"
entry = "@"
value = "10.10.10.10"
},
{
type = "cname"
entry = "www"
value = "@"
}
]
Pessoal, ao tentar instalar o ansible pelas instruções do README.md, estou obtendo o seguinte erro:
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'
Agradeço a atenção.
O domínio precisa estar no cloudflare para que possamos oferecer uma WAF e possamos mudar as config via IaC.
Serão os mesmos do nosso backend. Estamos estudando ter tudo em um repositório só e referenciar nos READMEs.
Precisamos definir algumas regras para padronizar o envio de commits.
Algumas opiniões:
Obs: Isso são apenas opiniões e vocês podem sugerir coisas novas ou divergir do que eu coloquei, ok?
Sugestão de leitura: https://www.conventionalcommits.org/en/v1.0.0/#summary (Eu olhei por cima, ou seja, não endosso 100% não).
Erro: [document-start] missing document start "---" no vault.yaml não precisa.
Aproveitar e ver o erro abaixo:
INFO Unknown file type: config_files/logging.yml
Link de um pipeline de exemplo: https://github.com/DadosAbertosDeFeira/iac/runs/3098208611?check_suite_focus=true
Temos que colocar um servidor adicional e configurar o dokku lá também.
Precisamos usar o LB da ABSAM pra repassar o tráfego igual para as duas maquinas.
Seria muito legal que esse maquina estivesse em outro datacenter.
Seria legal termos algumas integrações com o Discord.
A minha primeira ideia seria enviar uma mensagem de deploy feito com sucesso ou falha pra nossa sala de infraestrutura.
Hoje está funcionando apenas o HTTPS da CF
Não temos logs do nginx no logentries
Quando o ansible não tem conteúdo no arquivo hosts a execução do ansible não quebra o pipeline, mas tb não faz deploy em local algum. Precisamos pensar em alguma solução pra isso.
Precisamos migrar os dados que estão hoje no postgres do Heroku para produção.
Antes criaremos um site novo e colocaremos as variáveis com seus valores.
Necessário configuração do SSL.
Faremos primeiro um dump dos dados e import no postgres do servidor final usando esse documento: https://devcenter.heroku.com/articles/heroku-postgres-import-export
Depois solicitaremos validação dos dados para @anapaulagomes
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.