Перенос Nightscout на свой сервер

12 Ноя

Данная инструкция создана и предоставлена пользователями Github.com: mefimow и romkuru. Оригинальная публикация расположена по ссылке: NS Selfhost

Установка NightScout на Debian 9 ‘Stretch’


Данное руководство не претендует на полноту и использование best practices, предварительно необходимо установить Debian 9 (min 1 core, 1Gb ram, 10 Gb HDD), подключить его к интернету, обновить, пробросить HTTP, HTTPS, SSH при необходимости. Перенаправить А — запись доменна или поддомена на IP адрес сервера.

Все манипуляции проводились под пользователем root.

Использование данной иструкции подразумевает наличие навыков системного администрирования nix систем и владение необходимыми сетевыми технологиями.


apt-get install sudo
apt-get -y install curl
apt-get -y install mc #not necessary  #не обязательно

1. Разрешаем ssh для root если необходимо

cd /etc/ssh
nano sshd_config

Добавляем строку PermitRootLogin yes

сохраняем — ctrl+x

systemctl restart ssh

переходим для удобства в PuTTy

2. Установка Mongo

Cмотрим актуальный релиз mongo https://www.mongodb.com/download-center/community и при наличии более свежей версии меняем значения ниже

curl https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
nano /etc/apt/sources.list.d/mongodb-org-4.2.list

добавляем строку

deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.2 main

сохраняем — ctrl+x

apt-get update
apt-get -y install mongodb-org
systemctl enable mongod
systemctl start mongod

создаем пользователя БД — имя и пароль свои

mongo
> use Nightscout
> db.createUser({user: "username", pwd: "password", roles:["readWrite"]})
> quit()

3. Импорт данных из Heroku или Azure

Экспорт из существующей БД на Mongo. Адрес, пользователь, пароль и порт берем из переменных среды на существующем heroku.com или azure. 

mongoexport запускается из командной строки ОС

mongodump -h _some_adress_from_env.mlab.com --port _port_from_env_ -d _DB_name_from_env_  --username _user_from_env_ --password _password_from_env_
mongorestore -d Nightscout dump/_DB_name_from_env_

4. Установка Nightscout

apt-get -y install git

apt-get -y install curl software-properties-common
curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -
apt-get install -y nodejs

apt-get install -y gcc

apt-get install -y build-essential

Переходим в папку установки — может быть произвольной. В данном варианте /opt

cd /opt 
mkdir nightscout
cd nightscout
git clone https://github.com/nightscout/cgm-remote-monitor.git
cd cgm-remote-monitor
npm install --unsafe-perm

5. Переменные среды

Можно прописать в глобальных системных переменных nano /etc/environment либо создаем файлик nano start.sh

#!/bin/bash
export DISPLAY_UNITS="mg/dl"
export MONGO_CONNECTION="mongodb://username:password@localhost:27017/ИмяСозданнойБД" //данные из установки Mongo
export PORT=1337
export API_SECRET="Api_Secret_min_12_symbols" // задаем свой пароль к Nightscout
export PUMP_FIELDS="reservoir battery status"
export DEVICESTATUS_ADVANCED=true
export ENABLE="careportal basal cage sage boluscalc rawbg iob bwp bage mmconnect bridge openaps pump iob maker"
export TIME_FORMAT=24
export BASE_URL="YOURS_INTERNET_URL.RU"
export INSECURE_USE_HTTP=true


export ALARM_HIGH=on
export ALARM_LOW=on
export ALARM_TIMEAGO_URGENT=on
export ALARM_TIMEAGO_URGENT_MINS=30
export ALARM_TIMEAGO_WARN=on
export ALARM_TIMEAGO_WARN_MINS=15
export ALARM_TYPES=simple
export ALARM_URGENT_HIGH=on
export ALARM_URGENT_LOW=on
export AUTH_DEFAULT_ROLES=denied
export BG_HIGH=180
export BG_LOW=72
export BG_TARGET_BOTTOM=90
export BG_TARGET_TOP=162
export BRIDGE_MAX_COUNT=1
export BRIDGE_PASSWORD=
export BRIDGE_SERVER=EU
export BRIDGE_USER_NAME=
export CUSTOM_TITLE=MyTitle
export DISABLE=
export MONGO_COLLECTION=entries
export NIGHT_MODE=on
export OPENAPS_ENABLE_ALERTS=true
export OPENAPS_FIELDS='status-symbol status-label iob meal-assist rssi'
export OPENAPS_RETRO_FIELDS='status-symbol status-label iob meal-assist rssi'
export OPENAPS_URGENT=60
export OPENAPS_WARN=20
#export PAPERTRAIL_API_TOKEN=some_token
export PUMP_ENABLE_ALERTS=true
export PUMP_FIELDS='battery reservoir clock status'
export PUMP_RETRO_FIELDS='battery reservoir clock status'
export PUMP_URGENT_BATT_V=1.3
export PUMP_URGENT_CLOCK=30
export PUMP_URGENT_RES=10
export PUSHOVER=
export SHOW_FORECAST=openaps
export SHOW_PLUGINS='openaps pump iob sage cage careportal'
export SHOW_RAWBG=noise
export THEME=colors

