Files
docker-recorder/README.md
2020-04-02 08:05:12 +02:00

210 lines
6.4 KiB
Markdown

# Dockerfile for OwnTracks Recorder
[![Build Status](https://travis-ci.com/owntracks/docker-recorder.svg?branch=master)](https://travis-ci.com/owntracks/docker-recorder)
Dockerfile for the [Recorder](https://github.com/owntracks/recorder) of the
OwnTracks project. The image is [owntracks/recorder](https://hub.docker.com/r/owntracks/recorder).
## Quickstart
```bash
$ docker volume create recorder_store
$ docker run -d -p 8083:8083 -v recorder_store:/store -e OTR_HOST=mqtt_broker owntracks/recorder
```
Recorder is now accessible at `http://localhost:8083`.
`-p 8083:8083` makes the container reachable at port 8083. `-d` detaches the
container into the background. The volume `recorder_store` is mounted at
`/store` into the container. This is needed to have persistent data storage.
`-e` allows to pass additional configuration to the container as
environment variables. Multiple `-e` parameters can be used for multiple
environment variables.
## Configuration
The Recorder can be configured using two methods, environment variables and
via the a `recorder.conf` file in the `/config` volume of the container.
### Environment variables
Can be passed to the container with the `-e` parameter. Example:
```bash
$ docker run -d -p 8083:8083 \
-e OTR_HOST=mqtt_broker \
-e OTR_PORT=1883 \
-e OTR_USER=user \
-e OTR_PASS=pass \
owntracks/recorder
```
The complete list of parameters can be found in the [recorder
documentation](https://github.com/owntracks/recorder/blob/master/README.md#configuration-file).
### Configuration file
One can also use a configuration file. The container reads a `recorder.conf`
file from the `/config` folder. To use this, create a folder e.g. `./config` and
mount it into you docker container at `/config`.
```bash
$ mkdir config
$ docker run -d -p 8083:8083 -v recorder_store:/store -v ./config:/config owntracks/recorder
```
Up on starting the recorder, a default `recorder.conf` file will be created if
none exists. Possible options are documented [here](https://github.com/owntracks/recorder/blob/master/README.md#configuration-file).
**Notes:**
- The value of `OTR_HOST` is as seen from the container. Thus `localhost` refers to
the container not the host and should likely not be used.
- Environment variables, overwrite the `recorder.conf` file options.
- The shell like style of the`recorder.conf` file needs `""` encapsulated
variable values.
## Storing data
The `/store` volume of the container is used for persistent storage of location
data. The volume needs to be created explicitly.
```bash
$ docker volume create recorder_storage
$ docker run -d -p 8083:8083 -v recorder_store:/store owntracks/recorder
```
It is also possible to use a local folder instead of an static docker volume.
```bash
$ mkdir store
$ docker run -d -p 8083:8083 -v ./store:/store owntracks/recorder
```
If nothing is mounted at `/store`, docker will create a unique volume
automatically. However up on recreation of the docker container, this process
will be repeated and another unique volume will be created. As a result, the
container will have forgotten about previous tracks.
## TLS between MQTT broker and Recorder
The `OTR_CAPATH` of the container defaults to the `/config` volume. Thus
certificates and key files belong into the `/config` volume. `OTR_CAFILE` must be configured for TLS.
`OTR_CERTFILE` defaults to `cert.pem` and `OTR_KEYFILE` to `key.pem`. These files are optional and the options are ignored if the files don't exist.
## TLS encryption via reverse proxy
The Recorder has no encryption module by it self. Instead use a reverse proxy
setup. See https://github.com/jwilder/nginx-proxy for how to do this in a semi
automatic way with docker containers and
https://github.com/owntracks/recorder#reverse-proxy for Recorder specific
details.
## Healthcheck
The Recorder container performs a Docker-style HEALTHCHECK on itself by periodically
running `recorder-health.sh` on itself. This program POSTS a `_type: location` JSON
message to itself over HTTP to the ping-ping endpoint and verifies via the HTTP API
whether the message was received.
## Docker compose files
Save a file with the name [docker-compose.yml](docker-compose.yml) and following content. Run with
`docker-compose up` from the same folder.
``` yaml
version: '3'
services:
otrecorder:
image: owntracks/recorder
ports:
- 8083:8083
volumes:
- config:/config
- store:/store
restart: unless-stopped
volumes:
store:
config:
```
This [docker-compose.yml](docker-compose.yml) file creates `store` and `config` volumes. It is
possible to edit the `recorder.conf` file in the `config` volume to get the
system up and running. It is also possible to pass environment variables to the
docker container via the `environment:` keyword. For details see
[here](https://docs.docker.com/compose/environment-variables/) and for available
variables see
[here](https://github.com/owntracks/recorder/blob/master/README.md#configuration-file).
An example might look like:
``` yaml
version: '3'
services:
otrecorder:
image: owntracks/recorder
ports:
- 8083:8083
volumes:
- store:/store
restart: unless-stopped
environment:
- OTR_HOST = "mqtt_broker"
- OTR_USER = "user"
- OTR_PASS = "pass"
volumes:
store:
```
### With MQTT broker
If you need to set up an MQTT broker, you can easily use, say, Mosquitto. There are ready to use
containers available on docker hub. To use `eclipse-mosquitto` add something like [the following](docker-compose-mqtt.yml) to your `docker-compose.yml` file.
``` yaml
version: '3'
services:
otrecorder:
image: owntracks/recorder
ports:
- 8083:8083
volumes:
- config:/config
- store:/store
restart: unless-stopped
mosquitto:
image: eclipse-mosquitto
ports:
- 1883:1883
- 8883:8883
volumes:
- mosquitto-data:/mosquitto/data
- mosquitto-logs:/mosquitto/logs
- mosquitto-conf:/mosquitto/config
restart: unless-stopped
volumes:
store:
config:
mosquitto-data:
mosquitto-logs:
mosquitto-conf:
```
See [here](https://hub.docker.com/_/eclipse-mosquitto) for info on the eclipse-mosquitto image and how to configure it.
# Possible enhancements
- Maybe put the most common Mosquitto options in the section which uses an MQTT broker in the docker-compose file
- Possibly add support for Let's Encrypt
## Credits
- [JSON.lua](http://regex.info/blog/lua/json), by Jeffrey Friedl. [LICENSE](https://creativecommons.org/licenses/by/3.0/)