matterbridge
Version:
Matterbridge plugin manager for Matter
251 lines (173 loc) • 7.44 kB
Markdown
<!-- eslint-disable markdown/no-missing-label-refs -->
<!-- eslint-disable markdown/no-multiple-h1 -->
# <img src="https://matterbridge.io/assets/matterbridge.svg" alt="Matterbridge Logo" width="64px" height="64px"> Matterbridge systemd configuration
[](https://www.npmjs.com/package/matterbridge)
[](https://www.npmjs.com/package/matterbridge)
[](https://hub.docker.com/r/luligu/matterbridge)
[](https://hub.docker.com/r/luligu/matterbridge)


[](https://codecov.io/gh/Luligu/matterbridge)
[](https://prettier.io/)
[](https://eslint.org/)
[](https://www.typescriptlang.org/)
[](https://nodejs.org/)
[](https://matterbridge.io)
[](https://www.npmjs.com/package/matter-history)
[](https://www.npmjs.com/package/node-ansi-logger)
[](https://www.npmjs.com/package/node-persist-manager)
# Production configuration
> **Nvm is a development tool and is not supported for production**.
## Run matterbridge as a daemon with systemctl (Linux only)
The easiest way to add systemctl is to use [Matterbridge service cli for linux](https://github.com/Luligu/mb-service-linux).
If your setup is too complex or you prefer to do it manually follow this method. You can still use mb-service to manage systemd after.
### First create the Matterbridge directories
This will create the required directories if they don't exist
```bash
cd ~
mkdir -p ~/Matterbridge
mkdir -p ~/.matterbridge
mkdir -p ~/.mattercert
sudo chown -R $USER:$USER ~/Matterbridge ~/.matterbridge ~/.mattercert
```
### Then create a systemctl configuration file for Matterbridge
Create a systemctl configuration file for Matterbridge
```bash
sudo nano /etc/systemd/system/matterbridge.service
```
Add the following to this file, replacing 3 times (!) USER with your user name (e.g. WorkingDirectory=/home/pi/Matterbridge, User=pi and Group=pi):
You may need to adapt the configuration to your setup:
- ExecStart on some linux distribution can also be ExecStart==/usr/bin/matterbridge --service
```text
[Unit]
Description=matterbridge
After=network-online.target
[Service]
Type=simple
ExecStart=matterbridge --service
WorkingDirectory=/home/<USER>/Matterbridge
StandardOutput=inherit
StandardError=inherit
Restart=always
User=<USER>
Group=<USER>
[Install]
WantedBy=multi-user.target
```
On some systems, npm install may fail with errors like `ENETUNREACH`:
This happens when:
The system has IPv6 enabled
DNS returns IPv6 (AAAA) records
But the host does not have a working IPv6 default route
In this situation:
Node.js may try IPv6 first.
The connection fails with ENETUNREACH.
Npm retries may randomly succeed or fail depending on resolution order.
This often indicates a misconfigured IPv6 route / DNS preference.
One possible fix, add this line to the existing [Service] section:
```text
Environment="NODE_OPTIONS=--dns-result-order=ipv4first"
```
If you use the frontend with --ssl --frontend 443 and get an error message: "Port 443 requires elevated privileges",
add this line to the existing [Service] section:
```text
AmbientCapabilities=CAP_NET_BIND_SERVICE
```
If you use the matterbridge-bthome plugin add this line to the existing [Service] section:
```text
AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_NET_ADMIN
```
If you modify matterbridge.service after, then run:
```bash
sudo systemctl daemon-reload
sudo systemctl restart matterbridge.service
sudo systemctl status matterbridge.service
```
### Start Matterbridge
```bash
sudo systemctl start matterbridge
```
### Stop Matterbridge
```bash
sudo systemctl stop matterbridge
```
### Show Matterbridge status
```bash
sudo systemctl status matterbridge.service
```
### Enable Matterbridge to start automatically on boot
```bash
sudo systemctl enable matterbridge.service
```
### Disable Matterbridge from starting automatically on boot
```bash
sudo systemctl disable matterbridge.service
```
### View the log of Matterbridge in real time (this will show the log with colors)
```bash
sudo journalctl -u matterbridge.service -n 1000 -f --output cat
```
### Delete the logs older then 3 days (all of them not only the ones of Matterbridge!)
Check the space used
```bash
sudo journalctl --disk-usage
```
remove all log older then 3 days
```bash
sudo journalctl --rotate
sudo journalctl --vacuum-time=3d
```
## Prevent the journal logs to grow
If you want to make the setting permanent to prevent the journal logs to grow too much, run
```bash
sudo nano /etc/systemd/journald.conf
```
add
```bash
Compress=yes # Compress logs
MaxRetentionSec=3days # Keep logs for a maximum of 3 days.
MaxFileSec=1day # Rotate logs daily within the 3-day retention period.
ForwardToSyslog=no # Disable forwarding to syslog to prevent duplicate logging.
SystemMaxUse=100M # Limit persistent logs in /var/log/journal to 100 MB.
RuntimeMaxUse=100M # Limit runtime logs in /run/log/journal to 100 MB.
```
save it and run
```bash
sudo systemctl restart systemd-journald
```
## Verify that with your distro you can run sudo npm install -g matterbridge without the password
Run the following command to verify if you can install Matterbridge globally without being prompted for a password:
```bash
sudo npm install -g matterbridge --omit=dev
```
If you are not prompted for a password, no further action is required.
If that is not the case, open the sudoers file for editing using visudo
```bash
sudo visudo
```
verify the presence of of a line
```text
@includedir /etc/sudoers.d
```
exit and create a configuration file for sudoers
```bash
sudo nano /etc/sudoers.d/matterbridge
```
add this line replacing USER with your user name (e.g. radxa ALL=(ALL) NOPASSWD: ALL)
```text
<USER> ALL=(ALL) NOPASSWD: ALL
```
or if you prefers to only give access to npm without password try with (e.g. radxa ALL=(ALL) NOPASSWD: /usr/bin/npm)
```text
<USER> ALL=(ALL) NOPASSWD: /usr/bin/npm
```
save the file and reload the settings with:
```bash
sudo chmod 0440 /etc/sudoers.d/matterbridge
sudo visudo -c
```
Verify if you can install Matterbridge globally without being prompted for a password:
```bash
sudo npm install -g matterbridge --omit=dev
```