thiagocosta.py

Programming, Management etc


  • django , python , ansible , continuous delivery , devops , chef , puppet , cfengine , salt , flutue

Automatizando a configuração de servidores com Ansible

Você perde horas ou dias configurando um servidor manualmente pra colocar aquela sua aplicação no ar? É tanta coisa pra instalar: Apache, PHP, Postgres etc que você fica até desanimado. Você já até tentou documentar os passos em um documento ou até fazer um script shell, mas sempre fica faltando algum trabalho manual?

A boa notícia é que já existem no mercado diversas soluções para facilitar esse processo como o Puppet, Chef, CFEngine e Salt.

Mas hoje eu vou apresentar a vocês o Ansible:

É fácil começar!

Não há forma melhor de apresentar o Ansible do que mostrando logo um exemplo.

Para demonstrar como é fácil começar, vamos considerar o seguinte cenário:

  • Temos 2 servidores web onde devemos instalar o Nginx e configurar o virtual host da aplicação;
  • Temos 1 servidor de banco onde devemos instalar o Postgres;

Pra configurar tudo, você só vai precisar de 2 arquivos. Veja:

Playbook

Arquivo onde você descreve, usando uma linguagem simples (YAML), todas as tarefas que serão executadas nos hosts:

# playbook.yml

- hosts: webservers
  remote_user: root
  tasks:
  - name: Update YUM
    yum: name="*" state=latest
  - name: Install Nginx
    yum: name=nginx state=present
  - name: Install virtual host
    template: src=mysite_vhost dest=/etc/nginx/sites-available/mysite

- hosts: dbservers
  remote_user: root
  tasks:
  - name: Update YUM
    yum: name="*" state=latest
  - name: Install Postgres
    yum: name=postgres state=present
Inventário

Arquivo no formato INI onde você define quais são seus hosts. Normalmente cria-se um arquivo pra cada ambiente (dev, staging, prod etc):

# hosts/production

[webservers]
192.168.33.10
192.168.33.11

[dbservers]
192.168.33.12
Play!

Agora basta executar o comando: ansible-playbook -i hosts/production playbook.yml, pegar um café e quando voltar encontrar tudo pronto! :)

Minha contribuição

Compartilho com vocês um playbook que eu criei para os meus projetos. Ele configura um servidor CentOS 6.5 com Python, Nginx, Postgres, Gunicorn, Memcached, RabbitMQ, Celery e Django:

https://github.com/tcosta84/ansible-centos-django-stack

Em aproximadamente 15 minutos, e executando apenas um único comando, você terá um servidor todo configurado e com uma aplicação de exemplo rodando! Nada mal, né?

Testado na Digital Ocean e no Flutue. Nesse último, consegui configurar tudo em menos tempo, provavelmente pelo fato do Data Center estar localizado aqui no Brasil/Rio de Janeiro.

Lembrando que esse tempo pode variar muito. Nesse caso, por exemplo, estou compilado do source o Python e o Memcached. Se não fosse por isso, certamente esse tempo seria bem menor.

Por que Ansible?

Ansible é uma alternativa muito mais simples que outras soluções mais conhecidas como Puppet e Chef, que já falamos anteriormente.

Ele não possui nenhuma dependência além do Python e SSH e não requer que nenhum agente seja instalado nos servidores. Além disso, ele vem com uma extensa biblioteca de módulos pra controlar praticamente tudo que você possa imaginar.

Pra mim, é como se eu estivesse escrevendo em shell e executando os comandos Linux que já conheço, mas de uma forma mais clara, eficiente e "documentável".

Conclusão

Não perca mais seu tempo configurando servidores na mão. Use seu tempo para fazer coisas mais criativas.

O que foi demonstrado aqui sobre o Ansible é apenas uma introdução. Ainda é muito pouco em relação ao que ele oferece. O playbook que eu compartilhei apresenta mais funcionalidades do que as que vimos aqui, mas ainda há muitas features interessantes, como o Vault por exemplo que permite que você criptografe informações sensíveis como senhas para serem armazenadas no controle de versão.

Enfim, vale a pena se aprofundar no assunto:
http://www.ansible.com/configuration-management

Espero ter contribuído de alguma forma.

Thiago Costa

Desenvolvedor apaixonado orientado à melhoria contínua (kaizen), agente de mudanças e praticante de métodos ágeis, morando no Rio de Janeiro.

comments powered by Disqus