Cómo implementar múltiples sitios de Wordpress usando Virtualmin y Ansible en Ubuntu 16.04

Un uso común de un servidor virtual Vultr es alojar sitios web de Wordpress. Esta guía le muestra cómo automatizar la configuración de un servidor virtual desde cero (usando Ansible) e implementar múltiples sitios web independientes de Wordpress (usando Webmin / Virtualmin). Virtualmin / Webmin es una interfaz gráfica de usuario que le permite administrar la implementación de múltiples cuentas de servidor virtual en la misma máquina (completa con la pila LAMP / LEMP). Virtualmin es muy similar a cPanel y Plesk, y en este tutorial usaremos la edición gratuita de GPL. Después de la configuración inicial del servidor Vultr y la instalación de Virtualmin, puede configurar rápidamente varios servidores virtuales desde la interfaz de Virtualmin e instalar directamente Wordpress en ese servidor virtual completo con su propio nombre de dominio.

En este tutorial, en lugar de ingresar manualmente una larga lista de comandos, usaremos Ansible. Ansible es una herramienta de automatización basada en Python que le permite automatizar de manera confiable y repetida las tareas del servidor. Esto significa que una vez que haya seguido este tutorial, podrá implementar otro servidor de la misma manera con solo un par de comandos.

Prerrequisitos

  • Al menos un nombre de dominio completo y acceso a los registros DNS
  • Una cuenta Vultr

Paso 1: instalación de Ansible en su máquina local

Instale Ansible en su máquina local u otro servidor.

mkdir ansible
cd ansible
virtualenv env
source env/bin/activate
pip install ansible

Paso 2: generar claves SSH e implementar el servidor

Ansible funciona iniciando sesión en su servidor a través de SSH. El acceso SSH es más seguro si usamos claves en lugar de una contraseña. Primero generemos un par de claves pública y privada.

mkdir ssh_keys
ssh-keygen -t rsa -b 2048 -f ./ssh_keys

En el ssh_keysdirectorio ahora habrá dos archivos, ssh_keysy ssh_keys.pub. ssh_keyses su archivo de clave privada y debe mantenerse a salvo. Ahora puede abrir el ssh_keys.pub, que contiene la clave pública.

Inicie sesión en el panel web de Vultr y haga clic Deploy New Server.

Seleccione una región, Tipo de servidor (Ubuntu 16.04), Tamaño del servidor, y luego en la parte 6 ( SSH keys), haga clic Add New. En la página siguiente, pegue su clave pública, asígnele un nombre y haga clic Add SSH key. Finalmente, asegúrese de que la clave esté seleccionada y haga clic Deploy now.
Una vez que el servidor haya terminado de desplegarse, se le mostrará su dirección IP. Deberá iniciar sesión en el servidor DNS de su nombre de dominio y señalarlo a esta dirección.

Paso 3: crea una configuración Ansible básica

Se llaman los archivos de automatización de Ansible roles. Primero configuraremos la estructura del directorio (dentro del ansibledirectorio que acaba de crear en el paso 1) y los archivos básicos.

mkdir -p group_vars roles/common/tasks/ roles/common/handlers
touch hosts group_vars/all deploy.yml roles/common/handlers/main.yml

Edite el hostsarchivo para que contenga lo siguiente, sustituyendo ip addressel servidor que acaba de crear. Ansible usa python 2, que Ubuntu 16.04 no tiene instalado por defecto. En el hostsarchivo le decimos a Ansible que use Python 3.

[common]  
192.0.2.1 ansible_python_interpreter=/usr/bin/python3

Edite el deploy.ymlarchivo para contener lo siguiente. Vamos a utilizar al rootusuario.

- name: apply common configuration to server
  hosts: all
  user: root
  roles:
    - common

Edite el /group_vars/allarchivo para contener lo siguiente. Estas variables le indican a Ansible la ubicación de sus claves SSH, los parámetros del archivo de intercambio, su nombre de dominio completo y la contraseña de root. Recuerde no incluir el archivo en el control de origen ya que contiene su contraseña en texto sin cifrar.

ssh_dir: ./ssh_keys
swap_file_path: /swapfile
swap_file_size: 1G
swappiness: 1
hostname: example.com
new_password: YOUR_PASSWORD_HERE

Edite el common/handlers/main.ymlarchivo para contener lo siguiente.

- name: restart sshd
  service: name=ssh state=restarted

Paso 4: crear tareas Ansible para la configuración básica del servidor

La automatización de Ansible es más fácil de entender si la dividimos en tareas. Creemos archivos para cada una de nuestras tareas en el proceso.

cd roles/common/tasks
touch hosts main.yml setup.yml users.yml ufw.yml swap.yml virtualmin.yml

main.yml debe apuntar a cada archivo que contenga los comandos Ansible, así que edítelo para que contenga lo siguiente.

- include: setup.yml
- include: users.yml
- include: ufw.yml
- include: swap.yml
- include: virtualmin.yml

El primer paso para configurar un nuevo servidor es actualizar el caché de repositorio y establecer la zona horaria. Edite el common/handlers/setup.ymlarchivo para contener lo siguiente.

- apt: update_cache=yes
  sudo: yes

- name: set timezone to Europe/London
  timezone:
    name: Europe/London

Ahora, le daremos al usuario root una contraseña (que necesitaremos para acceder a la interfaz web virtualmin), pero deshabilitaremos los inicios de sesión de contraseña a través de SSH (ya que estamos utilizando el método de autenticación de claves más seguro). Editar users.ymlpara contener lo siguiente.

- name: Change passwd
  user: name=root password={{ new_password | password_hash('sha512') }} update_password=always

- name: Disable SSH password login
  lineinfile: dest=/etc/ssh/sshd_config regexp="^#?PasswordAuthentication" line="PasswordAuthentication no"
  notify: restart sshd

Por seguridad, necesitamos un firewall. Utilizaremos el firewall sin complicaciones para permitir el acceso SSH en el puerto 22, el acceso web en el puerto 80y el acceso web seguro en el puerto 443. Edite el ufw.ymlarchivo para contener lo siguiente.

- name: Set default firewall policy to deny all
  become: True
  ufw: state=enabled direction=incoming policy=deny
  tags: firewall

- name: enable SSH in firewall
  ufw: rule=allow port=22
  sudo: yes

- name: enable HTTP connections for web server
  ufw: rule=allow port=80
  sudo: yes

- name: enable HTTPS connections for web server
  ufw: rule=allow port=443
  sudo: yes

- name: enable firewall
  ufw: state=enabled
  sudo: yes

Opcionalmente, puede incluir un archivo de intercambio. Esto es esencial si su servidor tiene menos de 2 GB de RAM para evitar fallas de memoria. Editar swap.ymlpara contener lo siguiente.

- name: Set swap_file variable
  set_fact:
    swap_file: "{{swap_file_path}}"
  tags:
    - swap.set.file.path

- name: Check if swap file exists
  stat:
    path: "{{swap_file}}"
  register: swap_file_check
  tags:
    - swap.file.check

- name: Create swap file
  command: fallocate -l {{swap_file_size}} {{swap_file}}
  when: not swap_file_check.stat.exists
  tags:
    - swap.file.create

- name: Change swap file permissions
  file: path="{{swap_file}}"
        owner=root
        group=root
        mode=0600
  tags:
    - swap.file.permissions

- name: Format swap file
  sudo: yes
  command: "mkswap {{swap_file}}"
  when: not swap_file_check.stat.exists
  tags:
    - swap.file.mkswap

- name: Write swap entry in fstab
  mount: name=none
         src={{swap_file}}
         fstype=swap
         opts=sw
         passno=0
         dump=0
         state=present
  tags:
    - swap.fstab

- name: Turn on swap
  sudo: yes
  command: swapon -a
  when: not swap_file_check.stat.exists
  tags:
    - swap.turn.on

- name: Set swappiness
  sudo: yes
  sysctl:
    name: vm.swappiness
    value: "{{swappiness}}"
  tags:
    - swap.set.swappiness

Paso 5: agrega la tarea Ansible para la configuración de virtualmin

Virtualmin tiene su propio archivo de instalación que Ansible puede descargar y ejecutar. Aquí estamos usando la instalación mínima ( LINK). Los elementos adicionales son para configurar la contraseña del servidor MySQL que no se establece cuando lo instala Virtualmin. Necesitamos detener temporalmente MySQL y agregar el directorio de autenticación antes de cambiar la contraseña. Editar virtualmin.ymlpara contener lo siguiente.

- name: download virtualmin install script
  get_url: >
    url=http://software.virtualmin.com/gpl/scripts/install.sh
    dest=/root/install.sh
    mode=0755

- name: virtualmin install (takes around 10 mins) you can see progress using $ sudo tail -f /root/virtualmin-install.log
  tags: non-idem
  shell: ~/install.sh --force --hostname {{ hostname }} --minimal --yes
  args:
    chdir: /root

- name: temp stop mysql
  service:
    name: mysql
    state: stopped

- name: change owner (and group) of mysqld dir
  file:
    path: "/var/run/mysqld"
    state: directory
    owner: mysql
    group: mysql

- name: virtualmin set mysql password
  shell: virtualmin set-mysql-pass --user root --pass {{ new_password }}

- name: restart mysql
  service:
    name: mysql
    state: started

El rol Ansible ahora está terminado y estamos listos para implementar.

Paso 6 - Realice la instalación con Ansible

Desde la carpeta ansible, ahora podemos simplemente ejecutar el siguiente comando, y Ansible llevará a cabo todas las tareas que hemos creado automáticamente. La primera vez que se conecte, recibirá una advertencia de clave SSH, simplemente escriba " yes" en el indicador.

ansible-playbook deploy.yml --private-key=ssh_keys/ssh_keys -i hosts

Si deseamos utilizar otro servidor, simplemente podemos cambiar la dirección IP en el archivo de hosts y ejecutar ese comando nuevamente para completar exactamente la misma configuración.

Paso 7: asistente de instalación posterior de Virtualmin

