2024-10-15 20:48:26 +00:00
# Configure project for production
2024-10-19 09:41:21 +00:00
Note: This guide assumes that you use the default hostname, `central.internal` as hostname for your central system.
2024-10-15 20:48:26 +00:00
## 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:
```bash
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):
```bash
idf.py build
idf.py flash
```
#### Getting an OTA update
Use the following command to build an OTA update:
```bash
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
2024-10-19 09:41:21 +00:00
## 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 ](https://gitlab.com/pierre42100/dnsproxy ) as DNS server. Get and compile the sources:
```bash
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:
```bash
sudo mv dns_proxy /usr/local/bin/
```
### Configure DNS server
Configure the server as a service `/etc/systemd/system/dns.service` :
```conf
[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:
```bash
sudo systemctl enable dns
sudo systemctl start dns
```
Check that it works correctly:
```bash
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.
2024-10-15 20:48:26 +00:00
## Configure server
2024-10-18 18:41:08 +00:00
### Create a user dedicated to the central
```bash
sudo adduser --disabled-login central
```
### Install binary
You can use `scp` to copy the binary to the target server:
```bash
scp central_backend/target/release/central_backend pierre@central:/home/pierre
```
Then the executable must be installed system-wide:
```bash
sudo mv central_backend /usr/local/bin/
```
### Create configuration file
Create a configuration file in `/home/central/config.yaml` :
```bash
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:
```conf
SECRET=RANDOM_VALUE
COOKIE_SECURE=true
LISTEN_ADDRESS=0.0.0.0:443
ADMIN_USERNAME=admin
ADMIN_PASSWORD=FIXME
2024-10-19 09:41:21 +00:00
HOSTNAME=central.internal
2024-10-18 18:41:08 +00:00
STORAGE=/home/central/storage
FRONIUS_ORIG=http://10.0.0.10
```
### Test configuration
Run the following command to check if the configuration is working:
```bash
2024-10-18 19:18:00 +00:00
sudo -u central central_backend -c /home/central/config.yaml fronius -c
2024-10-18 18:41:08 +00:00
```
### Create systemd unit file
Once you confirmed the configuration is working, you can configure a system service, in `/etc/systemd/system/central.service` :
```conf
[Unit]
Description=Central backend server
After=syslog.target
After=network.target
[Service]
RestartSec=2s
Type=simple
User=central
Group=central
WorkingDirectory=/home/central
2024-10-18 19:18:00 +00:00
ExecStart=/usr/local/bin/central_backend -c /home/central/config.yaml fronius -c
2024-10-18 18:41:08 +00:00
Restart=always
Environment=USER=central
HOME=/home/central
[Install]
WantedBy=multi-user.target
```
Enable & start service:
```bash
sudo systemctl enable central
sudo systemctl start central
```