Nightscout i Docker

Temat dla bardziej zaawansowanych 🙂

Nie wiesz co to jest docker? Zapraszam na oficjalną stronę www.docker.com. Docker to narzędzie (w wielkim skrócie), które pozwala nam na systemie stworzyć kontenery, które dostarczają środowisko pracy, ale jednocześnie są odseparowane od systemu operacyjnego, dzięki czemu  kontener nie wpływa na w żaden sposób na nasz główny system. Jest to wygodne rozwiązanie, łatwe w utrzymaniu i zarządzaniu. Aktualizacja obrazów jest szybka i zawsze prosta do odwrócenia w przypadku niepowodzenia.

 

Do uruchomienia Nightscout na Dockerze będziemy potrzebować:

Wymagane obrazy:

Nightscout (zbudujemy go sami) + MongoDB

Obraz dla Nightscout zbudujemy sami, poniżej zawartość pliku Dockerfile, który należy utworzyć w pustym katalogu:

FROM node:carbon-alpine
MAINTAINER Michal Terbert <[email protected]>

RUN apk add --no-cache git #nodejs
RUN mkdir -p /opt/app

WORKDIR /opt/app
RUN git clone git://github.com/nightscout/cgm-remote-monitor.git /opt/app
RUN cd /opt/app && git checkout ${DEPLOY_HEAD-master}
RUN cd /opt/app && npm install
RUN cd /opt/app && npm run postinstall
RUN cd /opt/app && npm run env
EXPOSE 1337

CMD ["node", "server.js"]

Jest to najmniejszy obraz z Nightscout jaki udało mi się zbudować 🙂  Powyższą zawartość należy skopiować do pliku Dockerfile i wykonać komendę:

docker build . -t alpine-ns:latest

Postęp budowania obrazu możemy śledzić jak na poniższym zrzucie ekranu:

Pozytywne zbudowanie obrazu będzie poprzedzone poniższymi komunikatami:

Następnym krokiem jest stworzenie nowej wirtualnej seci dockerowej oraz uruchomienie obrazu z bazą danych mongodb.

Sieć stworzymy poniższą komendą (tworzymy sieć o nazwie ns):

docker network create ns

A obraz z bazą MongoDB uruchomimy:

docker run -d --name mongo -p 127.0.0.1:27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
-v /opt/mongo/db:/data/db \
--network=ns \
mvertes/alpine-mongo

Baza zostanie uruchomiona tylko lokalnie, nie będzie możliwość dostania się do bazy “z internetu”. Zmienne MONGO_INITDB_ROOT_USERNAME i MONGO_INITDB_ROOT_PASSWORD należy dostosować pod siebie (własny użytkownik i hasło). Kolejnym krokiem jest ustawienie parametrów w obrazie Nightscout i uruchomienie go. Korzystamy tutaj z wcześniej zbudowanego obrazu Nightscout oraz zmiennych MONGO_INITDB*, które należy wpisać w MONGO_CONNECTION=mongodb://użytkownik:hasło@mongo/baza.

Ważne aby ustawić zmienną API_SECRET, jest to hasło, którym możemy się zautoryzować w aplikacji Nightscout.

docker run -d \
-e "API_SECRET=twoj_tajny_kod_api_12345" \-e 'MONGO_CONNECTION=mongodb://mongoadmin:secret@mongo/baza' \
--name=ns1 \
--network=ns \
-p 1337:1337 \
alpine-ns:latest


Po całym zabiegu możemy sprawdzić czy nasze kontenery Dockerowe są uruchomione:

docker ps

Powinniśmy zobaczyć coś podobnego do poniższego zrzutu obrazu:

Jak można zauważyć Nightscout i baza działają (kolumna STATUS) oraz kontener Nightscout – ns1 ma wyeksponowany port zewnętrzny 1337. Teraz uruchamiając przeglądarkę internetową możemy sprawdzić jak działa Nightscout na porcie 1337 wpisując w pasku przeglądarki adres ip naszego serwera i port czyli np. 10.0.0.100:1337.

Jeżeli chcemy uruchomić aplikację Nightscout na innym porcie musimy nieco zmodyfikować polecenie do uruchamiania kontenera z Nightscout:

docker run -d \
-e "API_SECRET=twoj_tajny_kod_api_12345" \-e 'MONGO_CONNECTION=mongodb://mongoadmin:secret@mongo/baza' \
--name=ns1 \
--network=ns \
-p 80:1337 \
alpine-ns:latest

Powyższy przykład pozwoli nam uruchomić aplikację na porcie 80. Należy pamiętać aby na naszym serwerze nie działała, żadna usługa na porcie 80. W kolejnym artykule przedstawię jak uruchomić aplikację Nightscout zabezpieczoną certyfikatem SSL (za darmo, prawie) 🙂