mirror of
https://github.com/owntracks/docker-recorder.git
synced 2026-05-07 02:56:36 +00:00
210 lines
6.4 KiB
Markdown
210 lines
6.4 KiB
Markdown
# Dockerfile for OwnTracks Recorder
|
|
|
|
[](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/)
|