Estou supondo que essa pergunta pareça incrivelmente trivial para alguns leitores, mas como alguém que é desenvolvedor, mas com pouca experiência em implantar aplicativos em algo que não seja um manual, acerte e espere uma maneira, espero que você entenda que é bastante assustador ver o número de diferentes abordagens e ferramentas que existem, para que eu pudesse seguir alguns conselhos para começar na direção certa.
Sou desenvolvedor, agora apenas no meu tempo livre, que é limitado. Até agora, eu trabalhei com Java, construindo webapps e fiquei razoavelmente feliz em implantar um arquivo de guerra em um ambiente Tomcat que mantém as coisas bem encapsuladas.
Agora estou trabalhando em Python e Django, mas à medida que me aproximo do ponto em que preciso implantar, desejo configurar um fluxo de trabalho de devops sólido para automatizar o máximo possível e garantir que seja possível implantar de maneira confiável, mas, considerando que meu Caso de uso seja relativamente simples, desejo evitar o aprendizado de um grande conjunto de ferramentas com excesso de engenharia para minhas necessidades e que exige um grande investimento de tempo. Prefiro usar a codificação do meu aplicativo.
Portanto, estou procurando um meio termo que permita implantar e gerenciar meus aplicativos de maneira confiável, sem investir muito tempo configurando e aprendendo um grande ecossistema de devops.
Mais alguns detalhes ...
Contexto
- Desenvolvo em um Mac, usando PyCharm para criar o Django 2, Python 3.
- Eu uso o git (mas não no github) para gerenciar a versão do software.
- Eu me sinto confortável com outras linguagens e linguagens de script e escrevi alguns scripts bash (provavelmente bastante amadores), embora eu não goste do bash. Eu também me envolvi com o Perl, que percebi que não é realmente um idioma para se envolver (ou seja, você precisa gastar tempo aprendendo adequadamente)
- Pretendo implantar em um ambiente VPS, provavelmente DigitalOcean.
- Meu aplicativo não é de missão crítica, mas é importante que eu saiba se o site está inoperante e, se isso acontecer, preciso recuperar de maneira confiável, seja reiniciando o aplicativo, reiniciando o servidor ou movendo-se para outro servidor ( ou outro).
Requisitos Específicos
Capacidade de configurar um novo ambiente para receber o aplicativo.
Até o momento, enquanto estou aprendendo, isso tem sido manual e, toda vez que o faço, comecei do zero com um novo Droplet. Eu gostaria que isso fosse muito mais simples (automatizado), para que, se eu tiver que configurar um novo ambiente em uma emergência, eu possa fazê-lo de maneira confiável.
Capacidade de implantar o aplicativo em um ambiente de armazenamento temporário o mais idêntico possível ao vivo, idealmente como um processo automatizado acionado por um push git usando uma abordagem de integração contínua (o que nunca fiz antes).
Capacidade de "pressionar o botão" quando estiver satisfeito com o aplicativo no ambiente de preparação para enviar automaticamente para um ambiente ao vivo.
Maneira de monitorar o site (basta fazer uma pesquisa em uma página)
Maneira de mudar o site ativo para outro servidor se eu precisar me recuperar de uma falha de aplicativo ou servidor no site ativo. Eu acho que talvez uma abordagem azul-verde funcione para mim?
O que eu tentei ou considerei?
Configuração manual do ambiente ao vivo com o aplicativo Django e copie manualmente uma nova base de código para ele quando houver uma alteração. Isso parece propenso a erros humanos e temo cometer um erro em uma implantação, causando uma falha irrecuperável.
Docker. Admito que, quando descobri sobre o Docker, parecia um sonho tornado realidade, mas depois de um pouco de experiências e pesquisas, fico assustada com o quanto preciso aprender e saber para colocar isso em funcionamento e gerenciá-lo. Pode ser que valha a pena, porque, uma vez que está funcionando, é um risco muito baixo, mas no momento parece um investimento maior do meu tempo do que eu esperava.
Scripts Bash. Use-os para configurar o ambiente original e para tarefas específicas, como atualizar o aplicativo. Minha preocupação com isso é que os scripts serão códigos que precisam ser testados e temo que levaria muito tempo para criar um conjunto de ferramentas confiável dessa maneira.
Examinei as opções da Digital Ocean para endereços IP flutuantes e a capacidade de ter dois servidores para uma abordagem "verde azul" que parece bastante sensata. Se eu seguir esse caminho, ainda preciso automatizar a implantação.
Então ... Estou procurando conselhos sobre uma abordagem de devops que encontre o equilíbrio certo entre minimizar o risco (por exemplo, o risco de interromper o aplicativo ao vivo com uma atualização ou o risco de não conseguir se recuperar de uma falha) e minimizar o tempo investimento que preciso fazer para configurar os ambientes e o fluxo de trabalho.