🛠 Serveur web léger et conteneurs
Objetivos
Transformar el ODROID-C4 en un pequeño servidor web doméstico: servir un sitio estático con nginx detrás de systemd, y luego aislar aplicaciones en contenedores Podman. Ventajas de la placa para este rol: 4 núcleos Cortex-A55 con extensiones criptográficas Armv8 (SHA acelerado para TLS), Ethernet Gigabit, eMMC para E/S, y solo ≈ 1,8 W en reposo.
Hardware
- ODROID-C4 de 2 o 4 GB con Armbian current, preferiblemente iniciando desde eMMC (mejor durabilidad que la microSD)
- Cable Ethernet, IP local fija (ver el tutorial de SSH)
- Ninguna exposición directa a Internet sin un proxy inverso/firewall en el lado del router
sudo apt install -y nginx podman
Código completo
#!/usr/bin/env bash
# 1) Site statique nginx
sudo mkdir -p /srv/www && echo '<h1>ODROID-C4 opérationnel</h1>' | sudo tee /srv/www/index.html
sudo tee /etc/nginx/sites-available/c4 >/dev/null <<'EOF'
server { listen 80; root /srv/www; index index.html;
location /health { return 200 "ok\n"; }
}
EOF
sudo ln -sf /etc/nginx/sites-available/c4 /etc/nginx/sites-enabled/c4
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl enable --now nginx && sudo systemctl reload nginx
# 2) Conteneur Podman (rootless) avec démarrage au boot
podman run -d --name wiki -p 8080:80 --restart=always nginx:alpine
sudo loginctl enable-linger $USER # garder les conteneurs au démarrage
# 3) Vérification
systemctl is-active nginx
Verificación esperada
Desde un equipo de la red: curl -i 0 devuelve HTTP/1.1 200 OK seguido de ok, y la página de inicio se muestra en el navegador. curl http://<IP>:8080 responde desde el contenedor. podman ps lista el contenedor en estado Up; después de sudo reboot, ambos servicios vuelven a estar activos sin intervención gracias a enable y --restart=always`.
Errores frecuentes
nginx -tda error «address already in use»: un servidor Python o un segundo listener ocupa el puerto 80; verificar conss -tlnp.- Olvidar eliminar el sitio
defaultde nginx: es él quien responde en lugar de tu vhost. - Docker en el kernel vendor 4.9: prefiere Podman rootless en Armbian mainline 6.6, menos sorpresas de dependencias.
- Sitio lento en escritura: la microSD se satura rápidamente — mueve /srv y las bases de datos al módulo eMMC.
- Exponer los puertos 80/443 en WAN sin TLS ni proxy inverso: permanece en local o usa un túnel; la placa no tiene un firewall activo por defecto.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash