[Docker] Montando un servidor Nginx en una Raspberry Pi

Publicado por emontes en

Poco a poco le voy dando más utilidad a mi Raspberry Pi 2B, la cual aunque está lejos del rendimiento de una Raspberry Pi 4, creo que es suficiente para el trabajo que pretendo pedirle. Como uno de mis objetivos es verificar si tiene la capacidad de correr un servidor LEMP (Linux, Nginx, MySQL y Php), o primero que hay que hacer es montar un servidor Nginx a través de Docker.

Aunque pueda parecer una tarea compleja o complicada, la verdad es que se puede hacer en una sola línea de comando de terminal.

docker run --name nginx --restart always -d -p 80:80 -v $HOME/docker/nginx:/usr/share/nginx/html:ro nginx:alpine

Veamos qué significa cada uno de los modificadores. –name corresponde al nombre que tendrá el contenedor que estamos creando, –restart always indica al sistema que cada vez que el sistema se reinicie, dicho contenedor debe ser ejecutado nuevamente, -p corresponde a los puertos que utilizará, y -v corresponde a los directorios a los que tendrá acceso fuera del contenedor.

Esto descargará la imagen de Docker desde su repositorio original, y luego creará el contenedor y lo ejecutará.

En mi caso tengo conectado un SSD externo de Western Digital, el cual fue diseñado específicamente para la Raspberry Pi, llamado PiDrive de 314 Gb, por lo tanto la carpeta donde estarán ubicados los archivos del servidor web tienen otra localización, y es necesario hacer algunos ajustes al comando.

docker run --name nginx --restart always -d -p 80:80 -v /media/pi/WD_PiDrive_314GB/html:/usr/share/nginx/html:ro nginx

Ahora hay que agregar el directorio /media/pi/WD_PiDrive_314GB/html install al usuario pi y al grupo www-data, cambiar los permisos de escritura de dicho directorio y finalmente agregar el usuario pi al grupo www-data, con lo cual ya todo debiera funcionar. En el caso de ustedes reemplacen /media/pi/WD_PiDrive_314GB/html por $HOME/docker/nginx.

sudo chown pi:www-data -R /media/pi/WD_PiDrive_314GB/html
sudo chmod 0755 -R /media/pi/WD_PiDrive_314GB/html
sudo adduser pi www-data

Con esto queda montado el servidor Nginx en la Raspberry Pi a través de Docker. Sólo nos falta crear un archivo index.html en el directorio /media/pi/WD_PiDrive_314GB/html y listo. El ejemplo que sigue es el index por defecto de Nginx.

<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
<link href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYA$
<style>
body {
  margin: 0px;
  font: 20px 'RobotoRegular', Arial, sans-serif;
  font-weight: 100;
  height: 100%;
  color: #0f1419;
}
div.info {
  display: table;
  background: #e8eaec;
  padding: 20px 20px 20px 20px;
  border: 1px dashed black;
  border-radius: 10px;
  margin: 0px auto auto auto;
}
div.info p {
    display: table-row;
    margin: 5px auto auto auto;
}
div.info p span {
    display: table-cell;
    padding: 10px;
}
img {
    width: 176px;
    margin: 36px auto 36px auto;
    display:block;
}
div.smaller p span {
    color: #3D5266;
}
h1, h2 {
  font-weight: 100;
}
div.check {
    padding: 0px 0px 0px 0px;
    display: table;
    margin: 36px auto auto auto;
    font: 12px 'RobotoRegular', Arial, sans-serif;
}
#footer {
    position: fixed;
    bottom: 36px;
    width: 100%;
}
#center {
    width: 400px;
    margin: 0 auto;
    font: 12px Courier;
}
</style>
<script>
var ref;
function checkRefresh(){
    if (document.cookie == "refresh=1") {
        document.getElementById("check").checked = true;
        ref = setTimeout(function(){location.reload();}, 1000);
    } else {
    }
}
function changeCookie() {
    if (document.getElementById("check").checked) {
        document.cookie = "refresh=1";
        ref = setTimeout(function(){location.reload();}, 1000);
    } else {
        document.cookie = "refresh=0";
        clearTimeout(ref);
    }
}
</script>
</head>
<body onload="checkRefresh();">
<img alt="NGINX Logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEU$
<div class="info">
<p><span>Server&nbsp;address:</span> <span>server_address</span></p>
<p><span>Server&nbsp;name:</span> <span>server_hostname</span></p>
<p class="smaller"><span>Date:</span> <span>server_date</span></p>
<p class="smaller"><span>URI:</span> <span>server_url</span></p>
</div>
<div class="check"><input type="checkbox" id="check" onchange="changeC$
    <div id="footer">
        <div id="center" align="center">
            Request ID: request_id<br/>
            &copy; NGINX, Inc. 2018
        </div>
    </div>
</body>
</html>

Para verificar que está corriendo basta abrir una ventana de navegador, y escribir la dirección IP de la Raspberry Pi seguido del puerto 80, en mi caso 192.168.1.30:80, y debiera mostrar una imagen como la siguiente.

Más adelante veremos cómo crear vhosts para cada uno de los sitios que alojemos dentro de nuestro propio servidor web.


1 comentario

[Docker] Montando un servidor MariaDB en una Raspberry Pi | Code is Poetry · 17/06/2020 a las 10:40

[…] Para descargar la imagen, crear el contenedor y ejecutarlo basta una sola línea de comando de Terminal, al igual que lo hicimos con la instalación de Nginx. […]

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *