Uptime Kuma
To install for user monitor, use these instructions modified from the non-docker installation from https://github.com/louislam/uptime-kuma.
Change to the monitor user:
sudo -u monitor -i
Install the prebuild binaries of node.js https://nodejs.org/en/download/prebuilt-binaries
wget https://nodejs.org/dist/v22.11.0/node-v22.11.0-linux-x64.tar.xz
tar -xf node-v22.11.0-linux-x64.tar.xz
Add /home/monitor/node-v22.11.0-linux-x64/bin to the path for user monitor add the following line to .bashrc:
export $HOME/node-v22.11.0-linux-x64/bin:$PATH
Reread the .bashrc
source ~/.bashrc
Install uptime kuna:
git clone https://github.com/louislam/uptime-kuma.git
cd uptime-kuma
npm run setup
npm install pm2 -g && pm2 install pm2-logrotate
pm2 start server/server.js --name uptime-kuma
pm2 save && pm2 startup
Exit from the monitor user back to your user and run the command output by pm2 startup:
sudo env PATH=$PATH:/home/monitor/node-v22.11.0-linux-x64/bin /home/monitor/node-v22.11.0-linux-x64/lib/node_modules/pm2/bin/pm2 startup systemd -u monitor --hp /home/monitor
Nginx should be added to the salt states and applied. At present include configuration file is not setup (Note: when using nginx as reverse proxy for uptime kuna it cannot be in a sub directory). This is the first attempt at a salt template:
server {
{%- if interface_ips %}
{%- for interface_ip in interface_ips %}
listen {{ interface_ip }}:80;
{%- endfor %}
{%- else %}
listen 80;
{%- endif %}
server_name {{ domain }} {{ redirect }};
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
return 301 https://{{ domain }}$request_uri;
access_log /var/log/nginx/{{ domain }}-access.log timed;
error_log /var/log/nginx/{{ domain }}-error.log;
}
server {
client_max_body_size 149m;
server_name {{ domain }};
{% if ssl -%}
{%- if interface_ips %}
{%- for interface_ip in interface_ips %}
listen {{ interface_ip }}:443 ssl http2;
{%- endfor %}
{%- else %}
listen 443 ssl http2;
{%- endif %}
{%- include 'nginx/_ssl.conf' -%}
{% else -%}
{%- if interface_ips %}
{%- for interface_ip in interface_ips %}
listen {{ interface_ip }}:80;
{%- endfor %}
{%- else %}
listen 80;
{%- endif %}
{% endif %}
{% include 'nginx/_headers.conf' %}
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
access_log /var/log/nginx/{{ domain }}-access.log timed;
error_log /var/log/nginx/{{ domain }}-error.log;
}
With the DO API key installed, run:
init-letsencrypt --do-dns <domain> [<redirect domain if required>]
Reload the nginx configuration using:
sudo nginx -t
sudo systemctl reload nginx
If not using a public ip, to access add the fqdn to your /etc/hosts table and browse to the server address.
On first login the you will be prompted to create a user name and password - there is no user management so this is the only user that can be created.