GNU/Linux >> Tutoriales Linux >  >> Linux

Guía de Ansible:Cree un libro de jugadas de Ansible para LEMP Stack

Ansible es una herramienta de automatización simple que automatiza la implementación de aplicaciones de software, el aprovisionamiento en la nube y la gestión de la configuración. Es una herramienta de orquestación de servidores que lo ayuda a administrar y controlar una gran cantidad de nodos de servidores desde lugares únicos llamados 'Máquinas de control'. Ansible fue creado por Michael DeHaan en 2012 y está escrito en Python y Powershell.

En este tutorial, le mostraremos cómo crear un libro de jugadas básico de Ansible para aprovisionar la pila LEMP en el servidor Ubuntu 18.04. Aprenderá cómo crear Ansible Playbook básico que se puede escalar para otras aplicaciones de proyectos PHP como WordPress, Nextcloud, etc.

Requisito previo

  • 2 sistemas operativos Ubuntu.
    • 10.5.5.20   ansible
    • Disposición 10.5.5.26  
  • Conocimiento del uso básico de Ansible
  • Privilegios de raíz

Qué haremos:

  1. Configuración del proyecto Ansible Playbook
  2. Generar la estructura del directorio de roles de Ansible Playbook
  3. Configurar hosts y site.yml
  4. Configurar roles 'comunes' - Configuración básica
  5. Configuración de roles 'web':configuración de Nginx y PHP-FPM
  6. Configuración de roles 'db':configuración de la base de datos MySQL
  7. Pruebas

Paso 1:configurar el proyecto Ansible Playbook

Ansible Playbook es un conjunto de instrucciones que envía para que se ejecuten en un solo servidor o en un grupo de hosts. Representa el aprovisionamiento de ansible, donde la automatización se define como tareas, y todos los trabajos, como la instalación de paquetes y la edición de archivos, serán realizados por módulos de ansible.

Ansible Playbook contiene una configuración básica, incluidos los hosts y la información de usuario de los servidores de provisión, una lista de tareas que se implementará en los servidores de provisión, plantillas y configuraciones personalizadas, y un grupo de variables que forman parte de plantillas y tareas.

En primer lugar, cree el directorio del proyecto maestro en la máquina 'ansible-control'. En el directorio del proyecto principal se almacenarán todos nuestros directorios, archivos y configuraciones del libro de jugadas.

Cree el directorio del proyecto Ansible llamado 'project-lemp' y acceda a él.

mkdir project-lemp/
cd project-lemp

Ahora cree un nuevo archivo de configuración 'hosts' y 'site.yml', luego cree un nuevo directorio llamado 'roles'.

touch hosts site.yml
mkdir -p roles/

Detalles sobre las configuraciones:

anfitriones - Es un archivo de inventario que contiene información sobre los servidores administrados por ansible. Le permite crear un grupo de servidores que lo hacen más fácil de administrar y escalar el archivo de inventario en sí. El archivo de inventario se puede crear con muchos formatos diferentes, incluidos los formatos INI y YAML.

sitio.yml - El archivo maestro del libro de jugadas que contiene el grupo de hosts que se administrará con nuestros roles disponibles.

roles - es un grupo de playbooks de Ansible que se usarán para aprovisionar el servidor. Los roles de ansible tienen sus propias estructuras de directorios, cada rol contendrá directorios como tareas, controladores, vars, etc.

Paso 2:generar funciones de Ansible para la estructura de directorio

En este paso, vamos a generar el directorio de funciones de ansible mediante el comando ansible-galaxy. Generaremos dos roles llamados roles 'comunes' y roles 'web'.

Dentro del directorio 'project-lemp', vaya al directorio 'roles'.

cd roles/

Genere el directorio de estructura de roles y los archivos para los roles 'comunes' y 'web' ejecutando el siguiente comando ansible-galaxy.

ansible-galaxy init common
ansible-galaxy init web
ansible-galaxy init db

Después de eso, verifique todas las estructuras de directorio de roles de ansible disponibles con el siguiente comando.

tree .

Se le mostrará el resultado como se muestra a continuación.

Paso 3:configurar hosts y site.yml

El archivo 'hosts' contendrá la lista y el grupo del servidor administrado por Ansible. Para esta guía, crearemos un grupo llamado 'lemp' con el miembro llamado 'server01' y la dirección IP 10.5.5.26.

Edite el archivo 'hosts' usando el editor vim.

vim hosts

Pegue la configuración a continuación.

[lemp]
server01 ansible_host=10.5.5.26

Guardar y cerrar.

A continuación, edite el archivo de configuración site.yml.

vim site.yml

Pegue las configuraciones a continuación.

---

- hosts: lemp
  remote_user: hakase
  become: yes

  roles:
    - common
    - web
    - db

Guardar y cerrar.

Paso 3:configuración de roles comunes

En este paso, vamos a configurar los roles comunes. Y para hacer eso, necesitamos crear una lista de tareas que vamos a hacer.

Debajo de la lista de tareas que vamos a hacer en los roles 'comunes'.

  1. Cambiar repositorio
  2. Actualizar repositorio
  3. Actualizar paquetes a la última versión
  4. Configurar la zona horaria del servidor

