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
 | 
						|
``` |