Aplicativos da web sem estado são difíceis.
Como você sabe, o wordpress depende bastante de coisas sendo gravadas em disco. Aqui está a infra-estrutura proposta
- Balanceador de carga elástica
- Grupo de escalonamento automático composto por pequenas instâncias de ec2
- Foreman / Dev micro ec2 instance
- Micro / Small RDS para dados do CMS
- Cluster Elasticache para armazenamento de sessão
- Balde S3 para uploads de mídia
Agora a parte difícil.
Vamos esquecer as atualizações da base de código por um segundo e vamos dar uma olhada em como tornar a coisa toda sem estado. Você deve fazer o seguinte para tornar essa coisa escalonável horizontalmente:
- Comece com sua micro instância. Ele atuará como mecanismo de implantação, bem como um modelo
- Definir sessões do PHP para usar o memcached para gerenciamento de sessões e apontá-lo para seu cluster de elasticache
- Instale o git na micro instância
- instale algum tipo de plugin wordpress para colocar todos os uploads de arquivos no S3 (opcional, mas evita que você reimplemente cada vez que você carrega um arquivo de mídia no cms) tente o plugin W3 Total Cache
Isso cuida da configuração
Como implantar novas alterações
Você usará sua micro instância para todas as alterações futuras na instalação do wordpress. Isso inclui coisas como atualizar o wordpress, atualizar seus arquivos de tema e praticamente qualquer coisa que esteja armazenada no disco.
Você precisará criar dois scripts:
O primeiro será usado para implantar as alterações no grupo de escalonamento automático. Deve fazer o seguinte:
- Confirme as alterações feitas no seu git repo
- Efetue ping de todas as instâncias de produção e peça que baixem a nova base de código da micro instância. Você precisará usar alguma forma de AWD sdk para obter a lista de instâncias no grupo de dimensionamento automático e acionar seus scripts de recebimento. Eu pessoalmente faço isso com o meu através de um endpoint HTTP que eu criei.
O segundo script viverá nas instâncias do grupo de escalonamento automático e será acionado pelo primeiro script, além de ser executado quando a instância for inicializada pela primeira vez. Deve fazer o seguinte:
- conecte-se ao repositório git na instância micro
- buscar as alterações mais recentes e finalizar as alterações em um estado HEAD separado
Sempre que você fizer alterações no arquivo do sistema, deverá executar o script de implementação acima. Isso propagará as alterações para todas as instâncias de produção.
Agora crie uma AMI de base para as instâncias de produção. Deve ser muito parecido com o micro exemplo, no entanto o wordpress não deve ser instalado. Você usará userdata passado para as instâncias ec2 na inicialização para executar o segundo script acima para baixar a versão mais recente da base de código da instância micro.
Uma última coisa ... Se você estiver executando qualquer forma de comércio eletrônico, precisará de um certificado SSL instalado no balanceador de carga. dê uma olhada no guia aqui: link