Se você, como eu, implementa alterações manualmente em qualquer um dos seus sites de forma consistente há meses, senão anos, sabe que essa é uma tarefa repetitiva. Normalmente, você extrai suas alterações de seu sistema de controle de versão (VCS), executa algumas tarefas para instalar dependências de produção e/ou compila-as, armazena em cache sua configuração e recarrega algum tipo de serviço. Geralmente são as mesmas etapas com algumas etapas opcionais, caso você precise executar migrações de banco de dados, por exemplo.
O que é Ansible?
Você sabe que se algo é repetitivo, você pode automatizá-lo. É aqui que entra o Ansible. Originalmente, o Ansible é uma ferramenta para ajudar na orquestração de servidores e repetir tarefas de forma confiável em uma quantidade infinita de servidores. A melhor parte do Ansible é que você não precisa instalar nada em suas máquinas remotas. O único requisito é que você precise se conectar à sua máquina remota por meio de SSH. Se você pode fazer isso, pode usar o Ansible.
Você pode comparar o Ansible a um grande script bash que executa comandos na máquina remota por meio do SSH. A principal diferença entre esses dois é que o Ansible torna tudo muito mais fácil e possui módulos integrados para abstrair muitas tarefas. Extrair alterações do GitHub, especificando apenas um repositório e uma pasta de destino é um desses módulos. Isso torna as tarefas de escrita muito mais rápidas e fáceis.
Por que o Ansible é útil?
Mencionei que o Ansible é originalmente usado para orquestração de servidores. Como o Ansible é essencialmente um arquivo bash fácil de gerenciar, você pode fazer com que ele faça o que quiser. Isso inclui usá-lo para implantar seus sites, seja um ou 1000 servidores. Contanto que você possa usar o SSH em todos esses servidores, você pode implantar em todos eles.
Como a maioria dos meus sites é construída usando Laravel, fornecerei uma configuração simples para implantar seu site Laravel em seu servidor, migrar seu banco de dados, armazenar em cache sua configuração e limpar seu cache de visualizações. Isso é muito básico, mas é um ponto de partida.
A configuração básica
- hosts: roelofjanelsinga.com # You can also specify an IP address vars_files: - secrets.yml # Contains the github_user and github_token variable vars: # Define new variables github_repo_url: https://{{github_user}}:{{github_token}}@github.com/roelofjan-elsinga/portfolio.git working_directory: /path/to/app tasks: - name: "Pull changes from GitHub" git: repo: "{{github_repo_url}}", # This is how we can make this step reusable across projects dest: "{{working_directory}}" version: master # Branch to pull accept_hostkey: yes register: repo # Store the result of this task in a variable - name: "Install Composer dependencies" script: composer install --no-scripts --no-dev when: repo.changed # Only run this step if we actually pulled new changes from GitHub - name: "Cache the configuration" script: "php artisan config:cache" when: repo.changed # Only run if we pulled changes - name: "Clear the view cache" script: "php artisan view:clear" when: repo.changed # Only run if we pulled changes - name: "Run the migrations" script: "php artisan migrate --force" when: repo.changed # Only run if we pulled changes
Então você precisará criar o arquivo secrets.yml, você pode usar o vault ansible:
ansible-vault create secrets.yml
Em seguida, preencha-o com estas informações:
github_user: your_username
github_token: your_github_access_token
Para editar este arquivo, você pode usar o seguinte comando
ansible-vault edit secrets.yml