One place for hosting & domains

      December 2019

      Como Usar o Ansible para Instalar e Configurar o Apache no Ubuntu 18.04


      Introdução

      A automação de servidores desempenha agora um papel essencial na administração de sistemas, devido à natureza descartável dos ambientes das aplicações modernas. Ferramentas de Gerenciamento de configuração tais como o Ansible são normalmente usadas para otimizar o processo de automatização da configuração do servidor, estabelecendo procedimentos padrão para novos servidores e reduzindo também o erro humano associado às configurações manuais.

      O Ansible oferece uma arquitetura simples que não requer a instalação de software especial nos nodes. Ele também fornece um conjunto robusto de recursos e módulos internos que facilitam a criação de scripts de automação.

      Este guia explica como usar o Ansible para automatizar os passos contidos em nosso guia Como Instalar o Servidor Web Apache no Ubuntu 18.04. O servidor HTTP Apache é o servidor web mais utilizado no mundo. Ele fornece muitos recursos poderosos, incluindo módulos dinamicamente carregáveis, suporte robusto à mídia e ampla integração com outros softwares populares.

      Pré-requisitos

      Para executar a configuração automatizada fornecida pelo playbook que estamos discutindo neste guia, você precisará de:

      Antes de continuar, primeiro você precisa garantir que o node de controle do Ansible possa conectar e executar comandos no(s) host(s) Ansible. Para um teste de conexão, verifique o passo 3 de Como instalar e configurar o Ansible no Ubuntu 18.04.

      O que Este Playbook Faz?

      Este Playbook Ansible fornece uma alternativa à execução manual do procedimento descrito em nosso guia sobre Como Instalar o Servidor Web Apache no Ubuntu 18.04.

      A execução deste playbook executará as seguintes ações nos hosts Ansible:

      1. Instalar o aptitude, que é preferido pelo Ansible como uma alternativa ao gerenciador de pacotes apt.
      2. Instalar o Apache.
      3. Criar uma pasta raiz de documentos personalizada para o novo VirtualHost do Apache e configurar uma página de teste.
      4. Ativar o novo VirtualHost do Apache.
      5. Desativar o site padrão do Apache quando a variável disable_default é definida para true.
      6. Configurar o UFW para permitir o tráfego HTTP na porta configurada (80 por padrão).

      Quando o playbook terminar de ser executado, você terá um servidor web em execução no seu node de destino, com base nas opções que você definiu nas variáveis de configuração.

      Como Usar Este Playbook

      A primeira coisa que precisamos fazer é obter o playbook do Apache e suas dependências no repositório do-community/ansible-playbooks. Precisamos clonar esse repositório em uma pasta local dentro do Node de Controle Ansible

      Caso você tenha clonado este repositório antes, enquanto seguia um guia diferente, acesse sua cópia existente do ansible-playbooks e execute um comando git pull para garantir que você tenha conteúdo atualizado:

      • cd ~/ansible-playbooks
      • git pull

      Se esta é sua primeira vez usando o repositório do-community/ansible-playbooks, você deve começar clonando o repositório na sua pasta home com:

      • cd ~
      • git clone https://github.com/do-community/ansible-playbooks.git
      • cd ansible-playbooks

      Os arquivos em que estamos interessados estão localizados dentro da pasta apache_ubuntu1804, que possui a seguinte estrutura:

      apache_ubuntu1804
      ├── files
      │   ├── apache.conf.j2
      │   └── index.html.j2
      ├── vars
      │   └── default.yml
      ├── playbook.yml
      └── readme.md
      

      Aqui está o que cada um desses arquivos representa:

      • files/apache.conf.j2: Arquivo de modelo para configurar o VirtualHost no Apache.
      • files/index.html.j2: Arquivo de modelo para configurar uma página de teste no diretório raiz do servidor web.
      • vars/default.yml: Arquivo de variáveis para personalizar as configurações do playbook.
      • playbook.yml: O arquivo do playbook, contendo as tarefas a serem executadas nos servidores remotos.
      • readme.md: Um arquivo de texto contendo informações sobre este playbook.

      Editaremos o arquivo de variáveis do playbook para personalizar algumas opções. Acesse o diretório apache_ubuntu1804 e abra o arquivo vars/default.yml usando o editor de linha de comando de sua escolha:

      • cd apache_ubuntu1804
      • nano vars/default.yml

      Este arquivo contém algumas variáveis que requerem sua atenção:

      vars/default.yml

      ---
      app_user: "sammy"
      http_host: "your_domain"
      http_conf: "your_domain.conf"
      http_port: "80"
      disable_default: true
      

      A lista a seguir contém uma breve explicação de cada uma dessas variáveis e como você pode alterá-las:

      • app_user: Um usuário remoto não-root no host Ansible que será definido como o proprietário dos arquivos da aplicação.
      • http_host: O seu nome de domínio.
      • http_conf: O nome do arquivo de configuração que será criado no Apache.
      • http_port: Porta HTTP para este virtual host, onde 80 é o padrão.
      • disable_default: Desativar ou não o site padrão que acompanha o Apache.

      Quando terminar de atualizar as variáveis dentro de vars/default.yml, salve e feche este arquivo. Se você usou o nano, faça isso pressionando CTRL + X, Y e, em seguida,ENTER.

      Agora você está pronto para executar este playbook em um ou mais servidores. A maioria dos playbooks está configurada para ser executada em todos os servidores do seu inventário, por padrão. Podemos usar a flag -l para garantir que apenas um subconjunto de servidores ou um único servidor seja afetado pelo playbook. Também podemos usar a flag -u para especificar qual usuário no servidor remoto que estamos usando para conectar e executar os comandos do playbook nos hosts remotos.

      Para executar o playbook apenas no servidor server1, conectando-se como sammy, você pode usar o seguinte comando:

      • ansible-playbook playbook.yml -l server1 -u sammy

      Você obterá uma saída semelhante a esta:

      Output

      PLAY [all] ***************************************************************************************************************************** TASK [Gathering Facts] ***************************************************************************************************************** ok: [server1] TASK [Install prerequisites] *********************************************************************************************************** ok: [server1] => (item=aptitude) TASK [Install Apache] ****************************************************************************************************************** changed: [server1] TASK [Create document root] ************************************************************************************************************ changed: [server1] TASK [Copy index test page] ************************************************************************************************************ changed: [server1] TASK [Set up Apache virtualhost] ******************************************************************************************************* changed: [server1] TASK [Enable new site] ***************************************************************************************************************** changed: [server1] TASK [Disable default Apache site] ***************************************************************************************************** changed: [server1] TASK [UFW - Allow HTTP on port 80] ***************************************************************************************************** changed: [server1] RUNNING HANDLER [Reload Apache] ******************************************************************************************************** changed: [server1] PLAY RECAP ***************************************************************************************************************************** server1 : ok=10 changed=8 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

      Nota: Para obter mais informações sobre como executar os playbooks Ansible, consulte nosso guia de referência Ansible Cheat Sheet Guide.

      Quando o playbook terminar de ser executado, abra seu navegador web e acesse o host ou o endereço IP do servidor, conforme configurado nas variáveis do playbook:

      http://host_ou_ip_do_servidor
      

      Você verá uma página como esta:

      it works page

      Isso significa que a automação foi totalmente executada em seu servidor e o Apache agora está pronto para servir páginas HTML estáticas e ativos colocados no diretório raiz de documentos que você definiu nas variáveis de configuração do playbook.

      O Conteúdo do Playbook

      Você pode encontrar a configuração do servidor Apache apresentada neste tutorial na página apache_ubuntu1804 dentro do repositório DigitalOcean Community Playbooks. Para copiar ou baixar o conteúdo do script diretamente, clique no botão Raw na parte superior de cada script.

      O conteúdo completo do playbook, bem como os arquivos associados, também estão incluídos aqui para sua conveniência.

      vars/default.yml

      O arquivo de variáveis default.yml contém valores que serão usados nas tarefas do playbook, como a porta HTTP e o nome do domínio a serem configurados no VirtualHost do Apache.

      vars/default.yml

      ---
      app_user: "sammy"
      http_host: "your_domain"
      http_conf: "your_domain.conf"
      http_port: "80"
      disable_default: true
      

      files/apache.conf.j2

      O arquivo apache.conf.j2 é um template ou modelo Jinja 2 que configura um novo VirtualHost no Apache. As variáveis usadas neste modelo são definidas no arquivo de variáveis vars/default.yml.

      files/apache.conf.j2

      <VirtualHost *:{{ http_port }}>
         ServerAdmin webmaster@localhost
         ServerName {{ http_host }}
         ServerAlias www.{{ http_host }}
         DocumentRoot /var/www/{{ http_host }}
         ErrorLog ${APACHE_LOG_DIR}/error.log
         CustomLog ${APACHE_LOG_DIR}/access.log combined
      </VirtualHost>
      

      files/index.html.j2

      O arquivo index.html.j2 é outro modelo Jinja, usado para configurar uma página HTML de teste na raiz de documentos do servidor Apache recém-configurado.

      files/index.html.j2

      <html>
         <head>
             <title>Welcome to {{ http_host }} !</title>
         </head>
         <body>
             <h1>Success! The {{ http_host }} virtual host is working!</h1>
         </body>
      </html>
      

      playbook.yml

      O arquivo playbook.yml é onde todas as tarefas desta configuração são definidas. Ele começa definindo o grupo de servidores que deve ser o alvo dessa configuração (all), após o qual ele usa become: true para definir que as tarefas devem ser executadas com escalação de privilégios (sudo) por padrão. Em seguida, inclui o arquivo de variáveis vars/default.yml para carregar as opções de configuração.

      playbook.yml

      ---
      - hosts: all
        become: true
        vars_files:
          - vars/default.yml
      
        tasks:
          - name: Install prerequisites
            apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
            loop: [ 'aptitude' ]
      
          - name: Install Apache
            apt: name=apache2 update_cache=yes state=latest
      
          - name: Create document root
            file:
              path: "/var/www/{{ http_host }}"
              state: directory
              owner: "{{ app_user }}"
              mode: '0755'
      
          - name: Copy index test page
            template:
              src: "files/index.html.j2"
              dest: "/var/www/{{ http_host }}/index.html"
      
          - name: Set up Apache virtuahHost
            template:
              src: "files/apache.conf.j2"
              dest: "/etc/apache2/sites-available/{{ http_conf }}"
      
          - name: Enable new site
            shell: /usr/sbin/a2ensite {{ http_conf }}
            notify: Reload Apache
      
          - name: Disable default Apache site
            shell: /usr/sbin/a2dissite 000-default.conf
            when: disable_default
            notify: Reload Apache
      
          - name: "UFW - Allow HTTP on port {{ http_port }}"
            ufw:
              rule: allow
              port: "{{ http_port }}"
              proto: tcp
      
        handlers:
          - name: Reload Apache
            service:
              name: apache2
              state: reloaded
      
          - name: Restart Apache
            service:
              name: apache2
              state: restarted
      

      Sinta-se à vontade para modificar este playbook para melhor atender às suas necessidades individuais dentro do seu próprio fluxo de trabalho.

      Conclusão

      Neste guia, usamos o Ansible para automatizar o processo de instalação e configuração do Apache no Ubuntu 18.04.

      Se você deseja incluir outras tarefas neste playbook para personalizar ainda mais sua configuração inicial de servidor, consulte nosso guia introdutório de Ansible em Configuration Management 101: Writing Ansible Playbooks.



      Source link

      Como Usar o Ansible para Instalar e Configurar o LEMP no Ubuntu 18.04


      Introdução

      A automação de servidores desempenha agora um papel essencial na administração de sistemas, devido à natureza descartável dos ambientes das aplicações modernas. Ferramentas de Gerenciamento de configuração tais como o Ansible são normalmente usadas para otimizar o processo de automatização da configuração do servidor, estabelecendo procedimentos padrão para novos servidores e reduzindo também o erro humano associado às configurações manuais.

      O Ansible oferece uma arquitetura simples que não requer a instalação de software especial nos nodes. Ele também fornece um conjunto robusto de recursos e módulos internos que facilitam a criação de scripts de automação.

      Este guia explica como usar o Ansible para automatizar os passos contidos em nosso guia Como instalar o Linux, o Nginx, o MySQL, o PHP (pilha LEMP) no Ubuntu 18.04. A pilha de software LEMP é um grupo de software que pode ser usado para servir páginas web dinâmicas e aplicações web. Este é um acrônimo que descreve um sistema operacional Linux, com um servidor Nginx (pronunciado como “Engine-X”). Os dados de back-end são armazenados no banco de dados MySQL e o processamento dinâmico é tratado pelo PHP.

      Pré-requisitos

      Para executar a configuração automatizada fornecida pelo playbook que estamos discutindo neste guia, você precisará de:

      Antes de continuar, primeiro você precisa garantir que o node de controle do Ansible possa conectar e executar comandos no(s) host(s) Ansible. Para um teste de conexão, verifique o passo 3 de Como instalar e configurar o Ansible no Ubuntu 18.04.

      O que Este Playbook Faz?

      Este Playbook Ansible fornece uma alternativa à execução manual do procedimento descrito em nosso guia sobre Como instalar o Linux, o Nginx, o MySQL, o PHP (pilha LEMP) no Ubuntu 18.04.

      A execução deste playbook executará as seguintes ações em seus hosts Ansible:

      1. Instalar o aptitude, que é preferido pelo Ansible como uma alternativa ao gerenciador de pacotes apt.
      2. Instalar os pacotes necessários do LEMP.
      3. Configurar o arquivo de configuração do Nginx usando o modelo fornecido.
      4. Habilitar a nova configuração do Nginx e desabilitar a configuração padrão.
      5. Definir a senha para o usuário root do MySQL.
      6. Remover contas anônimas do MySQL e o banco de dados de teste.
      7. Configurar o UFW para permitir o tráfego HTTP na porta configurada (80 por padrão).
      8. Configurar um script de teste PHP usando o modelo fornecido.

      Quando o playbook terminar de ser executado, você terá um ambiente web PHP em execução no Nginx, com base nas opções que você definiu nas variáveis de configuração.

      Como Usar Este Playbook

      A primeira coisa que precisamos fazer é obter o playbook do LEMP e suas dependências no repositório do-community/ansible-playbooks. Precisamos clonar esse repositório em uma pasta local dentro do Node de Controle Ansible.

      Caso você tenha clonado este repositório antes, enquanto seguia um guia diferente, acesse sua cópia existente do ansible-playbooks e execute um comando git pull para garantir que você tenha conteúdo atualizado:

      • cd ~/ansible-playbooks
      • git pull

      Se esta é sua primeira vez usando o repositório do-community/ansible-playbooks, você deve começar clonando o repositório na sua pasta home com:

      • cd ~
      • git clone https://github.com/do-community/ansible-playbooks.git
      • cd ansible-playbooks

      Os arquivos em que estamos interessados estão localizados dentro da pasta lemp_ubuntu1804, que possui a seguinte estrutura:

      lemp_ubuntu1804
      ├── files
      │   ├── info.php.j2
      │   └── nginx.conf.j2
      ├── vars
      │   └── default.yml
      ├── playbook.yml
      └── readme.md
      

      Aqui está o que cada um desses arquivos representa:

      • files/info.php.j2: Arquivo de modelo para configurar uma página de teste PHP na raiz do servidor web.
      • files/nginx.conf.j2: Arquivo de modelo para configurar o servidor Nginx.
      • vars/default.yml: Arquivo de variáveis para personalizar as configurações do playbook.
      • playbook.yml: O arquivo do playbook, contendo as tarefas a serem executadas nos servidores remotos.
      • readme.md: Um arquivo de texto contendo informações sobre este playbook.

      Editaremos o arquivo de variáveis do playbook para personalizar as configurações do MySQL e do Nginx. Acesse o diretório lemp_ubuntu1804 e abra o arquivo vars/default.yml usando o editor de linha de comando de sua escolha:

      • cd lemp_ubuntu1804
      • nano vars/default.yml

      Este arquivo contém algumas variáveis que requerem sua atenção:

      vars/default.yml

      ---
      mysql_root_password: "mysql_root_password"
      http_host: "your_domain"
      http_conf: "your_domain.conf"
      http_port: "80"
      

      A lista a seguir contém uma breve explicação de cada uma dessas variáveis e como você pode alterá-las:

      • mysql_root_password: A senha desejada para a conta root do MySQL.
      • http_host: O nome do host ou o endereço IP para o servidor web.
      • http_conf: O nome do arquivo de configuração a ser criado dentro de /etc/nginx/sites-available, normalmente definido como o nome do host ou da aplicação para facilitar a identificação.
      • http_port: A porta que o Nginx utilizará para servir este site. Esta é a porta 80 por padrão, mas se você deseja servir seu site ou aplicação em uma porta diferente, digite-a aqui.

      Quando terminar de atualizar as variáveis dentro de vars/default.yml, salve e feche este arquivo. Se você usou nano, faça isso pressionando CTRL + X, Y, e, em seguida, ENTER.

      Agora você está pronto para executar este playbook em um ou mais servidores. A maioria dos playbooks está configurada para ser executada em todos os servidores do seu inventário, por padrão. Podemos usar a flag -l para garantir que apenas um subconjunto de servidores ou um único servidor seja afetado pelo playbook. Também podemos usar a flag -u para especificar qual usuário no servidor remoto que estamos usando para conectar e executar os comandos do playbook nos hosts remotos.

      Para executar o playbook apenas no servidor server1, conectando-se como sammy, você pode usar o seguinte comando:

      • ansible-playbook playbook.yml -l server1 -u sammy

      Você obterá uma saída semelhante a esta:

      Output

      PLAY [all] ***************************************************************************************************************************** TASK [Gathering Facts] ***************************************************************************************************************** ok: [server1] TASK [Install Prerequisites] *********************************************************************************************************** changed: [server1] => (item=aptitude) ... TASK [UFW - Allow HTTP on port 80] ***************************************************************************************************** changed: [server1] TASK [Sets Up PHP Info Page] *********************************************************************************************************** changed: [server1] RUNNING HANDLER [Reload Nginx] ********************************************************************************************************* changed: [server1] PLAY RECAP ***************************************************************************************************************************** server1 : ok=12 changed=9 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

      Nota: Para obter mais informações sobre como executar os playbooks Ansible, consulte nosso guia de referência Ansible Cheat Sheet Guide.

      Quando o playbook terminar de ser executado, abra seu navegador web e acesse o host ou o endereço IP do servidor, conforme configurado nas variáveis do playbook, seguido de /info.php:

      http://host_ou_ip_do_servidor/info.php
      

      Você verá uma página como esta:

      phpinfo page

      Como esta página contém informações confidenciais sobre o seu ambiente PHP, é recomendável que você a remova do servidor executando um comando rm -f /var/www/info.php após concluir a configuração.

      O Conteúdo do Playbook

      Você pode encontrar a configuração do servidor LEMP apresentada neste tutorial na página lemp_ubuntu1804 dentro do repositório DigitalOcean Community Playbooks. Para copiar ou baixar o conteúdo do script diretamente, clique no botão Raw na parte superior de cada script.

      O conteúdo completo do playbook, bem como os arquivos associados, também estão incluídos aqui para sua conveniência.

      vars/default.yml

      O arquivo de variáveis default.yml contém valores que serão usados nas tarefas do playbook, como a senha da conta root do MySQL e o nome do domínio a ser configurado no Nginx.

      vars/default.yml

      ---
      mysql_root_password: "mysql_root_password"
      http_host: "your_domain"
      http_conf: "your_domain.conf"
      http_port: "80"
      

      files/nginx.conf.j2

      O arquivo nginx.conf.j2 é um template ou modelo Jinja 2 que configura o servidor web Nginx. As variáveis usadas neste modelo são definidas no arquivo de variáveis vars/default.yml.

      files/nginx.conf.j2

      server {
             listen {{ http_port }};
             root /var/www/html;
             index index.php index.html index.htm index.nginx-debian.html;
             server_name {{ http_host }};
      
             location / {
                     try_files $uri $uri/ =404;
             }
      
             location ~ .php$ {
                     include snippets/fastcgi-php.conf;
                     fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
             }
      
             location ~ /.ht {
                     deny all;
             }
      }
      
      

      files/info.php.j2

      O arquivo info.php.j2 é outro modelo Jinja, usado para configurar um script PHP de teste na raiz de documentos do servidor LEMP recém-configurado.

      files/info.php.j2

      <?php
      phpinfo();
      
      

      playbook.yml

      O arquivo playbook.yml é onde todas as tarefas desta configuração são definidas. Ele começa definindo o grupo de servidores que deve ser o alvo dessa configuração (all), após o qual ele usa become: true para definir que as tarefas devem ser executadas com escalação de privilégios (sudo) por padrão. Em seguida, inclui o arquivo de variáveis vars/default.yml para carregar as opções de configuração.

      playbook.yml

      ---
      - hosts: all
        become: true
        vars_files:
         - vars/default.yml
      
       tasks:
         - name: Install Prerequisites
           apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
           loop: [ 'aptitude' ]
      
         - name: Install LEMP Packages
           apt: name={{ item }} update_cache=yes state=latest
           loop: [ 'nginx', 'mysql-server', 'python3-pymysql', 'php-fpm', 'php-mysql' ]
      
      # Nginx Configuration
      
         - name: Sets Nginx conf file
           template:
             src: "files/nginx.conf.j2"
             dest: "/etc/nginx/sites-available/{{ http_conf }}"
      
         - name: Enables new site
           file:
             src: "/etc/nginx/sites-available/{{ http_conf }}"
             dest: "/etc/nginx/sites-enabled/{{ http_conf }}"
             state: link
           notify: Reload Nginx
      
         - name: Removes "default" site
           file:
             path: "/etc/nginx/sites-enabled/default"
             state: absent
           notify: Reload Nginx
      
      # MySQL Configuration
      
         - name: Sets the root password
           mysql_user:
             name: root
             password: "{{ mysql_root_password }}"
             login_unix_socket: /var/run/mysqld/mysqld.sock
      
         - name: Removes all anonymous user accounts
           mysql_user:
             name: ''
             host_all: yes
             state: absent
             login_user: root
             login_password: "{{ mysql_root_password }}"
      
         - name: Removes the MySQL test database
           mysql_db:
             name: test
             state: absent
             login_user: root
             login_password: "{{ mysql_root_password }}"
      
      # UFW Configuration
      
         - name: "UFW - Allow HTTP on port {{ http_port }}"
           ufw:
             rule: allow
             port: "{{ http_port }}"
             proto: tcp
      
      # Sets Up PHP Info Page
      
         - name: Sets Up PHP Info Page
           template:
             src: "files/info.php.j2"
             dest: "/var/www/html/info.php"
      
      # Handlers
      
       handlers:
         - name: Reload Nginx
           service:
             name: nginx
             state: reloaded
      
         - name: Restart Nginx
           service:
             name: nginx
             state: restarted
      
      

      Sinta-se à vontade para modificar este playbook para melhor atender às suas necessidades individuais dentro do seu próprio fluxo de trabalho.

      Conclusão

      Neste guia, usamos o Ansible para automatizar o processo de instalação e configuração de um ambiente LEMP em um servidor remoto. Como cada pessoa normalmente tem necessidades diferentes ao trabalhar com bancos de dados e usuários do MySQL, recomendamos que você verifique a documentação oficial do Ansible para obter mais informações e casos de uso do módulo Ansible mysql_user.

      Se você deseja incluir outras tarefas neste playbook para personalizar ainda mais sua configuração inicial de servidor, consulte nosso guia introdutório de Ansible em Configuration Management 101: Writing Ansible Playbooks.



      Source link

      Como Usar o Ansible para Instalar e Configurar o Docker no Ubuntu 18.04


      Introdução

      A automação de servidores desempenha agora um papel essencial na administração de sistemas, devido à natureza descartável dos ambientes das aplicações modernas. Ferramentas de Gerenciamento de configuração tais como o Ansible são normalmente usadas para otimizar o processo de automatização da configuração do servidor, estabelecendo procedimentos padrão para novos servidores e reduzindo também o erro humano associado às configurações manuais.

      O Ansible oferece uma arquitetura simples que não requer a instalação de software especial nos nodes. Ele também fornece um conjunto robusto de recursos e módulos internos que facilitam a criação de scripts de automação.

      Este guia explica como usar o Ansible para automatizar os passos contidos em nosso guia Como Instalar e Usar o Docker no Ubuntu 18.04. O Docker é uma aplicação que simplifica o processo de gerenciamento de containers, que são processos isolados de recursos que se comportam de maneira semelhante às máquinas virtuais, mas são mais portáteis, mais amigáveis e dependem mais do sistema operacional do host.

      Pré-requisitos

      Para executar a configuração automatizada fornecida pelo playbook que estamos discutindo neste guia, você precisará de:

      Antes de continuar, primeiro você precisa garantir que o node de controle do Ansible possa conectar e executar comandos no(s) host(s) Ansible. Para um teste de conexão, verifique o passo 3 de Como instalar e configurar o Ansible no Ubuntu 18.04.

      O que Este Playbook Faz?

      Este Playbook Ansible fornece uma alternativa à execução manual do procedimento descrito em nosso guia sobre Como Instalar e Usar o Docker no Ubuntu 18.04.

      A execução deste playbook executará as seguintes ações nos hosts Ansible:

      1. Instalar o aptitude, que é preferido pelo Ansible como uma alternativa ao gerenciador de pacotes apt.
      2. Instalar os pacotes de sistema necessários.
      3. Instalar a chave GPG do Docker para o APT.
      4. Adicionar o repositório oficial do Docker às fontes apt.
      5. Instalar o Docker.
      6. Instalar o módulo Python do Docker via pip.
      7. Baixar a imagem padrão especificada por default_container_image do Docker Hub.
      8. Criar o número de containers definidos pela variável create_containers, cada um usando a imagem definida por default_container_image e executar o comando definido em default_container_command em cada novo container.

      Após a execução do playbook, você terá vários containers criados com base nas opções definidas nas suas variáveis de configuração.

      Como Usar Este Playbook

      A primeira coisa que precisamos fazer é obter o playbook do Docker e suas dependências no repositório do-community/ansible-playbooks. Precisamos clonar esse repositório em uma pasta local dentro do Node de Controle Ansible.

      Caso você tenha clonado este repositório antes, enquanto seguia um guia diferente, acesse sua cópia existente do ansible-playbooks e execute um comando git pull para garantir que você tenha conteúdo atualizado:

      • cd ~/ansible-playbooks
      • git pull

      Se esta é sua primeira vez usando o repositório do-community/ansible-playbooks, você deve começar clonando o repositório na sua pasta home com:

      • cd ~
      • git clone https://github.com/do-community/ansible-playbooks.git
      • cd ansible-playbooks

      Os arquivos em que estamos interessados estão localizados dentro da pasta docker_ubuntu1804, que possui a seguinte estrutura:

      docker_ubuntu1804
      ├── vars
      │   └── default.yml
      ├── playbook.yml
      └── readme.md
      

      Aqui está o que cada um desses arquivos representa:

      • vars/default.yml: Arquivo de variáveis para personalizar as configurações do playbook.
      • playbook.yml: O arquivo do playbook, contendo as tarefas a serem executadas nos servidores remotos.
      • readme.md: Um arquivo de texto contendo informações sobre este playbook.

      Editaremos o arquivo de variáveis do playbook para personalizar nossa configuração do Docker. Acesse o diretório docker_ubuntu1804 e abra o arquivo vars/default.yml usando o editor de linha de comando de sua escolha:

      • cd docker_ubuntu1804
      • nano vars/default.yml

      Este arquivo contém algumas variáveis que requerem sua atenção:

      vars/default.yml

      ---
      create_containers: 4
      default_container_name: docker
      default_container_image: ubuntu
      default_container_command: sleep 1d
      

      A lista a seguir contém uma breve explicação de cada uma dessas variáveis e como você pode alterá-las:

      • create_containers: O número de containers a serem criados.
      • default_container_name: Nome padrão do container.
      • default_container_image: Imagem padrão do Docker a ser usada ao criar containers.
      • default_container_command: Comando padrão para executar em novos containers.

      Quando terminar de atualizar as variáveis dentro de vars/default.yml, salve e feche este arquivo. Se você usou nano, faça isso pressionando CTRL + X, Y, e, em seguida, ENTER.

      Agora você está pronto para executar este playbook em um ou mais servidores. A maioria dos playbooks está configurada para ser executada em todos os servidores do seu inventário, por padrão. Podemos usar a flag -l para garantir que apenas um subconjunto de servidores ou um único servidor seja afetado pelo playbook. Também podemos usar a flag -u para especificar qual usuário no servidor remoto que estamos usando para conectar e executar os comandos do playbook nos hosts remotos.

      Para executar o playbook apenas no servidor server1, conectando-se como sammy, você pode usar o seguinte comando:

      • ansible-playbook playbook.yml -l server1 -u sammy

      Você obterá uma saída semelhante a esta:

      Output

      ... TASK [Add Docker GPG apt Key] ******************************************************************************************************************** changed: [server1] TASK [Add Docker Repository] ********************************************************************************************************************* changed: [server1] TASK [Update apt and install docker-ce] ********************************************************************************************************** changed: [server1] TASK [Install Docker Module for Python] ********************************************************************************************************** changed: [server1] TASK [Pull default Docker image] ***************************************************************************************************************** changed: [server1] TASK [Create default containers] ***************************************************************************************************************** changed: [server1] => (item=1) changed: [server1] => (item=2) changed: [server1] => (item=3) changed: [server1] => (item=4) PLAY RECAP *************************************************************************************************************************************** server1 : ok=9 changed=8 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

      Nota: Para obter mais informações sobre como executar os playbooks Ansible, consulte nosso guia de referência Ansible Cheat Sheet Guide.

      Quando o playbook terminar de executar, efetue login via SSH no servidor provisionado pelo Ansible e execute docker ps -a para verificar se os containers foram criados com sucesso:

      Você deve ver uma saída semelhante a esta:

      Output

      CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a3fe9bfb89cf ubuntu "sleep 1d" 5 minutes ago Created docker4 8799c16cde1e ubuntu "sleep 1d" 5 minutes ago Created docker3 ad0c2123b183 ubuntu "sleep 1d" 5 minutes ago Created docker2 b9350916ffd8 ubuntu "sleep 1d" 5 minutes ago Created docker1

      Isso significa que os containers definidos no playbook foram criados com sucesso. Como essa foi a última tarefa do playbook, também confirma que o playbook foi totalmente executado neste servidor.

      O Conteúdo do Playbook

      Você pode encontrar a configuração do servidor Docker apresentada neste tutorial na pasta docker_ubuntu1804 dentro do repositório DigitalOcean Community Playbooks. Para copiar ou baixar o conteúdo do script diretamente, clique no botão Raw na parte superior de cada script.

      O conteúdo completo do playbook, bem como seus arquivos associados, também estão incluídos aqui para sua conveniência.

      vars/default.yml

      O arquivo de variáveis default.yml contém valores que serão usados ao configurar o Docker no seu servidor.

      vars/default.yml

      ---
      create_containers: 4
      default_container_name: docker
      default_container_image: ubuntu
      default_container_command: sleep 1d
      

      playbook.yml

      O arquivo playbook.yml é onde todas as tarefas desta configuração são definidas. Ele começa definindo o grupo de servidores que deve ser o alvo dessa configuração (all), após o qual ele usa become: true para definir que as tarefas devem ser executadas com escalação de privilégios (sudo) por padrão. Em seguida, inclui o arquivo de variáveis vars/default.yml para carregar as opções de configuração.

      playbook.yml

      ---
      - hosts: all
        become: true
        vars_files:
          - vars/default.yml
      
        tasks:
          - name: Install aptitude using apt
            apt: name=aptitude state=latest update_cache=yes force_apt_get=yes
      
          - name: Install required system packages
            apt: name={{ item }} state=latest update_cache=yes
            loop: [ 'apt-transport-https', 'ca-certificates', 'curl', 'software-properties-common', 'python3-pip', 'virtualenv', 'python3-setuptools']
      
          - name: Add Docker GPG apt Key
            apt_key:
              url: https://download.docker.com/linux/ubuntu/gpg
              state: present
      
          - name: Add Docker Repository
            apt_repository:
              repo: deb https://download.docker.com/linux/ubuntu bionic stable
              state: present
      
          - name: Update apt and install docker-ce
            apt: update_cache=yes name=docker-ce state=latest
      
          - name: Install Docker Module for Python
            pip:
              name: docker
      
          - name: Pull default Docker image
            docker_image:
              name: "{{ default_container_image }}"
              source: pull
      
          # Creates the number of containers defined by the variable create_containers, using values from vars file
          - name: Create default containers
            docker_container:
              name: "{{ default_container_name }}{{ item }}"
              image: "{{ default_container_image }}"
              command: "{{ default_container_command }}"
              state: present
            with_sequence: count={{ create_containers }}
      
      

      Sinta-se à vontade para modificar este playbook para melhor atender às suas necessidades individuais dentro do seu próprio fluxo de trabalho. Por exemplo, você pode usar o módulo docker_image para enviar imagens ao Docker Hub ou ao módulo docker_container para configurar redes de containers.

      Conclusão

      A automação da configuração da sua infraestrutura não apenas poupa tempo, mas também ajuda a garantir que seus servidores sigam uma configuração padrão que pode ser personalizada de acordo com suas necessidades. Com a natureza distribuída das aplicações modernas e a necessidade de consistência entre os diferentes ambientes de preparação ou staging, uma automação como essa se tornou um componente central nos processos de desenvolvimento de muitas equipes.

      Neste guia, demonstramos como usar o Ansible para automatizar o processo de instalação e configuração do Docker em um servidor remoto. Como cada pessoa normalmente tem necessidades diferentes ao trabalhar com containers, recomendamos que você verifique a documentação oficial do Ansible para obter mais informações e casos de uso do módulo docker_container do Ansible.

      Se você deseja incluir outras tarefas neste playbook para personalizar ainda mais sua configuração inicial de servidor, consulte nosso guia introdutório de Ansible em Configuration Management 101: Writing Ansible Playbooks.



      Source link