191 lines
3.9 KiB
Markdown
191 lines
3.9 KiB
Markdown
# 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:
|
|
|
|
```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
|
|
|
|
## 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.
|
|
|
|
## Configure server
|
|
|
|
### 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
|
|
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:
|
|
|
|
```bash
|
|
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`:
|
|
|
|
```conf
|
|
[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:
|
|
```bash
|
|
sudo systemctl enable central
|
|
sudo systemctl start central
|
|
``` |