systemadmin.es > LAMP y web > Instalación Linux, nginx, MySQL, PHP (LEMP) en CentOS 7

Instalación Linux, nginx, MySQL, PHP (LEMP) en CentOS 7

Detras de las siglas LEMP de esconde el típico LAMP cambiando el Apache por un nginx (la E es por la forma que se pronuncia. Vamos a ver cómo instalar una LEMP en CentOS 7:

Primero deberemos instalar los repositorios:

  • Podemos instalar el repositorio oficial de nginx mediante:
    rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    
  • Para MySQL 5.6 también podemos tirar del repositorio oficial para substituir la MariaDB que nos viene por defecto:
    rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
    
  • Para otras utilidades que necesitaremos también podemos instalar EPEL:
    yum install epel-release -y
    

En CentOS 7 podemos ver que ya disponemos en los repositorios de un paquete para tener php-fpm:

# yum info php-fpm
(...)
Available Packages
Name        : php-fpm
Arch        : x86_64
Version     : 5.4.16
Release     : 23.el7_0.3
Size        : 1.4 M
Repo        : updates/7/x86_64
Summary     : PHP FastCGI Process Manager
URL         : http://www.php.net/
License     : PHP and Zend and BSD
Description : PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI
            : implementation with some additional features useful for sites of
            : any size, especially busier sites.

Instalaremos el LEMP mediante yum:

yum install pwgen mysql-community-server nginx php-fpm php-mysqlnd -y

A continuación personalizaremos los scripts de inicio (systemd) para tener un reinicio automático del servicio en caso de fallo

cp /usr/lib/systemd/system/nginx.service /etc/systemd/system
cp /usr/lib/systemd/system/php-fpm.service /etc/systemd/system
sed 's/^\(\[Service\]\)/\1\nRestart=always/' -i /etc/systemd/system/nginx.service
sed 's/^\(\[Service\]\)/\1\nRestart=always/' -i /etc/systemd/system/php-fpm.service

Habilitamos en el inicio del sistema y arrancamos los daemons:

systemctl enable nginx
systemctl enable mysqld
systemctl enable php-fpm
systemctl start nginx
systemctl start php-fpm
systemctl start mysqld

A continuación deberemos acabar de configurar los daemons, para MySQL veremos que no tiene configurada ninguna contraseña, por lo que deberemos definirla:

mysql> select user, host, password from mysql.user;
+------+-------------------------+----------+
| user | host                    | password |
+------+-------------------------+----------+
| root | localhost               |          |
| root | kellicam.systemadmin.es |          |
| root | 127.0.0.1               |          |
| root | ::1                     |          |
|      | localhost               |          |
|      | kellicam.systemadmin.es |          |
+------+-------------------------+----------+
6 rows in set (0.00 sec)

Crearemos un fichero .my.cnf en la home de root con la contraseña generada con pwgen y eliminaremos los usuarios innecesarios:

echo -e "[client]\npassword=$(pwgen 30)\n" > ~/.mydisabled.cnf
mysqladmin -u root password $(grep ^password ~/.mydisabled.cnf | cut -f2 -d=)
mv ~/.mydisabled.cnf ~/.my.cnf
echo 'delete from mysql.user where password="";' | mysql
echo 'flush privileges;' | mysql

En el caso de nginx, deberemos definir el backend para procesar PHP y configurar que se ejecuten los PHPs, para ello deberemos definir php-fpm que tenemos levantado dentro de un fichero en /etc/nginx/conf.d, por ejemplo, phpbackend.conf con:

upstream php {
        server   localhost:9000;
}

A continuación deberemos definir que se ejecuten los scripts PHP mediante dicho upstream server mediante lo siguiente en cada vhost (lo podemos incluir desde un fichero común)

location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass php;
}

A partir de aquí ya deberemos acabar de configurar el sistema de acuerdo con nuestras necesidades.

3 comments to “Instalación Linux, nginx, MySQL, PHP (LEMP) en CentOS 7”

  1. Mejor conectar nginx y PHP-FPM via socket Unix si van a estar en la misma máquina. Eliminas todo el trasiego de atravesar el stack IP dos veces para terminar en la misma máquina.

  2. Tienes toda la razón, esto mismo hice cuando lo instalé con Apache, hoy he añadido también las instrucciones para usar un socket en nginx

  3. Justamente necesitaba algo de esto.
    Gracias por compartirlo.

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>