Solución de Problemas

Depuración

Reglas de oro para depurar cualquier comando fallido con Ansible:

  1. Lea el log de outputs y encuentre la tarea que falló.
  2. Lea el mensaje de error para ver cual es el problema exacto.
  3. Ejecute nuevamente el comando en modo verbose ansible-playbook deploy.yml -vvvv -e "site=<domain> env=<entorno>" si es necesario, para tener mayor detalle.
  4. Conéctese a su servidor via SSH y corra el comando donde falló Ansible en forma manual.

Ejemplo: si una tarea de clonado Git falló durante el deploy, entonces conéctese via SSH dentro del servidor como usuario web (que es el usuario que utiliza el deploy) y ejecute el comando manual como git clone <repo>. Esto te dará mucho más pistas sobre qué está sucediendo.

ERR_EMPTY_RESPONSE

Si estás teniendo errores del tipo ERR_EMPTY_RESPONSE al intentar acceder a tu sitio local:

Intenta:

$ SKIP_GALAXY=true ANSIBLE_TAGS=wordpress vagrant reload --provision

Y luego ejecuta:

$ vagrant hostmanager

Máquina que no responde o 404s

Apaga todas las VMs y elimina las entradas relacionadas a esa VM desde el archivo /etc/hosts, en particular las relacionadas al ejemplo debajo. Intenta hace un backup del archivo hosts antes de editar.

192.168.50.5  example.test  # VAGRANT: 22c9...

Luego ejecuta vagrant up sobre la VM que necesitas que funcione y verifica que las entradas correspondientes aparecen en el archivo hosts.

Un archivo hosts prolijo reducirá las chances de 404s, aunque esto no esté garantizado al 100%.

Error de permisos Sequel Pro

¿Estás teniendo errores del tipo Permission denied (publickey) al intentar conectarse con la box de Vagrant con Sequel Pro?

Utiliza la llave privada insegura dentro de la carpeta .vagrant. Vea el thread en el Foro Discourse de Roots.

Certificados SSL Let's Encrypt

Vea Problemas frecuentes Let's Encrypt.

Hubo un error mientras ejecutaba VBoxManage, una CLI utilizada por Vagrant

El mensaje de error luce de la siguiente manera:

Command: ["modifyvm", "5a403eac-5619-4020-ba14-b72fd8d5b530", "--natpf1", "delete", "ssh"]

Stderr: VBoxManage: error: An unexpected process (PID=0x00003FAA) has tried to lock the machine 'trellis-playbooks', while only the process started by LaunchVMProcess (PID=0x00003C31) is allowed
VBoxManage: error: Details: code E_ACCESSDENIED (0x80070005), component Machine, interface IMachine, callee nsISupports
VBoxManage: error: Context: "LockMachine(a->session, LockType_Write)" at line 471 of file VBoxManageModifyVM.cpp

La solución es abrir el Monitor de Actividad y eliminar cualquier proceso vagrant o ruby.

Instalación Composer: host key verification failed

Algunas veces una tarea que instala dependencias de Composer arroja el error host key verification failed. Esto puede ocurrir cuando el archivo known_hosts en tu VM Vagrant o el host remoto no encuentra la key para alguno de los repositories del host en el archivo composer.json relacionado. Asegurese que cada host de composer.json tiene una llave listada en group_vars/all/known_hosts.yml, luego intente los comandos vagrant provision o ./bin/deploy.sh nuevamente.

Conexiones SSH

Si tienes inconvenientes con las conexiones SSH a tu servidor, considera los siguientes consejos indicados debajo. Puedes buscar información acerca de como deshabilitar el login root y como configurar los settings SSH a través del rol sshd.

SSH keys

SSH buscará automáticamente e intentará generar un conjunto de SSH keys predeterminadas, junto con otras keys cargadas en tu ssh-agent. Sin embargo, el servidor SSH permitirá un número limitados de keys antes de desconectarse (default: 6). Si tienes muchas SSH keys y la key correcta no es elegida, puedes forzar al cliente SSH que intente únicamente la key correcta. Agrega esto a tu archivo ~/.ssh/config (con la correcta ruta a tu key).

Host example.com
  IdentitiesOnly yes
  IdentityFile /users/username/.ssh/id_rsa

Cambio de key en el Host

Tu servidor puede ocasionalmente ofrecer a una key en el host diferente a tu máquina local tiene registrado en los known_hosts. Esto puede ocurrir si reconstruyes el servidor o si el rol sshd configura tu servidor para ofrecer una key más fuerte.

Ejemplo 1

TASK [setup] *******************************************************************
System info:
  Ansible 2.2.1.0; Darwin
  Trellis at "Add `apt_packages_custom` to customize Apt packages"
---------------------------------------------------
SSH Error: data could not be sent to the remote host. Make sure this host can
be reached over ssh
fatal: [xxx.xxx.xxx.xxx]: UNREACHABLE! => {"changed": false, "unreachable": true}
    to retry, use: --limit @/Users/yourname/sites/example.com/trellis/deploy.retry

Ejemplo 2

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:lv86hFykjn8pnOWE2WDWJo8Mzf6FTDMx/yWXOqzK5PU.

Si hubo cambios en los hosts, es probable que debas borrar las keys antiguas de known_hosts ejecutando el siguiente comando (con tu IP real o nombre del host).

ssh-keygen -R 12.34.56.78

Luego prueba el playbook de Trellis o conectate mediante SSH nuevamente.

Si el cambio de key fue inesperado, investigue seriamente por qué ocurrió esto, ya que puede haber sido víctima de un ataque de hombre-en-el-medio.

Las tareas git clone o composer install fallan

El rol sshd puede necesitar que el servidor SSH tenga keys más seguras desde los hosts de repositorios git o paquetes composer. Esto puede ocasionar el problema de cambio-de-key, pero esta vez en tu servidor en vez de en la máquina local. Siga los mismos pasos para solucionarlo, pero esta vez en el servidor.

Similarmente, el rol sshd puede causar que el cliente SSH del servidor necesite un cifra, algoritmos kex, ay MACs más robustos que anteriormente. Si tu conexión git clone o composer install trabajan sobre sistemas viejos que no soportan protocolos más seguros, puede que necesites agregar más opciones a ssh_ciphers_extra, ssh_kex_algorithms_extra, o ssh_macs_extra.

Output verbose

Los errores de conexión SSH son difíciles de solucionar sin un output explícito. Utilice la opción -vvvv con tu comando ansible-playbook:

ansible-playbook server.yml -e env=production -vvvv

Puedes también utilizar -v, -vv, y -vvv con conexiones SSH manuales:

ssh -v root@12.34.56.78

SSH Manual

Si tu comando ansible-playbook falla para las conexiones SSH, puede ser útil conectarse manualmente para achicar el alcance del problema. Si la conexión SSH manual falla, intenta nuevamente con -v para output verbose.

ssh -v root@12.34.56.78

Ciphers, KexAlgorithms, o MACs

El rol sshd impedirá que tu servidor SSH utilice protocolos débiles o viejos. Si tu conexión involucra sistemas viejos que no soportan protocolos seguros configurador por el rol sshd, vea Ciphers, KexAlgorithms, and MACs para entender como agregar estos protocolos que necesitas.