Docker on Raspberry Pi




Voorbereiden:

  • Download Raspberry Pi Imager https://www.raspberrypi.org/software/
  • Opstarten van de Raspberry Pi Imager
  • Kies OS en kies bij 'Other' de 'Raspberry Pi OS Lite (64-bit)' (A port of Debian with no desktop environment)
  • Bij instellingen SSH aanzetten en gebruikersnaam+wachtwoord ingeven



  • Kies je USB-schijf en Schrijf
  • Wacht totdat het klaar is en verwijder de USB-schijf



Opstarten

  • opstarten RPi met USB-schijf erin
  • inloggen putty
  • Updaten van de Pi OS en wijzig wachtwoorden
  • sudo apt update -y && sudo apt upgrade -y
    sudo reboot now
    sudo rpi-update
    sudo reboot now
    sudo passwd root
    
  • sudo raspi-config
  • TimeZone instellen - Europe --> Amsterdam
  • Interface Options --> I2C enable
    ( tbv oled display. Zie laatste paragraaf: oled-display onderaan deze site)



Docker

  • Installeer Docker
  • sudo curl -fsSL https://get.docker.com | sh
    
  • Update Docker
  • sudo apt update -y && sudo apt upgrade -y
    sudo reboot now
    



Container: Portainer

  • Beheren van Containers in Docker

  • vi /home/pi/docker-compose.yml

  • volumes:
      portainer_data:
    
    services:
      portainer:
        container_name: myPortainer
        image: portainer/portainer-ce:linux-arm
        restart: always
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - portainer_data:/data
        ports:
          # Frontend port
          - 9000:9000
        environment:
          - TZ=Europe/Amsterdam
    
    
    
  • locatie van het volume portainer_data staat lokaal op /var/lib/docker/volumes/portainer_data/

  • Start/Update Portainer
  • sudo docker compose pull portainer
    sudo docker compose up portainer -d
    sudo docker image prune
    



Container: Domoticz

  • Maak een map aan voor opslag van de domoticz data buiten de container
  • sudo mkdir /var/mydata
    sudo mkdir /var/mydata/domoticz
    sudo mkdir /var/mydata/domoticz/userdata
    
  • vi /home/pi/docker-compose.yml

  • 
      domoticz:
        container_name: myDomoticz
        image: domoticz/domoticz:latest
        restart: always
        volumes:
          - /var/mydata/domoticz/userdata:/opt/domoticz/userdata
        ports:
          # Frontend port
          - 8080:8080
          - 8443:443
        environment:
          - TZ=Europe/Amsterdam
          - EXTRA_CMD_ARG= -sslcert /opt/domoticz/userdata/cert.pem -sslkey /opt/domoticz/userdata/privkey.pem
        devices:
          # Make sure this matched your adapter location
          - /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AB6UJXV6-if00-port0:/dev/ttyUSB0
          - /dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1YI1Z0Q-if00-port0:/dev/ttyUSB1
    
    
    
  • mount de verschillende usb-apparaten door gebruik te maken van /dev/serial/by-id
    hieronder een voorbeeld van een RFXCOM-via-usb en een P1-slimmeter-via-usb-kabel
  • ls -l /dev/serial/by-id/
    
  • Start/Update Domoticz
  • sudo docker compose pull domoticz
    sudo docker compose up domoticz -d
    sudo docker image prune
    



Container: Node-RED

  • Maak een map aan voor opslag van de flows en nodes buiten de container
  • sudo mkdir /var/mydata/nodered
    sudo mkdir /var/mydata/nodered/data
    sudo chown 1000 /var/mydata/nodered/data
    
  • vi /home/pi/docker-compose.yml

  • 
      nodered:
        container_name: myNodered
        image: nodered/node-red:latest
        restart: always
        security_opt:
          - seccomp:unconfined    
        volumes:
          - /var/mydata/nodered/data:/data
        ports:
          # Frontend port
          - 1880:1880
        environment:
          - TZ=Europe/Amsterdam
    
    
  • Start/Update Node-RED
  • sudo docker compose pull nodered
    sudo docker compose up nodered -d
    sudo docker image prune
    



Container: Mosquitto (MQTT)

  • Maak een map aan voor opslag van de config, data en log buiten de container
  • sudo mkdir /var/mydata/mosquitto
    sudo mkdir /var/mydata/mosquitto/config
    sudo mkdir /var/mydata/mosquitto/data
    sudo mkdir /var/mydata/mosquitto/log
    
  • Installeer de container Mosquitto
  • 
      mosquitto:
        container_name: myMosquitto
        image: eclipse-mosquitto:latest
        restart: always
        volumes:
          - /var/mydata/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf
          - /var/mydata/mosquitto/data:/mosquitto/data
          - /var/mydata/mosquitto/log:/mosquitto/log
        ports:
          # Frontend port
          - 1883:1883
          - 9001:9001
        environment:
          - TZ=Europe/Amsterdam
    
    
    
  • Eerste keer de default mosquitto.conf aanmaken buiten de container
  • sudo vi /var/mydata/mosquitto/config/mosquitto.conf
    
    listener 1883
    allow_anonymous true
    
    
  • Start/Update Mosquitto
  • sudo docker compose pull mosquitto
    sudo docker compose up mosquitto -d
    sudo docker image prune
    



Container: Unifi Ubiquiti Controller

  • Maak een map aan voor opslag van de unifi data buiten de container
  • sudo mkdir /var/mydata
    sudo mkdir /var/mydata/unifi
    sudo mkdir /var/mydata/unifi/data
    sudo mkdir /var/mydata/unifi/log
    
  • Stop tijdelijk de Domoticz Container (Netwerkpoorten 8080 en 8443 zijn al ingebruik door Domoticz)
  • sudo docker compose stop domoticz
    
  • Installer Unifi Controller
  • 
      unifi:
        container_name: myUnifi
        image: jacobalberty/unifi:latest
        restart: always
        volumes:
          - /etc/localtime:/etc/localtime:ro
          - /var/mydata/unifi:/unifi
        ports:
          # Frontend port
          - 7080:7080
          - 7443:7443
          - 10001:10001/udp
          - 3478:3478/udp
        environment:
          - TZ=Europe/Amsterdam
    
    
  • Start Unifi Controller
  • sudo docker compose pull unifi
    sudo docker compose up unifi -d
    sudo docker image prune
    
  • Login op de Unifi Controller, configureer en check of het e.e.a. werkt.
  • Pas nu de /var/mydata/unifi/data/system.properties bestand aan om de netwerkpoorten te wijzigen
  • sudo docker compose stop unifi
    
    sudo vi /var/mydata/unifi/data/system.properties
      unifi.http.port=7080
      unifi.https.port=7443
    
    sudo docker compose start unifi
    
  • Start Domoticz Container weer nu de Unifi poorten zijn aangepast
  • sudo docker compose start Domoticz
    
  • notitie: nieuwe Unifi AP's toevoegen als volgt:
  • ssh ubnt@ipadresaccesspoint
    (password ubnt)
    mca-cli
    set-inform http://ipadresraspberrypi:7080/inform
    
  • Start/Update Unifi
  • sudo docker compose pull unifi
    sudo docker compose up unifi -d
    sudo docker image prune
    



