Cómo instalar nginx, php, mysql y wordpress en Debian 8 (Jessie), (LEMP)

Vamos a hacer una instalación de un LEMP (Linux, Nginx, MySQL y PHP) en Debian Jessie (8).

Pre requisitos:

Si lo van a hacer local tener Debian 8 (Jessie) instalado en su equipo, si lo van a instalar en un servidor o VPS, tener contratado el VPS o Servidor en la nube, configurar y probar los accesos vía ssh tener Debian 8 (Jessie) instalado en el Servidor o VPS.

vamos a conectarnos por ssh a la maquina remota para poder hacer la instalación, los que lo van a hacer en local no necesitan conectarse a ningún servidor.

en este primer paso explico por separado.

si estas en local te vas a la consola y sigues los pasos a partir del siguiente punto.

si vas a un servidor vas al terminal y nos conectamos vía ssh.

ssh root@direccion_ip_maquinaRemota

les va a pedir contraseña del usuario en este caso el administrador, cuando teclean la contraseña no se ve nada en la consola.

luego que estamos conectados vía ssh a el Servidor remoto vamos a hacer alguna cosas primero actualizar la versión de debian y después instalar todo lo que necesitamos.

aptitude update & aptitude full-upgrade

este comando nos actualiza el debian ahora vamos a instalar nginx, php, mysql y correremos un wordpress allí.

instalamos nginx

aptitude install nginx

luego instalamos MySQL

aptitude install mysql-server mysql-client

les va a pedir la contraseña de administrador de mysql

asegurar MYSQL

mysql_secure_installation
Enter current password for root (enter for none):
Change the root password? [Y/n] <--N
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
Thanks for using MySQL!

Instalamos php-fpm

aptitude install php5-mysql  php5-pgsql  php5-fpm php5-cli php5-mcrypt php5-gd libssh2-php git

ahora vamos a configurar todo para que nginx y php-fpm se puedan ver en nuestro navegador sin problemas, primero configuramos php5-fpm para ello vamos a /etc/php5/fpm/php.ini en este archivo buscamos la linea ;cgi.fix_pathinfo=1 lo descomentamos y lo ponemos igual a cero ;cgi.fix_pathinfo=0

original

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  $
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not $
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Se$
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A sett$
; of zero causes PHP to behave as before.  Default is 1.  You should fix your s$
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
;cgi.fix_pathinfo=1

como debe quedar

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  $
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not $
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Se$
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A sett$
; of zero causes PHP to behave as before.  Default is 1.  You should fix your s$
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0

ahora reiniciamos el servicio php5-fpm

service php5-fpm restart

vamos a iniciar nginx

service nginx start

y vamos a nuestro browser o navegador web, si están en local y solo en local http://localhost o http://127.0.0.1 allí verán el mensaje de bienvenida de nginx para debian, si es un servidor remoto o VPS o cualquier otro contenedor en la nube http://direcciónIP del servidor y por dirección IP se entiende (dirección del servidor, dominio, subdominio, etc.) allí también deberíamos ver la pagina de bienvenida de nginx para debian.

para saber si tenemos php instalado vamos a crearnos un archivo en el documen root de nginx por ahora para probar que tenemos instalado php esto es en /var/www/html/ allí se encuentra por defecto el archivo index.nginx-debian.html que no es mas que el que trae por defecto nginx, para ejecutar php en nginx debemos hacer y configurar algunas cosas, primero configurar nuestro virtualhost para nginx este se encuentra en /etc/nginx/sites-avaliable/default este archivo contiene lo siguiente

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php5-cgi alone:
        #       fastcgi_pass 127.0.0.1:9000;
        #       # With php5-fpm:
        #       fastcgi_pass unix:/var/run/php5-fpm.sock;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}

lo debemos editar asignarle nuestro location para ~\.php$ quedando de esta forma

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        client_max_body_size 5000M;
        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.php index.html index.htm index.nginx-debian.html;

        server_name nombre_del_servidor.com;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
                try_files $uri /index.php =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#       listen 80;
#       listen [::]:80;
#
#       server_name example.com;
#
#       root /var/www/example.com;
#       index index.html;
#
#       location / {
#               try_files $uri $uri/ =404;
#       }
#}

