Перенос Nightscout на свой сервер VPS/VDS (Debian 9)
Установка NightScout на Debian 9 'Stretch'
Данное руководство не претендует на полноту и использование best practices, предварительно необходимо установить Debian 9 (минимально: 1 ядро, 1Gb оперативной памяти, 10Gb HDD, лучше от 2Gb RAM), подключить его к интернету, обновить, пробросить HTTP, HTTPS, SSH при необходимости. Перенаправить А — запись доменна или поддомена на IP адрес сервера.
Все манипуляции проводились под пользователем root.
Использование данной иструкции подразумевает наличие навыков системного администрирования nix систем и владение необходимыми сетевыми технологиями.
Переходим для удобства в PuTTy (официальный сайт с загрузкой), вводим в поле "Host Name" IP адрес сервера и нажимаем "Open", далее вводим имя пользователя и пароль.
0. Установка дополнительных пакетов
apt-get install sudo
apt-get -y install curl
apt-get -y install mc #не обязательно
1. Разрешаем ssh для root если необходимо
cd /etc/ssh
nano sshd_config
Добавляем строку: PermitRootLogin yes
Сохраняем: нажимаем "Ctrl+x", далее "y", далее "Enter"
systemctl restart ssh
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", далее "y", далее "Enter"
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", далее "y", далее "Enter"
Запускаем 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
Сохраняем: нажимаем "Ctrl+x", далее "y", далее "Enter"
Разрешаем автозапуск
systemctl daemon-reload
systemctl enable nightscout.service
systemctl start nightscout.service
Проверяем запущен ли сервис:
systemctl status nightscout.service
ВНИМАНИЕ! Дальнейшие шаги направлены только на прикрепление доменного имени к вашему серверу, НО это не обязательно.
Ваш сервер Nightscout уже настроен и работает, а так же доступен по адресу: http://ip_of_debian:1337
Этот адрес вы уже можете вбивать в программы для контроля сахара и всё будет работать. Если же вам хочется красивый и уникальный адрес, то выполняйте шаги далее.
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", далее "y", далее "Enter"
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 — ниже.
Возможные ошибки и их решение
[BABEL] Note: The code generator has deoptimised the styling of "..." as it exceeds the max of 500KB.
Данная ошибка может возникнуть если у вас на сервере < 2Gb оперативной памяти.
Решение:
cd /opt/nightscout/cgm-remote-monitor
mkdir -p tmp/public
cd /opt/nightscout/cgm-remote-monitor/tmp/public
wget https://reuleaux.su/uploads/files/2023-08/public.zip
sudo apt install unzip
unzip public.zip
rm /opt/nightscout/cgm-remote-monitor/tmp/public/public.zip
Тем самым мы сами скачивем библиотеки, необходимые для работы сервиса Nightscout, в обход их генерации, в процессе которой и возникают ошибки.
Установка средств интеграции с гипервизором (не обязательно)
Hyper-V средства интеграции
nano /etc/initramfs-tools/modules
Добавляем строки
hv_vmbus
hv_storvsc
hv_blkvsc
hv_netvsc
Сохраняем: нажимаем "Ctrl+x", далее "y", далее "Enter"
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
Обновление версии Nightscout
git reset --hard
git checkout master && git pull
sudo npm install --unsafe-perm