Cómo utilizar Ansible para instalar y configurar WordPress con LAMP en Ubuntu 18.04

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • ¿Qué hace este manual?
  • Cómo utilizar este manual
  • Contenido del libro de jugadas
    1. vars/predeterminado.yml
    2. archivos/apache.conf.j2
    3. archivos/wp-config.php.j2
    4. libro de jugadas.yml
  • Conclusión
  • La automatización de servidores ahora desempeña un papel esencial en la administración de sistemas, debido a la naturaleza desechable de los entornos de aplicaciones modernos. Las herramientas de gestión de configuración, como Ansible, se utilizan normalmente para agilizar el proceso de automatización de la configuración de servidores mediante el establecimiento de procedimientos estándar para servidores nuevos y, al mismo tiempo, reducir el error humano asociado con las configuraciones manuales.

    Ansible ofrece una arquitectura sencilla que no requiere la instalación de software especial en los nodos. También proporciona un conjunto sólido de funciones y módulos integrados que facilitan la escritura de scripts de automatización.

    Esta guía explica cómo usar Ansible para automatizar los pasos incluidos en nuestra guía sobre Cómo instalar WordPress con LAMP en Ubuntu 18.04. WordPress es el CMS (sistema de gestión de contenido) más popular en Internet, que permite a los usuarios configurar blogs y sitios web flexibles sobre un backend MySQL con procesamiento PHP. Después de la configuración, casi toda la administración se puede realizar a través del frontend web.

    Prerrequisitos

    Para ejecutar la configuración automatizada proporcionada por el libro de estrategias que estamos analizando en esta guía, necesitarás:

    • Un nodo de control de Ansible : una máquina Ubuntu 18.04 con Ansible instalado y configurado para conectarse a sus hosts de Ansible mediante claves SSH. Asegúrese de que el nodo de control tenga un usuario regular con permisos sudo y un firewall habilitado, como se explica en nuestra guía de configuración inicial del servidor. Para configurar Ansible, siga nuestra guía sobre Cómo instalar y configurar Ansible en Ubuntu 18.04.
    • Uno o más hosts Ansible : uno o más servidores remotos Ubuntu 18.04 configurados previamente siguiendo la guía sobre Cómo usar Ansible para automatizar la configuración inicial del servidor en Ubuntu 18.04.

    Antes de continuar, primero debe asegurarse de que su nodo de control de Ansible pueda conectarse y ejecutar comandos en sus hosts de Ansible. Para realizar una prueba de conexión, consulte el paso 3 de Cómo instalar y configurar Ansible en Ubuntu 18.04.

    ¿Qué hace este manual?

    Este manual de Ansible proporciona una alternativa a la ejecución manual del procedimiento descrito en nuestra guía sobre Cómo instalar WordPress con LAMP en Ubuntu 18.04.

    Al ejecutar este playbook se realizarán las siguientes acciones en sus hosts Ansible:

    1. Instalar aptitude, que Ansible prefiere como alternativa al aptadministrador de paquetes.
    2. Instale los paquetes LAMP y las extensiones PHP necesarios.
    3. Cree y habilite un nuevo Apache VirtualHostpara el sitio web de WordPress.
    4. Habilite el mod_rewritemódulo de reescritura ( ) de Apache.
    5. Deshabilitar el sitio web Apache predeterminado.
    6. Establezca la contraseña para el usuario root de MySQL .
    7. Eliminar cuentas MySQL anónimas y la base de datos de prueba.
    8. Cree una nueva base de datos MySQL y un usuario para el sitio web de WordPress.
    9. Configure UFW para permitir el tráfico HTTP en el puerto configurado ( 80por defecto).
    10. Descargue y descomprima WordPress.
    11. Configure la propiedad y los permisos correctos del directorio.
    12. Configure el wp-config.phparchivo utilizando la plantilla proporcionada.

    Una vez que el playbook haya terminado de ejecutarse, tendrá una instalación de WordPress ejecutándose sobre un entorno LAMP, según las opciones que haya definido dentro de sus variables de configuración.

    Cómo utilizar este manual

    Lo primero que debemos hacer es obtener el playbook de WordPress en LAMP y sus dependencias del repositorio do-community/ansible-playbooks. Necesitamos clonar este repositorio en una carpeta local dentro del nodo de control de Ansible.

    En caso de que haya clonado este repositorio anteriormente siguiendo una guía diferente, acceda a su ansible-playbookscopia existente y ejecute un git pullcomando para asegurarse de tener el contenido actualizado:

    1. cd ~/ansible-playbooks
    2. git pull

    Si es la primera vez que utiliza el do-community/ansible-playbooksrepositorio, debe comenzar clonándolo en su carpeta de inicio con:

    1. cd ~
    2. git clone https://github.com/do-community/ansible-playbooks.git
    3. cd ansible-playbooks

    Los archivos que nos interesan se encuentran dentro de la wordpress-lamp_ubuntu1804carpeta, que tiene la siguiente estructura:

    wordpress-lamp_ubuntu1804├── files│   ├── apache.conf.j2│   └── wp-config.php.j2├── vars│   └── default.yml├── playbook.yml└── readme.md

    Aquí está lo que es cada uno de estos archivos:

    • files/apache.conf.j2:Archivo de plantilla para configurar Apache VirtualHost.
    • files/wp-config.php.j2:Archivo de plantilla para configurar el archivo de configuración de WordPress.
    • vars/default.yml:Archivo variable para personalizar la configuración del libro de jugadas.
    • playbook.yml:El archivo del libro de estrategias, que contiene las tareas que se ejecutarán en los servidores remotos.
    • readme.md:Un archivo de texto que contiene información sobre este libro de jugadas.

    Editaremos el archivo de variables del libro de jugadas para personalizar sus opciones. Acceda al wordpress-lamp_ubuntu1804directorio y abra el vars/default.ymlarchivo usando el editor de línea de comandos que prefiera:

    1. cd wordpress-lamp_ubuntu1804
    2. nano vars/default.yml

    Este archivo contiene algunas variables que requieren su atención:

    vars/predeterminado.yml

    ---#System Settingsphp_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ]#MySQL Settingsmysql_root_password: "mysql_root_password"mysql_db: "wordpress"mysql_user: "sammy"mysql_password: "password"#HTTP Settingshttp_host: "your_domain"http_conf: "your_domain.conf"http_port: "80"

    La siguiente lista contiene una breve explicación de cada una de estas variables y cómo podría modificarlas:

    • php_modules: Una matriz que contiene extensiones PHP que se deben instalar para admitir la configuración de WordPress. No es necesario cambiar esta variable, pero es posible que desee incluir nuevas extensiones en la lista si su configuración específica lo requiere.
    • mysql_root_password:La contraseña deseada para la cuenta raíz de MySQL.
    • mysql_db:El nombre de la base de datos MySQL que debe crearse para WordPress.
    • mysql_user:El nombre del usuario MySQL que debe crearse para WordPress.
    • mysql_password:La contraseña para el nuevo usuario de MySQL.
    • http_host:Su nombre de dominio.
    • http_conf:El nombre del archivo de configuración que se creará dentro de Apache.
    • http_port:Puerto HTTP para este host virtual, donde 80es el valor predeterminado.

    Una vez que hayas terminado de actualizar las variables dentro de vars/default.yml, guarda y cierra este archivo. Si usaste nano, hazlo presionando CTRL + X, Yy luego ENTER.

    Ahora está listo para ejecutar este playbook en uno o más servidores. La mayoría de los playbooks están configurados para ejecutarse en todos los servidores de su inventario, de forma predeterminada. Podemos usar la -lbandera para asegurarnos de que solo un subconjunto de servidores, o un solo servidor, se vea afectado por el playbook. También podemos usar la -ubandera para especificar qué usuario del servidor remoto estamos usando para conectarnos y ejecutar los comandos del playbook en los hosts remotos.

    Para ejecutar el playbook solo en server1, conectándose como sammy, puede usar el siguiente comando:

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

    Obtendrás un resultado similar a este:

    OutputPLAY [all] *****************************************************************************************************************************TASK [Gathering Facts] *****************************************************************************************************************ok: [server1]TASK [Install prerequisites] ***********************************************************************************************************ok: [server1]…TASK [Download and unpack latest WordPress] ********************************************************************************************changed: [server1]TASK [Set ownership] *******************************************************************************************************************changed: [server1]TASK [Set permissions for directories] *************************************************************************************************changed: [server1]TASK [Set permissions for files] *******************************************************************************************************changed: [server1]TASK [Set up wp-config] ****************************************************************************************************************changed: [server1]RUNNING HANDLER [Reload Apache] ********************************************************************************************************changed: [server1]RUNNING HANDLER [Restart Apache] *******************************************************************************************************changed: [server1]PLAY RECAP *****************************************************************************************************************************server1          : ok=22   changed=18   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

    Nota : Para obtener más información sobre cómo ejecutar playbooks de Ansible, consulte nuestra Guía de hojas de referencia de Ansible.

    Cuando el libro de jugadas termine de ejecutarse, puedes ir a tu navegador web para finalizar la instalación de WordPress desde allí.

    Navegue hasta el nombre de dominio o la dirección IP pública de su servidor:

    http://server_host_or_IP

    Verás una página como ésta:

    Después de seleccionar el idioma que desea utilizar para su instalación de WordPress, se le presentará un paso final para configurar su usuario y contraseña de WordPress para que pueda iniciar sesión en su panel de control:

    Al hacer clic en continuar, se le dirigirá a una página que le solicitará que inicie sesión:

    Una vez que inicie sesión, será llevado al panel de administración de WordPress:

    Algunos de los siguientes pasos comunes para personalizar su instalación de WordPress incluyen elegir la configuración de enlaces permanentes para sus publicaciones (se puede encontrar en Settings Permalinks) y seleccionar un nuevo tema (en Appearance Themes).

    Contenido del libro de jugadas

    Puede encontrar la configuración del servidor LAMP de WordPress que se incluye en este tutorial en la wordpress-lamp_ubuntu1804carpeta dentro del repositorio de Manuales de la comunidad de DigitalOcean. Para copiar o descargar el contenido del script directamente, haga clic en el botón Sin formato que se encuentra en la parte superior de cada script.

    El contenido completo del manual, así como sus archivos asociados, también se incluyen aquí para su comodidad.

    vars/predeterminado.yml

    El default.ymlarchivo de variables contiene valores que se utilizarán dentro de las tareas del libro de estrategias, como la configuración de la base de datos y el nombre de dominio para configurar dentro de Apache.

    vars/predeterminado.yml

    #System Settingsphp_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ]#MySQL Settingsmysql_root_password: "mysql_root_password"mysql_db: "wordpress"mysql_user: "sammy"mysql_password: "password"#HTTP Settingshttp_host: "your_domain"http_conf: "your_domain.conf"http_port: "80"

    archivos/apache.conf.j2

    El apache.conf.j2archivo es un archivo de plantilla Jinja 2 que configura un nuevo Apache VirtualHost. Las variables utilizadas en esta plantilla se definen en el vars/default.ymlarchivo de variables.

    archivos/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   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

    archivos/wp-config.php.j2

    El wp-config.php.j2archivo es otra plantilla de Jinja que se utiliza para configurar el archivo de configuración principal que utiliza WordPress. Las variables que se utilizan en esta plantilla se definen en el vars/default.ymlarchivo de variables. Las claves de autenticación y las sales únicas se generan mediante una función hash.

    archivos/info.php.j2

    ?php/** * The base configuration for WordPress * * The wp-config.php creation script uses this file during the * installation. You don't have to use the web site, you can * copy this file to "wp-config.php" and fill in the values. * * This file contains the following configurations: * * * MySQL settings * * Secret keys * * Database table prefix * * ABSPATH * * @link https://codex.wordpress.org/Editing_wp-config.php * * @package WordPress */// ** MySQL settings - You can get this info from your web host ** ///** The name of the database for WordPress */define( 'DB_NAME', '{{ mysql_db }}' );/** MySQL database username */define( 'DB_USER', '{{ mysql_user }}' );/** MySQL database password */define( 'DB_PASSWORD', '{{ mysql_password }}' );/** MySQL hostname */define( 'DB_HOST', 'localhost' );/** Database Charset to use in creating database tables. */define( 'DB_CHARSET', 'utf8' );/** The Database Collate type. Don't change this if in doubt. */define( 'DB_COLLATE', '' );/** Filesystem access **/define('FS_METHOD', 'direct');/**#@+ * Authentication Unique Keys and Salts. * * Change these to different unique phrases! * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service} * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again. * * @since 2.6.0 */define( 'AUTH_KEY',         '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' );define( 'SECURE_AUTH_KEY',  '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' );define( 'LOGGED_IN_KEY',    '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' );define( 'NONCE_KEY',        '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' );define( 'AUTH_SALT',        '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' );define( 'SECURE_AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' );define( 'LOGGED_IN_SALT',   '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' );define( 'NONCE_SALT',       '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' );/**#@-*//** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! */$table_prefix = 'wp_';/** * For developers: WordPress debugging mode. * * Change this to true to enable the display of notices during development. * It is strongly recommended that plugin and theme developers use WP_DEBUG * in their development environments. * * For information on other constants that can be used for debugging, * visit the Codex. * * @link https://codex.wordpress.org/Debugging_in_WordPress */define( 'WP_DEBUG', false );/* That's all, stop editing! Happy publishing. *//** Absolute path to the WordPress directory. */if ( ! defined( 'ABSPATH' ) ) {define( 'ABSPATH', dirname( __FILE__ ) . '/' );}/** Sets up WordPress vars and included files. */require_once( ABSPATH . 'wp-settings.php' );

    libro de jugadas.yml

    El playbook.ymlarchivo es donde se definen todas las tareas de esta configuración. Comienza definiendo el grupo de servidores que deben ser el destino de esta configuración ( all), después suele become: truedefinir que las tareas deben ejecutarse con escalada de privilegios ( sudo) por defecto. A continuación, incluye la vars/default.ymlvariable file para cargar las opciones de configuración.

    libro de jugadas.yml

    ---- hosts: all  become: true  vars_files:    - vars/default.yml  tasks:    - name: Install prerequisites      apt: name=aptitude update_cache=yes state=latest force_apt_get=yes      tags: [ system ]    - name: Install LAMP Packages      apt: name={{ item }} update_cache=yes state=latest      loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ]      tags: [ system ]    - name: Install PHP Extensions      apt: name={{ item }} update_cache=yes state=latest      loop: "{{ php_modules }}"      tags: [ system ]  # Apache Configuration    - name: Create document root      file:        path: "/var/www/{{ http_host }}"        state: directory        owner: "www-data"        group: "www-data"        mode: '0755'      tags: [ apache ]    - name: Set up Apache VirtualHost      template:        src: "files/apache.conf.j2"        dest: "/etc/apache2/sites-available/{{ http_conf }}"      notify: Reload Apache      tags: [ apache ]    - name: Enable rewrite module      shell: /usr/sbin/a2enmod rewrite      notify: Reload Apache      tags: [ apache ]    - name: Enable new site      shell: /usr/sbin/a2ensite {{ http_conf }}      notify: Reload Apache      tags: [ apache ]    - name: Disable default Apache site      shell: /usr/sbin/a2dissite 000-default.conf      notify: Restart Apache      tags: [ apache ]  # MySQL Configuration    - name: Set the root password      mysql_user:        name: root        password: "{{ mysql_root_password }}"        login_unix_socket: /var/run/mysqld/mysqld.sock      tags: [ mysql, mysql-root ]    - name: Remove all anonymous user accounts      mysql_user:        name: ''        host_all: yes        state: absent        login_user: root        login_password: "{{ mysql_root_password }}"      tags: [ mysql ]    - name: Remove the MySQL test database      mysql_db:        name: test        state: absent        login_user: root        login_password: "{{ mysql_root_password }}"      tags: [ mysql ]    - name: Creates database for WordPress      mysql_db:        name: "{{ mysql_db }}"        state: present        login_user: root        login_password: "{{ mysql_root_password }}"      tags: [ mysql ]    - name: Create MySQL user for WordPress      mysql_user:        name: "{{ mysql_user }}"        password: "{{ mysql_password }}"        priv: "{{ mysql_db }}.*:ALL"        state: present        login_user: root        login_password: "{{ mysql_root_password }}"      tags: [ mysql ]  # UFW Configuration    - name: "UFW - Allow HTTP on port {{ http_port }}"      ufw:        rule: allow        port: "{{ http_port }}"        proto: tcp      tags: [ system ]  # WordPress Configuration    - name: Download and unpack latest WordPress      unarchive:        src: https://wordpress.org/latest.tar.gz        dest: "/var/www/{{ http_host }}"        remote_src: yes        creates: "/var/www/{{ http_host }}/wordpress"      tags: [ wordpress ]    - name: Set ownership      file:        path: "/var/www/{{ http_host }}"        state: directory        recurse: yes        owner: www-data        group: www-data      tags: [ wordpress ]    - name: Set permissions for directories      shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} ;"      tags: [ wordpress ]    - name: Set permissions for files      shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} ;"      tags: [ wordpress ]    - name: Set up wp-config      template:        src: "files/wp-config.php.j2"        dest: "/var/www/{{ http_host }}/wordpress/wp-config.php"      tags: [ wordpress ]  handlers:    - name: Reload Apache      service:        name: apache2        state: reloaded    - name: Restart Apache      service:        name: apache2        state: restarted

    Siéntase libre de modificar estos archivos para adaptarlos mejor a sus necesidades individuales dentro de su propio flujo de trabajo.

    Conclusión

    En esta guía, utilizamos Ansible para automatizar el proceso de instalación y configuración de un sitio web de WordPress con LAMP en un servidor Ubuntu 18.04.

    Si desea incluir otras tareas en este manual para personalizar aún más la configuración de su servidor, consulte nuestra guía introductoria de Ansible Gestión de configuración 101: Cómo escribir manuales de Ansible.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion