🛠 Héberger un service web léger (nginx et conteneurs)
Objectifs
Transformer l'Orange Pi PC en petit serveur permanent : 1 GB de RAM, quatre Cortex-A7 et un lien Ethernet 100 Mbit/s suffisent largement pour nginx, un bloqueur de pub type Pi-hole ou des petits conteneurs — les cas d'usage que la documentation Armbian documente pour cette carte. Le vrai sujet d'un serveur sur SBC n'est pas le serveur, c'est la longévité : microSD fragile et alimentation, donc log2ram et services sobres.
Matériel
- Orange Pi PC sous Armbian, alimentation 5 V / 2 A de qualité (jack DC)
- microSD Class 10 de marque, log2ram actif (vérifier : systemctl status log2ram)
- Câble Ethernet, IP réservée côté routeur (tutoriel SSH)
- Optionnel : sudo apt install docker.io pour les conteneurs
Code complet
- nginx statique en service systemd :
sudo apt install -y nginx
sudo tee /etc/nginx/sites-available/projet <<'EOF'
server {
listen 80;
server_name _;
root /srv/www/projet;
location / { try_files $uri $uri/ =404; }
# Réduire les écritures disque : logs vers stderr (journald, log2ram)
access_log /dev/stderr;
error_log /dev/stderr;
}
EOF
sudo mkdir -p /srv/www/projet
echo '<h1>Orange Pi PC opérationnel</h1>' | sudo tee /srv/www/projet/index.html
sudo ln -sf /etc/nginx/sites-available/projet /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
- Premier conteneur (le registre ARMv7 est indiqué arm32v7/armhf) :
sudo systemctl enable --now docker
docker run -d --name whoami --restart unless-stopped -p 8080:80 traefik/whoami
curl -s localhost:8080 | head -3
# Limiter l'empreinte : logs JSON sur petit fichier, rotation agressive
sudo tee /etc/docker/daemon.json <<'EOF'
{ "log-driver": "json-file", "log-opts": { "max-size": "1m", "max-file": "1" } }
EOF
sudo systemctl restart docker
- Sauvegarde : tar des configs + carte clonée régulièrement (dd | gzip).
Vérification attendue
curl localhost renvoie la page ; depuis un autre poste, http://IP-de-la-carte aussi. docker ps montre le conteneur en restart unless-stopped et il redémarre tout seul après reboot. La température reste sous la zone de throttling au repos (le nginx seul ne chauffe presque pas).
Erreurs fréquentes
- Ignorer la limite de 100 Mbit/s : ce serveur ne sera jamais un serveur de médias multi-flux ; dimensionner en conséquence.
- Laisser les logs écrire en continu sur la microSD : corruption assurée à moyen terme — d'où log2ram et access_log vers journald.
- Chercher des images Docker arm64 : le H3 est ARMv7 32 bits (armv7l), prendre les variantes arm32v7/armhf.
- Compter sur le WiFi : inexistant sur ce modèle, le câble est obligatoire pour un serveur.
- Alimentation de téléphone sous 2 A : coupures et corruptions sous charge réseau/disque.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash