Configuración del Servidor Remoto

Configurar un servidor remoto (staging/production) es similar a configurar un servidor local

Localmente, Trellis se encarga de configurar todo. Automáticamente crea un servidor (máquina virtual), la provisiona e instala WordPress.

Para servidores remotos, el flujo de trabajo es un poco diferente, con 2 nuevos conceptos:

  • Provisionamiento
  • Deploy

Provisionamiento

Provisionar un servidor significa dotarlo de todo el software necesario y la configuración para ejecutar un sitio de WordPress. En el caso de Trellis esto significa, por ejemplo: instalar MariaDB, instalar Nginx, configurar Nginx, crear una base de datos, etc.

Trellis cuenta con dos playbooks: dev.yml y server.yml. Tal como se ha mencionado en desarrollo local, Vagrant ejecuta automáticamente por nosotros el playbook dev.yml.

Para servidores remotos, el servidor se provisiona a través del playbook server.yml. Esto permite preparar un servidor para ejecutar un sitio WordPress, pero sin el "codebase" actual aún.

Deploy

Localmente, es fácil tener su sitio/codebase sobre la VM a través de las carpetas sincronizadas. En el caso de los servidores remotos, primero debemos realizar un deploy.

Los deploys se ejecutan en Trellis mediante el playbook deploy.yml. Este comando coloca el codebase en el servidor clonándolo desde el repositorio Git. También se ocupa de cosas como: correr Composer, crear archivos de configuración, recargar Nginx, etc.

Requerimientos

Las instrucciones de instalación de Trellis saltean algunos requerimientos debido a que Vagrant los maneja automáticamente por nosotros.

Para utilizar Trellis en servidores remotos, recomendamos instalar Ansible localmente en nuestra máquina host (excepto para usuario Windows).

  1. Instala Ansible >= 2.4 y otras dependencias: pip install -r requirements.txt
  2. Instala roles de Galaxy: ansible-galaxy install -r galaxy.yml (en el directorio local de Trellis)

Luego hay dos requerimientos adicionales para el servidor remoto:

  1. Necesitas un servidor con una versión en blanco de Ubuntu 18.04 LTS (Bionic Beaver). Si utilizas los servidores de Digital Ocean, elige la opción Ubuntu 18.04.

Nota: Ubuntu 16.04 (Xenial) sigue siendo compatible por lo que no es necesario migrar aun. Ver #992 para entender los pequeños cambios necesarios para poder ejecutarlo correctamente.

No puedes ejecutar Trellis en servidores compartidos.

  1. Necesitas poder conectarte a tu servidor desde tu computadora via SSH. Recomendamos enfáticamente hacer esto via SSH keys para no tener que escribir un password cada vez. Muchos hosts como DigitalOcean ofrecen la posibilidad de agregar automáticamente las SSH keys cuando se crean los servidores. Esta guía brinda más información acerca de las SSH Keys.

Ahora que te encuentras trabajando con un servidor Ubuntu 18.08 al que puedes acceder mediante SSH fácilmente, necesitas configurar algunas cosas:

  1. Copia los wordpress_sites desde tu entorno local de trabajo en group_vars/development/wordpress_sites.yml a tu entorno remoto (staging or production) en group_vars/production/wordpress_sites.yml.
  2. Modifica tu sitio y agrega las configuraciones necesarias para el servidor remoto, teniendo en cuenta que hay un mayor número que en el entorno local. Hecha un vistazo también a la documentación sobre Passwords.
  3. Agrega el hostname del servidor a hosts/<environment> (reemplazando your_server_hostname).
  4. Define las SSH keys públicas para users en group_vars/all/users.yml. Ver documentación sobre SSH Keys.
  5. Considera definir sshd_permit_root_login: false en group_vars/all/security.yml. Ver documentos de seguridad.
  6. Ejecutar ansible-playbook server.yml -e env=<environment> desde tu máquina local (Ansible se conecta al servidor remoto via SSH).

Esto nos deja con un servidor provisioned. El siguiente paso es hacer un deploy de tu sitio.

Re-provisionamiento

El re-provisionamiente se asume siempre que es una operación segura. Cuando uno hace cambios en la configuración de Trellis, debe provisionar el servidor remoto nevamente para poder aplicar los cambios:

ansible-playbook server.yml -e env=<environment>

También se puede provisionar con etiquetas específicas para ejecutar únicamente ciertos roles:

ansible-playbook server.yml -e env=<environment> --tags=users

Recursos