SolarEnergy/docs/SETUP_PROD.md

3.9 KiB

Configure project for production

Note: This guide assumes that you use the default hostname, central.internal as hostname for your central system.

Create production build

Central

The production release of central backend and frontend can be realised on a computer which has NodeJS and Rust installed by executing the following command at the root of the project:

make

The backend will be available at this location:

central_backend/target/release/central_backend

Python device

The Python device isn't production ready yet.

ESP32 device

Flashing the device directly

Use the following commands to flash a device (inside ESP-IDF environnment):

idf.py build
idf.py flash

Getting an OTA update

Use the following command to build an OTA update:

idf.py build

The OTA update is then located in build/main.bin

Pre-requisites

  • A server running a recent Linux (Debian / Ubuntu preferred) with central as hostname
  • DHCP configured on the network

Configure DNS server

If you need to setup a DNS server / proxy to point central.internal to the central server IP, you can follow this guide.

Retrieve DNS server binary

Use DNSProxy as DNS server. Get and compile the sources:

git clone https://gitlab.com/pierre42100/dnsproxy
cd dnsproxy
cargo build --release
scp target/release/dns_proxy USER@CENTRAL_IP:/home/USER

Then, on the target server, install the binary to its final destination:

sudo mv dns_proxy /usr/local/bin/

Configure DNS server

Configure the server as a service /etc/systemd/system/dns.service:

[Unit]
Description=DNS server
After=syslog.target
After=network.target

[Service]
RestartSec=2s
Type=simple
User=root
Group=root
WorkingDirectory=/tmp
ExecStart=/usr/local/bin/dns_proxy -l "CENTRAL_IP:53" -c "central.internal. A CENTRAL_IP"
Restart=always

[Install]
WantedBy=multi-user.target

Enable and start the new service:

sudo systemctl enable dns
sudo systemctl start dns

Check that it works correctly:

dig central.internal. @CENTRAL_IP

You should get an entry like this if it works:

;; ANSWER SECTION:
central.internal.	0	IN	A	CENTRAL_IP

Then, in your DHCP service, define the central as the DNS server.

Configure server

Create a user dedicated to the central

sudo adduser --disabled-login central

Install binary

You can use scp to copy the binary to the target server:

scp central_backend/target/release/central_backend pierre@central:/home/pierre

Then the executable must be installed system-wide:

sudo mv central_backend /usr/local/bin/

Create configuration file

Create a configuration file in /home/central/config.yaml:

sudo touch /home/central/config.yaml
sudo chown central:central /home/central/config.yaml
sudo chmod 400 /home/central/config.yaml
sudo nano /home/central/config.yaml

Sample configuration:

SECRET=RANDOM_VALUE
COOKIE_SECURE=true
LISTEN_ADDRESS=0.0.0.0:443
ADMIN_USERNAME=admin
ADMIN_PASSWORD=FIXME
HOSTNAME=central.internal
STORAGE=/home/central/storage
FRONIUS_ORIG=http://10.0.0.10

Test configuration

Run the following command to check if the configuration is working:

sudo -u central central_backend -c /home/central/config.yaml fronius -c

Create systemd unit file

Once you confirmed the configuration is working, you can configure a system service, in /etc/systemd/system/central.service:

[Unit]
Description=Central backend server
After=syslog.target
After=network.target

[Service]
RestartSec=2s
Type=simple
User=central
Group=central
WorkingDirectory=/home/central
ExecStart=/usr/local/bin/central_backend -c /home/central/config.yaml fronius -c
Restart=always
Environment=USER=central 
HOME=/home/central

[Install]
WantedBy=multi-user.target

Enable & start service:

sudo systemctl enable central
sudo systemctl start central