Migrar una web con Drupal 8 a un virtual host local de apache

Migrar una instalación ya funcionando de Drupal 8 desde la web a un servidor local en nuestro equipo es ligeramente más complicado que con otras versiones de Drupal, la forma de hacerlo que a mí me ha funcionado es la siguiente:

Partimos de un equipo en el que tenemos instalado linux Mint 18.1, pero estas instrucciones podrían valer también para cualquier distribución linux, cambiando convenientemente las rutas de los ficheros.

Instalamos el servidor web:

sudo apt-get install apache2

Para comprobar que funciona, accedemos con un navegador a la dirección http://localhost  y deberíamos ver la página raíz del servidor apache

Instalamos PHP, que en esta versión de Linux Mint (18.1) es el PHP 7.0, y algunos módulos de php que nos serán necesarios:

sudo apt-get install php7.0 php7.0-mysql libapache2-mod-php7.0 php7.0-cli php7.0-cgi php7.0-gd php7.0-curl php7.0-gd php7.0-intl php7.0-imap php7.0-mcrypt php7.0-pspell php7.0-recode php7.0-snmp php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php-pear php-imagick php-apcu

Comprobamos que PHP funciona creando como root el fichero /var/www/html/info.php con una única línea que ponga

<?php phpinfo(); ?>

Reiniciamos el servidor web

sudo service apache2 restart

Accedemos a la dirección http://localhost/info.php y deberíamos de ver la página de información de PHP

Habilitamos el  módulo rewrite

sudo a2enmod rewrite

Instalamos MySQL

sudo apt-get install mysql-client mysql-server

Aseguramos la instalación de MySQL con el script

sudo mysql_secure_installation

Instalamos y configuramos SSL, para ello creamos una carpeta

sudo mkdir /etc/apache2/ssl

Nos situamos en ella y y ejecutamos el comando de creación de un certificado autofirmado (en este comando y en las instrucciones siguientes habrá que cambiar “misitio” por el nombre de nuestra web)

cd /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/misitiossl.key -out /etc/apache2/ssl/misitiossl.crt

Se nos hará una serie de preguntas, acerca de nuestra identidad etc. Cuando termine el comando, cambiamos los permisos de los ficheros creados en el directorio

sudo chmod 600 *

Ahora configuramos el host virtual en Apache, para ello creamos el directorio al que copiaremos los ficheros de nuestra web, y luego creamos el fichero de configuración del host virtual

sudo mkdir -p /var/www/misitio
sudo vim /etc/apache2/sites-available/misitio.conf

En este fichero tenemos que tener el siguiente contenido:

<VirtualHost *:80>
 ServerName www.misitio.local
 DocumentRoot /var/www/misitio

RedirectMatch 301 (.*) https://www.misitio.local$1
</VirtualHost>

<VirtualHost _default_:443>

ServerName www.misitio.local
 ServerAlias misitio.local
 ServerAdmin webmaster@localhost

DocumentRoot /var/www/misitio

ErrorLog ${APACHE_LOG_DIR}/misitio-error.log
 CustomLog ${APACHE_LOG_DIR}/misitio-access.log combined

SSLEngine on
 
 SSLCertificateFile /etc/apache2/ssl/misitiossl.crt
 SSLCertificateKeyFile /etc/apache2/ssl/misitiossl.key

<Directory "/var/www/misitio">
 Options FollowSymLinks
 AllowOverride All
 Require all granted
 </Directory>

<FilesMatch "\.(cgi|shtml|phtml|php)$">
 SSLOptions +StdEnvVars
 </FilesMatch>

<Directory /usr/lib/cgi-bin>
 SSLOptions +StdEnvVars
 </Directory>

BrowserMatch "MSIE [2-6]" \
 nokeepalive ssl-unclean-shutdown \
 downgrade-1.0 force-response-1.0
 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>

Modificamos el fichero /etc/hosts añadiendo una línea en la que apuntamos a nuestro host virtual. Para ello incluimos en este fichero una línea al principio que ponga:

127.0.0.1      www.misitio.local

Copiamos los ficheros de la web que queremos migrar a la carpeta /var/www/misitio, creamos en nuestro MySQL local una base de datos ideńtica a la que tenemos en la base de datos de la web, y creamos el usuario con el que se accede a ella desde el sitio web. Para ello podemos usar adminer, phpmyadmin, etc. Si en vez de migrar una web estamos creando una web desde cero, pues entonces usamos el método habitual de instalación de una web Drupal, usando la dirección de nuestro host virtual como inicio del proceso.

Solamente si estamos haciendo una migración, una vez que tenemos los ficheros transferidos y la base de datos configurada, accedemos al fichero:

sudo vim /var/www/misitio/sites/default/settings.php

y modificamos la parte correspondiente a los host de confianza, incluyendo la dirección de nuestro host virtual. Buscamos trusted_host_patterns y el fichero debería de quedar tal que así:

$settings['trusted_host_patterns'] = array(
 '^www\.misitio\.com$', 
 '^www\.misitio\.local$'
);

Y ya debería funcionar todo, accediendo a la página https://www.misitio.local deberíamos de ver la página principal de nuestra nueva web en local. La primera vez que accedamos a ella nos saltará una advertencia de seguridad en el navegador porque estamos usando un certificado autofirmado, por lo que deberemos de añadir una excepción de seguridad para poder acceder las siguientes veces sin que salte este aviso.

Este post está basado en gran parte en lo que se explica en: https://kreationnext.com/support/how-to-install-drupal-8-with-apache-mysql-and-ssl-on-ubuntu-15-10/

El menú responsive del tema Bootstrap de Drupal no funciona

Después de instalar el tema Bootstrap de Drupal 7 para un nuevo sitio de comercio online me he encontrado con que el menú responsive, el que aparece como un icono con tres rayitas cuando la pantalla es pequeña, no funciona. Googleando un poco me encuentro con este enlace en el que cuentan que el problema puede ser que la versión de JQuery que esté usando no sea la correcta. En Drupal 7 podemos mantener actualizada la versión de JQuery si instalamos el módulo Jquery Update, el cual ya viene incluido por defecto en el núcleo de Drupal 8.
Una vez instalado dicho módulo, lo activamos y ya tenemos funcionando el menú en el móvil.

Corregir el error “Illegal string offset ‘data’…” en Drupal 5

Para los que somos un poco vagos y todavía mantenemos páginas en Drupal 5, una de las cosas más molestas son los continuos errores que aparecen en el registro debido a las nuevas versiones de PHP que van saliendo. Uno de ellos es el error “Illegal string offset ‘data’ en la línea 110 del archivo /nuestro_drupal5/includes/tablesort.inc.”

La solución la tenemos en este enlace, que nos cuenta que para corregirlo hay que cambiar dicha línea 110 de código del archivo /nuestro_drupal5/includes/tablesort.inc de la siguiente forma. Donde dice:

if (isset($header[$i]) && $header[$i]['data'] == $ts['name'] && $header[$i]['field']) { 

Lo cambiamos a:

if (isset($header[$i]) && isset($header[$i]['data']) && $header[$i]['data'] == $ts['name'] &&  isset($header[$i]['field']) && $header[$i]['field']) { 

Y con esto desaparecen los molestos mensajes de error.

 

 

 

Cómo habilitar las clean url de Drupal en el directorio de usuario de Apache2 en Debian/Ubuntu y Fedora

  1. Habilitar el módulo mod_rewrite de Apache. En Debian/Ubuntu hay que lanzar el comando: sudo a2enmod rewrite. En Fedora ese módulo ya viene habilitado por defecto.
  2. Editar el fichero /etc/apache2/mods-enabled/userdir.conf en Debian/Ubuntu cambiando la linea con AllowOverride FileInfo AuthConfig Limit Indexes de forma que solo tenga AllowOverride All. En Fedora dicho fichero está en /etc/httpd/conf.d/userdir.conf
  3. Editar el fichero .htaccess de nuestro directorio de Drupal descomentando la linea con la opción RewriteBase y dejándola como  RewriteBase /~MiUsuario/miDirectorioDrupal/
  4. Reiniciar Apache. En Debian/Ubuntu con el comando: sudo service apache2 restart y en Fedora con: sudo service httpd restart

Este procedimiento me ha funcionado con Ubuntu 14.04 con Drupal 8, y también en Fedora 23 con Drupal 7

En esta entrada recojo mi experiencia personal tras seguir las indicaciones de:
http://tolocalhost.blogspot.com.es/2013/04/enabling-drupal-clean-url-in-apache2.html

Error “.htaccess: Options not allowed here” en Apache2

Este error me ha aparecido en el log de Apache cuando he intentado acceder a una réplica en mi directorio de usuario de una página hecha en Drupal. Para solucionarlo he tenido que editar el archivo “/etc/apache2/sites-available/000-default.conf” añadiendo las lineas

<Directory /home/mi_usuario/public_html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

Y reiniciar el servicio con “sudo service apache2 restart”

Solucionado el errror: las búsquedas en Drupal siempre devuelven “Debe incluir al menos una palabra clave positiva con 3 caracteres o más”

Con la actualización del PCRE (Perl Compatible Regular Expressions) a la versión 8.30 en PHP, ocurre que las búsquedas del módulo search dejan de funcionar en Drupal 5. Cualquier búsqueda que se haga devuelve el error “Debe incluir al menos una palabra clave positiva con 3 caracteres o más” y este comportamiento no se soluciona volviendo a indexar el sitio web. Para solucionarlo hay que modificar a mano el fichero /modules/search/search.module modificando la línea 47 de forma que se cambie la cadena “\ x {D800} – \ x {F8FF} \” por “\ x {E000} – \ x {F8FF} \”. Es decir, dicha línea 47 que inicialmente está así (da igual en minúsculas que mayúsculas):

‘\x{a80b}\x{a823}-\x{a82b}\x{d800}-\x{f8ff}\x{fb1e}\x{fb29}\x{fd3e}\x{fd3f}’.

hay que dejarla así:

‘\x{a80b}\x{a823}-\x{a82b}\x{e000}-\x{f8ff}\x{fb1e}\x{fb29}\x{fd3e}\x{fd3f}’.

De esta forma las búsquedas vuelven a funcionar.

No es buena práctica modificar módulos del núcleo de Drupal a mano, pero en este caso es una solución de compromiso en Drupal 5, cuyos módulos están fuera de mantenimiento. De hecho este error se da también en Drupal 6, pero está corregido desde la versión 6.26.

Solucionado gracias a https://drupal.org/comment/7189896#comment-7189896   y   http://www.sture.ch/node/203

Error “Could not retrieve title from feed” al usar el módulo Feeds en Drupal 7

El módulo Feeds permite importar fácilmente datos en Drupal desde ficheros CSV, aunque tiene algunas características en su funcionamiento que pueden ser desconcertantes. Su utilización está muy bien explicada por ejemplo aquí por lo que no me voy a extender en ello, lo que querría explicar aquí es cómo evitar la reiterada aparición del mensaje de error “Could not retrieve title from feed” que me aparece cada vez que intento cargar un fichero CSV.
Para poder hacer bien la carga necesitamos:
1) Tener definido el nodo en nuestro Drupal, con unos campos de similar nombre y formato que los del fichero CSV.
2) Definir un nuevo importador (feed importer) relacionándolo con el tipo de contenido que tenemos que cargar (no configurarlo como standalone).
3) Ir a la sección Contenido y pulsar en Añadir contenido. Seleccionar el nodo que queremos cargar.
4) Nos aparece la página de carga de datos del nodo, en la cual, aparte del formulario para introducir los campos, nos deberá mostrar una serie de valores a rellenar para realizar la carga desde fichero. Seleccionamos el fichero a importar.
Si pulsamos el botón “Guardar” en este momento, nos saldrá el dichoso mensaje de error y no se hará ninguna carga. Para evitarlo, ponemos algo en el primer campo (que es el campo title), cualquier cosa. Pulsamos de nuevo “Guardar”.
Veremos que ahora nos da otro error, pero además nos aparecen una serie de pestañas, entre las cuales está la pestaña “Importar”. Pulsamos en ella y desde ahí ya podemos hacer la carga.
Finalmente hemos conseguido hacer la carga de datos, aunque sea de forma un tanto chapucera.

Cogido de la entrada #3 de aquí. ¡Gracias, RdeBoer!