A automação de servidores é um processo seguro e confiável de gerenciar e monitorar servidores de forma eficaz e tecnologicamente avançada. Ao contrário do estilo tradicional de gerenciar servidores em data centers controlados por uma equipe dedicada de especialistas, todos os servidores são gerenciados usando automação. Como resultado, os erros humanos são minimizados.
Ferramentas de gerenciamento de configuração como Ansible, Puppet, Terraform, para citar algumas, são normalmente usadas para automatizar servidores. Essas ferramentas configuram servidores usando automação, estabelecendo procedimentos padrão para novos servidores e eliminando possíveis erros quando feitos manualmente.
Ansible é um projeto de código aberto robusto. É flexível, fácil de usar e possui a arquitetura mais simplificada. Não é necessário conhecimento prévio em programação para usar os playbooks do Ansible e ele não exige a instalação de software nos nós. Acima de tudo, está repleto de excelentes recursos que permitem escrever scripts e simplificar a automação.
Neste guia, vamos guiar você pelas etapas de instalação e configuração do LAMP no Ubuntu 20.04 com o Ansible.
Pré-requisitos
Para acompanhar este tutorial, você precisará de:
- Ubuntu instalado em seu sistema.
- Um ou mais Hosts do Ansible: Um ou mais hosts remotos do Ansible executando o Ubuntu mais recente devem ser configurados inicialmente. Siga o tutorial Automatizando a Configuração de Servidores usando o Ansible e o Ubuntu 20.04 para a configuração.
- Um nó de controle do Ansible: Uma máquina Ubuntu com o Ansible instalado, configurado e conectado aos seus hosts do Ansible usando SSH keys:
-
- O nó de controle deve ter um usuário com privilégios sudo e um firewall ATIVADO.
- Se precisar de ajuda para configurar o Ansible, confira o tutorial sobre instalação e configuração do Ansible no Ubuntu 20.04.
Qual é o Objetivo do Playbook do Ansible?
Este playbook do Ansible é uma forma alternativa de executar o procedimento descrito em nosso guia Configuração da Pilha LAMP – Linux Apache MySQL PHP.
A execução do playbook do Ansible resultará nas seguintes ações em seus hosts do Ansible:
-
Instalar aptitude, uma alternativa ao gerenciador de pacotes apt preferido pelo Ansible.
-
Instalar todos os pacotes LAMP necessários.
-
Criar um novo VirtualHost do Apache e configurar um diretório raiz de documentos dedicado.
-
Definir como ATIVADO o novo VirtualHost.
-
Definir como DESATIVADO o site padrão do Apache, ou seja, definir a variável disable_default como true.
-
Escolher uma senha para o usuário root do MySQL.
-
Remover contas anônimas do MySQL e o banco de dados de teste.
-
Configurar o UFW para permitir tráfego HTTP na porta configurada, onde o padrão é 80.
-
Configurar um script de teste PHP.
Após a conclusão da execução do playbook do Ansible, você verá um ambiente web PHP rodando sobre o Apache, de acordo com as configurações que definimos.
Utilizando o Playbook do Ansible
Primeiro, obtenha o playbook do LAMP e suas dependências do repositório do-community/ansible-playbooks. Em seguida, clone o repositório com o playbook do LAMP para uma pasta local dentro do Nó de Controle do Ansible.
Execute o comando git pull para garantir que você tenha acesso ao conteúdo correto que usaremos neste tutorial:
|
1 2 |
cd ~/ansible-playbooks git pull |
Se você estiver usando o repositório do-community/ansible-playbooks pela primeira vez, considere clonar o repositório para sua pasta de usuário (home):
|
1 2 3 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Acesse a pasta lamp_ubuntu2004 e você verá a estrutura:
|
1 2 3 4 5 6 7 8 |
lamp_ubuntu2004 ├── files │ ├── apache.conf.j2 │ └── info.php.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md |
Aqui está uma visão geral do que esses arquivos significam:
-
files/info.php.j2: Este é um arquivo de modelo (template) onde você pode configurar uma página de teste PHP na raiz do servidor web.
-
files/apache.conf.j2: Outro arquivo de modelo usado para configurar o VirtualHost do Apache.
-
vars/default.yml: É um arquivo de variáveis para personalizar as configurações do playbook.
-
playbook.yml: Este arquivo contém todo o conteúdo das tarefas a serem executadas no(s) servidor(es) remoto(s).
-
readme.md: Um arquivo de leitura contendo as informações sobre este playbook.
Vamos personalizar as configurações do MySQL e do Apache fazendo alterações no arquivo de variáveis do playbook. Navegue até o diretório lamp_ubuntu2004 e abra o arquivo vars/default.yml usando o editor nano:
|
1 2 |
cd lamp_ubuntu2004 nano vars/default.yml |
Ao abrir o arquivo vars/default.yml, haverá uma lista de variáveis que precisam ser modificadas:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
Vamos entender cada uma das variáveis em detalhes:
-
mysql_root_password: Armazena a senha para a conta root do MySQL.
-
app_user: É um usuário remoto não-root no host do Ansible que atua como o proprietário dos arquivos da aplicação.
-
http_host: Exibe o seu nome de domínio.
-
http_conf: Exibe o nome do arquivo de configuração criado no Apache.
-
http_port: É a porta HTTP para este host virtual, e 80 é o padrão.
-
disable_default: Usado para desfazer as opções padrão que vêm com o Apache.
Em seguida, salve e feche o arquivo vars/default.yml.
Assim que toda a configuração estiver concluída, estaremos prontos para executar este playbook nos servidores. Por padrão, a maioria dos servidores nos playbooks está configurada para ser executada em todos os servidores nos inventários. Vamos usar a flag -l para impactar apenas um único servidor ou um subconjunto de grupo selecionado que é afetado pelo playbook. Alternativamente, podemos usar a flag -u para obter uma visualização detalhada de qual servidor remoto está sendo conectado e executando nos hosts remotos.
Vamos executar o playbook em um servidor server1 e conectá-lo com um usuário como justin:
|
1 |
ansible-playbook playbook.yml -l server1 -u justin |
Você obterá uma saída semelhante a esta:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PLAY [all] ********************************************************************************************************* TASK [Gathering Facts] *********************************************************************************************************ok: [server1] TASK [Install prerequisites] *********************************************************************************************************ok: [server1] => (item=aptitude) ... TASK [UFW - Allow HTTP on port 80] ********************************************************************************************************* changed: [server1] TASK [Sets Up PHP Info Page] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Reload Apache] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Restart Apache] ********************************************************************************************************* changed: [server1] PLAY RECAP ********************************************************************************************************* server1 : ok=15 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
Assim que você vir que o playbook concluiu a execução, navegue até o seu navegador web e acesse o host do servidor. Não se esqueça de anexar o /info.php no final do IP:
|
1 |
http://server_host_or_IP/info.php |
Ao clicar nesta URL, você verá uma página como esta:
|
Aviso: A página exibida contém informações confidenciais sobre o seu ambiente PHP. Portanto, é recomendável remover suas informações pessoais do servidor usando o seguinte comando: rm -f /var/www/info.php |
O que há no Playbook?
A seguir, vamos entender o significado e a importância dos arquivos usados no ansible-playbook conteúdo:
-
vars/default.yml
O default.yml arquivo de variáveis contém o nome de domínio e a senha da conta root do MySQL. Estes são valores padrão usados nas tarefas do ansible-playbook tarefas:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
- files/apache.conf.j2
O apache.conf.j2 arquivo é um Jinja 2 arquivo de template usado para configurar um novo Apache VirtualHost. As variáveis usadas dentro deste template devem ser definidas no vars/default.yml arquivo de variáveis:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<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 <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
- files/info.php.j2
Semelhante ao files/apache.conf.j2, o info.php.j2 arquivo também é um template Jinja. Usamos este arquivo para configurar um script PHP de teste no document root de um servidor LAMP recém-configurado:
|
1 2 |
<?php phpinfo(); |
-
playbook.yml
O playbook.yml arquivo é onde todas as tarefas desta configuração são definidas. Neste arquivo, todas as stacks LAMP são configuradas. Ele começa definindo o grupo de servidores de destino e está definido como all. Além disso, ele define o valor de become como true ( become: true), e define todas as tarefas que precisam ser executadas. Em seguida, o arquivo yaml possui o arquivo padrão, que é o arquivo de variáveis vars/default.yml, para carregar as opções de configuração:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Instalar pré-requisitos apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes loop: [ 'aptitude' ] #Configuração do Apache - name: Instalar Pacotes LAMP apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] - name: Criar raiz do documento file: path: "/var/www/{{ http_host }}" state: directory owner: "{{ app_user }}" mode: '0755' - name: Configurar o virtualhost do Apache template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Recarregar Apache - name: Ativar o novo site shell: /usr/sbin/a2ensite {{ http_conf }} notify: Recarregar Apache - name: Desativar o site padrão do Apachesite shell: /usr/sbin/a2dissite 000-default.conf when: disable_default notify: Recarregar Apache # Configuração do MySQL - name: Define a senha do root mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock - name: Remove todas as contas de usuários anônimos mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" - name: Remove o banco de dados de teste do MySQL mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" # Configuração do UFW - name: "UFW - Permitir HTTP na porta {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp # Página de Informações do PHP - name: Configura a Página de Informações do PHP template: src: "files/info.php.j2" dest: "/var/www/{{ http_host }}/info.php" handlers: - name: Recarregar Apache service: name: apache2 state: reloaded - name: Reiniciar Apache service: name: apache2 state: restarted |
Você pode modificar esses arquivos com base nas necessidades e requisitos do seu projeto.
Conclusão
Neste tutorial, passamos pelas etapas de instalação e configuração do LAMP em um servidor remoto com o Ansible. Há muitas outras opções de personalização com as quais você pode experimentar. Por exemplo, usar a documentação oficial do Ansible e usar os casos do mysql_user do módulo Ansible é uma excelente maneira de elevar o seu nível. Além disso, siga as etapas discutidas neste guia para praticar a automação usando outras ferramentas de gerenciamento de configuração e sistemas operacionais para aumentar o nível de dificuldade.
Você é novo na pilha LAMP e quer se aprofundar neste assunto? Explore os seguintes tutoriais em nosso blog:
- Como Instalar o WordPress com LAMP no Ubuntu 20.04
- Como instalar a Stack Linux, Apache, MySQL, PHP (LAMP) no Centos-7
- Como instalar a Stack LEMP Linux Nginx MySQL PHP no Ubuntu 20.04
Feliz computação!

Comentários
Nenhum comentário ainda. Seja o primeiro.