Hoy en día es impensable que una empresa, por más pequeña que sea, no quiera posicionarse en internet, con el objetivo de darse a conocer y ampliar su mercado. Pero las motivaciones pueden ser otras: cualquier persona lo podría hacer independientemente de su objetivo ya que el internet abarca a miles de millones de personas.

Para este propósito, una solución que está presente desde los orígenes del internet son las conocidas páginas web, que en su momento se desarrollaban y construían sitios web página a página. En cambio ahora existen los llamados sistemas de administración de contenidos (CMS por sus siglas en inglés) que facilitan el despliegue de un sitio web funcional en internet en poco tiempo y sin demasiado esfuerzo orientados a que los conocimientos de programación no sea una limitante.

En cuanto a la seguridad de estos gestores dependerá de una adecuada configuración que se le de. Por ejemplo uso de contraseñas robustas, añadir funcionalidades antispam, bloqueo ante intentos fallidos de inicio de sesión, y lo más importante, estar al día con las actualizaciones de seguridad.

A continuación se describirá paso a paso la instalación de Drupal en la versión 8, destacando que drupal es uno de los administradores de contenidos más populares, la instalación se realizará en un servidor Linux Debian 8 con el siguiente software:

  • Gestor de Base de Datos Mysql
  • Servidor web Apache2 con módulos (rewrite y ssl)
  • PHP5 con extensiones (php5-gd y php5-mysql)
  • Un usuario normal con privilegios sudo para instalar mysql, apache2, php5

Acciones previas

$ sudo apt-get update
$ sudo apt-get upgrade

Instalación de mysql

$ sudo apt-get install mysql-server

Durante la instalación deberá proporcionar la contraseña para el usuario administrador root de mysql.
Finalizada la instalación, crear la base de datos para el sitio web. Por ejemplo paginawebdb y usuario usuarioweb.

$ mysql -u root -p
Enter password:
mysql> CREATE DATABASE misitioweb;
mysql> CREATE USER 'usuariowebdb'@'localhost' IDENTIFIED BY 'usuariowebdb';GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, CREATE VIEW, EVENT, TRIGGER, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `misitioweb`.* TO 'usuariowebdb'@'localhost' IDENTIFIED BY 'usuariowebdb' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
mysql> exit

NOTA.  Los nombres de la base de datos, usuario y contraseña en un ambiente de producción cambiarán.

Instalación de php

$ sudo apt-get install php5 php5-gd php5-mysql

Instalación de apache

Instalar de apache2 y habilitar el módulo rewrite y ssl.

$ sudo apt-get install apache2
$ sudo a2enmod rewrite ssl
$ sudo service apache2 restart

Agregar el usuario actual al grupo www-data de apache2.

$ sudo usermod -G www-data {USUARIO}

Obtener archivos de instalación

Descargar la versión mas reciente de drupal desde https://www.drupal.org/project/drupal/releases/ , la versión para la presente guía es la 8.2.6

$ cd /var/www
$ sudo wget https://ftp.drupal.org/files/projects/drupal-8.2.6.tar.gz

Descomprimir archivos del sitio

$ sudo tar xvzf drupal-8.2.6.tar.gz
$ sudo mv drupal-8.2.6 sitio
$ sudo rm -f drupal-8.2.6.tar.gz

Cambiar de propietario al usuario actual (usuario) a la carpeta sitio.

$ sudo chown {usuario_actual} sitio
$ cd sitio

Ingresar a la carpeta  sitio/web/sites/default y cambiar los permisos y propietario a la carpeta files