La instalación se ha completado y ahora podemos ir a https://192.0.2.1:10000(use la dirección IP de su servidor). Su navegador emitirá una advertencia de seguridad porque el certificado está autofirmado, así que haga clic advancedy agregue una excepción. Se le presentará una página de inicio de sesión. El nombre de usuario es root, y la contraseña es la que ingresó en el group_vars/allarchivo en el paso 3. La primera vez que ingrese a Virtualmin se le presentará el asistente posterior a la instalación. Puede revisar estas configuraciones manualmente o hacer clic cancelpara aceptar los valores predeterminados.

Paso 8: crea un servidor e instala WordPress

Para poner en funcionamiento su primer servidor de Wordpress, haga clic en el panel de Virtualmin Create Virtual Server. Deberá ingresar un nombre de dominio, una descripción y una contraseña de administrador. El nombre de dominio debe ser diferente del nombre de dominio completo de Virtualmin, y deberá apuntar el registro DNS a la dirección IP de su servidor.

Haga clic Create Server. Una vez que Virtualmin haya terminado de crear su servidor, haga clic Install Scriptsen el menú de la izquierda. Seleccione Wordpress, haga clic Show install optionsy en la siguiente página elija la ubicación de la instalación de Wordpress. Solo elige At top levely haz clic Install Now.

Eso es todo lo que necesita hacer: puede completar la instalación de Wordpress visitando su http://example.net/wp-admin/install.php(¿dónde example.netestá el nombre de dominio de este servidor virtual?). Si sus registros DNS aún no se han propagado, puede Services > Preview Websiteacceder desde el menú de Virtualmin.

Puede repetir este paso varias veces para crear varios sitios de Wordpress en el mismo servidor Vultr.



Leave a Comment

ZPanel y Sentora en CentOS 6 x64

ZPanel y Sentora en CentOS 6 x64

ZPanel, un panel de control de alojamiento web popular, se bifurcó en 2014 a un nuevo proyecto llamado Sentora. Aprende a instalar Sentora en tu servidor con este tutorial.

Cómo instalar Vtiger CRM Open Source Edition en CentOS 7

Cómo instalar Vtiger CRM Open Source Edition en CentOS 7

Aprende cómo instalar Vtiger CRM, una aplicación de gestión de relaciones con el cliente, en CentOS 7 para aumentar tus ventas y mejorar el servicio al cliente.

Cómo instalar el servidor Counter-Strike 1.6 en Linux

Cómo instalar el servidor Counter-Strike 1.6 en Linux

Esta guía completa le mostrará cómo configurar un servidor Counter-Strike 1.6 en Linux, optimizando el rendimiento y la seguridad para el mejor juego. Aprende los pasos más recientes aquí.

¿Puede la IA luchar con un número cada vez mayor de ataques de ransomware?

¿Puede la IA luchar con un número cada vez mayor de ataques de ransomware?

Los ataques de ransomware van en aumento, pero ¿puede la IA ayudar a lidiar con el último virus informático? ¿Es la IA la respuesta? Lea aquí, sepa que la IA es una bendición o una perdición

ReactOS: ¿Es este el futuro de Windows?

ReactOS: ¿Es este el futuro de Windows?

ReactOS, un sistema operativo de código abierto y gratuito, está aquí con la última versión. ¿Puede satisfacer las necesidades de los usuarios de Windows de hoy en día y acabar con Microsoft? Averigüemos más sobre este estilo antiguo, pero una experiencia de sistema operativo más nueva.

Manténgase conectado a través de la aplicación de escritorio WhatsApp 24 * 7

Manténgase conectado a través de la aplicación de escritorio WhatsApp 24 * 7

Whatsapp finalmente lanzó la aplicación de escritorio para usuarios de Mac y Windows. Ahora puede acceder a Whatsapp desde Windows o Mac fácilmente. Disponible para Windows 8+ y Mac OS 10.9+

¿Cómo puede la IA llevar la automatización de procesos al siguiente nivel?

¿Cómo puede la IA llevar la automatización de procesos al siguiente nivel?

Lea esto para saber cómo la Inteligencia Artificial se está volviendo popular entre las empresas de pequeña escala y cómo está aumentando las probabilidades de hacerlas crecer y dar ventaja a sus competidores.

La actualización complementaria de macOS Catalina 10.15.4 está causando más problemas que resolver

La actualización complementaria de macOS Catalina 10.15.4 está causando más problemas que resolver

Recientemente, Apple lanzó macOS Catalina 10.15.4, una actualización complementaria para solucionar problemas, pero parece que la actualización está causando más problemas que conducen al bloqueo de las máquinas Mac. Lee este artículo para obtener más información

13 Herramientas comerciales de extracción de datos de Big Data

13 Herramientas comerciales de extracción de datos de Big Data

13 Herramientas comerciales de extracción de datos de Big Data

¿Qué es un sistema de archivos de diario y cómo funciona?

¿Qué es un sistema de archivos de diario y cómo funciona?

Nuestra computadora almacena todos los datos de una manera organizada conocida como sistema de archivos de diario. Es un método eficiente que permite a la computadora buscar y mostrar archivos tan pronto como presiona buscar.