Esta semana he tenido que migrar un servidor con plesk de un hosting normal (OVH en este caso) a una instancia de Amazon EC2.
Para la instalación inicialmente utilice una AMI de centos 6.2 y la última versión de plesk (10.4.4). Hice la migración del servidor antiguo al nuevo con la herramienta de migraciones del plesk y, con la excepción de unos errores sin importancia de la migración, parecía que todo estaba bien.
Normalmente suelo probar los dominios migrados modificando el fichero hosts de mi equipo antes de modificar las dns, por si algo no ha funcionado correctamente. En este caso fue muy buena idea ya que cuando accedías al dominio se veía la página por defecto de plesk, la del servidor, no la del dominio.
Evidentemente eso sonaba a que apache no tenía bien configurados los virtualhosts pero por más que miraba me daba la impresión de que todo era correcto.
Después de mucho probar y revolver, incluida una reinstalación completa de otra instancia y otra migración, esta vez con ubuntu server por si había algún problema con centos, di con la solución: el problema está en las ips del servidor y en como configura plesk los virtualhost.
Cuando se crea una instancia en Amazon se le asigna automáticamente una dirección ip privada del tipo 10.x.x.x y después tu le tienes que asignar una ip pública (elastic ip).
Cuando configuras las ips en plesk tienes que añadir a mano la ip pública al servidor y poner como compartida tanto la pública como la privada (10.x.x.x). En mi caso lo que estaba haciendo mal era que durante la migración seleccionaba como ip destino de la migración la pública y lo que debería de hacer era seleccionar la ip privada para que la configuración del virtualhost llevara esa ip. Debería de quedar algo así:
En vez de la fórmula habitual
Si ya has realizado la migración y no puedes/quieres volver a hacerla tienes dos opciones, o cambias a mano todas las ips o ejecutas un script como este para que lo haga por ti.
mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa -Ns -e «select name from domains;» | awk ‘{print «/usr/local/psa/bin/domain –update «$1″ -ip IP_PRIVADA_DE_AMAZON»}’ | sh
por su puesto que a mi me gusta mucho más la opción del script. =;-)
Tened en cuenta que si alguna vez paráis la instancia cuando la volváis a encender casi seguro que os habrá cambiado la ip privada y tendréis que volver a realizar todo este proceso. Es un problema que plesk no ha tenido en cuenta y que espero que solucione en próximas actualizaciones.
Otra de las incidencias que tuvimos en esta migración es que por alguna extraña razón el apache no hacía caso de la directiva DirectoryIndex y cogía siempre como fichero por defecto el index.html en vez del index.php, así que decisión salomónica: fuera todos los index.html,
mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa -Ns -e «select name from domains;» | awk ‘{print «rm /var/www/vhosts/»$1″/httpdocs/index.html»}’ | sh
Si utilizáis ubuntu server para la instalación lo mejor es que desinstaléis apparmor antes de empezar la instalación y si preferís dejarlo o no os acordáis hay que añadir a su fichero de configuración la siguiente línea para que bind os funcione correctamente.
vim /etc/apparmor.d/usr.sbin.named
y añadir
/var/named/run-root/** rw,
al final del fichero
Aunque no tiene nada que ver con Amazon si quieres cambiar el idioma del panel de control y la licencia que has contratado no lo permite lo puedes hacer directamente modificando un par de valores en mysql:
mysql -uadmin -p`cat /etc/psa/.psa.shadow`
use psa
update misc set val=’es-ES’ where param=’def_locale’;
update misc set val=’es-ES’ where param=’admin_locale’;
Si se me ocurre algún otro truco, o conocéis algún otro truco interesante, decídmelo y lo añadiré aquí para tener como referencia futura.