Cómo instalar LEMP, Linux, Nginx, MySQL, PHP en Ubuntu 14.04

1. Actualizar nuestro sistema

Instalará la versión estable que trae el sistema

$ sudo apt-get update && sudo apt-get upgrade

 

2. Instalar NGINX

$ sudo apt-get install nginx

Para probar que la instalación se hizo correctamente en tu navegador ve a http://localhost  o http://tudireccionIP y deberías ver un mensaje como este:
sale un mnensaje algo asi: Welcome to nginx!

 

3. Instalar MySQL

$ sudo apt-get install mysql-server

 

4. Haciendo Seguro MySQL

$ sudo mysql_secure_installation

 

5. Instalar PHP

Nota: Como vemos instalamos la versión FPM de PHP ((PHP5 FastCGI Process Manager), esta es la versión ideal para utilizar con nginx.

$ sudo apt-get install php5-fpm php5-mysql

 

6. Configurar NGINX y PHP para que funcionen juntos

sudo nano /etc/php5/fpm/php.ini

Y cambiamos la línea cgi.fix_pathinfo=1 por, si el parámetro tiene un ( ; ) adelante lo eliminamos ya que quiere decir que está comentado:

cgi.fix_pathinfo=0

Nota: Si este parámetro lo dejamos en 1, el intérprete de php hará todo lo posible para procesar el archivo más cercano al archivo solicitado, lo que es un riesgo de seguridad. Colocando el parámetro a 0 sólo se procesará el archivo solicitado.
Guardamos el archivo y reiniciamos PHP ejecutando:

$ sudo service php5-fpm restart

Ahora vamos a modificar el archivo de configuración del sitio por defecto de nginx que es el que vamos a utilizar y que está ubicado en /etc/nginx/sites-available/default, una vez más utilizando nano:
sudo nano /etc/nginx/sites-available/default

Debemos descomentar las líneas que comienzan con # que se indican a continuación para que el archivo quede de la siguiente forma:

location ~ \.php$ {
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
#       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
#       # With php5-cgi alone:
       fastcgi_pass 127.0.0.1:9000;
#       # With php5-fpm:
#       fastcgi_pass unix:/var/run/php5-fpm.sock;
       fastcgi_index index.php;
       include fastcgi_params;
}

Guarda el archivo y reiniciamos nginx ejecutando:

$ sudo service nginx restart

7. Verificando que todo funciona

Por último debemos verificar que todo funciona y que nuestra configuración está correcta.

En Ubuntu el directorio por defecto donde estarán nuestros archivos para el sitio es /usr/share/nginx/html. Por lo que crearemos un archivo ahí que llamaremos prueba.php, creamos el archivo ejecutando

$ sudo nano /usr/share/nginx/html/phpinfo.php

Y dentro de ese archivo escribimos la siguiente línea:

<?php phpinfo(); ?>

Ahora probamos que todo ande bien en nuestro navegador

http://localhost/phpinfo.php

y nos debe salir toda la configuracion de PHP, con esto terminamos la configuracion ;)

 

Crear nuevo virtual host

Crear un nuevo archivo que contiene toda la información de nuestra máquina virtual.

Convenientemente, nginx nos proporciona un diseño para este archivo en el directorio sites-available (/etc/nginx/sites-available). Todo lo que necesita es copiar el texto en un nuevo archivo:

$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/midominio.com

Ahora abrir este archivo y editar, y se encontrará un codigo similar a esto:

server {
  listen       80;
  server_name  midominio.com www.midominio.com ;
   
  access_log   /var/log/nginx/midominio.com.access.log;
  error_log    /var/log/nginx/midominio.com.error.log;
 
  root /var/www/midominio.com/html;
  index index.php;
 
  location / {
    root /var/www/midominio.com/html;
    if (!-e $request_filename) {
      rewrite ^/(.*)$ /index.php?q=$1 last;
    }
  }
 
  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_ignore_client_abort on;
    fastcgi_param  SERVER_NAME $http_host;
  }
 
  location ~ /\.ht {
    deny  all;
  }
}

Por último, tendrá que activar el host mediante la creación de un vínculo simbólico entre el directorio sites-available y el directorio sites-enabled en el servidor de la nube. Este es un paso fácil para saltar, así que asegúrese de introducir el siguiente comando:

$ sudo ln -s /etc/nginx/sites-available/midominio.com /etc/nginx/sites-enabled/midominio.com

Al final reiniciar el servidor, deberá salir un nmensaje de "OK" cuando todo este bien

$ sudo service nginx restart

Creamos una carpeta en la ruta: "/var/www/midominio.com/public_html" mediante la adición de un -p para la línea de código, el comando genera automáticamente todos los padres por el nuevo directorio.

$ sudo mkdir -p /var/www/midominio.com/public_html

Otorgar Permisos, usuario root es el propietario. Si queremos que nuestro usuario regular pueda modificar los archivos en nuestro directorio web, necesitamos cambiar el propietario haciendo lo siguiente:
La variable $USER tomará el valor del usuario con el cual actualmente estás identificado. Al hacer esto, nuestro usuario regular ahora es propietario de los directorios public_html donde se almacenará nuestro contenido.

$ sudo chown -R $USER:$USER /var/www/midominio.com/public_html
$ sudo chown -R www-data:www-data /var/www/midominio.com/public_html/files  (Con esto asignamos como owner: www-data y como grupo: www-data para permitir subida de archivos)

Debemos además modificar los permisos un poco para asegurarnos que el permiso de lectura pueda ser aplicado a archivos y directorios para que las páginas puedan ser desplegadas correctamente:
Tu servidor ahora tiene los permisos necesarios para mostrar el contenido, y el usuario deberá ser capaz de crear contenido en los directorios a medida que sea necesario.

$ sudo chmod -R 755 /var/www

 

Ejemplo de virtual host que viene en homestead de Laravel

Este ejemplo es con la version de Nginx 1.11.1 en el sistema operativo Ubuntu 16

server {
    listen 80;
    listen 443 ssl;
    server_name homestead.app;
    root "/home/vagrant/Code/Laravel/public";
 
    index index.html index.htm index.php;
 
    charset utf-8;
 
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
 
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
 
    access_log off;
    error_log  /var/log/nginx/homestead.app-error.log error;
 
    sendfile off;
 
    client_max_body_size 100m;
 
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }
 
    location ~ /\.ht {
        deny all;
    }
 
    ssl_certificate     /etc/nginx/ssl/homestead.app.crt;
    ssl_certificate_key /etc/nginx/ssl/homestead.app.key;
}

 

Instalar última versión de Nginx

Paso 1.- Ir a la URL: https://nginx.org/en/linux_packages.html#stable y descargar el key dando click en "this key"
luego ejecutar ese archivo con este comando.

$ apt-key add nginx_signing.key

 

Paso 2.- Para Debian reemplazar codename con Debian codename de distribución, y añadir lo siguiente al final del archivo /etc/apt/sources.list
para saber la version de sus sistema:

$ lsb_release -a

Añadir al final de la lista

deb http://nginx.org/packages/ubuntu/ codename nginx
deb-src http://nginx.org/packages/ubuntu/ codename nginx

 

Paso 3.- Para Debian / Ubuntu a continuación, ejecute los siguientes comandos:

$ apt-get update
$ apt-get install nginx