Adsar Logo


Replace pingdom with Uptime Kuma



We've been using Pingdom for many years now, but it's (a) very expensive and (b) not particularly customisable (we want to show performance just from London), so looked at deploying Uptime Kuma.

There's a few changes we had to make to the source code to make it work for us, so thought it was worthing noting these below. We now have Uptime Kuma running on a $7 Digital Ocean droplet, so significantly cheaper than Pingdom.

1 - Make sure the droplet has enough swap to run without having to kill anything due to OOM issues

fallocate --length 4GiB /swapfile
chown root:root /swapfile
chmod 0600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '
/swapfile swap swap defaults 0 0
' >> /etc/fstab

2 - Install Uptime Kuma & PM2 to help manage the service

dnf module install nodejs:22
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
pm2 save && pm2 startup

3 - Disable SELinux

vi /etc/selinux/config

SELINUX=disabled

4 - Enable SMS notifications by using https://thesmsworks.co.uk/

You can't use their admin panel to create a data structure that thesmsworks will accept, so you have to hack their webhook code...

vi /service/notification-providers/webhook.js

/*let data = {
                heartbeat: heartbeatJSON,
                monitor: monitorJSON,
                msg,
            };*/
            let data = {
                sender: 'Email Alert',
                destination: '44xxxx',
                'content': msg,
            };

5 - Bind it to port 80

vi server/server.js

const port = 80;

5 - Enable sending SMTP to server with old ciphers...

vi server/notification-providers/smtp.js

const config = {
            host: notification.smtpHost,
            port: notification.smtpPort,
            secure: false,
            ignoreTLS: true,
            requireTLS: false,
            tls: {
                rejectUnauthorized: !notification.smtpIgnoreTLSError || false,
            }
        };

6 - And allow charts showing a full month's worth of stats...

vi src/components/PingChart.vue

chartPeriodOptions: {
                0: this.$t("recent"),
                3: "3h",
                6: "6h",
                24: "24h",
                168: "1w",
                744: "1m",
            },


Trees for life


Want to get in touch? mail@adsar.co.uk