23 Feb Como 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 usuario@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 al Servidor remoto vamos a hacer alguna cosas, primero actualizar 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 virtual host (vhost) 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; #} }
o 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;
ya tenemos los datos que necesitamos el wordpress la base de datos ahora vamos a modificar el archivo wp-configsample.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!