🛠 Un serveur maison qui consomme 2,5 W : Docker léger sur la PINE A64
Objetivos
Transformar la PINE A64 en un pequeño servidor permanente: la tarjeta fue vendida desde 2016 como «la plataforma ARM de 64 bits más barata para ejecutar Docker» (HypriotOS en aquella época), su consumo medido oficialmente es de aproximadamente 2,5 W, y el kernel mainline ejecuta Docker sin exotismos. El verdadero tema de ingeniería aquí no es Docker, sino las restricciones de hardware: 512 MB a 2 GB de RAM, sin almacenamiento flash integrado (todo reside en la microSD) y una red 10/100 en la versión base. Vas a dimensionar, instalar y asegurar un servicio sobrio: un broker MQTT + un cron de respaldo.
Hardware
- 1 × PINE A64/A64+ (se recomiendan 2 GB para Docker; el modelo de 512 MB se limita de hecho a Arch/Debian y a muy pocos contenedores)
- 1 × microSD de calidad verificada (h2testw/f3) — el propio wiki oficial enlaza estas herramientas de detección de falsificaciones
- Fuente de alimentación barrel de 5 V 2 A (nunca el micro-USB para un servidor: las caídas de tensión = fallos aleatorios de SD/USB)
- Ethernet (gigabit solo en A64+)
Código completo
# Armbian : installer Docker (dépôt officiel docker.com, arm64)
curl -fsSL https://get.docker.com | sudo sh
# Broker MQTT Mosquitto en conteneur (service sobre, adapté à la carte)
sudo docker run -d --name mosquitto --restart unless-stopped \
-p 1883:1883 eclipse-mosquitto:2
# Sauvegarde quotidienne de l'état des conteneurs sur le PC du réseau :
crontab -e
# 0 3 * * * tar czf /root/etc-backup.tgz /etc && scp /root/etc-backup.tgz pc:/backups/pine64/
# Sur un modèle 512 MB, ajouter du swap pour survivre aux pointes :
sudo fallocate -l 1G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
# Vérifier la RAM disponible avant d'empiler les conteneurs :
free -h && docker stats --no-stream
Verificación esperada
docker ps muestra Mosquitto Up, accesible desde la LAN (mosquitto_sub -h <ip> -t test en el PC). La tarjeta consume ~2,5 W en reposo — lo que supone unos pocos euros al año de electricidad en servicio permanente. free -h dimensiona el resto: con 2 GB se pueden apilar algunos contenedores sobrios; con 512 MB, un solo servicio y swap. En la tarjeta base, recordar que la red tiene un techo de ~94 Mbit/s (tutorial iperf3) antes de convertirla en un servidor de archivos.
Errores frecuentes
- Construir un servidor sobre una microSD falsificada: el fallo de la tarjeta SD es el modo de fallo n.º 1 de esta clase de tarjetas (Armbian lo convierte en su primer tema de soporte) — tarjeta de marca, probada, y respaldos regulares de /etc.
- Saturar un modelo de 512 MB: la ficha de Wikipedia es clara, este modelo «solo funciona con Arch Linux y las distribuciones Debian»; las cargas tipo Android/Ubuntu Touch requieren 1 GB o más — y Docker muere primero por OOM.
- Alimentar por micro-USB «porque funciona»: para un servicio 24/7, la caída de tensión del cable acaba en corrupción de la SD; el barrel de 5 V 2 A está ahí para eso.
- Exponer el broker a Internet sin TLS: MQTT 1883 en claro = credenciales legibles; permanecer en la LAN o usar un túnel cifrado.
- Olvidar que la tarjeta es 10/100 (versión base) y quejarse de su uso como NAS: el techo es físico (PHY RTL8201), no de software.
- Dejar que el rootfs llene la microSD: el redimensionamiento en el primer arranque de Armbian está garantizado, pero los logs de Docker, en cambio, crecen — configurar
--log-opt max-size.
Otros tutoriales para esta placa
- Premier boot d'Armbian sur la PINE A64 (microSD, console série, rootfs)
- PINE A64 ou PINE A64+ ? Le pièg du réseau gigabit dès le premier regard
- Faire clignoter une LED avec libgpiod (numérotation GPIO du A64 : PB0 = 32)
- Benchmark Ethernet iperf3 : mesurer le piège 10/100 vs gigabit
- Lire un capteur I²C (BME280) sur le bus i2c-1 du connecteur Pi-2
- Construire sa propre image Armbian pour la PINE A64 (armbian/build)
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash