Estos son los pasos para configurar una Raspberry PI como servidor local de tal manera que se puedan probar aplicaciones y flujos de trabajo en un ambiente enteramente local que se parece al flujo final usando un servidor VPS que tiene instalado Ubuntu y NGINX.
- Raspberry PI 3 B+.
- Micro SD 16 Gb Sandisk Clase 10.
Desde un computador (distinto a la Raspberry), instalar Raspberry Pi Imager para instalar en la SD el sistema operativo. Conectar la SD al computador y seguir los pasos en Raspberry Pi Imager para instalar el OS:
Ubuntu Server 20.04.2 LTS 32-bit
Al terminar el proceso de instalación en la SD, conectarla a la Raspberry PI y prenderla.
En la primera iniciada se va a detener en ubuntu login: _
pero hay que esperar un momento y se va a iniciar otro proceso de configuración automáticamente llamado Cloud-init. Hay que esperar unos minutos a que corra ese proceso.
Al principio pensé que se quedaba estancado luego de que salía Cloud-init v. 20.4.1-Oubuntu1~20.04.1 finished at ...
pero al presionar Enter en el teclado pasó al Ubuntu login:
.
Las credenciales iniciales son:
usuario; ubunbtu
password: ubuntu
Al poner estas credenciales nos va a pedir que cambiemos la clave.
Siguiendo este tutorial, esta es la configuración que me sirve:
Buscar el nombre del wifi:
ls /sys/class/net
El resultado se ve algo así:
enp0s25 lo wlan0
y el wifi en este caso va a ser wlan0
.
Buscar el archivo del Netplan:
cd /
ls /etc/netplan/
# es el archivo 50-cloud-init.yaml o 01-network-manager-all.yaml
Editar el archivo de Netplan
sudo nano etc/netplan/50-cloud-init.yaml
network:
ethernets:
eth0:
dhcp4: true
optional: true
version: 2
wifis:
wlan0:
optional: true
access-points:
"SSID-NAME-HERE":
password: "PASSWORD-HERE"
dhcp4: true
Guardar Ctrl + o
y salir Ctrl + x
.
Reiniciar Netplan:
sudo netplan apply
Luego de configurar el WIFI, Ubuntu va a realizar una serie de actualizaciones e instalaciones con APT
. Esto toma un tiempo y si queremos instalar cosas nos va a dar un error parecido a:
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 3539 (unattended-upgr)
Hay que esperar!
Podemos revisar que procesos están usando APT
con el comando:
ps aux | grep -i apt
EL Cloud-init
se encargó de instalar ssh entonces podemos conectarnos al servidor desde otro computador. Para comprobar que el ssh
este activado podemos correr el comando:
sudo systemctl status ssh
Y debe decir en parte del log active (runing)
.
En la Raspberry, ver el IP de la placa con:
ip a
En este caso esta conectado al wifi con wlan0
(que configuramos antes en la sección WIFI) y el ip debe estar en la sección inet 192.168.0.9
- Este numero es diferente en cada red.
Desde otro computador, usar SSH para conectarse a la Raspberry.
Instalación
sudo apt install nginx
Iniciar el servidor
sudo /etc/init.d/nginx start
Esto debería poner una página web en la IP de la Raspberry, entonces si vamos al explorador a la url: http://192.168.0.9/
debería salir una página que dice "Welcome to nginx!".
Actualizar el sistema:
sudo apt-get update && sudo apt-get upgrade
Instalar Docker y Docker Compose:
sudo apt install docker.io docker-compose
Iniciar Docker y activar que se inicie automáticamente al reiniciar la Raspberry.
sudo systemctl enable --now docker
Comprobar instalación
sudo docker version
sudo docker-compose version
ssh-keygen -t rsa -b 4096
Desde Mac:
cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat >> ~/.ssh/authorized_keys"
Primero quitamos la necesidad de usar sudo para comandos docker.
Desde el servidor:
# En este caso el usuario es ubuntu pero si es otro usuario hay que cambiar el último parametro del comando.
sudo usermod -aG docker ubuntu
newgrp docker
Con las opciones de contexto en docker podemos correr comandos desde nuestro computador en el servidor.
docker context create rpi --docker host=ssh://[email protected]
Podemos comprobar la conexión viendo la versión en el servidor:
docker --context rpi version
docker-compose --context rpi up -d
Por ejemplo, para iniciar típicamente los contenedores de producción:
docker-compose --context rpi -f docker-compose.yml -f docker-produccion.yml up