Configuración de Apache en Linux con carpetas externas

  • Por
Tutorial para configurar Apache en un servidor de desarrollo, de una manera muy práctica, para poder servir un dominio en local, con archivos existentes fuera de la carpeta de publicación.
En el presente artículo vamos a mostrar una de las configuraciones fundamentales que todo desarrollador debe conocer, para poder gestionar varios proyectos dentro de su propio ordenador local en Linux, asociados a dominios de Internet que se servirán desde el propio localhost. Además, los archivos de esos proyectos se servirán desde carpetas externas, algo que es útil por diversos motivos que explicaremos a continuación.

Cuando trabajamos con proyectos web en un servidor Apache para desarrollo, instalado de manera local en nuestra máquina, existe una carpeta por defecto en la que se colocan los documentos que debe servir Apache al navegador. Esta carpeta es www o htdocs y se conoce normamente con el nombre de carpeta de publicación. Sin embargo, no es la única manera en la que podemos trabajar con nuestros proyectos y aprovechar las características de utilizar un servidor local.

Existen muchas razones por las que nos puede interesar trabajar en una carpeta externa a la de publicación. Entre los motivos podemos destacar varios. Por ejemplo, facilitar el proceso de copias de seguridad, al trabajar en una ubicación en la que existen más carpetas de las que solemos hacer copias. O tener los proyectos más "a salvo", en caso de que se hiciese necesaria algún tipo de reinstalación. Incluso puede darse el caso de que estemos trabajando en una máquina Linux en la que trabaja más de un desarrollador pero no todos deben tener acceso para abrir y escribir archivos y carpetas a una zona tan delicada del sistema, que pertenece al administrador.

Si por cualquier motivo deseas saber cómo configurar cualquier carpeta de tu sistema como directorio desde donde se sirvan documentos web, ahora te explicaremos cómo conseguirlo. Para ello vamos a seguir el proceso de configuración de nuestro servido Apache, paso a paso, para poder trabajar con esta otra metodología.

Creando el espacio de trabajo en una carpeta distinta a la de publicación

Aclarar primero que las indicaciones que voy a dar están referenciadas a una máquina con Linux, Ubuntu concretamente. Sin embargo el proceso es bastante parecido en otros sistemas y la explicación opino es suficientemente clara para poder intentarlo también.

Lo primero que vamos a hacer, suponiendo que el sitio web que vamos a llevar a cabo fuese desarrolloweb.com, es crear en nuestra carpeta personal -home/tu_nombre_usuario- un directorio en el que ubicaremos todos los archivos a publicar. En nuestro caso para que todo sea más ordenado, crearemos primero una carpeta en la que estarán todos los diferentes proyectos a la que llamaremos “proyectos”. Para ello abrimos un terminal o consola y escribimos el siguiente comando:

$ mkdir proyectos

Nota: Al abrir el terminal de comandos ya nos sitúa directamente dentro de la carpeta home de nuestro usuario, por eso podemos hacer el mkdir proyectos directamente. Si nuestro usuario se llamase "pablo", la ruta sería /home/pablo. Si queréis comprobar en cualquier momento cuál es la carpeta donde os encontráis podéis escribir el comando:

$ pwd

A continuación entramos dentro de proyectos y creamos la carpeta para nuestro proyecto desarrolloweb.com:

$ cd proyectos
$ mkdir desarrolloweb

Ahora que tenemos nuestra carpeta creada, deberíamos modificar los permisos de lectura y escritura para que Apache pueda leer en ella. En nuestro caso, vamos a conceder permisos totales a todos los usuarios para ambas carpetas, algo que solo haremos porque es un servidor para desarrollo y porque trabajamos de manera local en nuestra propia máquina:

$ chmod 777 proyectos
$ cd proyectos
$ chmod 777 desarrolloweb

Habilitando y configurando nuestro sitio en Apache

A continuación nos disponemos a configurar las directrices por las que el servidor se guiará para servir esta página. Entramos en la carpeta /etc escribiendo:

$ cd /etc

En esta carpeta encontramos el archivo hosts, que indica al ordenador la relación existente entre dominios de Internet y direcciones IP. Con el editor que queramos, en mi caso vim, editaremos este archivo para decirle al ordenador que la dirección desarrolloweb.com la busque en nuestro servidor localhost y no en la IP real del dominio.

Nota: Cuando queramos acceder a la dirección real de la página, simplemente comentaremos esta linea con almohadilla # . Otra manera es configurar en local desarrolloweb.com (sin www) y dejar la dirección completa libre para el acceso a la página en su servidor real.

Para esta configuración ejecutamos el editor elegido ( en mi caso vim, pero si lo deseas puedes ver otras alternativas a Vi) desde /etc escribiendo:

$ sudo vim hosts

Nota: Hemos ejecutado como superusuario, gracias al comando sudo, porque al no tratarse de un archivo que esté dentro de nuestra /home, necesitamos permisos de administrador.

En el archivo incluimos una linea en la que asociamos nuestra IP de localhost (servidor local) a la dirección ip de nuestro Apache, que es 127.0.0.1

127.0.0.1      desarrolloweb.com.local

Salvamos y comprobamos haciendo ping a desarrolloweb.com y vemos que nos devuelve la IP de nuestro servidor local. Recuerda que para eliminar este comportamiento simplemente comentamos la linea del archivo hosts con #.

El siguiente paso es definir la ruta en la que se encuentra el contenido que se quiere asociar al dominio. Entramos en la carpeta de apache:

$ cd apache2

Accedemos ahora a la carpeta sites-available, donde se encuentran las configuraciones para los diferentes dominios que contiene el servidor. Si no hemos definido ninguno, tendremos solo un archivo default y un default-ssl. Nosotros vamos a usar el default como base de configuración así que lo copiamos renombrándolo además con el nombre de nuestro dominio. Realicemos ambos pasos.