node server.js     # start server

сохраняем — ctrl+x

Запускаем Nightscout

chmod +x start.sh
./start.sh

после запуска ./start.sh через несколько минут в цикле должно появится

#reloading sandbox data

#all buckets are empty

#For the Basal plugin to function you need a treatment profile

#OpenAPS hasn’t reported a loop yet

#WS: running websocket.update

#delta calculation indicates no new data is present

#tick 2019-11-28T10:28:28.794Z

#Load Complete:

после чего можно пробовать зайти на http://ip_of_debian:1337 — должен открыться Ваш сайт NS и попросить ввести api_secert


6. Настраиваем автозапуск

nano /etc/systemd/system/nightscout.service

вставляем строки

[Unit]
Description=Nightscout Service      
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/nightscout/cgm-remote-monitor
ExecStart=/opt/nightscout/cgm-remote-monitor/start.sh
[Install]
WantedBy=multi-user.target

cохраняем — ctrl+x

разрешаем автозапуск

systemctl daemon-reload
systemctl enable nightscout.service
systemctl start nightscout.service 

проверяем запущен ли сервис:

systemctl status nightscout.service

7. Установка и настройка обратного прокси

apt-get install nginx
systemctl enable nginx

конфигурируем ngnix

nano /etc/nginx/sites-available/default

добавляем строки

server {
   listen 80;
   server_name YOURS_INTERNET_URL.RU;
   root /usr/share/nginx/html;
   location ~ /.well-known {
               allow all;
   }
  } 
server {
   listen 443 ssl;
   server_name YOURS_INTERNET_URL.RU;
   root /usr/share/nginx/html;

#       ssl_certificate     /etc/letsencrypt/live/YOURS_INTERNET_URL.RU/fullchain.pem;
#       ssl_certificate_key /etc/letsencrypt/live/YOURS_INTERNET_URL.RU/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_stapling on;
        ssl_stapling_verify on;
        add_header Strict-Transport-Security max-age=15768000;
        resolver 8.8.8.8 8.8.4.4 valid=300s;

       location ~ /.well-known {
               allow all;
       }
       location / {
          proxy_pass http://127.0.0.1:1337;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection 'upgrade';
          proxy_set_header Host $host;
          proxy_cache_bypass $http_upgrade;
        }


}

сохраняем — ctrl+x

8. Получение сертификата SSL

Не нужно тем, кто размещает Nightscout на VPS хостера и есть возможность получить сертификат через административную панель!

sudo apt-get install certbot
certbot certonly --webroot --agree-tos --email youmail@mail.com -w /usr/share/nginx/html/ -d YOURS_INTERNET_URL.RU 
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

В файл конфигурации ngnix:

nano /etc/nginx/sites-available/default

в секцию server добавляем строки

ssl_certificate     /etc/letsencrypt/live/YOURS_INTERNET_URL.RU/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/YOURS_INTERNET_URL.RU/privkey.pem;

Перезапуск nginx:

systemctl reload nginx

check startup nginx / проверка запуска ngnix

systemctl status nginx

NightScout доступен по адресу https://YOURS_INTERNET_URL.RU

Всё.. 🙂 Дополнительные (необязательные) настройки, а также инструкция по обновлению Nightscout — ниже..

ANNEX A

Установка средств интеграции с гипервизором (не обязательно)

Hyper-V средства интеграции
nano /etc/initramfs-tools/modules

Добавляем строки

hv_vmbus
hv_storvsc
hv_blkvsc
hv_netvsc

сохраняем — ctrl+x

sudo apt-get -y install hyperv-daemons
update-initramfs -u
reboot
Vmware средства интеграции
apt-get install -y open-vm-tools open-vm-tools-desktop
vmware-user-suid-wrapper
reboot

Перенаправление домена/поддомена на ip адрес сервера

Чтобы сервер был доступен по доменному имени, в панели управления хостинга в редакторе DNS зон необходимо создать запись. Добавьте новую запись со следующими параметрами:

  • имя: YOURS_INTERNET_URL.RU. точка в конце обязательна!
  • тип: A значение (IP/host.)
  • IP-адрес сервера : server ip

ANNEX B

Обновление версии Nightscout

git reset --hard
git checkout master && git pull
sudo npm install --unsafe-perm

Добавить комментарий