# Configure project for production ## 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 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.local 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 ``` ### 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 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 ```