Store API tokens encrypted in the database. During the database migration a randomly generated key will be used encrypt the tokens if no ENCRYPTION_KEY environment variable was provided. If the application is started without the presence of an ENCRYPTION_KEY (or if the key failed to decrypt the existing tokens), the UI will display a warning with further instructions.
7.2 KiB
title, sidebar_label
| title | sidebar_label |
|---|---|
| Manual install (FreeBSD) | Manual (FreeBSD) |
This document provides the necessary steps for installation of TeslaMate in a FreeBSD jail. The recommended and most straightforward installation approach is through the use of Docker, however this walkthrough provides the necessary steps for manual installation in a FreeBSD 13.0 environment. It assumes that pre-requisites are met and only basic instructions are provided and should also work in FreeBSD before 13.0.
Requirements
Click on the following items to view detailed installation steps.
bash & jq
pkg install bash jq
bash
For simplicity reasons, follow the rest of the tutorial in bash rather the csh.
git
pkg install git
Erlang (v21+)
pkg install erlang
Elixir (v1.11+)
Unfortunately the Elixir part is not well updated in FreeBSD ports. Hence the latest supported version for Erlang 21 (latest in FreeBSD ports) is Elixir 1.11.
We will need to compile it from source, which is pretty easy though.
pkg install gmake
mkdir /usr/local/src
cd /usr/local/src
git clone https://github.com/elixir-lang/elixir.git
cd elixir
git checkout v1.11.4
gmake clean test
gmake install
elixir --version
Postgres (v12+)
pkg install postgresql(12|13)-server
pkg install postgresql(12|13)-contrib
echo postgres_enable="yes" >> /etc/rc.conf
Grafana (v8.3.4+) & Plugins
pkg install grafana7
echo grafana_enable="yes" >> /etc/rc.conf
An MQTT Broker (e.g. Mosquitto)
pkg install mosquitto
echo mosquitto_enable="yes" >> /etc/rc.conf
Node.js (v14+)
pkg install node14
pkg install npm-node14
Clone TeslaMate git repository
The following command will clone the source files for the TeslaMate project. This should be run in an appropriate directory within which you would like to install TeslaMate. You should also record this path and provide them to the startup scripts proposed at the end of this guide.
cd /usr/local/src
git clone https://github.com/adriankumpf/teslamate.git
cd teslamate
git checkout $(git describe --tags `git rev-list --tags --max-count=1`) # Checkout the latest stable version
Create PostgreSQL database
The following commands will create a database called teslamate on the PostgreSQL database server, and a user called teslamate. When creating the teslamate user, you will be prompted to enter a password for the user interactively. This password should be recorded and provided as an environment variable in the startup script at the end of this guide. Use 'su - postgres' if unable to enter psql console from current user.
psql
postgres=# create database teslamate;
postgres=# create user teslamate with encrypted password 'your_secure_password_here';
postgres=# grant all privileges on database teslamate to teslamate;
postgres=# ALTER USER teslamate WITH SUPERUSER;
postgres=# \q
Note: The superuser privileges can be revoked after running the initial database migrations.
Compile Elixir Project
mix local.hex --force; mix local.rebar --force
mix deps.get --only prod
npm install --prefix ./assets && npm run deploy --prefix ./assets
export MIX_ENV=prod
mix do phx.digest, release --overwrite
Starting TeslaMate at boot time
Create FreeBSD service definition /usr/local/etc/rc.d/teslamate
# PROVIDE: teslamate
# REQUIRE: DAEMON
# KEYWORD: teslamate,tesla
. /etc/rc.subr
name=teslamate
rcvar=teslamate_enable
load_rc_config $name
user=teslamate
group=teslamate
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
# SET THEM IN THE /etc/rc.conf FILE
#
teslamate_enable=${teslamate_enable-"NO"}
pidfile=${teslamate_pidfile-"/var/run/${name}.pid"}
teslamate_enable_mqtt=${teslamate_enable_mqtt-"FALSE"}
teslamate_db_port=${teslamate_db_port-"5432"}
HTTP_BINDING_ADDRESS="0.0.0.0"; export HTTP_BINDING_ADDRESS
HOME="/usr/local/src/teslamate"; export HOME
PORT=${teslamate_port-"4000"}; export PORT
TZ=${teslamate_timezone-"Europe/Berlin"}; export TZ
LANG=${teslamate_locale-"en_US.UTF-8"}; export LANG
LC_CTYPE=${teslamate_locale-"en_US.UTF-8"}; export LC_TYPE
DATABASE_NAME=${teslamate_db-"teslamate"}; export DATABASE_NAME
DATABASE_HOST=${teslamate_db_host-"localhost"}; export DATABASE_HOST
DATABASE_USER=${teslamate_db_user-"teslamate"}; export DATABASE_USER
DATABASE_PASS=${teslamate_db_pass}; export DATABASE_PASS
ENCRYPTION_KEY=${teslamate_encryption_key}; export ENCRYPTION_KEY
DISABLE_MQTT=${teslamate_mqtt_enable-"FALSE"}; export DISABLE_MQTT
MQTT_HOST=${teslamate_mqtt_host-"localhost"}; export MQTT_HOST
VIRTUAL_HOST=${teslamate_virtual_host-"teslamate.example.com"}; export VIRTUAL_HOST
COMMAND=${teslamate_command-"${HOME}/_build/prod/rel/teslamate/bin/teslamate"}
teslamate_start()
{
${COMMAND} eval "TeslaMate.Release.migrate"
${COMMAND} daemon
}
start_cmd="${name}_start"
stop_cmd="${COMMAND} stop"
status_cmd="${COMMAND} pid"
run_rc_command "$1"
Update /etc/rc.conf
echo teslamate_enable="YES" >> /etc/rc.conf
echo teslamate_db_host="localhost" >> /etc/rc.conf
echo teslamate_port="5432" >> /etc/rc.conf
echo teslamate_db_pass="<super secret>" >> /etc/rc.conf
echo teslamate_encryption_key="<super secret encryption key>" >> /etc/rc.conf
echo teslamate_disable_mqtt="true" >> /etc/rc.conf
echo teslamate_timezone="<TZ Database>" >> /etc/rc.conf #i.e. Europe/Berlin
Start service
chmod +x /usr/local/etc/rc.d/teslamate
service teslamate start
Import Grafana Dashboards
-
Visit localhost:3000 and log in. The default credentials are:
admin:admin. -
Create a data source with the name "TeslaMate":
Type: PostgreSQL Default: YES Name: TeslaMate Host: localhost Database: teslamate User: teslamate Password: your_secure_password_here SSL-Mode: disable Version: 10 -
Manually import the dashboard files or use the
dashboards.shscript:$ ./grafana/dashboards.sh restore URL: http://localhost:3000 LOGIN: admin:admin DASHBOARDS_DIRECTORY: ./grafana/dashboards RESTORED locations.json RESTORED drive-stats.json RESTORED updates.json RESTORED drive-details.json RESTORED charge-details.json RESTORED states.json RESTORED overview.json RESTORED vampire-drain.json RESTORED visited.json RESTORED drives.json RESTORED projected-range.json RESTORED charge-level.json RESTORED charging-stats.json RESTORED mileage.json RESTORED charges.json RESTORED efficiency.json:::tip To use credentials other than the default, set the
LOGINvariable:LOGIN=user:password ./grafana/dashboards.sh restore:::