Aujourd'hui nous verrons comment déployer la dernière version de Laravel sur une Raspberry pi faisant tourner Raspbian Stretch.
« Mettons-nous en situation »
Au moment où j’écris ces quelques lignes (18 mars 2018) voilà la situation et pourquoi j’ai besoin de cette solution.
Laravel 5.6 est la dernière version du framework PHP, pour fonctionner laravel 5.6 a besoin de PHP 7.1.7 ou plus.
Raspbian Stretch est la dernière version du système d’exploitation et ne supporte dans ses paquets que php 7.0.
Pour installer 7.1 sur une raspberry il faut ajouter les dépôts de Raspbian Buster la prochaine version de l’OS pour RPI. Cet ajout de dépôts rend instable la RPI et l’empêche parfois de la redémarrer.
Il n’y a pas d’image de mariadb ou de mysql compatible avec l’architecture arm32b de la raspberry sur docker hub.
Le point sur les problèmes
Il nous faut php 7.1, la solution s’appellera docker (encore une fois).
Il nous faudra une base de donnée, la solution ne passera pas par docker, juste par mariadb installé sur l’hôte et une connexion avec le container.
Docker sur Raspbian
Le Dockerfile
J’ai donc créé une image « parfaite » (en toute modestie) pour utiliser Laravel 5.6, avec un php 7.1 et apache, voici le dockerfile pour la générer.
Si vous utilisez ce code pour engendrer votre image sur la rasp, durant la génération de l'image vous pouvez tranquillement aller prendre un café, une douche ou commencer un marathon LOTR. Il y a bien 1 heure de génération.
Mariadb
Installer mariadb sur la raspberry, classique :
sudo su
apt install mariadb-client
apt install mariadb-server
Connecter son container à sa base de donnée locale
Il faut paramétrer mariadb pour accepter les requêtes extérieurs.
Accédez au paramètre du server mariadb via
nano /etc/mysql/mariadb.conf.d/50-server.cnf
repérez la ligne
bind-address = 127.0.0.1
pour la commenter
#bind-address = 127.0.0.1
ensuite toujours en sudo accédez à l’administration de mariadb pour créer un utilisateur et une base de donnée.
Adresse ip des container
Par default les container sont configuré en mode « bridge » une commande comme
docker network ls
vous renverra quelque chose comme
NETWORK ID NAME DRIVER
XXXXXXXXXXX bridge bridge
XXXXXXXXXXX host host
XXXXXXXXXXX none null
en inspectant avec
docker network inspect bridge
vous aurez accès aux ip des containers et en déduire l’ip de l’hôte, c’était dans mon cas 172.17.0.1. Maintenant on ajoute ça à notre .env. Voilà !!!
Pour exécutez sur votre container un :
php artisan migrate
Après avoir bien réinstallé composer évidemment.
Conclusion
Je l’utilise pour faire mon serveur de développement pour une start-up, ce n’est pas l’idéale mais ce n’est pas chère.