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
ofsettings.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!