con esta configuración ya deberíamos ver scripts php en nuestro servidor, para ello vamos a crearnos un archivo info.php en nuestro root de nginx que esta en /var/www/html/info.php

vim /var/www/html/info.php

a este archivo añadimos lo siguiente

<?php
   phpinfo();
?>

guardamos el archivo y listo reiniciamos nginx y php-fpm

service nginx restart
service php5-fpm restart

ahora vamos al navegador web y vamos a la dirección: si estas en local http://localhost/info.php o 127.0.0.1/info.php y se debe ver la configuración de nuestro equipo, si estas en la nube debes poner en el browser http://tu_dominio.com/info.php o http://tu_direccion_ip/info.php

ahora vamos a configurar un virtualhost y crear un directorio para nuestro wordpress, a descargarlo e instalarlo, para esto debemos crearnos un directorio para que se entienda lo voy a hacer en /var/www/ pero por costumbre debe hacerse en /home/usuario/public_html/

mkdir /var/www/wordpress/public_html

con esto creamos el directorio wordpress y public_html en /var/www/ ingresamos al directorio wordpress/poublic_html y alli nos descargamos la ultima versión de wordpress

luego nos descargamos wordpress y lo descomprimimos, de la siguiente manera

wget http://wordpress.org/latest.tar.gz
tar -xvf latest.tar.gz

nos creamos una base de datos para el blog

mysql -u root -p

les pedira el password de el usuario de mysql lo teclean, ingresan a la consola de mysql y allí vamos a crear las base de datos para el blog

create database wordpress;

con esto creamos la base de datos

create user usuarioblog@localhost identified by '*****';

con este comando creamos un usuario y le damos una contraseña cambiar los ***** por la contraseña que le quieran asignar al usuario para el blog.

grant all privileges on wordpress.* to usuarioblog@localhost identified by '*****';

con esto asignamos el usuario creado en MySQL a la base de datos y le damos los privilegios que necesita

flush privileges;

limpiamos los privilegios de MySQL

exit;

salimos de MySQL

ya tenemos los datos que necesitamos el wordpress la base de datos ahora vamos a modificar el archivo wpconfigsample.php de wordpress

cp wp-config-sample.php wp-config.php

editamos el wp-config.php y le damos los parámetros de base de datos

 * @package WordPress
 */

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'Nombre_de_la_base_de_datos');

/** MySQL database username */
define('DB_USER', 'nombre_de_usuario_creado_en_mysql_para_la_base_de_datos_del_wordpress');

/** MySQL database password */
define('DB_PASSWORD', 'contraseña');

/** MySQL hostname */
define('DB_HOST', 'localhost');

listo la configuración del wordpress y la Base de datos, ahora vamos con el virtualhost para mostrar nuestro wordpress, esto lo modificamos en sites-avaliables del nginx

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/wordpress

primero copiamos el archivo y le ponemos el nombre de nuestro virtualhost en este caso wordpress

luego lo editamos

vim /etc/nginx/sites-available/wordpress
# Default server configuration
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        client_max_body_size 5000M;
        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/wordpress/public_html;

        # Add index.php to the list if you are using PHP
        index index.php index.html index.htm index.nginx-debian.html;

        server_name nombre_del_servidor.com;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
                try_files $uri /index.php =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#       listen 80;
#       listen [::]:80;
#
#       server_name example.com;
#
#       root /var/www/example.com;
#       index index.html;
#
#       location / {
#               try_files $uri $uri/ =404;
#       }
#}

ok fíjense que cambiamos lo que nos interesaba el root para que apunte a nuestro wordpress, el index.php en la seccion index, en locations agregamos try_files $uri $uri/ /index.php?q=$uri&$args; para las url amigables o los permalink de WordPress con Nginx, descomentamos toda la sección “location ~ \.php$ {“.

debemos crear un enlace simbolico de sites-avaliable a sites-enabled

ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/wordpress

a mi en la primera vez no me corrio wordpress, lo que hice fue habilitar el modulo mcrypt y despues reinicie los servicios de nginx y php-fpm

service nginx restart
service php5-fpm restart

listo con esto tendrán su wordpress corriendo en nginx, espero les sirva como a mi.

 

Happy Hacking!