$ cd sites-available
$ sudo cp default desarrolloweb.com.local

A continuación editamos el archivo:

$ sudo vim desarrolloweb.com.local

En el archivo que se abre, podríamos configurar muchísimos parámetros, pero vamos a tocar solo los mínimos necesarios que corresponden a este tutorial. En la linea número tres, debajo de ServerAdmin, escribiremos el nombre del servidor incluyendo la siguiente linea:

ServerName desarrolloweb.com.local

Y bajo esta linea sustituiremos /var/www por la carpeta de publicación a asignar, en nuestro caso la linea quedará así:

DocumentRoot /home/nombredelusuario/proyectos/desarrolloweb

A continuación sustituimos en la linea nueve la ruta, quedando la línea de la siguiente manera:

<Directory /home/nombredelusuario/proyectos/desarrolloweb/>

Nota: Podríamos configurar otras cosas como los logs, pero no procede en este tutorial.

Nuestro sitio está configurado, lo que tenemos que hacer ahora es activar nuestro sitio para su publicación en apache. Para ello, desde la misma carpeta, ejecutaremos un comando propio de apache:

$ sudo a2ensite desarrolloweb.com.local

Y si todo ha ido bien nos solicitará recargar apache, lo que podemos hacer escribiendo:

$ sudo service apache2 reload

Una vez ha recargado Apache, solo nos queda abrir el navegador y escribir la dirección sin www y comprobar cómo lo que se nos muestra es el contenido de nuestra carpeta local. Ahora podremos llevar a cabo todo nuestro proyecto en una carpeta situada en nuestra carpeta personal y además comprobarlo en el navegador desde la misma dirección que tendrá en Internet.

Conclusión

Lo único que debemos recordar es que para acceder a la dirección remota, debemos escribir la dirección completa www.desarrolloweb.com o comentar la línea que pusimos en nuestro archivo hosts.

Autor

Pablo Bernardo

Front-end (HTML5, CSS3 y algo de jQuery) , algo de back-end (en PHP) y programación en Python.

Compartir

Comentarios

Juancete

25/4/2012
Configuración de Apache en Linux con carpetas externas
Buen tutorial! Cuando comencé a usar Apache y php en Linux tuve un problema relacionado con esto. No podía trabajar dentro de la carpeta htdocs ya que como está fuera de /home no tenía los permisos de escritura. La solución que se me ocurrió en su momento fue entrar como administrador, registrar a Apache como usuario y luego darle permisos de lectura/escritura para la carpeta htdocs.
Esta solución es mucho más práctica y útil.

Rubén

10/5/2012
Configuración de Apache en Linux con carpetas externas
Hola.
Es más fácil de otro modo.
Le dices al apache que el 127.0.01 es una carpeta llamada www, que en realidad es un enlace simbólico que está en /var y ese enlace simbólico apunta a una carpeta en cualquier otro sitio.

En mi caso, en otra partición: /media/datos/webs/ y dentro de esta última, una carpeta para cada web en desarrollo. Cuando tengo que trabajar con una de ellas, renombro esa carpeta como www y listo, ya funciona en localhost.

Espero sirva. A mi me sirve, y puedo trabajar en medio segundo con tantos desarrollos diferentes como quiera.

Un saludo.

MeryBoo

15/11/2012
Apuntar a carpetas dentro de var/www con varios dominios
La verdad es que acabo de empezar con estos temas y estoy un poco perdida.<br />
Tengo un server linux, y en la carpeta www tengo varias sub carpetas y en cada cual de ellas tengo una web. Lo que necesito ahora es que www.midominio1.com apurte a la carpeta dominio1, www.midominio2.com a la carpeta dominio2 y así sucesivamente. ¿Cómo lo hago?<br />
Por otro lado, despliego unos servicios web mediante glassfish, y para acceder a ellos tengo que teclear: mi_ip:8080/NombreProyecto. Lo que quiero es que un tercer dominio www.midominio3.com apunte a lo anterior. ¿Cómo puedo hacer esto?<br />
Muchas gracias!!!!!

rolland_castillo

22/12/2012
Configurar una carpeta en Dropbox
Yo estuve bastante tiempo tratando de crear la carpeta local en dropbox y la sola solución fue cambiar los permisos de la carpeta Dropbox a 777 y funciono, pero no se si esto pueda crear problemas con la sincronización, hasta el momento ha funcionado.

Jair

14/4/2013
Problema
Hola, muy buen tutorial, he realizado todo como me indican pero tengo un problema, desde el navegador no puedo acceder escribiendo www.mysite.com solo puedo acceder por la IP de mi servidor, también no puedo a2ensite 2 sitios a la vez porque solo me toma el ultimo que activé.
Les agradeceria me pudieran ayudar. Saludos

daniel

26/5/2014
no correo php
Buenas, gracias por el tutorial, pero tengo un problema y es que el codigo php no se ejecuta solo muestra el html del php, instale phpmyadmin y si funciona claro que se instalo donde el sistema lo pone dor defecto.

Kico

06/10/2014
Problema con la "ñ" en apache
Buenas a todos! Gracias por el post.
Tengo un problema a ver si me podéis ayudar. No es el típico problema de visualización de la "ñ". Cuando configuro varios dominios todos funcionan correctamente menos curiosamente uno de ellos que contiene la "ñ" , diseñografico.net, utilizo otro nombre de proyecto pero en sites-available en el archivo de configuración obviamente si tengo que poner dicho nombre en Server name. Vamos que hago lo mismo que con los otros dominios que están funcionando pero este en concreto sólo lee la carpeta raiz y no la carpeta que quiero.

Muchas gracias.

Saludos