Quantcast
Channel: GNU/Linux – forInformática
Viewing all articles
Browse latest Browse all 15

¿Cómo instalar y configurar un servidor web en Ubuntu 16.04?

$
0
0

Una de las ventajas que podemos utilizar cuando tenemos instalado un sistema operativo como Ubuntu es la de tener un sistema operativo muy parecido al que utilizan la mayoría de servidores en Internet.

Esto puede ayudarnos mucho a la hora de desarrollar aplicaciones o probar nuestra página web en local antes de ponerla en el servidor real, y así evitar posibles problemas que puedan ocurrir en el transcurso de subir la web a “producción” (término utilizado para denominar cuando un sistema está listo para su puesta en marcha).

En este artículo vamos a aprender a instalar y configurar un servidor web con todos los elementos indispensables (Apache, como servidor web; PHP, para contenido dinámico; y MySQL para bases de datos). Este conjunto de aplicaciones, para nuestro caso, se suele denominar LAMP (por las siglas de Linux, Apache, MySQL y PHP).

Instalación

Lo primero que tenemos que hacer es instalar todos los elementos necesarios para que funcione un servidor web. Voy a poner el comando completo y después voy a explicar qué es cada cosa.

sudo apt-get install apache2 php curl php-curl mysql php-mysql libapache2-mod-php

Ahora vamos a ir uno por uno:

  • apache2: es la aplicación que actúa como servidor web.
  • php: el intérprete del lado del servidor para poder usar algún tipo de lenguaje de programación dinámico.
  • curl: aplicación para realizar peticiones. Muy útil si vamos a utilizar algún tipo de API en nuestra aplicación.
  • php-curl: librería de php para poder usar curl.
  • mysql: servidor de bases de datos.
  • php-mysql: librería de php para poder usar mysql.
  • libapache2-mod-php*: librería de apache2 para poder ejecutar archivos .php.
* Si estamos en Ubuntu 14.04, tenemos que instalar apache2-mpm-prefork en lugar de libapache2-mod-php

Durante la instalación, aparecerá una pantalla para que introduzcamos una contraseña. Esa contraseña es la de root de MySQL, es decir, el usuario con más permisos. Yo recomiendo desde aquí utilizar una contraseña segura.

Una vez que ya tenemos todas las aplicaciones y librerías necesarias, vamos a empezar con la segunda parte, la de la configuración de todos los servicios.

Configuración de apache2

Vamos a hacer una configuración que se podría considerar avanzada. Lo que vamos a tener al final de este apartado serán dos servidores webs virtuales configurados en la misma dirección IP pero usando dos puertos distintos, es decir, podremos acceder a dos webs totalmente distintas en la misma IP (o dominio) sólo con cambiar el puerto.

Para ello, lo primero es preparar dos carpetas. Por defecto, la instalación de Apache crea la carpeta donde poner nuestros archivos para que sean visibles a través del servidor web en “/var/www/html”. Lo que vamos a hacer es crear otra carpeta que le pondremos el nombre de “other” en la ruta “/var/www”. Para ello ejecutamos el siguiente comando:

sudo mkdir /var/www/other

Es importante que el usuario que ejecuta el servidor web (un usuario que crea la instalación de Apache, llamado “www-data”, que se añade automáticamente a un grupo que también crea la instalación y que tiene el mismo nombre) sea el dueño de las carpetas, para que después no haya problemas con los permisos de la aplicación. Lo único que tenemos que hacer es poner el siguiente comando:

sudo chown www-data:www-data -R /var/www

Ese comando lo que significa es que vamos a cambiar la propiedad de las carpetas que están a partir de “www” (ésta incluida), es decir, de forma recursiva (-R), y que el nuevo dueño va a ser el usuario www-data y el grupo www-data (con el formato usuario:grupo).

Y vamos a aplicar los permisos necesarios, dejando todos los permisos para el propietario (7) y de lectura y ejecución para el grupo y para el resto (5, 5).

sudo chmod 755 -R /var/www/html /var/www/other

Ya tenemos todos los temas de carpetas y permisos solucionados. Ahora vamos con los archivos de configuración. El primero de ellos “ports.conf”.

Antes de seguir adelante, yo voy a usar “nano” como editor, pero se puede usar cualquiera, incluso los que tienen interfaz gráfica. El primero lo voy a hacer con “nano” y “pluma” (que es el editor por defecto de Ubuntu MATE) a modo de ejemplo, pero después voy a seguir sólo con “nano”.

sudo nano /etc/apache2/ports.conf

Habría que añadir la línea que está resaltada en el siguiente código:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80
Listen 8080

<IfModule ssl_module>
	Listen 443
</IfModule>

<IfModule mod_gnutls.c>
	Listen 443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

En mi caso es “8080” porque es el segundo puerto que voy a utilizar (el que utiliza por defecto Apache es 80, como se ve en la imagen, el primer “Listen”).

Después de modificar el archivo tenemos que pulsar “Control+o” para guardar y, despues, “Control+x” para salir.

En la parte inferior se pueden ver los diferentes comandos que hay. Si abajo pone ^X, significa “Control+X”.

Ahora usando pluma:

gksudo pluma /etc/apache2/ports.conf

En este caso podemos simplemente darle al botón de guardar y, después, pulsar la (X) del panel superior derecho para cerrar.

Al cerrar el editor, habrá unos “warnings” en el terminal. No hay que preocuparse por eso.

Con esto ya hemos configurado nuestro servidor para que escuche en dos puertos distintos, en mi caso, el puerto 80 y el 8080. Ahora vamos a indicarle que hay dos aplicaciones distintas que van a ejecutarse cada una en un puerto. Para ello vamos a modificar el “virtualhost” por defecto y vamos a crear otro.

sudo nano /etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
	# The ServerName directive sets the request scheme, hostname and port that
	# the server uses to identify itself. This is used when creating
	# redirection URLs. In the context of virtual hosts, the ServerName
	# specifies what hostname must appear in the request's Host: header to
	# match this virtual host. For the default virtual host (this file) this
	# value is not decisive as it is used as a last resort host regardless.
	# However, you must set it for any further virtual host explicitly.
	
	ServerName localhost

	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html

        <Directory /var/www/html>
		Options Indexes FollowSymLinks
		AllowOverride All
	</Directory>

	# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
	# error, crit, alert, emerg.
	# It is also possible to configure the loglevel for particular
	# modules, e.g.
	#LogLevel info ssl:warn

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	# For most configuration files from conf-available/, which are
	# enabled or disabled at a global level, it is possible to
	# include a line for only one particular virtual host. For example the
	# following line enables the CGI configuration for this host only
	# after it has been globally disabled with "a2disconf".
	#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Al igual que antes, hay que añadir o modificar las líneas resaltadas.

La parte de “<Directory…” es para permitir indexar las carpetas del lado del servidor en el caso de que no haya un index (index.html, index.php, …) y para que pueda seguir el servidor los enlaces simbólicos y para que se permitan todas las opciones del .htaccess. Toda esta parte está puesta para aquellos que necesiten usar archivos .htaccess (por ejemplo, para habilitar las urls “amigables” de wordpress y para hacer las nuestras propias en nuestras aplicaciones), es decir, si no vas a hacer una aplicación en este sentido, podrías no añadir la parte de “<Directory…”.

Ahora vamos a crear el segundo VirtualHost y a configurarlo adecuadamente.

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/other.conf

sudo nano /etc/apache2/sites-available/other.conf

 

<VirtualHost *:8080>
	# The ServerName directive sets the request scheme, hostname and port that
	# the server uses to identify itself. This is used when creating
	# redirection URLs. In the context of virtual hosts, the ServerName
	# specifies what hostname must appear in the request's Host: header to
	# match this virtual host. For the default virtual host (this file) this
	# value is not decisive as it is used as a last resort host regardless.
	# However, you must set it for any further virtual host explicitly.
	ServerName localhost

	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/other

	<Directory /var/www/other>
		Options Indexes FollowSymLinks
		AllowOverride All
	</Directory>

	# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
	# error, crit, alert, emerg.
	# It is also possible to configure the loglevel for particular
	# modules, e.g.
	#LogLevel info ssl:warn

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	# For most configuration files from conf-available/, which are
	# enabled or disabled at a global level, it is possible to
	# include a line for only one particular virtual host. For example the
	# following line enables the CGI configuration for this host only
	# after it has been globally disabled with "a2disconf".
	#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Como vemos al principio del archivo, esta aplicación será la que use el puerto “8080” que hemos configurado antes.

Ya hemos terminado con la parte de configuración de ficheros, ahora terminamos con unos pocos comandos más.

Activamos el mod rewrite (en el caso de que lo vayamos a necesitar):

sudo a2enmod rewrite

Añadimos el segundo sitio que hemos creado (other.conf) a la lista de sitios disponibles:

sudo a2ensite other.conf

Y, para terminar, reiniciamos el servicio Apache:

sudo service apache2 restart

Con todo esto que hemos hecho tendremos que ser capaces de acceder tanto a http://localhost como a http://localhost:8080 .

Yo, para comprobarlo, he dejado el index que instala Apache por defecto en la dirección principal (puerto 80) y he creado un archivo llamado “info.php” en el secundario (puerto 8080) con el siguiente contenido:

<?php phpinfo(); ?>

Y os dejo aquí las capturas de las dos “aplicaciones”.

Página mostrada en el puerto 80

 

Página mostrada en el puerto 8080

Conclusión

Ya hemos configurado todo lo necesario para tener dos aplicaciones en el mismo servidor y en el mismo dominio o IP, ahora sólo faltaría rellenar las dos aplicaciones con contenido.

Es un proceso que, la primera vez, puede resultar un poco difícil o tedioso, pero una vez que lo has realizado varias veces se vuelve completamente automático.

Para finalizar, esta vez una nota.

Para todos aquellos que quieran seguir la guía ¿Cómo crear un servidor casero mediante Debian? (parte 1) pueden seguir por aquí, que sería el siguiente paso. Esa guía se quedó incompleta al cerrar la web Forat.info.

La entrada ¿Cómo instalar y configurar un servidor web en Ubuntu 16.04? se publicó primero en forInformática.


Viewing all articles
Browse latest Browse all 15

Trending Articles