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 🛠
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
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.
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".
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.
Fiz manualmente essa instalação do ticket #22 , mas precisamos automatizar isso.
Subir o mariaquiteria staging no ambiente staging do CloudAMQP.
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
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
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
.
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
Não temos logs do nginx no logentries
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).
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 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:
Monitoramentos iniciais:
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:
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 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 = "@"
}
]
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
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:
Os dados de prod precisa ir primeiro para o staging.
Documento: https://devcenter.heroku.com/articles/heroku-postgres-import-export
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.
Criaremos uma conta enquanto nosso sistema de log não está em produção.
Hoje está funcionando apenas o HTTPS da CF
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.
Pra começar, esse CI deve ter:
Sugestão de leitura: https://docs.github.com/pt/free-pro-team@latest/actions
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/
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.
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)
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 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.
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.
O CloudAMQP é um SaaS pra rabbitMQ usado no projeto.
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:
Erro: [document-start] missing document start "---" no vault.yaml não precisa.
O projeto hoje usa o NewRelic via heroku, mas precisamos migrar pra uma conta separada do heroku.
Precisamos seguir esse material: https://docs.newrelic.com/docs/agents/python-agent/installation/install-python-agent-docker/
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.
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
O domínio precisa estar no cloudflare para que possamos oferecer uma WAF e possamos mudar as config via IaC.
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.
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
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.