Ahora ve al directorio 'común' y edita la configuración 'tasks/main.yml'.

cd common/
vim tasks/main.yml

Cree una tarea para cambiar el repositorio y usaremos el módulo 'copiar' que copiará la base 'sources.list' en el directorio 'files' al host remoto '/etc/apt/'.

- name: Change repository Ubuntu 18.04Step 4 - Setup 'web' Roles
  copy:
    src: sources.list
    dest: /etc/apt/
    backup: yes

Cree una tarea para actualizar el repositorio y actualice todos los paquetes a la última versión usando el módulo 'apt'.

- name: Update repository and Upgrade packages
  apt:
    upgrade: dist
    update_cache: yes

Ahora cree la tarea para configurar la zona horaria del sistema usando el módulo de zona horaria ansible.

- name: Setup timezone to Asia/Jakarta
  timezone:
    name: Asia/Jakarta
    state: latest

Guardar y cerrar.

Después de eso, cree una nueva configuración de repositorio 'sources.list' dentro del directorio 'files'.

vim files/sources.list

Elija el repositorio más cercano a la ubicación de su servidor, a continuación está el mío.

deb http://buaya.klas.or.id/ubuntu/ bionic main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-updates main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic universe
deb http://buaya.klas.or.id/ubuntu/ bionic-updates universe
deb http://buaya.klas.or.id/ubuntu/ bionic multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-updates multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-backports main restricted universe multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-security main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-security universe
deb http://buaya.klas.or.id/ubuntu/ bionic-security multiverse

Guardar y cerrar.

por último, se ha completado la configuración de roles 'comunes'.

Paso 4:configuración de roles 'web'

En este paso, vamos a configurar los roles 'web'. Hará algunas tareas, incluida la instalación del servidor web Nginx, PHP-FPM con algunas extensiones básicas y la configuración de PHP-FPM con Nginx.

A continuación se detallan las tareas que realizaremos en los roles 'web':

  1. Instalar Nginx
  2. Instalar PHP-FPM
  3. Configurar php.ini
  4. Crear un servidor virtual
  5. Añadir archivo phpinfo

Vaya al directorio 'web' y edite el archivo 'tasks/main.yml'.

cd web/
vim tasks/main.yml

Cree la primera tarea para la instalación de nginx usando el módulo apt.

- name: Install Nginx
  apt:
    name: nginx
    state: latest

Ahora cree la tarea para instalar PHP-FPM con algunas extensiones básicas. Y para la instalación de múltiples paquetes, podemos usar el formato de 'lista' de python, como se muestra a continuación.

- name: Instal PHP-FPM
  apt:
    name: ['php','php-fpm','php-common','php-cli','php-curl']
    state: latest

A continuación, agregaremos nuevas líneas a la configuración de php.ini usando el módulo 'blockinfile'. Y al final de la línea, le notificaremos a ansible que reinicie el servicio php-fpm después de configurar el archivo php.ini.

- name: Configure php.ini
  blockinfile:
    dest: /etc/php/{{ php_version }}/fpm/php.ini
    block: |
      date.time = Asia/Jakarta
      cgi-fix_pathinfo = 0
    backup: yes
  notify: restart php-fpm

Ahora copiaremos la configuración del host virtual nginx usando el módulo 'plantilla'. El módulo de plantilla copiará la configuración del directorio 'plantillas' al servidor remoto. Vamos a copiar la plantilla de host virtual jinja2 'vhost.j2' en el directorio '/etc/nginx/sites-enabled/' y, por último, notificaremos a ansible que reinicie el servicio nginx.

- name: Create Nginx virtual host
  template:
    src: vhost.j2
    dest: /etc/nginx/sites-enabled/vhost-{{ domain_name }}
  notify: restart nginx

Después de eso, crearemos nuevas tareas para crear el directorio raíz web usando el módulo 'archivo' y copiaremos la plantilla index.php en él.

- name: Create web-root directory
  file:
    path: /var/www/{{ domain_name }}
    state: directory

- name: Upload index.html and info.php files
  template:
    src: index.php.j2
    dest: /var/www/{{ domain_name }}/index.php

Guardar y cerrar.

Ahora vamos a configurar los controladores para reiniciar el servicio nginx y php-fpm. Edite la configuración 'handlers/main.yml' usando el editor vim.

controladores vim/main.yml

Pegue las configuraciones a continuación.

- name: restart nginx
  service:
    name: nginx
    state: restarted
    enabled: yes

- name: restart php-fpm
  service:
    name: php{{ php_version }}-fpm
    state: restarted
    enabled: yes

Guardar y cerrar.

A continuación, editaremos la configuración de 'vars/main.yml'. En la parte superior de las configuraciones, notará las configuraciones variables '{{ php_version }}' y '{{ domain_name }}'. Esas variables representan la configuración de nuestro entorno para la versión de php y el nombre de dominio que se utilizará. La variable hace que ansible sea más reutilizable porque solo necesitamos editar la configuración de la variable 'vars/main.yml' y no editar la configuración base.

