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).
- Instala Ansible >= 2.4 y otras dependencias:
pip install -r requirements.txt - 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:
- 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.
- 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:
- Copia los
wordpress_sitesdesde tu entorno local de trabajo engroup_vars/development/wordpress_sites.ymla tu entorno remoto (stagingorproduction) engroup_vars/production/wordpress_sites.yml. - 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.
- Agrega el hostname del servidor a
hosts/<environment>(reemplazandoyour_server_hostname). - Define las SSH keys públicas para
usersengroup_vars/all/users.yml. Ver documentación sobre SSH Keys. - Considera definir
sshd_permit_root_login: falseengroup_vars/all/security.yml. Ver documentos de seguridad. - 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