Drupal es una de las principales plataformas de CMS de código abierto en todo el mundo. Es flexible, escalable y se puede utilizar para crear diferentes tipos de sitios web, desde pequeños blogs personales hasta grandes sitios corporativos, políticos y gubernamentales.
En este tutorial, explicaremos cómo instalar Drupal 8.6 en CentOS 7.
Hay varias formas de instalar Drupal. Esta guía cubre los pasos necesarios para instalar Drupal usando una plantilla de compositor para proyectos de Drupal llamada drupal-project.
Usaremos Nginx como servidor web, el último PHP 7.2 y MySQL/MariaDB como servidor de base de datos.
Requisitos previos #
Antes de comenzar la instalación, asegúrese de cumplir con los siguientes requisitos previos:
- Tenga un nombre de dominio que apunte a la IP de su servidor público. Usaremos
example.com
. - Tenga Nginx instalado.
- Tenga un certificado SSL instalado para su dominio. Puede instalar un certificado SSL gratuito de Let's Encrypt siguiendo estas instrucciones.
- Iniciar sesión como usuario con privilegios sudo.
Crea una base de datos MySQL #
El primer paso es crear una nueva base de datos y una cuenta de usuario y otorgar los permisos apropiados al usuario.
Si MySQL o MariaDB ya están instalados en su servidor, puede omitir este paso; si no, puede instalar el paquete del servidor MariaDB 5.5 desde los repositorios predeterminados de CentOS escribiendo:
sudo yum install mariadb-server
Para instalaciones nuevas de MariaDB/MySQL, se recomienda ejecutar mysql_secure_installation
comando para mejorar la seguridad de su servidor de base de datos. Inicie sesión en el shell de MySQL escribiendo el siguiente comando e ingrese la contraseña cuando se le solicite:
mysql -u root -p
Para crear una base de datos llamada drupal
, usuario llamado drupaluser
y para otorgar los permisos necesarios al usuario ejecute los siguientes comandos:
CREATE DATABASE drupal CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES ON drupal.* TO 'drupaluser'@'localhost' IDENTIFIED BY 'change-with-strong-password';
Instalar PHP #
CentOS 7 viene con PHP versión 5.4, que está desactualizado y ya no es compatible. La versión de PHP recomendada para Drupal es PHP 7.2.
Para instalar PHP 7.2 en CentOS 7, primero debemos habilitar los repositorios EPEL y Remi:
sudo yum install epel-release yum-utils
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum-config-manager --enable remi-php72
Una vez que los repositorios estén habilitados para instalar PHP 7.2 y todas las extensiones de PHP requeridas, ejecute los siguientes comandos:
sudo yum install php-cli php-fpm php-mysql php-json php-opcache php-mbstring php-xml php-gd php-curl git
Instalamos PHP FPM porque usaremos Nginx como servidor web.
Por defecto, PHP FPM se ejecutará como usuario apache
en el puerto 9000. Cambiaremos el usuario a nginx
y cambiar de socket TCP a socket Unix. Para hacerlo, abra el /etc/php-fpm.d/www.conf
archivo y edite las líneas resaltadas en amarillo:
...
user = nginx
...
group = nginx
...
listen = /run/php-fpm/www.sock
...
listen.owner = nginx
listen.group = nginx
Asegúrese de que /var/lib/php
El directorio tiene la propiedad correcta usando el siguiente comando chown:
sudo chown -R root:nginx /var/lib/php
Finalmente, habilite e inicie el servicio PHP FPM:
sudo systemctl enable php-fpm
sudo systemctl start php-fpm
Instalar compositor #
Composer es un administrador de dependencias para PHP. Descargaremos la plantilla de Drupal e instalaremos todos los componentes necesarios de Drupal con composer.
El siguiente comando instalará composer globalmente descargando el instalador de Composer con curl
y moviendo el archivo a /usr/local/bin
directorio:
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
Verifique la instalación ejecutando el siguiente comando que imprimirá la versión del editor:
composer --version
La salida debería verse así:
Composer version 1.8.4 2019-02-11 10:52:10
Instalar Drupal #
Ahora que se instaló el compositor, cree un nuevo proyecto de Drupal utilizando la plantilla de Drupal dentro de /var/www/my_drupal
directorio:
sudo /usr/local/bin/composer create-project drupal-composer/drupal-project:8.x-dev /var/www/my_drupal --stability dev --no-interaction
El comando anterior descargará la plantilla, buscará todos los paquetes php necesarios y ejecutará los scripts necesarios para preparar el proyecto para la instalación. El proceso puede tardar unos minutos y, si tiene éxito, el final de la salida se verá así:
Create a sites/default/settings.php file with chmod 0666
Create a sites/default/files directory with chmod 0777
El siguiente paso es instalar Drupal usando Drush. En el siguiente comando, estamos pasando la base de datos MySQL y la información del usuario que creamos en la primera sección:
cd /var/www/my_drupal
sudo vendor/bin/drush site-install --db-url=mysql://drupaluser:change-with-strong-password@localhost/drupal
El instalador le mostrará el siguiente mensaje, simplemente presione Intro para continuar.
You are about to DROP all tables in your 'drupal' database. Do you want to continue? (yes/no) [yes]:
Una vez que se complete la instalación, el script imprimirá el nombre de usuario y la contraseña administrativos. La salida debería ser similar a la siguiente:
[notice] Starting Drupal installation. This takes a while.
[success] Installation complete. User name: admin User password: frxka2Db5v
Finalmente, configure los permisos correctos para que el servidor web pueda tener acceso completo a los archivos y directorios del sitio:
sudo chown -R nginx: /var/www/my_drupal
Configurar Nginx #
A estas alturas, ya debería tener Nginx con certificado SSL instalado en su sistema, si no, verifique los requisitos previos para este tutorial.
Para crear un nuevo bloque de servidor para nuestro nuevo proyecto Drupal, usaremos la receta de Nginx del sitio oficial de Nginx.
Abre tu editor de texto y crea el siguiente archivo:
sudo nano /etc/nginx/conf.d/example.com
/etc/nginx/conf.d/example.com# Redirect HTTP -> HTTPS
server {
listen 80;
server_name www.example.com example.com;
include snippets/letsencrypt.conf;
return 301 https://example.com$request_uri;
}
# Redirect WWW -> NON WWW
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
include snippets/ssl.conf;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
root /var/www/my_drupal/web;
# SSL parameters
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
include snippets/ssl.conf;
# log files
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ \..*/.*\.php$ {
return 403;
}
location ~ ^/sites/.*/private/ {
return 403;
}
# Block access to scripts in site files directory
location ~ ^/sites/[^/]+/files/.*\.php$ {
deny all;
}
# Block access to "hidden" files and directories whose names begin with a
# period. This includes directories used by version control systems such
# as Subversion or Git to store control files.
location ~ (^|/)\. {
return 403;
}
location / {
try_files $uri /index.php?$query_string;
}
location @rewrite {
rewrite ^/(.*)$ /index.php?q=$1;
}
# Don't allow direct access to PHP files in the vendor directory.
location ~ /vendor/.*\.php$ {
deny all;
return 404;
}
location ~ '\.php$|^/update.php' {
fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
include fastcgi_params;
# Block httpoxy attacks. See https://httpoxy.org/.
fastcgi_param HTTP_PROXY "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param QUERY_STRING $query_string;
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php-fpm/www.sock;
}
# Fighting with Styles? This little gem is amazing.
# location ~ ^/sites/.*/files/imagecache/ { # For Drupal <= 6
location ~ ^/sites/.*/files/styles/ { # For Drupal >= 7
try_files $uri @rewrite;
}
# Handle private files through Drupal. Private file's path can come
# with a language prefix.
location ~ ^(/[a-z\-]+)?/system/files/ { # For Drupal >= 7
try_files $uri /index.php?$query_string;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
try_files $uri @rewrite;
expires max;
log_not_found off;
}
}
No olvide reemplazar example.com con su dominio de Drupal y establezca la ruta correcta a los archivos del certificado SSL. Todas las solicitudes HTTP se redirigirán a HTTPS. Los fragmentos utilizados en esta configuración se crean en esta guía. Antes de reiniciar el servicio Nginx, haga una prueba para asegurarse de que no haya errores de sintaxis:
sudo nginx -t
Reinicie el servicio Nginx para que los cambios surtan efecto escribiendo:
sudo systemctl restart nginx
Probar la instalación #
Abra su navegador, escriba su dominio y suponiendo que la instalación sea exitosa, aparecerá una pantalla similar a la siguiente:
Puede iniciar sesión como administrador y comenzar a personalizar su nueva instalación de Drupal.
Instalar módulos y temas de Drupal #
Ahora que tiene instalado su proyecto Drupal, querrá instalar algunos módulos y temas. Los módulos y temas de Drupal están alojados en un repositorio de compositor personalizado, que drupal-project configura para nosotros de manera inmediata.
Para instalar un módulo o un tema, todo lo que necesita hacer es cd
al directorio del proyecto y escriba composer require drupal/module_or_theme_name
. Por ejemplo, si queremos instalar Pathautomodule, debemos ejecutar el siguiente comando:
Anteponiendocd /var/www/my_drupal
sudo -u nginx /usr/local/bin/composer require drupal/pathauto
sudo -u nginx
estamos ejecutando el comando como usuario nginx
Using version ^1.3 for drupal/pathauto
./composer.json has been updated
> DrupalProject\composer\ScriptHandler::checkComposerVersion
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
- Installing drupal/token (1.5.0): Downloading (100%)
- Installing drupal/ctools (3.2.0): Downloading (100%)
- Installing drupal/pathauto (1.3.0): Downloading (100%)
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating autoload files
> DrupalProject\composer\ScriptHandler::createRequiredFiles
Como puede ver en el resultado anterior, Composer también instala todas las dependencias del paquete por nosotros.
Actualizar Drupal Core #
Antes de actualizar, siempre es una buena idea hacer una copia de seguridad de sus archivos y base de datos. Puede usar el módulo Copia de seguridad y migración o hacer una copia de seguridad manual de su base de datos y archivos.
Para hacer una copia de seguridad de los archivos de instalación, puede usar el siguiente comando rsync, por supuesto, deberá usar la ruta correcta al directorio de instalación:
sudo rsync -a /var/www/my_drupal/ /var/www/my_drupal_$(date +%F)
Para hacer una copia de seguridad de la base de datos, podemos usar el estándar mysqldump
comando:
mysqldump -u root -p > /var/www/my_drupal_database_$(date +%F).sql
o drush sql-dump
:
cd /var/www/my_drupal
vendor/bin/drush sql-dump > /var/www/my_drupal_database_$(date +%F).sql
Ahora que creamos una copia de seguridad, podemos continuar y actualizar todos los archivos principales de Drupal ejecutando el siguiente comando:
sudo -u nginx /usr/local/bin/composer update drupal/core webflo/drupal-core-require-dev symfony/* --with-dependencies