
<!-- PROJECT LOGO -->
<br />
<p align="center">

  <h3 align="center">dockerized openAger</h3>

  <p align="center">
    Ein Docker-Stack zur Installation von openAger
    <br />
      </p>
</p>





<!-- ABOUT THE PROJECT -->
## About The Project

Dieses Projekt beinhaltet einen Docker-Stack zur schnellen Installation der Cloud Komponenten von openAger.
openAger findet sich hier: https://www.valki.com/smartager/


<!-- GETTING STARTED -->
## Getting Started

Repo klonen und Installationsanleitung befolgen!

### Prerequisites

Damit das ganze Funktioniert, muss natürlich Docker installiert sein.
Raspis sind nicht zu empfehlen - dennoch hier kurz wie man Docker installiert (auf Basis eines Raspian light):
* sudo passwd  (root Passwort setzen)
* passwd pi    (Passwort für user pi setzen)
* sudo raspi-config (Localisation, Tastatur, Wifi etc. einrichten)
* sudo apt-get update && sudo apt-get upgrade (Pakete rasbian upgraden)
* curl -fsSL https://get.docker.com -o get-docker.sh
* sudo sh get-docker.sh
* sudo usermod -aG docker pi
* sudo shutdown -r
* sudo apt-get update && sudo apt-get upgrade
* sudo apt-get install git
* sudo apt-get install libffi-dev libssl-dev
* sudo apt install python3-dev
* sudo apt-get install -y python3 python3-pip
* sudo pip3 install docker-compose
* docker version


Optionale Docker Images:
* Portainer (zur bequemen Bedienung von Docker): https://hub.docker.com/r/portainer/portainer

Des weiteren wird für Fälle wo NICHT alles lokal im Netzwerk bleibt optional empfohlen:
* nginx Reverse-Proxy von jwilder https://hub.docker.com/r/jwilder/nginx-proxy
* letsencrypt - Companion für nginx von jrcs: https://hub.docker.com/r/jrcs/letsencrypt-nginx-proxy-companion

Wieso der Reverse Proxy und Letsencrypt eine feine Sache sind: http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/

Exemplarisch:
```sh
docker run -d -p 9000:9000 -p 8000:8000 --name portainer  --restart always -e VIRTUAL_HOST="subdomain.domain.com"   -e LETSENCRYPT_EMAIL="email@email.com"  -e LETSENCRYPT_HOST="subdomain.domain.com" -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

docker run -d --name nginx-proxy  --restart always  --publish 80:80 --publish 443:443  -v nginx_etc:/etc/nginx: -v nginx_html:/usr/share/nginx/html:  -v nginx_cert:/etc/nginx/certs: -v nginx_dhparms:/etc/nginx/dhparam: -v nginx_vhost:/etc/nginx/vhost.d: -v /var/run/docker.sock:/tmp/docker.sock:ro  jwilder/nginx-proxy

docker run -d --name nginx-proxy-letsencrypt  --restart always --volumes-from nginx-proxy    -v /var/run/docker.sock:/var/run/docker.sock:ro  jrcs/letsencrypt-nginx-proxy-companion

```

### Installation

1. nach /opt gehen und Repo klonen
```sh
cd /opt 
sudo git clone  https://git.valki.com/valki/dockerized_openAger.git
```
2. Umbenennen
```sh
sudo mv dockerized_openAger openAger
cd openAger
```
3. .env bei Bedarf bearbeiten und dann installieren
```sh
docker-compose up -d
```


<!-- USAGE EXAMPLES -->
## Usage

Folgende Services werden installiert:
* openager_mosquitto_1
* openager_nodered_1
  * Backend auf dem konfiguriertem Port erreichbar (1880)
  * Adminzugang im .env konfiguriert (admin:openager)
  * Frontend / Dashboard unter dem Pfad /ui erreichbar (open:openager)
* openager_influxdb_1
* openager_grafana_1
  * Grafana ist auf dem konfiguriertem Port erreichbar. 
  * Initialer Login lautet admin:admin
  * die Verbindung zur InfluxDB wird eingerichtet mit
    * URL = http://openager_influxdb_1:8086  und 
    * den Zugangsdaten aus .env (im Standard open:ager) 
    * die Standarddatenbank lautet openAger (auch im .env einstellbar)
* openager_phpmyadmin_1
  * via im .env konfiguriertem Port erreichbar (8088)
  * Standarduser lautet open:ager
* openager_mariadb_1

Hier kommt noch ein wenig Doku irgendwann.

Den User in der influxDB berechtigen (nur für den Fehlerfall!)
```sh
docker exec -it openager_influxdb_1 influx  -username "admin" -password "openager"
show databases
use openAger
show users
show grants for open
GRANT ALL on openAger to open
```

<!-- Screens -->
## Screens
![Installation](images/1.png)

Installation

![Installation](images/2.png)

Ende der Installation - nodered kann nachgestartet werden

![Installation](images/3.png)

in Portainer sind alle Dienste sichtbar und steuerbar

![Installation](images/4.png)

phpMyAdmin

![Installation](images/5.png)

Nodered Frontend

![Installation](images/6.png)

Nodered Backend - mqtt, mysql und influx schon konfiguriert!

![Installation](images/7.png)

Einrichtung Datasource in Grafana

![Installation](images/8.png)

Grafana ready to play


<!-- LICENSE -->
## License

Distributed under the CC BY-NC-SA License. See license.txt for more information.
