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ć:
- Urządzenie Raspberry Pi lub inne z możliwością instalacji systemu Linux i Docker’a lub serwer w chmurze
- Wiedzy jak działa system Linux i Docker
- Tutaj poradnik jak zainstalować Docker na Raspberry Pi 3/4
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) 🙂