Aller au contenu

Raspberry Pi

Attention

Page en cours de rédaction !

Outils utiles

RaspAP

RaspAP lets you quickly get a WiFi access point up and running to share the connectivity of the Raspberry Pi.

Installation

  1. Update Raspbian, including the kernel and firmware, followed by a reboot:
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo reboot
  1. Set the WiFi country in raspi-config’s Localisation Options:
$ sudo raspi-config
  1. Install RaspAP from your device’s shell prompt:
$ curl -sL https://install.raspap.com | bash

Configuration par défaut

  • IP address: 10.3.141.1
  • Username: admin
  • Password: secret
  • DHCP range: 10.3.141.50 to 10.3.141.255
  • SSID: raspi-webgui
  • Password: ChangeMe

Ressources

Ubuntu Server 20.04.1 LTS 64-bit sur un Raspberry Pi Model B V1.2

Préparation de la carte SD

Télécharger la version 64-bit de Ubuntu Server 20.04.1 LTS pour Raspberry Pi 3 sur le site officiel :

Décompresser l'archive :

$ xz -d ubuntu-20.04.1-preinstalled-server-arm64+raspi.img.xz

Puis copier l'image sur la carte SD :

$ sudo dd bs=4M if=ubuntu-20.04.1-preinstalled-server-arm64+raspi.img of=/dev/mmcblk0 conv=fsync

Première connexion

$ ssh ubuntu@<ipaddress>

Il sera demandé d'accepter l'empreinte de la clé SSH, puis de changer le mot de passe par défaut (qui est ubuntu).

Il est préférable de mettre à jour le système après une nouvelle installation :

$ sudo apt update
$ sudo apt upgrade
$ sudo apt clean

Renommer le système

Éditer les fichiers /etc/hostname et /etc/hosts puis redémarrer.

Commandes utiles

action commande paquet à installer
afficher quelques infos sur le système $ landscape-sysinfo
afficher la configuration réseau $ ifconfig net-tools
créer un nouvel utilisateur $ sudo adduser <user>
créer un nouveau groupe $ sudo addgroup <group>
assigner un groupe à un utilisateur $ sudo adduser <user> <group>
changer l'éditeur de texte par défaut $ sudo update-alternatives --config editor

Configurer ssh

Sur le client, générer une paire de clé (si nécessaire) :

$ ssh-keygen -t rsa  -b 4096 -C "email@example.com"

Puis a ajouter sa clé publique au serveur :

$ ssh-copy-id -i ~/.ssh/id_rsa.pub <user>@<ipaddress>

Info

Le serveur ssh est installé par défaut sur Ubuntu Server 20.04.1 LTS 64-bit.
La configuration du serveur ssh se fait en éditant le fichier /etc/ssh/sshd_config.
Plus d'info avec la commande $ man sshd_config.

Configurer le pare-feu avec ufw

action commande
connaître l'état du pare-feu $ sudo ufw status verbose
démarrer le pare-feu $ sudo ufw enable
arrêter le pare-feu $ sudo ufw disable
lister les applications disponibles $ sudo ufw app list
autoriser le trafic pour OpenSSH $ sudo ufw allow 'OpenSSH'

Installer NGINX

Installer les paquets nécessaires :

$ sudo apt install nginx

Régler le pare-feu :

$ sudo ufw allow 'Nginx Full'

On peut vérifier que le service fonctionne :

$ sudo service nginx status

Ressources

Monitoring avec Netdata

$ sudo apt install netdata

Rendre accessible netdata depuis le réseau local

Éditer le fichier de configuration de netdata:

$ cd /etc/netdata/
$ sudo ./edit-config netdata.conf
-bind socket to IP = 127.0.0.1
+bind socket to IP = 0.0.0.0

Redémarrer le service pour prendre en compte les modifications :

$ sudo service netdata restart

Puis configurer le pare-feu :

$ sudo ufw allow from 192.168.0.0/24 to any port 19999

Visiter l'adresse http://<ipaddress>:19999

Python

$ sudo apt install python3-pip
$ sudo apt install python3-venv
$ cd ~
$ mkdir myawesomeapp
$ cd myawesomeapp/
$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install --upgrade pip
(venv) $ pip install wheel
(venv) $ pip install gunicorn flask
(venv) $ pip install black
(venv) $ deactivate
$ touch app.py
$ vi app.py
from flask import Flask

app = Flask(__name__)


@app.route("/")
def hello():
    return "Hello Flask!"


if __name__ == "__main__":
    app.run(host="0.0.0.0")
$ touch wsgi.py
$ vi wsgi.py
from app import app

if __name__ == "__main__":
    app.run()
$ cd /etc/systemd/system/
$ sudo vi myawesomeapp.service
[Unit]
Description=Gunicorn instance to serve myawesomeapp
After=network.target

[Service]
User=julien
Group=www-data
WorkingDirectory=/home/julien/myawesomeapp
Environment="PATH=/home/julien/myawesomeapp/venv/bin"
ExecStart=/home/julien/myawesomeapp/venv/bin/gunicorn --workers 3 --bind unix:myawesomeapp.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target
$ sudo service myawesomeapp start
$ cd /etc/nginx/sites-available/
$ sudo vi myawesomeapp
server {
    listen 80;
    listen [::]:80;

    server_name belinda;

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/julien/myawesomeapp/myawesomeapp.sock;
    }
}
$ sudo ln -s /etc/nginx/sites-available/myawesomeapp /etc/nginx/sites-enabled/.
$ sudo nginx -t
$ sudo service nginx restart
$ sudo mkdir /etc/nginx/certs
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/certs/default.key -out /etc/nginx/certs/default.crt
$ sudo chmod 700 /etc/nginx/certs/
$ sudo vi /etc/nginx/sites-available/myawesomeapp
server {
    listen 80;
    listen [::]:80;

    listen 443 http2 ssl;
    listen [::]:443 http2 ssl;
    ssl_certificate /etc/nginx/certs/default.crt;
    ssl_certificate_key /etc/nginx/certs/default.key;

    server_name belinda;

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/julien/myawesomeapp/myawesomeapp.sock;
    }
}

Ressources


Dernière mise à jour: 10 janvier 2021