$ cd web/sites/default
$ chmod 0777 files
$ chmod -R 0775 files/*
$ sudo chown -R www-data:www-data files/*

Configurar el virtualhost para el sitio

En el directorio /etc/apache2/sites-available, crear por ejemplo el archivo misitioweb.conf

$ cd /etc/apache2/sites-available
$ sudo touch misitioweb.conf

Editar el archivo sitio.conf con el siguiente contenido

<VirtualHost *:80>
  ServerName www.misitioweb.com
  ServerAlias misitioweb.com
  DocumentRoot /var/www/sitio/web

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

  <directory /var/www/sitio/web>
   AllowOverride All
  </directory>    
</VirtualHost>

Crear los archivos log en el directorio de logs de apache

$ sudo touch /var/log/apache2/error-misitioweb.log
$ sudo touch /var/log/apache2/access-misitioweb.log

Habilitar el sitio misitioweb.conf

$ sudo a2ensite misitioweb.conf
$ sudo service apache2 reload

Configuración del sitio para https, crear por ejemplo el archivo misitioweb-ssl.conf en el directorio /etc/apache2/sites-available

La configuración que se muestra aquí son para ambientes de prueba, para un entorno de producción es recomendable generar certificados gratuitos de LetsEncrypt.

$ cd /etc/apache2/sites-available
$ sudo touch misitioweb-ssl.conf

Editar el archivo misitioweb-ssl.conf y agregar el siguiente contenido

<IfModule mod_ssl.c>
  <VirtualHost _default_:443>
    DocumentRoot /var/www/sitio/web
    LogLevel info ssl:warn

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

    SSLEngine on
    SSLCertificateFile  /etc/ssl/certs/misitioweb.pem
    SSLCertificateKeyFile /etc/ssl/certs/misitioweb.key

     <directory /var/www/sitio/web>
      AllowOverride All    
     </directory>    

  </virtualhost>
</IfModule>

Generar la solicitud de certificado

$ sudo openssl genrsa -out /etc/ssl/certs/misitioweb.key 1024
$ sudo openssl req -new -key /etc/ssl/certs/misitioweb.key -out /etc/ssl/certs/misitioweb.csr

Completar información para el certificado; nombre de la compañía, nombre del país, etc.

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [AU]:BO
to be sent with your certificate request
A challenge password []:
An optional company name []:

Generar el certificado autofirmado

$ sudo openssl x509 -req -days 90 -in /etc/ssl/certs/misitioweb.csr -signkey /etc/ssl/certs/misitioweb.key -out /etc/ssl/certs/misitioweb.pem

Habilitar el sitio con https

$ sudo a2ensite misitioweb-ssl.conf
$ sudo service apache2 reload

Instalación del sitio

Acceder desde un navegador al sitio www.misitioweb.com, para ello es posible que deba configurar el archivo /etc/hosts desde la máquina que tiene instalado un navegador, con el siguiente contenido:

IP_SERVIDOR www.misitioweb.com

Al ingresar se mostrará la pantalla de instalación del sitio:

Instalacion drupal

 

Seleccionar Español como idioma de instalación, guardar y continuar

Instalacion drupal

 

Seleccionar Standar como perfil de instalación, guardar y continuar

Instalacion drupal

 

Configuración de la base de datos. Ingresar el nombre de la base de datos, usuario y contraseña anteriormente establecido:

  • Nombre de la base de datos: misitioweb
  • Nombre de usuario de la base de datos: usuariowebdb
  • Contraseña de la base de datos: usuariowebdb

En opciones avanzadas dejar los datos por defecto. Guardar y continuar.

Instalacion drupal

 

A continuación ingresar la información del sitio:

  • Nombre del sitio
  • Dirección de correo electrónico del sitio
  • Nombre de usuario (Este no debe ser identificativo, mala idea usar admin, administrador o algo parecido)
  • Contraseña (Drupal te indicará cuan robusta es la contraseña)

Continuar con el paso siguiente

Instalacion drupal

 

Al momento de finalizar la instalación, se muestrará una advertencia en color naranja, para solucionar esto se debe cambiar los permisos de escritura del directorio sites/default y el archivo sites/default/settings.php.

Adicionalmente se debe establecer el host de confianza www.misitioweb.gob.bo en el archivo sites/default/settings.php para mitigar ataques HTTP HOST Header. Para ello abrir el archivo

$ nano /var/www/sitio/web/sites/default/settings.php

Buscar el bloque de comentario donde aparece la palabra Trusted host configuration y al final del bloque agregar:

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

Guardar el archivo con las modificaciones realizadas.

Finalmente Cambiar los permisos de escritura del directorio sites/default y el archivo sites/default/settings.php

$ chmod u-w /var/www/sitio/web/sites/default
$ chmod ugo-w /var/www/sitio/web/sites/default/settings.php

Visitar el sitio instalado

Instalacion drupal

 

Ver el informe de estado sobre las operaciones del sitio (Menú: Administrar >> Informes >> Informe de estado) para verificar que no haya mensajes de advertencia sobre posibles problemas durante la instalación.

Instalacion drupal

 

Con esto se tiene un sitio drupal instalado y listo para configurar módulos adicionales acorde a las funcionalidades que uno requiera.