Container: Zigbee2MQTT

  • Maak een map aan voor opslag van de data buiten de container
  • sudo mkdir /var/mydata/zigbee2mqtt/
    sudo mkdir /var/mydata/zigbee2mqtt/data/
    
  • Installeer de container Zigbee2MQTT
  • 
      zigbee2mqtt:
        container_name: myZigbee2mqtt
        image: koenkk/zigbee2mqtt:latest
        restart: always
        volumes:
          - /var/mydata/zigbee2mqtt/data:/app/data
          - /run/udev:/run/udev:ro
        ports:
          # Frontend port
          - 9080:9080
        environment:
          - TZ=Europe/Amsterdam
        devices:
          - /dev/serial/by-id/usb-Silicon_Labs_Sonoff_Zigbee_3.0_USB_Dongle_Plus_0001-if00-port0:/dev/ttyACM0
    
    
  • Start/Update zigbee2mqtt
  • sudo docker compose pull zigbee2mqtt
    sudo docker compose up zigbee2mqtt -d
    sudo docker image prune
    
  • Aanpassen van de configuration.yaml
  • sudo docker compose stop zigbee2mqtt
    
    sudo vi /var/mydata/zigbee2mqtt/data/configuration.yaml
    
    mqtt:
      base_topic: zigbee2mqtt
      server: mqtt://ip-adres-van-mqtt-server
    
    frontend:
      port: 9080
    
    
  • Een nieuwe sleutel genereren bij eerste keer starten. (NOTE: na deze actie alles opnieuw koppelen)
  • network_key: GENERATE
    
  • Start/Update zigbee2mqtt
  • sudo docker compose pull zigbee2mqtt
    sudo docker compose up zigbee2mqtt -d
    sudo docker image prune
    



Container: Grafana

  • Maak een volume aan voor opslag van de Grafana data buiten de container
  • sudo mkdir /var/mydata/grafana
    
  • Installeer Grafana
  • 
      grafana:
        container_name: myGrafana
        image: grafana/grafana:latest
        user: "0"
        restart: always
        volumes:
          - /var/mydata/grafana:/var/lib/grafana
        ports:
          # Frontend port
          - 3000:3000
        environment:
          - TZ=Europe/Amsterdam
    
    
  • Start/Update Grafana
  • sudo docker compose pull grafana
    sudo docker compose up grafana -d
    sudo docker image prune
    



Container: php:7.2-apache

  • Maak een map aan voor opslag van de webserver data buiten de container
  • sudo mkdir /var/mydata/www
    
  • Installer php:7.2-apache
  • 
      apache:
        container_name: myWebserver
        image: php:7.2-apache
        restart: always
        volumes:
          - /var/mydata/www:/var/www/html
          - /etc/localtime:/etc/localtime:ro
        ports:
          # Frontend port
          - 80:80
        environment:
          - TZ=Europe/Amsterdam
    
    
  • Maak bijvoorbeeld een eigen pagina zodat bovenstaande containers snel te vinden zijn.


  • Start/Update php:7.2-apache
  • sudo docker compose pull apache
    sudo docker compose up apache -d
    sudo docker image prune
    
    



Oled display

  • Het tonen van wat statistieken op het OLED scherm.
    Zet de I2C interface aan.
  • sudo raspi-config
    Kies interfaces, Enable I2C
    sudo reboot now
    
  • Sluit aan op pin 1 (3v3), pin 3 (SDA), pin 5 (SCL) en pin 9 (Ground)



  • Installeer de juiste software
  • sudo apt-get install git build-essential python3-dev python3-pip python-smbus libopenjp2-7-dev libtiff5 -y
    sudo pip3 install pillow
    
  • Check of het OLED scherm gevonden is
  • sudo i2cdetect -y 1
    
    
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:          -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- --
    
  • Adafruit bibliotheek gebruiken
  • sudo pip3 install Adafruit_BBIO
    git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
    cd Adafruit_Python_SSD1306/
    sudo python3 setup.py install
    
  • Test het OLED scherm
  • cd examples
    python3 stats.py
    
  • Aanpassen lettertype in stats.py voorbeeld. Download ( PixelOperator.ttf )
  • # Load default font.
    # font = ImageFont.load_default()
    
    # Alternatively load a TTF font.  Make sure the .ttf font file is in the same directory as the python script!
    # Some other nice fonts to try: http://www.dafont.com/bitmap.php
    font = ImageFont.truetype('PixelOperator.ttf', 16)