[feat] first working version
This commit is contained in:
parent
0b26e87b3c
commit
bb2addfee4
4
Dockerfile
Normal file
4
Dockerfile
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
FROM jrei/systemd-debian:11
|
||||||
|
|
||||||
|
COPY . /opt
|
||||||
|
|
24
README.md
24
README.md
@ -1,3 +1,25 @@
|
|||||||
# Home Assistant + Grafana
|
# Home Assistant + Grafana
|
||||||
|
|
||||||
WIP
|
## Crash course
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone <repo>
|
||||||
|
cd harf
|
||||||
|
bash install.sh
|
||||||
|
```
|
||||||
|
## Testing with docker
|
||||||
|
|
||||||
|
```
|
||||||
|
docker build -t harf:latest .
|
||||||
|
docker run --rm -d --name harf --tmpfs /tmp --tmpfs /run --tmpfs /run/lock -v /sys/fs/cgroup:/sys/fs/cgroup:ro harf
|
||||||
|
docker exec -it harf bash /opt/install.sh
|
||||||
|
docker stop harf
|
||||||
|
```
|
||||||
|
|
||||||
|
# Why
|
||||||
|
|
||||||
|
We needed an install script to configure as services
|
||||||
|
|
||||||
|
- Home Assistant
|
||||||
|
- Prometheus
|
||||||
|
- Grafana
|
||||||
|
198
install.sh
198
install.sh
@ -1,29 +1,68 @@
|
|||||||
#! /bin/bash
|
#! /bin/bash
|
||||||
|
|
||||||
|
# To debug, uncomment
|
||||||
|
# set -x
|
||||||
|
|
||||||
|
# To stop on any error, uncomment
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# check for root
|
||||||
|
if [ "$EUID" -ne 0 ]
|
||||||
|
then echo "Please run as root"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
# @todo check for root
|
|
||||||
# @todo check distrib / version
|
# @todo check distrib / version
|
||||||
# @todo ask IP address
|
# @todo ask IP address
|
||||||
|
|
||||||
|
apt update
|
||||||
|
|
||||||
|
declare -a PACKAGES
|
||||||
|
PACKAGES+=(apt-transport-https)
|
||||||
|
PACKAGES+=(autoconf)
|
||||||
|
PACKAGES+=(build-essential)
|
||||||
|
#PACKAGES+=(chromium-browser)
|
||||||
|
PACKAGES+=(git)
|
||||||
|
PACKAGES+=(libffi-dev)
|
||||||
|
PACKAGES+=(libjpeg-dev)
|
||||||
|
PACKAGES+=(libopenjp2-7)
|
||||||
|
PACKAGES+=(libssl-dev)
|
||||||
|
PACKAGES+=(libtiff5)
|
||||||
|
PACKAGES+=(libturbojpeg0-dev)
|
||||||
|
PACKAGES+=(python3)
|
||||||
|
PACKAGES+=(python3-dev)
|
||||||
|
PACKAGES+=(python3-pip)
|
||||||
|
PACKAGES+=(python3-venv)
|
||||||
|
PACKAGES+=(software-properties-common)
|
||||||
|
PACKAGES+=(tzdata)
|
||||||
|
PACKAGES+=(vim)
|
||||||
|
PACKAGES+=(wget)
|
||||||
|
PACKAGES+=(zlib1g-dev)
|
||||||
|
|
||||||
|
apt-get install -y ${PACKAGES[@]}
|
||||||
|
|
||||||
## HOMEASSISTANT INSTALL
|
## HOMEASSISTANT INSTALL
|
||||||
|
|
||||||
sudo apt update
|
mkdir -p /srv/homeassistant
|
||||||
sudo apt install git vim python3 python3-pip chromium-browser
|
getent passwd homeassistant || useradd -rm homeassistant -s /bin/bash
|
||||||
sudo apt-get install -y python3 python3-dev python3-venv python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff5 libturbojpeg0-dev tzdata
|
chown homeassistant:homeassistant /srv/homeassistant
|
||||||
sudo useradd -rm homeassistant
|
su homeassistant -c "mkdir -p /home/homeassistant/.homeassistant"
|
||||||
sudo mkdir /srv/homeassistant
|
|
||||||
sudo chown homeassistant:homeassistant /srv/homeassistant
|
|
||||||
|
|
||||||
sudo su homeassistant -c "
|
cat <<EOF > /home/homeassistant/install.sh
|
||||||
|
#!/bin/bash
|
||||||
|
set -x
|
||||||
cd /srv/homeassistant &&
|
cd /srv/homeassistant &&
|
||||||
python3 -m venv . &&
|
python3 -m venv . &&
|
||||||
source bin/activate &&
|
source /srv/homeassistant//bin/activate &&
|
||||||
python3 -m pip install wheel &&
|
python3 -m pip install wheel &&
|
||||||
pip3 install homeassistant
|
pip3 install homeassistant
|
||||||
"
|
EOF
|
||||||
|
chmod +x /home/homeassistant/install.sh
|
||||||
|
su homeassistant -c /home/homeassistant/install.sh
|
||||||
|
|
||||||
cat <<EOF | sudo tee /etc/systemd/system/home-assistant@homeassistant.service
|
|
||||||
|
|
||||||
|
cat <<EOF | tee /etc/systemd/system/home-assistant@homeassistant.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Home Assistant
|
Description=Home Assistant
|
||||||
After=network-online.target
|
After=network-online.target
|
||||||
@ -39,8 +78,9 @@ RestartForceExitStatus=100
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# Homeassistant configuration
|
||||||
|
|
||||||
cat <<EOF | sudo -u homeassistant tee /home/homeassistant/.homeassistant/configuration.yaml
|
cat <<EOF | su homeassistant -c "tee /home/homeassistant/.homeassistant/configuration.yaml"
|
||||||
# File: /home/homeassistant/.homeassistant/configuration.yaml
|
# File: /home/homeassistant/.homeassistant/configuration.yaml
|
||||||
# Loads default set of integrations. Do not remove.
|
# Loads default set of integrations. Do not remove.
|
||||||
default_config:
|
default_config:
|
||||||
@ -48,7 +88,7 @@ default_config:
|
|||||||
|
|
||||||
# Proxy Config
|
# Proxy Config
|
||||||
#homeassistant:
|
#homeassistant:
|
||||||
# external_url: "https://hassi.mpt.tmplab.org"
|
# external_url: "https://hass.example.com"
|
||||||
# http:
|
# http:
|
||||||
# use_x_forwarded_for: true
|
# use_x_forwarded_for: true
|
||||||
# trusted_proxies:
|
# trusted_proxies:
|
||||||
@ -73,73 +113,32 @@ sensor:
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
||||||
## GRAFANA INSTALL
|
systemctl daemon-reload
|
||||||
|
systemctl enable home-assistant@homeassistant.service
|
||||||
|
systemctl start home-assistant@homeassistant.service
|
||||||
|
|
||||||
|
|
||||||
sudo apt-get install -y apt-transport-https software-properties-common wget
|
## USER ACTION
|
||||||
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
|
|
||||||
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
|
echo "
|
||||||
sudo apt-get update
|
# Please create a user in home assistant
|
||||||
sudo apt-get install grafana
|
# 1. Then go to user profile in home assistant
|
||||||
|
# 2. Get long lived access token like eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJlM2ZkY2VmZjYyODQ0OWQ5OGY2OTRlNmU2YjUxYzUyYSIsImlhdCI6MTY1MTg0ODU0NiwiZXhwIjoxOTY3MjA4NTQ2fQ.R6_My5eBUMcgompY3L3SbTUCTEIffQaNMUHyUw8sro0
|
||||||
|
"
|
||||||
|
read -p "Please provide the user access token: " TOKEN
|
||||||
|
|
||||||
# This is probably useless: we don't need to start on a port lower than 3000
|
|
||||||
#cat <<EOF > /etc/systemd/system/grafana-server.service.d/override.conf
|
|
||||||
#[Service]
|
|
||||||
## Give the CAP_NET_BIND_SERVICE capability
|
|
||||||
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
|
|
||||||
#AmbientCapabilities=CAP_NET_BIND_SERVICE
|
|
||||||
#
|
|
||||||
## A private user cannot have process capabilities on the host's user
|
|
||||||
## namespace and thus CAP_NET_BIND_SERVICE has no effect.
|
|
||||||
#PrivateUsers=false
|
|
||||||
#EOF
|
|
||||||
|
|
||||||
## PROMETHEUS INSTALL
|
## PROMETHEUS INSTALL
|
||||||
|
|
||||||
curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
|
getent passwd prometheus || useradd -rm prometheus
|
||||||
|
wget -q -O - https://api.github.com/repos/prometheus/prometheus/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
|
||||||
tar xvf prometheus*.tar.gz
|
tar xvf prometheus*.tar.gz
|
||||||
cd prometheus*/
|
cd prometheus*/
|
||||||
sudo mv prometheus promtool /usr/local/bin/
|
mv prometheus promtool /usr/local/bin/
|
||||||
|
|
||||||
cat << EOF | sudo tee /etc/systemd/system/prometheus.service
|
mkdir -p /var/lib/prometheus && chown prometheus:prometheus /var/lib/prometheus
|
||||||
[Unit]
|
mkdir -p /etc/prometheus
|
||||||
Description=Prometheus
|
cat << EOF | tee /etc/prometheus/prometheus.yml
|
||||||
Documentation=https://prometheus.io/docs/introduction/overview/
|
|
||||||
Wants=network-online.target
|
|
||||||
After=network-online.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=prometheus
|
|
||||||
Group=prometheus
|
|
||||||
ExecReload=/bin/kill -HUP $MAINPID
|
|
||||||
ExecStart=/usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries --web.listen-address=0.0.0.0:9090 --web.external-url=
|
|
||||||
|
|
||||||
SyslogIdentifier=prometheus
|
|
||||||
Restart=always
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
sudo systemctl daemon-reload
|
|
||||||
sudo systemctl enable home-assistant@homeassistant.service
|
|
||||||
sudo systemctl start home-assistant@homeassistant.service
|
|
||||||
sudo systemctl status home-assistant@homeassistant.service
|
|
||||||
sudo systemctl enable prometheus
|
|
||||||
sudo systemctl start prometheus
|
|
||||||
sudo systemctl status prometheus
|
|
||||||
sudo systemctl enable grafana-server
|
|
||||||
sudo systemctl start grafana-server
|
|
||||||
sudo systemctl status grafana-server
|
|
||||||
|
|
||||||
|
|
||||||
echo "
|
|
||||||
# create user in home ass
|
|
||||||
# go to user profile in home ass
|
|
||||||
# get long lived access token like eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJlM2ZkY2VmZjYyODQ0OWQ5OGY2OTRlNmU2YjUxYzUyYSIsImlhdCI6MTY1MTg0ODU0NiwiZXhwIjoxOTY3MjA4NTQ2fQ.R6_My5eBUMcgompY3L3SbTUCTEIffQaNMUHyUw8sro0
|
|
||||||
"
|
|
||||||
cat << EOF | sudo tee /etc/prometheus/prometheus.yml
|
|
||||||
# File: /etc/prometheus/prometheus.yml
|
# File: /etc/prometheus/prometheus.yml
|
||||||
global:
|
global:
|
||||||
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
|
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
|
||||||
@ -167,8 +166,55 @@ scrape_configs:
|
|||||||
- targets: ['localhost:8123']
|
- targets: ['localhost:8123']
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
read -p "Please provide your access token: " TOKEN
|
cat << EOF | tee /etc/systemd/system/prometheus.service
|
||||||
cat << EOF | sudo tee /etc/grafana/grafana.ini
|
[Unit]
|
||||||
|
Description=Prometheus
|
||||||
|
Documentation=https://prometheus.io/docs/introduction/overview/
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=prometheus
|
||||||
|
Group=prometheus
|
||||||
|
ExecReload=/bin/kill -HUP $MAINPID
|
||||||
|
ExecStart=/usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries --web.listen-address=0.0.0.0:9090 --web.external-url=
|
||||||
|
|
||||||
|
SyslogIdentifier=prometheus
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable prometheus
|
||||||
|
systemctl start prometheus
|
||||||
|
|
||||||
|
|
||||||
|
## GRAFANA INSTALL
|
||||||
|
|
||||||
|
|
||||||
|
wget -q -O - https://packages.grafana.com/gpg.key | apt-key add -
|
||||||
|
echo "deb https://packages.grafana.com/oss/deb stable main" | tee -a /etc/apt/sources.list.d/grafana.list
|
||||||
|
apt-get update
|
||||||
|
apt-get install grafana
|
||||||
|
|
||||||
|
# This is probably useless: we don't need to start on a port lower than 3000
|
||||||
|
#cat <<EOF > /etc/systemd/system/grafana-server.service.d/override.conf
|
||||||
|
#[Service]
|
||||||
|
## Give the CAP_NET_BIND_SERVICE capability
|
||||||
|
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
|
||||||
|
#AmbientCapabilities=CAP_NET_BIND_SERVICE
|
||||||
|
#
|
||||||
|
## A private user cannot have process capabilities on the host's user
|
||||||
|
## namespace and thus CAP_NET_BIND_SERVICE has no effect.
|
||||||
|
#PrivateUsers=false
|
||||||
|
#EOF
|
||||||
|
|
||||||
|
cat << EOF | tee /etc/grafana/grafana.ini
|
||||||
metrics:
|
metrics:
|
||||||
wal_directory: /tmp/wal
|
wal_directory: /tmp/wal
|
||||||
configs:
|
configs:
|
||||||
@ -183,4 +229,8 @@ metrics:
|
|||||||
- url: http://cortex:9009/api/prom/push
|
- url: http://cortex:9009/api/prom/push
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
sudo systemctl reload grafana-server
|
systemctl enable grafana-server
|
||||||
|
systemctl start grafana-server
|
||||||
|
systemctl status home-assistant@homeassistant.service
|
||||||
|
systemctl status grafana-server
|
||||||
|
systemctl status prometheus
|
||||||
|
Loading…
Reference in New Issue
Block a user