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!