CentOS 7 (nginx, MariaDB, PHP, Redis)

Aquí te dejamos un pequeño manual de instalación desde una instalación de sistema operativo básico de CentOS 7.

Lo primero es hacer una primera actualización y configuración de la base del sistema operativo.

$ yum clean all && yum -y upgrade
$ yum -y install yum-utils curl vim unzip wget
$ yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional

Una vez esté instalado el sistema operativo, lo primero que configuraremos será la hora del servidor. En este caso configuraremos la zona horaria de Madrid.

$ timedatectl set-timezone 'Europe/Madrid'
$ yum -y install ntp
$ systemctl start ntpd
$ systemctl enable ntpd
$ systemctl status ntpd
$ ntpq -p

Para poder aprovechar al máximo las últimas versiones, usaremos el repositorio alternativo EPEL.

$ yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
$ yum -y install https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
$ yum clean all && yum -y upgrade

El siguiente paso será la instalación de la base de datos. En este caso vamos a utilizar MariaDB 10.3. Lo primero que haremos será configurar la descarga, y posteriormente su instalación.

$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- --mariadb-server-version=mariadb-10.3
$ yum clean all && yum -y upgrade
$ yum -y install MariaDB-server MariaDB-client

Ahora que está instalada, procederemos a la configuración inicial. Para ello usaremos el sistema se instalación segura, que nos hará algunas preguntas.

$ mysql_secure_installation

A la pregunta de si queremos cambiar la contraseña, dependiendo de si hemos puesto o no en la instalación, la cambiaremos. En caso de no haber puesto ninguna, es muy recomendable ponerle una contraseña segura.

Set root password? [Y/n]: Y

Al resto de preguntas, contestaremos lo siguiente:

Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y

En este momento ya tendremos la base de datos configurada. Ahora haremos que se ejecute en los re inicios del sistema y la iniciaremos.

$ systemctl stop mysql.service
$ systemctl enable mysql.service
$ systemctl start mysql.service

En este momento tenemos la base de datos configurada y vamos a proceder a la instalación del servidor web. En este caso vamos a usar nginx. Para estar al día, no usaremos la versión que viene con el sistema operativo, sino una más actualizada y mantenida.

$ yum clean all && yum -y upgrade
$ yum -y install nginx

Ahora que tenemos nginx instalado, lo vamos a configurar para que se inicie en los re inicios del sistema automáticamente.

$ systemctl stop nginx.service
$ systemctl enable nginx.service
$ systemctl start nginx.service

En este momento ya tenemos el servidor web, por lo que vamos a instalar y a configurar PHP para que funcione correctamente con la base de datos y el servidor web. En este caso vamos a instalar la versión PHP 7.3. Primero haremos la instalación de los paquetes más actualizados (que no son los que vienen con el sistema operativo) y que en caso de necesitarlo, además, nos permitirían tener varias versiones de PHP en paralelo.

$ yum-config-manager --enable remi-php73
$ yum clean all && yum -y upgrade
$ yum -y install php73-php php73-php-fpm php73-php-common php73-php-devel php73-php-cli php73-php-bcmath php73-php-pecl-crypto php73-php-gd php73-php-pecl-geoip php73-php-pecl-imagick php73-php-imap php73-php-json php73-php-mbstring php73-php-pecl-mcrypt php73-php-mysqlnd php73-php-opcache php73-php-soap php73-php-sodium php73-php-pecl-ssh2 php73-php-pecl-xdebug php73-php-xml php73-php-xmlrpc php73-php-pecl-zip

Ahora que ya tenemos PHP correctamente instalado, vamos a activarlo de forma que cuando se reinicie el sistema se ejecute automáticamente.

$ systemctl stop php-fpm.service
$ systemctl enable php-fpm.service
$ systemctl start php-fpm.service
$ nginx -t
$ nginx -s reload

Para trabajar con unas mejoras en el rendimiento de la caché de objetos, vamos a dejar listo Redis como sistema de almacenamiento.

$ yum clean all && yum -y upgrade
$ yum -y install redis php73-php-phpiredis

Posteriormente, y de la misma forma que el resto de elementos, lo vamos a configurar para que se inicie automáticamente si se reinicia el servidor.

$ systemctl stop redis.service
$ systemctl enable redis.service
$ systemctl start redis.service

Como vamos a montar nuestra web sobre un servidor web seguro (HTTPS), necesitaremos instalar el generador de certificados de Let’s Encrypt, de forma que previamente prepararemos los sistemas para la creación de claves seguras.

$ openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Y en este momento instalaremos el sistema de creación de certificados certbot.

$ yum clean all && yum -y upgrade
$ yum -y install certbot-nginx

Para que los certificados se actualicen automáticamente, activaremos una tarea programada (cron) una vez al día que automáticamente renueve los certificados.

$ crontab -e

Una vez dentro, configuraremos, por ejemplo, que se ejecute a las 06:45 cada mañana.

45 6 * * * certbot renew --dry-run

A partir de este momento podemos reiniciar la máquina si queremos, y ya la tendremos lista para comenzar su uso y montar los sitios web.