Stappenplan: DSMR-reader upgraden van v3.x naar v4.x

DSMR-reader v4.x is backwards incompatible met 3.x. Je zult handmatig moeten upgraden om ervoor te zorgen dat het goed werkt.

Notitie

Indien je Docker gebruikt, kun je vermoedelijk gewoon de v4.x versie van de Docker container gebruiken, zonder onderstaande stappen te hoeven uitvoeren.

Lijst van wijzigingen

Gevaar

Zie de changelog, voor v4.x releases en hoger. Bekijk ze voordat je update!

1. Update naar de meeste recente v3.x versie

Voer het volgende uit:

sudo su - dsmr
./deploy.sh

2. Installeer python3-psycopg2

Wanneer je PostgreSQL gebruikt, de standaard voor DSMR-reader, installeer dan de volgende systeem package:

sudo apt-get install python3-psycopg2

Voer het volgende uit:

sudo supervisorctl stop all

sudo su - dsmr
deactivate
cd ~
mv .virtualenvs/dsmrreader .virtualenvs/v3-dsmrreader

virtualenv /home/dsmr/.virtualenvs/dsmrreader --system-site-packages --python python3

# Check Python version. Should be v3.6.x or higher:
source ~/.virtualenvs/dsmrreader/bin/activate
python3 --version

logout

Waarschuwing

Als je ooit Python 3.6 of hoger handmatig hebt geinstalleerd, en de standaard Python-versie op het systeem is lager dan 3.6, zorg er dan voor dat je dit expliciet opgeeft in het virtualenv commando hierboven.

Bijvoorbeeld:

virtualenv /home/dsmr/.virtualenvs/dsmrreader --system-site-packages --python python3.6

Notitie

Als je tegen fouten aanloopt, dan kun je terug naar de vorige versie met:

sudo su - dsmr

deactivate
cd ~
mv .virtualenvs/dsmrreader .virtualenvs/v4-dsmrreader
mv .virtualenvs/v3-dsmrreader .virtualenvs/dsmrreader

# Now redeploy
logout
sudo su - dsmr
./deploy.sh

# (Re)start all processes
logout
sudo supervisorctl restart all

3. Wissel DSMR-reader naar v4.x

DSMR-reader v4.x leeft in een aparte branch, om te voorkomen dat gebruikers per ongeluk upgraden naar v4.x.

Voer het volgende uit:

sudo supervisorctl stop all

sudo su - dsmr
git fetch
git checkout -b v4 origin/v4

# Make sure you're at v4 now:
git branch

git pull
pip3 install -r dsmrreader/provisioning/requirements/base.txt

logout

4. Migreer settings.py naar .env

DSMR-reader is begonnen met een settings.py voor je lokale instellingen. Dit heeft wat nadelen, helemaal gezien de standaarden vandaag de dag en tevens in het licht hoe Docker werkt.

Daarom is de configuratie voortaan via een .env bestand en is er ook standaardondersteuning voor systeem env vars. Volg deze stappen om te migreren:

sudo su - dsmr
mv dsmrreader/settings.py dsmrreader/settings.py.BACKUP
cp dsmrreader/provisioning/django/settings.py.template dsmrreader/settings.py

cp .env.template .env

Bekijk nu je instellingen in dsmrreader/settings.py.BACKUP die je tot nu toe gebruikte. Vergelijk ze met de standaardinstellingen in .env.

Als je verschillen vindt (bijvoorbeeld andere database-gegevens), werkt dan het .env bestand bij. Het formaat zou recht toe recht aan moeten zijn.

Voer het volgende uit:

logout

Backwards incompatible

N.B.: DSMRREADER_PLUGINS is nu een komma-gescheiden lijst. De kans is overigens zeer klein dat je uberhaupt DSMRREADER_PLUGINS tot nu toe hebt gebruikt (alleen voor geavanceerde gebruikers).

Niet-ondersteunde instellingen

Niet alle instellingen zijn nog steeds, of onder dezelfde naam, beschikbaar in de nieuwe .env. Zie Env-instellingen voor de meest recente lijst van ondersteunde env vars.

Desnietemin kun je nog steeds handmatig Django-instellingen gebruiken in dsmrreader/settings.py. Bijvoorbeeld: X_FRAME_OPTIONS of USE_X_FORWARDED_HOST.

Waarschuwing

  • Deze zijn alleen bedoeld voor geavanceerde gebruikers en moeten met zorg worden toegepast.

  • dsmrreader/settings.py is een Python-bestand/module en niet een key-value lijst van variabelen.

  • Voeg ze altijd onder de from dsmrreader.config.production import * regel toe.

  • Tot slot, vergeet niet om alle processen te herladen of herstarten wanneer je wijzigingen doet in .env of settings.py.

5. Genereer je eigen SECRET_KEY

Vorige versies hadden een vaste waarde voor SECRET_KEY. Dit was prima voor DSMR-reader binnen je eigen netwerk, maar niet wanneer het publiekelijk op Internet bereikbaar is.

Om te voorkomen dat sommige gebruikers in die situatie vergeten om handmatig een eigen key in te stellen, vereist DSMR-reader vanaf nu dat iedereen een eigen SECRET_KEY genereert. Ofwel tijdens de installatie ofwel tijdens het upgraden.

Voer het volgende uit:

sudo su - dsmr
./tools/generate-secret-key.sh

Controleer of het script je .env goed heeft aangepast:

grep 'SECRET_KEY=' .env

Het zou de gegenereerde key moeten tonen wanneer je het uitvoert.

Bekijk de configuratie net:

./manage.py check

Notitie

Als je de volgende fout ziett:

Error loading psycopg2 module: No module named 'psycopg2._psycopg'

Zet de vorige psycopg2 installatie terug met:

logout
sudo apt-get remove python3-psycopg2

sudo su - dsmr
pip3 install psycopg2-binary --upgrade

# Try again:
./manage.py check

Voer het volgende uit:

logout

6. Verwijder dsmr_mqtt

Het dsmr_mqtt proces is samengevoegd met dsmr_backend.

Voer het volgende uit:

sudo supervisorctl status

Wordt dsmr_mqtt getoond? Zo niet, sla de rest van dit hoofdstuk over. Zo ja, verwijder het:

sudo rm /etc/supervisor/conf.d/dsmr_mqtt.conf
  • Pas wijzigingen toe:

    sudo supervisorctl reread
    sudo supervisorctl update
    
    sudo supervisorctl restart all
    

Voer het volgende uit:

sudo supervisorctl status

Je zou dsmr_mqtt niet meer moeten zien.

Zie je het proces nog steeds? Dit kan gebeuren wanneer je een eerdere configuratie gebruikt waarbij alle processen in een enkel bestand staan (bijvoorbeeld: dsmr-reader.conf).

Zorg ervoor dat je deze dan verwijdert en vervolgens alle andere processen apart kopieert van de repository:

sudo rm /etc/supervisor/conf.d/dsmr-reader.conf

sudo cp /home/dsmr/dsmr-reader/dsmrreader/provisioning/supervisor/dsmr_datalogger.conf /etc/supervisor/conf.d/
sudo cp /home/dsmr/dsmr-reader/dsmrreader/provisioning/supervisor/dsmr_backend.conf /etc/supervisor/conf.d/
sudo cp /home/dsmr/dsmr-reader/dsmrreader/provisioning/supervisor/dsmr_webinterface.conf /etc/supervisor/conf.d/

sudo supervisorctl reread
sudo supervisorctl restart all

Je zou dsmr_mqtt niet meer moeten zien.

Daarnaast zouden de andere processen nu weer goed moeten draaien.

7. Deploy

Tot slot, voer het deploy-script uit:

sudo su - dsmr
./deploy.sh

Mooi! Je zou nu op v4.x moeten zitten!