Edite la configuración de variables 'vars/main.yml' usando el editor vim.

vim vars/main.yml

Pegue las configuraciones a continuación.

php_version: 7.2
domain_name: hakase-labs.io

Guardar y cerrar.

Ahora crearemos las configuraciones de plantilla jinja2 'index.php.j2' y 'vhost.j2' en el directorio 'templates/'.

vim templates/index.php.j2

Pegue la configuración a continuación.

<html>
<body>

<h1><center>index.html for domain {{ domain_name }}</center></h1>

<p>
<p>

<?php
phpinfo();
?>

</body>
</html>

Guardar y cerrar.

Después de eso, cree la plantilla para la configuración de host virtual nginx 'vhost.j2'.

vim templates/vhost.j2

Pegue las configuraciones a continuación.

server {
    listen 80;
    listen [::]:80;

    root /var/www/{{ domain_name }};
    index index.php index.html index.htm index.nginx-debian.html;

    server_name {{ domain_name }};

    location / {
        try_files $uri $uri/ =404;
    }

    # pass PHP scripts to FastCGI server
    #
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php{{ php_version }}-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

}

Guarde y cierre la configuración, y hemos terminado la configuración de roles web.

Paso 5:configuración de roles 'db'

En este paso, vamos a configurar los roles 'db' para la instalación y configuración de la base de datos MySQL.

A continuación se detallan las tareas que se realizarán en los roles 'db'.

  1. instalar mysql
  2. Crear base de datos MySQL
  3. Crear usuario MySQL
  4. reiniciar mysql

Vaya al directorio 'db' y edite la configuración 'tasks/main.yml'.

cd db/
vim tasks/main.yml

Ahora instale los paquetes MySQL usando el módulo 'apt' y el formato 'list' de python para la instalación de múltiples paquetes.

- name: Install MySQL
  apt:
    name: ['mysql-server','mysql-client','python-mysqldb']
    state: latest
  notify: restart mysql

Luego cree nuevas tareas para crear la base de datos MySQL y el usuario, luego otorgue todos los privilegios del usuario a la base de datos.

- name: Create database
  mysql_db:
    name: '{{ db_name }}'
    state: present

- name: Create user for the database
  mysql_user:
    name: '{{ db_user }}'
    password: '{{ db_pass }}'
    encrypted: yes
    priv: '{{ db_name }}.*:ALL'
    state: present

Guardar y cerrar.

A continuación, edite la configuración 'handlers/main.yml'.

vim handlers/main.yml

Pegue la configuración de la tarea para reiniciar el servicio MySQL.

- name: restart mysql
  service:
    name: mysql
    state: restarted
    enabled: yes

Guardar y cerrar.

Después de eso, edite la configuración de la variable vars 'vars/main.yml'.

vim vars/main.yml

Pegue estas variables para la base de datos MySQL y la configuración de usuario a continuación.

db_name: hakase-db
db_user: hakase
db_pass: '*C960D382DB42E57D3BAC33891CF87900DCB1A869'

Guardar y cerrar.

La variable 'db_pass' tiene la contraseña cifrada de MySQL y puede generar una contraseña cifrada de MySQL usando herramientas en línea.

Paso 6:Ejecute el libro de jugadas de Ansible

Vaya al directorio del proyecto Ansible.

cd project-lemp/

Ejecute el siguiente comando ansible-playbook.

ansible-playbook -i hosts site.yml

Ahora el ansible ejecutará todos los roles que le asignemos al host. Cuando esté completo, se le mostrará el resultado como se muestra a continuación.

Asegúrese de que no recibe ningún error.

Paso 7 - Prueba

Abra su navegador web y escriba el nombre de dominio en la barra de direcciones http://hakase-labs.io.

Y se le mostrará la página de índice con phpinfo como se muestra a continuación.

PHP-FPM y Nginx están funcionando.

A continuación, vuelva a la terminal del servidor e inicie sesión en el servidor MySQL con el usuario y la contraseña que hemos creado en la variable de roles 'mysql'.

mysql -u hakase -p
PASSWORD: hakasepass

verifique la lista de bases de datos propiedad del usuario.

show databases;

Y se conectará al shell de MySQL y se le mostrará la base de datos llamada 'hakase-db' en la lista.

Finalmente, se creó y probó con éxito el libro de jugadas de Ansible para la instalación y configuración de LEMP Stack.


Linux
  1. Deconstruyendo un libro de jugadas de Ansible

  2. Comprender YAML para Ansible

  3. Cómo crear un libro de jugadas de Ansible

  4. Una breve introducción a los roles de Ansible para la administración del sistema Linux

  5. 6 habilidades de solución de problemas para los libros de jugadas de Ansible

Guía de Ansible:el comando ad-hoc

Cómo crear playbooks de Ansible para la automatización de TI

Webinoly:configure fácilmente la pila LEMP optimizada para WordPress en Ubuntu

Cómo crear y ejecutar un archivo de libro de jugadas de Ansible

Guía de inicio rápido de Ansible para administradores de sistemas Linux

Crear una partición en Linux:una guía paso a paso