Format all markdown files with deno fmt (#109)

* Format all markdown files with `deno fmt`

* Format with `deno fmt` again
Louis Lam 2025-05-19 18:40:15 +08:00 committed by GitHub
parent 692198f84f
commit bb20deea17
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
28 changed files with 492 additions and 525 deletions

@ -7,10 +7,10 @@ Feel free to add your project here by making a pull request in this wiki repo: h
- [Uptime Kuma Manager](https://apps.apple.com/us/app/uptime-kuma-manager/id6446004887) - An iOS app that allows you to connect to your Uptime Kuma servers and monitor the services directly from your phone.
- [Wuma - Uptime Kuma iOs Manager](https://apps.apple.com/app/wuma-uptime-kuma-manager/id1662404144) - An iOS app that allows you to monitor Uptime Kuma from your iPhone, iPad, and Apple Watch. Wuma adds iOS widgets and provides real-time notifications when services go down.
- [uptime-kuma-api (Python)](https://github.com/lucasheld/uptime-kuma-api) - A wrapper for the Uptime Kuma Socket.IO API
- [uptimekuma-migrator](https://github.com/Peppershade/uptimekuma-migrator) - Simple migrator from UptimeRobot to UptimeKuma
- [uptimekuma-migrator](https://github.com/Peppershade/uptimekuma-migrator) - Simple migrator from UptimeRobot to UptimeKuma
- [swatchdog](https://github.com/imsingee/swatchdog) - A simple requester to send periodically requests to Uptime Kuma's "Push" monitor
- [KumaCompanion](https://github.com/Zerka30/KumaCompanion) - A Command Line Interface (CLI) for Uptime Kuma
- [UptimeKumaRemoteProbe ](https://github.com/zimbres/UptimeKumaRemoteProbe) - A Remote Probe to work with Uptime Kuma "Push" monitor type.
- [UptimeKumaRemoteProbe](https://github.com/zimbres/UptimeKumaRemoteProbe) - A Remote Probe to work with Uptime Kuma "Push" monitor type.
- [AutoKuma](https://github.com/BigBoot/AutoKuma) - Automates the creation of Monitors based on Docker container labels. Additionally provides a CLI for Uptime Kuma.
- [Uptime Mate](https://github.com/schech1/uptime-buddy) - An Uptime Kuma monitoring tool for Apple Watch.
- [Uptime Kuma Push Agent](https://github.com/manprinsen/uptime-kuma-agent) - A lightweight monitoring agent with Go, Python, and shell implementations, designed to send network uptime data to Uptime Kuma's Push Monitor.

@ -24,11 +24,11 @@ Uptime Kuma primarily uses **Socket.io** for real-time communication after authe
### Socket.io API
1. Establish a Socket.io connection.
2. **Authentication:** The client must authenticate _after_ connection using one of these events:
- `login` Event: Provide username, password, and optionally a 2FA token.
- `loginByToken` Event: Provide a JWT token obtained from a previous successful login where "Remember Me" was selected.
3. **Authorization:** Once authenticated via `login` or `loginByToken`, all subsequent events sent on that specific socket connection are authorized for the logged-in user.
1. Establish a Socket.io connection.
2. **Authentication:** The client must authenticate _after_ connection using one of these events:
- `login` Event: Provide username, password, and optionally a 2FA token.
- `loginByToken` Event: Provide a JWT token obtained from a previous successful login where "Remember Me" was selected.
3. **Authorization:** Once authenticated via `login` or `loginByToken`, all subsequent events sent on that specific socket connection are authorized for the logged-in user.
## Common Data Structures
@ -37,58 +37,58 @@ _(Used in Socket.io events and some API responses)_
- **Monitor Object (Partial Example):**
```jsonc
{
"id": 1,
"name": "My Website",
"type": "http",
"url": "https://example.com",
"method": "GET",
"interval": 60,
"retryInterval": 60,
"resendInterval": 0,
"maxretries": 0,
"hostname": null,
"port": null,
"active": true,
"tags": [
{
"tag_id": 1,
"monitor_id": 1,
"value": null,
"name": "production",
"color": "#059669"
}
],
"notificationIDList": { "1": true },
// ... other monitor-type specific fields
"accepted_statuscodes_json": "[\"200-299\"]",
"conditions": "[]" // JSON string of condition groups
"id": 1,
"name": "My Website",
"type": "http",
"url": "https://example.com",
"method": "GET",
"interval": 60,
"retryInterval": 60,
"resendInterval": 0,
"maxretries": 0,
"hostname": null,
"port": null,
"active": true,
"tags": [
{
"tag_id": 1,
"monitor_id": 1,
"value": null,
"name": "production",
"color": "#059669"
}
],
"notificationIDList": { "1": true },
// ... other monitor-type specific fields
"accepted_statuscodes_json": "[\"200-299\"]",
"conditions": "[]" // JSON string of condition groups
}
```
- **Heartbeat Object:**
```jsonc
{
"monitorID": 1,
"status": 1, // 0=DOWN, 1=UP, 2=PENDING, 3=MAINTENANCE
"time": "2023-10-27T10:30:00.123Z", // ISO 8601 UTC Timestamp
"msg": "OK",
"ping": 123, // Response time in ms, null if not applicable
"important": true, // Was this heartbeat a status change?
"duration": 60, // Seconds since the last heartbeat for this monitor
"localDateTime": "2023-10-27 12:30:00", // Formatted time in server's timezone
"timezone": "Europe/Berlin", // Server's timezone name
"retries": 0, // Number of retries attempted for this state
"downCount": 0 // Consecutive down count for resend logic
"monitorID": 1,
"status": 1, // 0=DOWN, 1=UP, 2=PENDING, 3=MAINTENANCE
"time": "2023-10-27T10:30:00.123Z", // ISO 8601 UTC Timestamp
"msg": "OK",
"ping": 123, // Response time in ms, null if not applicable
"important": true, // Was this heartbeat a status change?
"duration": 60, // Seconds since the last heartbeat for this monitor
"localDateTime": "2023-10-27 12:30:00", // Formatted time in server's timezone
"timezone": "Europe/Berlin", // Server's timezone name
"retries": 0, // Number of retries attempted for this state
"downCount": 0 // Consecutive down count for resend logic
}
```
- **Notification Object (Partial Example):**
```jsonc
{
"id": 1,
"name": "My Telegram Bot",
"active": true,
"isDefault": false,
"userID": 1,
"config": "{\"type\":\"telegram\",\"telegramBotToken\":\"...\",\"telegramChatID\":\"...\",\"name\":\"My Telegram Bot\",\"isDefault\":false,\"applyExisting\":false}" // JSON string
"id": 1,
"name": "My Telegram Bot",
"active": true,
"isDefault": false,
"userID": 1,
"config": "{\"type\":\"telegram\",\"telegramBotToken\":\"...\",\"telegramChatID\":\"...\",\"name\":\"My Telegram Bot\",\"isDefault\":false,\"applyExisting\":false}" // JSON string
}
```
@ -112,14 +112,14 @@ Receive updates for "Push" type monitors.
- **Success Response (200 OK):**
```jsonc
{
"ok": true
"ok": true
}
```
- **Error Response (404 Not Found):**
```jsonc
{
"ok": false,
"msg": "Monitor not found or not active."
"ok": false,
"msg": "Monitor not found or not active."
}
```
@ -237,28 +237,28 @@ Provide data for _published_ public status pages.
- **Success Response (200 OK):**
```jsonc
{
"heartbeatList": {
"1": [
// Monitor ID 1
{ "status": 1, "time": "...", "msg": "OK", "ping": 55 }
// ... more heartbeats (up to 100 recent)
],
"2": [
// Monitor ID 2
{
"status": 0,
"time": "...",
"msg": "Timeout",
"ping": null
}
// ...
]
},
"uptimeList": {
"1_24": 0.9998, // Monitor ID 1, 24h uptime percentage
"2_24": 0.95 // Monitor ID 2, 24h uptime percentage
// ... potentially other periods if requested differently in future
}
"heartbeatList": {
"1": [
// Monitor ID 1
{ "status": 1, "time": "...", "msg": "OK", "ping": 55 }
// ... more heartbeats (up to 100 recent)
],
"2": [
// Monitor ID 2
{
"status": 0,
"time": "...",
"msg": "Timeout",
"ping": null
}
// ...
]
},
"uptimeList": {
"1_24": 0.9998, // Monitor ID 1, 24h uptime percentage
"2_24": 0.95 // Monitor ID 2, 24h uptime percentage
// ... potentially other periods if requested differently in future
}
}
```
- **Error Response (404 Not Found):** If slug doesn't exist or status page is not published.
@ -316,13 +316,13 @@ Real-time interaction occurs over Socket.io after successful authentication.
### General Flow
1. Client connects.
2. Server may send `loginRequired`.
3. Client sends `login` or `loginByToken`.
4. Server responds via callback.
5. If login OK, server sends initial data (`monitorList`, `heartbeatList`, etc.).
6. Client sends commands (e.g., `addMonitor`, `pauseMonitor`), server responds via callback.
7. Server pushes real-time updates (`heartbeat`, `avgPing`, `uptime`, list updates).
1. Client connects.
2. Server may send `loginRequired`.
3. Client sends `login` or `loginByToken`.
4. Server responds via callback.
5. If login OK, server sends initial data (`monitorList`, `heartbeatList`, etc.).
6. Client sends commands (e.g., `addMonitor`, `pauseMonitor`), server responds via callback.
7. Server pushes real-time updates (`heartbeat`, `avgPing`, `uptime`, list updates).
### Client-Sent Events (Selected Detail)

@ -2,60 +2,42 @@
API keys can be enabled to manage access to the Prometheus metrics endpoint.
By default, HTTP basic authentication is used to secure access to the Prometheus
metrics endpoint. As soon as you add your first API key, the use of basic
authentication for the endpoint will be permanently disabled.
By default, HTTP basic authentication is used to secure access to the Prometheus metrics endpoint. As soon as you add your first API key, the use of basic authentication for the endpoint will be permanently disabled.
## Adding an API key
Management of API keys is done through the API Keys page in settings
This page will show you all of your API keys, including expired keys.
You can set the name of the key, as well as it's expiry date, or
optionally set the key to never expire. When you click generate, you
will be shown the API key in a pop up dialog, you should make sure to
make a copy of the key as it will not be shown again. The API key cannot
be used to access the web interface but you should treat API keys like
you treat your passwords as they can still be used to access potentially
sensitive data.
Management of API keys is done through the API Keys page in settings This page will show you all of your API keys, including expired keys.
You can set the name of the key, as well as it's expiry date, or optionally set the key to never expire. When you click generate, you will be shown the API key in a pop up dialog, you should make sure to make a copy of the key as it will not be shown again. The API key cannot be used to access the web interface but you should treat API keys like you treat your passwords as they can still be used to access potentially sensitive data.
## Disabling keys
It is possible to temporarily disable keys. This can be done through the
settings page. This will prevent the key from being used for
authentication until it is enabled again.
It is possible to temporarily disable keys. This can be done through the settings page. This will prevent the key from being used for authentication until it is enabled again.
## Expired keys
If a key has expired, it will not be automatically deleted. This is to
aid in debugging systems that suddenly stop working. You can delete an
expired key, or any key for that matter, by simply hitting the red
delete button from the settings page.
If a key has expired, it will not be automatically deleted. This is to aid in debugging systems that suddenly stop working. You can delete an expired key, or any key for that matter, by simply hitting the red delete button from the settings page.
## Authenticating using an API key
Authentication is done by passing the API key in the `Authorization`
header. For example, here is a request made with curl to the `metrics`
endpoint.
Authentication is done by passing the API key in the `Authorization` header. For example, here is a request made with curl to the `metrics` endpoint.
```bash
curl -u":<key>" uptime.kuma/metrics
```
> [!NOTE]
> `:` is required before the key, because basic authentication requires a username and password separated by a `:`.
> We don't make use of the username field.
> `:` is required before the key, because basic authentication requires a username and password separated by a `:`. We don't make use of the username field.
Here is an example config for Prometheus:
```yml
- job_name: 'uptime'
scrape_interval: 30s
scheme: http
static_configs:
- targets: ['uptime.url']
basic_auth:
- job_name: "uptime"
scrape_interval: 30s
scheme: http
static_configs:
- targets: ["uptime.url"]
basic_auth:
password: <api key>
```

@ -3,24 +3,23 @@
By default, Cloudflare is not API friendly including Uptime Kuma. Cloudflare may block requests from Uptime Kuma.
You need to disable or bypass "Browser Integrity Check" in Cloudflare Dashboard via one of these methods:
- (Easiest) Add your Uptime Kuma host IP address to [IP Access rules](https://developers.cloudflare.com/waf/tools/ip-access-rules/) as an Allowed address, optionally across every domain in your Cloudflare account
- Allow Uptime Kuma to [bypass the check via WAF Custom Rules](https://developers.cloudflare.com/waf/custom-rules/skip/), and special header. E.g. lets add to the Kuma request header (please replace `kuma-qwerty123456` with your own random value):
```json
{
"kumaping":"kuma-qwerty123456"
}
```
Now create a rule where you will bypass JS challenge if header is presented. You can also add multiple domains after `or` E.g.
```
(http.host eq "domain1" and all(http.request.headers["kumaping"][*] ne "kuma-qwerty123456")) or (http.host eq "domain2" and all(http.request.headers["kumaping"][*] ne "qwerty123456"))
```
and at the end of the rule JS challenge. Now challenge will be only triggered if `kumaping` header is not presented or it has a wrong value.
```json
{
"kumaping": "kuma-qwerty123456"
}
```
Now create a rule where you will bypass JS challenge if header is presented. You can also add multiple domains after `or` E.g.
```
(http.host eq "domain1" and all(http.request.headers["kumaping"][*] ne "kuma-qwerty123456")) or (http.host eq "domain2" and all(http.request.headers["kumaping"][*] ne "qwerty123456"))
```
and at the end of the rule JS challenge. Now challenge will be only triggered if `kumaping` header is not presented or it has a wrong value.
- Use a [Configuration Rule](https://developers.cloudflare.com/rules/configuration-rules/) to disable the check for your Uptime Kuma IP address
Related discussion: https://community.cloudflare.com/t/api-403-after-enabling-cloudflare/108078/6
## How to proxy Uptime Kuma via Cloudflare
Please read:
https://github.com/louislam/uptime-kuma/wiki/Reverse-Proxy#cloudflare
Please read: https://github.com/louislam/uptime-kuma/wiki/Reverse-Proxy#cloudflare

@ -6,4 +6,4 @@ Just a note for some traps and useful things for development.
- [CSS] do not use any system-ui fonts, the fonts will be difference in difference Windows Languages
- [Unit Test] Vue suggested Jest, but what, you cannot run the test in a browser, it is so stupid because all browser functions cannot be tested (localStorage, DOM and more).
- Need to use `jsesc` to escape the content inside <script></script>.
- .NET 4.7 is the best lowest version to support high DPI monitors
- .NET 4.7 is the best lowest version to support high DPI monitors

@ -6,28 +6,28 @@ UPTIME_KUMA_PORT=8080
```
Server Argument Usage:
```bash
node server/server.js --host=127.0.0.1 --port=8080
```
## Server Environment Variables
| Environment Variable | Server Argument | Description | Default |
| ------------------------------------------ | -------------------------- | --------------------------------------------------------------------- | ---------: |
| `DATA_DIR` | `--data-dir=` | Set the directory where the data should be stored (could be relative) | `./data/` |
| `UPTIME_KUMA_HOST` or `HOST` | `--host=` | Host to bind to, could be an ip. | `::` |
| `UPTIME_KUMA_PORT` or `PORT` | `--port=` | Port to listen to | `3001` |
| `UPTIME_KUMA_SSL_KEY` or `SSL_KEY` | `--ssl-key=` | Path to SSL key | |
| `UPTIME_KUMA_SSL_CERT` or `SSL_CERT` | `--ssl-cert=` | Path to SSL certificate | |
| `UPTIME_KUMA_SSL_KEY_PASSPHRASE` or `SSL_KEY_PASSPHRASE` | `--ssl-key-passphrase=` | (1.21.1) SSL Key Passphrase | |
| `UPTIME_KUMA_CLOUDFLARED_TOKEN` | `--cloudflared-token=` | (1.14.0) Cloudflare Tunnel Token | |
| `UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN` | `--disable-frame-sameorigin=` | By default, Uptime Kuma is not allowed in iframe if the domain name is not the same as the parent. It protects your Uptime Kuma to be a phishing website. If you don't need this protection, you can set it to `true` | `false` |
| `UPTIME_KUMA_WS_ORIGIN_CHECK` | | By default, Uptime Kuma is verifying that the websockets [`ORIGIN`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin)-Header matches your servers hostname. If you don't need this protection, you can set it to `bypass`. See [GHSA-mj22-23ff-2hrr](https://github.com/louislam/uptime-kuma/security/advisories/GHSA-mj22-23ff-2hrr) for further context. | `cors-like` |
| `UPTIME_KUMA_ALLOW_ALL_CHROME_EXEC` | `--allow-all-chrome-exec=` | (1.23.0) Allow to specify any executables as Chromium | `0` |
| `NODE_EXTRA_CA_CERTS` | | Add your self-signed ca certs. (e.g. /cert/path/CAcert.pem) [Read more](https://github.com/louislam/uptime-kuma/issues/1380) | |
| `NODE_TLS_REJECT_UNAUTHORIZED` | | Ignore all TLS errors | `0` |
| `NODE_OPTIONS` | | Set it to `--insecure-http-parser`, if you encountered error `Invalid header value char` when your website using WAF | |
| Environment Variable | Server Argument | Description | Default |
| -------------------------------------------------------- | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------: |
| `DATA_DIR` | `--data-dir=` | Set the directory where the data should be stored (could be relative) | `./data/` |
| `UPTIME_KUMA_HOST` or `HOST` | `--host=` | Host to bind to, could be an ip. | `::` |
| `UPTIME_KUMA_PORT` or `PORT` | `--port=` | Port to listen to | `3001` |
| `UPTIME_KUMA_SSL_KEY` or `SSL_KEY` | `--ssl-key=` | Path to SSL key | |
| `UPTIME_KUMA_SSL_CERT` or `SSL_CERT` | `--ssl-cert=` | Path to SSL certificate | |
| `UPTIME_KUMA_SSL_KEY_PASSPHRASE` or `SSL_KEY_PASSPHRASE` | `--ssl-key-passphrase=` | (1.21.1) SSL Key Passphrase | |
| `UPTIME_KUMA_CLOUDFLARED_TOKEN` | `--cloudflared-token=` | (1.14.0) Cloudflare Tunnel Token | |
| `UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN` | `--disable-frame-sameorigin=` | By default, Uptime Kuma is not allowed in iframe if the domain name is not the same as the parent. It protects your Uptime Kuma to be a phishing website. If you don't need this protection, you can set it to `true` | `false` |
| `UPTIME_KUMA_WS_ORIGIN_CHECK` | | By default, Uptime Kuma is verifying that the websockets [`ORIGIN`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin)-Header matches your servers hostname. If you don't need this protection, you can set it to `bypass`. See [GHSA-mj22-23ff-2hrr](https://github.com/louislam/uptime-kuma/security/advisories/GHSA-mj22-23ff-2hrr) for further context. | `cors-like` |
| `UPTIME_KUMA_ALLOW_ALL_CHROME_EXEC` | `--allow-all-chrome-exec=` | (1.23.0) Allow to specify any executables as Chromium | `0` |
| `NODE_EXTRA_CA_CERTS` | | Add your self-signed ca certs. (e.g. /cert/path/CAcert.pem) [Read more](https://github.com/louislam/uptime-kuma/issues/1380) | |
| `NODE_TLS_REJECT_UNAUTHORIZED` | | Ignore all TLS errors | `0` |
| `NODE_OPTIONS` | | Set it to `--insecure-http-parser`, if you encountered error `Invalid header value char` when your website using WAF | |
## Docker Specific Environment Variables
@ -38,20 +38,19 @@ node server/server.js --host=127.0.0.1 --port=8080
## For Development only
| Environment variable | Server argument | Description | Default |
| ------------------------------------------ | -------------------------- | --------------------------------------------------------------------- | ---------: |
| `NODE_ENV` | | Set the NodeJS environment flag. `development`, `production` | production |
| `UPTIME_KUMA_LOG_RESPONSE_BODY_MONITOR_ID` | | Monitor ID - If provided, it will output the monitor's response to your console | |
| `UPTIME_KUMA_HIDE_LOG` | | (1.15.0) Examples: `debug_monitor,info_monitor,debug_cert,warn_monitor` | |
| `SQL_LOG` | | Set `1` to enable | | |
| `UPTIME_KUMA_ENABLE_EMBEDDED_MARIADB`| | (2.0.0) Set `1` to enable | | |
| `UPTIME_KUMA_IN_CONTAINER`| | (1.23.0) Is Uptime Kuma inside a container? | | |
| Environment variable | Server argument | Description | Default |
| ------------------------------------------ | --------------- | ------------------------------------------------------------------------------- | ---------: |
| `NODE_ENV` | | Set the NodeJS environment flag. `development`, `production` | production |
| `UPTIME_KUMA_LOG_RESPONSE_BODY_MONITOR_ID` | | Monitor ID - If provided, it will output the monitor's response to your console | |
| `UPTIME_KUMA_HIDE_LOG` | | (1.15.0) Examples: `debug_monitor,info_monitor,debug_cert,warn_monitor` | |
| `SQL_LOG` | | Set `1` to enable | |
| `UPTIME_KUMA_ENABLE_EMBEDDED_MARIADB` | | (2.0.0) Set `1` to enable | |
| `UPTIME_KUMA_IN_CONTAINER` | | (1.23.0) Is Uptime Kuma inside a container? | |
## MariaDB Environment Variables
| Environment Variable | Description |
| ------------------------- | ---------------------------------- |
| Environment Variable | Description |
| ------------------------- | ------------------------------------------ |
| `UPTIME_KUMA_DB_TYPE` | (2.0.0) Database Type `sqlite`, `mariadb` |
| `UPTIME_KUMA_DB_HOSTNAME` | (2.0.0) Database hostname. for mariadb |
| `UPTIME_KUMA_DB_PORT` | (2.0.0) Database port. for mariadb, `3306` |

72
Home.md

@ -6,56 +6,54 @@ Kuma (クマ/熊) means bear 🐻 in Japanese.
A little bear is watching your website.🐻🐻🐻
### Pronunciation
### Pronunciation
https://ipa-reader.com/?text=%CB%88%CA%8Cpta%C9%AAm%20k%C9%AF%CC%9F%E1%B5%9Dma%CC%A0&voice=Joey
## How to contribute to this wiki?
You could make a pull request in this wiki repo:
https://github.com/louislam/uptime-kuma-wiki
You could make a pull request in this wiki repo: https://github.com/louislam/uptime-kuma-wiki
## History
[![Star History Chart](https://api.star-history.com/svg?repos=louislam/uptime-kuma&type=Date)](https://star-history.com/#louislam/uptime-kuma&Date)
* (2021-08-21) Reach 1001 Stargazers, thanks everyone!
* (2021-08-26) Reach 2066 Stargazers. Grow so fast! That is unexpected!
* (2021-08-31) Reach 2651 Stargazers. Amazing!
* (2021-09-06) Reach 3066 Stargazers. 👀👏
* (2021-09-12) Docker Pull is over 1M!
* (2021-09-17) 🐣
- (2021-08-21) Reach 1001 Stargazers, thanks everyone!
- (2021-08-26) Reach 2066 Stargazers. Grow so fast! That is unexpected!
- (2021-08-31) Reach 2651 Stargazers. Amazing!
- (2021-09-06) Reach 3066 Stargazers. 👀👏
- (2021-09-12) Docker Pull is over 1M!
- (2021-09-17) 🐣
<img src="https://user-images.githubusercontent.com/1336778/133796976-1ea682f5-0cfa-4c50-b6fd-7d879744b12f.jpg" width="250" />
* (2021-09-29) Reach 3645 Stargazers. 👍
* (2021-09-30) Docker Pull is over 2M! Crazy🤪
* (2021-10-07) Reach 4212 🔭✨⭐.
* (2021-10-08) Reach 4764 Stargazers. One of trending projects of the day!
* (2021-10-11) Reach 6658 Stargazers. Is it a rocket🚀?
* (2021-10-13) Docker Pull is over 3M!
* (2021-10-21) Docker Pull is over 4M! ⭐ It's over 8000! https://www.youtube.com/watch?v=TSQqUfeyHF8
- (2021-09-29) Reach 3645 Stargazers. 👍
- (2021-09-30) Docker Pull is over 2M! Crazy🤪
- (2021-10-07) Reach 4212 🔭✨⭐.
- (2021-10-08) Reach 4764 Stargazers. One of trending projects of the day!
- (2021-10-11) Reach 6658 Stargazers. Is it a rocket🚀?
- (2021-10-13) Docker Pull is over 3M!
- (2021-10-21) Docker Pull is over 4M! ⭐ It's over 8000! https://www.youtube.com/watch?v=TSQqUfeyHF8
<img src="https://user-images.githubusercontent.com/1336778/138208120-09a6d4b2-ceca-4380-ba59-5456b72a80aa.jpg" width="250" />
* (2021-10-27) Docker Pull is over 5M!
* (2021-11-08) Docker Pull is over 6.7M! 9242 Stargazers!
* (2021-11-18) Docker Pull is over 8M!
* (2021-12-01) Docker Pull is over 10M!
* (2021-12-02) Reach 10,076 Stargazers!
* (2022-01-21) Reach 12,059 Stargazers!
* (2022-03-02) Docker Pull is over 25M! 14,050 Stargazers!
* (2022-04-10) 15,629 Stargazers!
* (2022-10-09) 21,975 Stargazers! Over 20K! Another Milestone!🐻👍
* (2023-01-09) {"⭐": 27783, "🐳": 31688853 }
* (2023-02-06) let starCount = 29141; let dockerPullCount = 32185677;
* (2023-02-26) `<div class="⭐">30,063</div><div class="🐳">32,606,170</div>`
* (2023-05-11) ⭐33132,🐳34513470
* (2023-10-09) ⭐39263,🐳44805032
* (2023-11-03) ⭐40093,🐳47255050
* (2023-12-05) ⭐42,297 🐳51,241,294
* (2024-04-05) ⭐48,341 🐳68,668,482
* (2024-10-16) ⭐57,263 🐳93,911,095
* (2024-11-20) ⭐60,027 🐳96,146,195
* (2024-12-20) ⭐61,495 🐳98,033,822
- (2021-10-27) Docker Pull is over 5M!
- (2021-11-08) Docker Pull is over 6.7M! 9242 Stargazers!
- (2021-11-18) Docker Pull is over 8M!
- (2021-12-01) Docker Pull is over 10M!
- (2021-12-02) Reach 10,076 Stargazers!
- (2022-01-21) Reach 12,059 Stargazers!
- (2022-03-02) Docker Pull is over 25M! 14,050 Stargazers!
- (2022-04-10) 15,629 Stargazers!
- (2022-10-09) 21,975 Stargazers! Over 20K! Another Milestone!🐻👍
- (2023-01-09) {"⭐": 27783, "🐳": 31688853 }
- (2023-02-06) let starCount = 29141; let dockerPullCount = 32185677;
- (2023-02-26) `<div class="⭐">30,063</div><div class="🐳">32,606,170</div>`
- (2023-05-11) ⭐33132,🐳34513470
- (2023-10-09) ⭐39263,🐳44805032
- (2023-11-03) ⭐40093,🐳47255050
- (2023-12-05) ⭐42,297 🐳51,241,294
- (2024-04-05) ⭐48,341 🐳68,668,482
- (2024-10-16) ⭐57,263 🐳93,911,095
- (2024-11-20) ⭐60,027 🐳96,146,195
- (2024-12-20) ⭐61,495 🐳98,033,822

@ -7,6 +7,7 @@ By default, a docker container is self-contained, which means Uptime Kuma cannot
### (Method 1) Share docker.sock with Uptime Kuma Container
Command argument:
```bash
-v /var/run/docker.sock:/var/run/docker.sock
```
@ -15,15 +16,16 @@ docker-compose:
```yml
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/run/docker.sock:/var/run/docker.sock
```
### (Method 2) TCP - Bridge Mode
**Expose TCP port**
**Expose TCP port**\
To enable TCP monitoring, you need to first expose the Docker daemon on a TCP port. The primary documentation is available [here](https://docs.docker.com/config/daemon/) but the example below provides some quick options.
Update the daemon configuration located at `/etc/docker/daemon.json`:
```json
{
#any additional parameters should be kept
@ -55,11 +57,10 @@ ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
My original ExecStart was: `ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock`, note the -H that would cause a duplicate property error.
> [!NOTE]
> If you installed docker using snap
Snap stores the `daemon.json` here: `/var/snap/docker/current/config/daemon.json`
Snap stores the `daemon.json` here: `/var/snap/docker/current/config/daemon.json`
use `sudo nano /var/snap/docker/current/config/daemon.json` to edit the file like
@ -78,23 +79,23 @@ The service should be running as usual, showing the docker snap service
![Screenshot showing the snap docker service working](https://github.com/louislam/uptime-kuma/assets/642149/8494c876-5580-4f87-9ceb-9a5974f1c977)
**Update uptime-kuma**
**Update uptime-kuma**\
Add a new Docker host and choose TCP as the option. Specify the IP address of the host and the TCP port you exposed, as seen below.
![Docker host monitor](img/docker-host.png)
**Configuring certificates for Docker TLS connection**
Assuming you have already properly configured your remote docker instance to listen securely for TLS connections as detailed [here](https://docs.docker.com/engine/security/protect-access/#use-tls-https-to-protect-the-docker-daemon-socket), you must configure Uptime-Kuma to use the certificates you've generated. The base path where certificates are looked for can be set with the `DOCKER_TLS_DIR_PATH` environmental variable or defaults to `data/docker-tls/`.
Assuming you have already properly configured your remote docker instance to listen securely for TLS connections as detailed [here](https://docs.docker.com/engine/security/protect-access/#use-tls-https-to-protect-the-docker-daemon-socket), you must configure Uptime-Kuma to use the certificates you've generated. The base path where certificates are looked for can be set with the `DOCKER_TLS_DIR_PATH` environmental variable or defaults to `data/docker-tls/`.
For running uptime-kuma inside docker, mount the parent directory to `/app/data/docker-tls`.
For running uptime-kuma inside docker, mount the parent directory to `/app/data/docker-tls`.
```
-v /docker-cert:/app/data/docker-tls
```
If a directory in this path exists with a name matching the FQDN of the docker host (e.g. the FQDN of `https://example.com:2376` is `example.com` so the directory `data/docker-tls/example.com/` would be searched for certificate files), then `ca.pem`, `key.pem` and `cert.pem` files are loaded and included in the agent options. File names can also be overridden via `DOCKER_TLS_FILE_NAME_(CA|KEY|CERT)`.
## Related Discussion
- https://github.com/louislam/uptime-kuma/issues/2061

@ -13,8 +13,7 @@ You can access the maintenance management via the menu at the top left.
![image](img/maintenance/user-menue-Maintenace.png)
Within the maintenance management, there is an overview of the currently configured maintenance windows.
In the upper area, you can configure another maintenance using the '+ Schedule Maintenance' button.
Within the maintenance management, there is an overview of the currently configured maintenance windows. In the upper area, you can configure another maintenance using the '+ Schedule Maintenance' button.
![image](img/maintenance/schedule-maintenance-button.png)
@ -26,13 +25,11 @@ Here you can define an title for the new maintenance, which is displayed on top
**Description**
Here you can define an description for the new maintenance, which is also displayed on top of selected status pages.
The description supports Markdown syntax.
Here you can define an description for the new maintenance, which is also displayed on top of selected status pages. The description supports Markdown syntax.
**Affected Monitors**
Select the monitors that will be affected by the new maintenance.
These monitors will be displayed in blue on the Dashboard and all display status pages during the maintenance.
Select the monitors that will be affected by the new maintenance. These monitors will be displayed in blue on the Dashboard and all display status pages during the maintenance.
Select the affected monitors from the list. You can search by entering part of the title of the required monitor.
@ -50,15 +47,15 @@ Display this maintenance message at the top of the selected status pages or sele
> - Recurring - Interval
> - Recurring - Day of Week
> - Recurring - Day of Month
>
>
> **Timezone**
>
>
> Select an special timezone of the maintenance or use the default option `Same as Server Timezone`.
>
>
> **Start Date/Time**
>
> This input forces the following format: `DD.MM.YYYY HH:ii`
>
>
> **End Date/Time**
>
> This input forces the following format: `DD.MM.YYYY HH:ii`

@ -1,22 +1,21 @@
> [!WARNING]
> [!WARNING]
> It is a major version update. It contains some breaking changes. Please read the migration guide carefully if you want to upgrade from v1 to v2.
> [!WARNING]
> [!WARNING]
> v2 is available in **Beta** only. You may encounter bugs and stability issues.
## Before You Start
- Stop your Uptime Kuma and:
- Backup your `data` directory.
- Make sure you have a backup of your `data` directory again.
- Make sure you have a backup of your `data` directory again and again.
- Backup your `data` directory.
- Make sure you have a backup of your `data` directory again.
- Make sure you have a backup of your `data` directory again and again.
- The migration process could take some time to complete, depending on the size of your database.
- You should be able to view logs of the migration process in the console.
- Do not interrupt the migration process.
- FYI: My Uptime Kuma had 20 monitors and 90 days of data, and it took around 7 minutes to migrate.
- You should be able to view logs of the migration process in the console.
- Do not interrupt the migration process.
- FYI: My Uptime Kuma had 20 monitors and 90 days of data, and it took around 7 minutes to migrate.
- Beta version is not stable and may contain bugs, especially for the first beta release.
## Breaking Changes
- The `:duration` of these badge endpoints now accept values `24`, `24h`, `30d`, `1y` only
@ -27,9 +26,9 @@
- Removed deprecated feature [DNS Cache for HTTP monitors](https://github.com/louislam/uptime-kuma/issues/3762). Consider using the bundled `nscd` for docker installation.
- Updated default retries for **NEWLY** created monitors from `1` to `0` to prevent user confusion
- Switched `Email (SMTP)` notification subject/body templating from a custom-regex to [LiquidJS](https://liquidjs.com/). In LiquidJS,
- variables are now **case-sensitive**, and
- **all non-matching variables are ignored**.
- These are the supported variables: `name`, `msg`, `status`, `heartbeatJSON`, `monitorJSON`, `hostnameOrUrl`. We don't have documentation for these yet, but you can refer to the [source code](https://github.com/louislam/uptime-kuma/blob/master/server/model/monitor.js) for the data structure.
- variables are now **case-sensitive**, and
- **all non-matching variables are ignored**.
- These are the supported variables: `name`, `msg`, `status`, `heartbeatJSON`, `monitorJSON`, `hostnameOrUrl`. We don't have documentation for these yet, but you can refer to the [source code](https://github.com/louislam/uptime-kuma/blob/master/server/model/monitor.js) for the data structure.
### Docker only
@ -80,48 +79,48 @@ Not available yet.
#### Beta Tags
| Tag | Description |
|--------------------|-------------------------------------------|
| beta | The latest of Beta version of Uptime Kuma |
| beta-slim | (Slim) The latest of Beta version of Uptime Kuma |
| Tag | Description |
| --------- | ------------------------------------------------ |
| beta | The latest of Beta version of Uptime Kuma |
| beta-slim | (Slim) The latest of Beta version of Uptime Kuma |
#### Other Beta Tags
| Tag | Description |
|--------------------|-------------------------------------------|
| 2.x.x-beta.x | Pinned to a specific beta release |
| 2.x.x-beta-slim.x | (Slim) Pinned to a specific beta release |
| Tag | Description |
| ----------------- | ---------------------------------------- |
| 2.x.x-beta.x | Pinned to a specific beta release |
| 2.x.x-beta-slim.x | (Slim) Pinned to a specific beta release |
#### Beta Rootless Tags
> [!WARNING]
> Rootless images are not recommended for upgrading from v1 to v2, you will likely run into startup issues.
> [!WARNING]
> [!WARNING]
> ⚠️ Rootless images are for users who want to run Uptime Kuma without root privileges, but some features may not work as expected.
| Tag | Description |
|--------------------|-------------------------------------------|
| beta-rootless | The latest of Beta version of Uptime Kuma (Rootless) |
| beta-slim-rootless | (Slim) The latest of Beta version of Uptime Kuma (Rootless) |
| 2.x.x-beta-rootless.x | Pinned to a specific beta release (Rootless) |
| 2.x.x-beta-slim-rootless.x | (Slim) Pinned to a specific beta release (Rootless) |
| Tag | Description |
| -------------------------- | ----------------------------------------------------------- |
| beta-rootless | The latest of Beta version of Uptime Kuma (Rootless) |
| beta-slim-rootless | (Slim) The latest of Beta version of Uptime Kuma (Rootless) |
| 2.x.x-beta-rootless.x | Pinned to a specific beta release (Rootless) |
| 2.x.x-beta-slim-rootless.x | (Slim) Pinned to a specific beta release (Rootless) |
#### Nightly Tags
| Tag | Description |
|--------------------|-------------------------------------------|
| nightly2 | Development build |
| nightly2-rootless | Rootless development build |
| Tag | Description |
| ----------------- | -------------------------- |
| nightly2 | Development build |
| nightly2-rootless | Rootless development build |
## Slim vs Full?
Slim version has a smaller image size, it is about ~300MB to ~400MB smaller than the full version.
| Full Version | Slim Version |
| ------------ | -------------|
| ✔️ Embedded MariaDB - Can be used as a low-maintenance, durable and performant storage backend | ❌ No embedded MariaDB - but you can still connect to an external MariaDB/MySQL database as storage backend |
| ✔️ Embedded Chromium - Can be used for the "Browser Engine" monitor type. Some fonts are also included to improve rendering | ❌ No embedded Chromium - for the "Browser Engine" monitor type, an external chromium instance or further setup is required |
| Full Version | Slim Version |
| --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| ✔️ Embedded MariaDB - Can be used as a low-maintenance, durable and performant storage backend | ❌ No embedded MariaDB - but you can still connect to an external MariaDB/MySQL database as storage backend |
| ✔️ Embedded Chromium - Can be used for the "Browser Engine" monitor type. Some fonts are also included to improve rendering | ❌ No embedded Chromium - for the "Browser Engine" monitor type, an external chromium instance or further setup is required |
Any big dependencies in the future may be included in the full version only too.
@ -132,8 +131,9 @@ If you don't need the above features, you can use the slim version.
Rootless tags are for users who wants to run Uptime Kuma without root privileges, but some features may not work as expected.
Known issues:
- ⚠️ Not recommended for upgrading from v1 to v2.
- ⚠️ If file permission is not set correctly, Uptime Kuma will run into startup issues. You should make sure the ownership of the `data` directory is set to the `node:node (1000:1000)` user.
- ⚠️ If file permission is not set correctly, Uptime Kuma will run into startup issues. You should make sure the ownership of the `data` directory is set to the `node:node (1000:1000)` user.
- Docker monitor will not work without proper configuration, as by default it requires root privileges.
- Embedded MariaDB doesn't seem to be working on Docker Desktop (Windows), if the `data` directory is mounted to a Windows folder.
@ -172,9 +172,9 @@ docker compose down
```yaml
services:
uptime-kuma:
image: louislam/uptime-kuma:beta
....
uptime-kuma:
image: louislam/uptime-kuma:beta
....
```
4. Start your Uptime Kuma stack.
@ -208,7 +208,6 @@ node --version
```
-->
## FAQ
### Can I migrate my existing SQLite database to MariaDB?

@ -1,9 +1,9 @@
Uptime Kuma supports a lot of notifications.
For native support platforms, please read here:
For native support platforms, please read here:
[https://github.com/louislam/uptime-kuma/tree/master/server/notification-providers](https://github.com/louislam/uptime-kuma/tree/master/server/notification-providers)
Uptime Kuma is integrated Apprise which supports up to 78+ notification services. You can read the full list here:
https://github.com/caronc/apprise/wiki
https://github.com/caronc/apprise/wiki

@ -1,5 +1,4 @@
For Alpine/postmarketOS/Gentoo/Artix, you can create an OpenRC service as
`/etc/init.d/uptime-kuma`:
For Alpine/postmarketOS/Gentoo/Artix, you can create an OpenRC service as `/etc/init.d/uptime-kuma`:
```sh
#!/sbin/openrc-run

@ -4,26 +4,26 @@ If you already use [Prometheus.io](https://prometheus.io) or a platform that sup
Labels to filter by include:
| Label Name | Description |
|------------|-------------|
|monitor_name| The "Friendly Name" of the monitor |
|monitor_type| The type (HTTP, keyword, TCP) of monitoring check |
|monitor_url | The URL to be monitored (HTTP, keyword)
|monitor_hostname | The Hostname to be monitored (TCP) |
|monitor_port | The port to be monitored (TCP) |
| Label Name | Description |
| ---------------- | ------------------------------------------------- |
| monitor_name | The "Friendly Name" of the monitor |
| monitor_type | The type (HTTP, keyword, TCP) of monitoring check |
| monitor_url | The URL to be monitored (HTTP, keyword) |
| monitor_hostname | The Hostname to be monitored (TCP) |
| monitor_port | The port to be monitored (TCP) |
# Prometheus Configuration
Put the following into your Prometheus config:
```yml
- job_name: 'uptime'
scrape_interval: 30s
scheme: http
metrics_path: '/metrics'
static_configs:
- targets: ['uptime-kuma.url']
basic_auth: # Only needed if authentication is enabled (default)
- job_name: "uptime"
scrape_interval: 30s
scheme: http
metrics_path: "/metrics"
static_configs:
- targets: ["uptime-kuma.url"]
basic_auth: # Only needed if authentication is enabled (default)
username: <your user>
password: <your password>
```

@ -11,4 +11,4 @@ cd to the working directory.
```bash
npm run reset-password
```
```

@ -6,12 +6,12 @@ Despite a lot of reverse proxy methods in the world, unfortunately, none of them
Recently, I just discovered that Cloudflare has added a web GUI for Cloudflare Tunnel which make it super easy to use. You can expose your Uptime Kuma to the Internet without so many configs!
For Docker users, you just need to provide a Cloudflare Tunnel token in the Settings, then you can browse Uptime Kuma on the Internet.
For Docker users, you just need to provide a Cloudflare Tunnel token in the Settings, then you can browse Uptime Kuma on the Internet.
Read more about cloudflared:
https://www.reddit.com/r/selfhosted/comments/tp0nqg/cloudflare_has_added_a_web_gui_for_controlling/
Read more about cloudflared: https://www.reddit.com/r/selfhosted/comments/tp0nqg/cloudflare_has_added_a_web_gui_for_controlling/
Pros:
- Free of charge
- Full GUI, zero-config files
- You can put your Uptime Kuma behind firewall
@ -22,6 +22,7 @@ Pros:
- Free SSL
Cons:
- (Not a con if you are already using Cloudflare) You domain's nameserver have to move to Cloudflare.
- Added 30MB to the docker base image
@ -37,16 +38,14 @@ Cons:
1. Create a tunnel on [Cloudflare Zero Trust](https://dash.teams.cloudflare.com/).
2. Get your tunnel token and set it into your Uptime Kuma instance.
3. Map to http://localhost:3001.
3. Profit.
4. Profit.
## Step by step
The steps are actually very simple. However, since the concept is pretty new to anyone, it may be good to write it in detail.
The steps are actually very simple. However, since the concept is pretty new to anyone, it may be good to write it in detail.
But trust me, once you learn, you will remember how to configure a cloudflare tunnel without this guide! (for Nginx or Traefik, I could never remember how to configure them without googling it)
1. Go to [Cloudflare Zero Trust](https://dash.teams.cloudflare.com/).
2. `Network` > `Tunnels` > `Create a Tunnel`
@ -64,38 +63,35 @@ But trust me, once you learn, you will remember how to configure a cloudflare tu
```cmd
cloudflared.exe service install eyJhIjoiZDA4ZGNiMTUXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
`` `
7. Go to your Uptime Kuma instance.
```
7. Go to your Uptime Kuma instance.
<img src="https://user-images.githubusercontent.com/1336778/160821358-aff29332-6383-447e-a552-dbdeba014a77.png" width="800" />
6. `Settings` > `Reverse Proxy`
7. Paste the token into the `Cloudflare Tunnel Token` field.
8. Click `Start cloudflared`
9. Go back to `Cloudflare Zero Trust`, if you see your connector, then click `Next`
8. `Settings` > `Reverse Proxy`
9. Paste the token into the `Cloudflare Tunnel Token` field.
10. Click `Start cloudflared`
11. Go back to `Cloudflare Zero Trust`, if you see your connector, then click `Next`
<img src="https://user-images.githubusercontent.com/1336778/160883516-66c059db-442d-4e2c-845a-c8eaf7a7f992.png" width="800" />
10. Choose your favorite domain name and map to `http://localhost:3001`
12. Choose your favorite domain name and map to `http://localhost:3001`
<img src="https://user-images.githubusercontent.com/1336778/160883898-24217c46-d833-463d-8e0e-e5dc22a35d48.png" width="800" />
11. Click `Save` and go to your domain name `https://<your domain name>` and profit!
Yeah, it also automatically gives you SSL!
13. Click `Save` and go to your domain name `https://<your domain name>` and profit! Yeah, it also automatically gives you SSL!
<img src="https://user-images.githubusercontent.com/1336778/160884606-a6a9db7f-68a6-4083-ac75-6f06f4930c52.png" width="500" />
## How to Stop
- Option 1. You can remove the map on Cloudflare.
- Option 2. You can click `Stop cloudflared` and `Remove Token` in your Uptime Kuma.
## Environment Variable
Alternatively, you can set the token via a environment variable. cloudflared will be started automatically.
With this approach, you don't even need to expose your container port to the host machine.
With this approach, you don't even need to expose your container port to the host machine.
UPTIME_KUMA_CLOUDFLARED_TOKEN=`<your token>`

@ -1,21 +1,17 @@
In order to expose Uptime Kuma to the web securely, it is recommended to proxy it behind a traditional webserver such as nginx or Apache.
Below are some example configurations that you could use.
In order to expose Uptime Kuma to the web securely, it is recommended to proxy it behind a traditional webserver such as nginx or Apache. Below are some example configurations that you could use.
Unlike other web apps, Uptime Kuma is based on WebSocket. You need two more headers **"Upgrade"** and **"Connection"** in order to accept WebSocket on a reverse proxy.
> [!NOTE]
> Uptime Kuma **does not support a subdirectory** such as `http://example.com/uptimekuma`.
> Please prepare a domain or sub-domain to do that. A hacky way to produce subdirectory status pages [is listed here](https://github.com/louislam/uptime-kuma/wiki/Status-Page#custom-subdirectory--custom-html-on-status-pages).
> This issue is tracked in https://github.com/louislam/uptime-kuma/issues/147
> Uptime Kuma **does not support a subdirectory** such as `http://example.com/uptimekuma`. Please prepare a domain or sub-domain to do that. A hacky way to produce subdirectory status pages [is listed here](https://github.com/louislam/uptime-kuma/wiki/Status-Page#custom-subdirectory--custom-html-on-status-pages). This issue is tracked in https://github.com/louislam/uptime-kuma/issues/147
> [!TIP]
> It is recommended to use SSL (HTTPS) with your web-server to avoid MiTM attacks when on a public network. If using caddy these certificates will be auto-generated and updated.
>
>
> If using Apache or NGINX, it is recommended to use CertBot to manage SSL for free, it uses Lets Encrypt to get its certificates and keeps them renewed. You can also use your own certificates and place them as shown above. If using CertBot use the "Without SSL" settings and then run certbot on it and it will automatically configure auto-HTTPS redirection.
- <details><summary>Nginx</summary>
With SSL:
```nginx
server {
@ -26,7 +22,7 @@ Unlike other web apps, Uptime Kuma is based on WebSocket. You need two more head
ssl_certificate /path/to/ssl/cert/crt;
ssl_certificate_key /path/to/ssl/key/key;
# *See "With SSL (Certbot)" below for details on automating ssl certificates
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@ -38,7 +34,7 @@ Unlike other web apps, Uptime Kuma is based on WebSocket. You need two more head
}
}
```
Without SSL:
```nginx
server {
@ -55,7 +51,7 @@ Unlike other web apps, Uptime Kuma is based on WebSocket. You need two more head
}
}
```
With SSL (Certbot):
```nginx
server {
@ -63,7 +59,7 @@ Unlike other web apps, Uptime Kuma is based on WebSocket. You need two more head
# Just create a new host record with type='A Record', host='<subdomain>', value='<ip_address>'.
server_name your_subdomain.your_domain.your_tld;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@ -74,20 +70,18 @@ Unlike other web apps, Uptime Kuma is based on WebSocket. You need two more head
proxy_set_header Connection "upgrade";
}
}
# Once that's completed, you can run
# sudo apt install python3-certbot-nginx
# sudo certbot --nginx -d your_domain -d your_subdomain.your_domain -d www.your_domain
# And Certbot will auto-populate this nginx .conf file for you, while also renewing your certificates automatically in the future.
```
</details>
- <details><summary>Nginx Proxy Manager</summary>
Please enable "WebSockets Supports"
</details>
- <details><summary>Apache</summary>
@ -109,7 +103,7 @@ Unlike other web apps, Uptime Kuma is based on WebSocket. You need two more head
RewriteRule /(.*) http://localhost:3001/$1 [P,L]
</VirtualHost>
```
Without SSL:
```apache
<VirtualHost *:80>
@ -123,113 +117,110 @@ Unlike other web apps, Uptime Kuma is based on WebSocket. You need two more head
</VirtualHost>
```
</details>
- <details><summary>Caddy</summary>
without docker
```nginx
subdomain.domain.com {
reverse_proxy 127.0.0.1:3001
}
```
**with Docker-compose
If you run Uptime Kuma using Docker-Compose and don't already have a reverse proxy, this is a simple way to configure Caddy. You only need to replace 'status.example.org' with your domain.
```yml
version: '3'
version: "3"
networks:
default:
name: 'proxy_network'
default:
name: "proxy_network"
services:
uptime-kuma:
image: louislam/uptime-kuma:1
restart: unless-stopped
volumes:
- /srv/uptime:/app/data
labels:
caddy: status.example.org
caddy.reverse_proxy: "* {{upstreams 3001}}"
caddy:
image: "lucaslorentz/caddy-docker-proxy:ci-alpine"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /srv/caddy/:/data
restart: unless-stopped
environment:
- CADDY_INGRESS_NETWORKS=proxy_network
uptime-kuma:
image: louislam/uptime-kuma:1
restart: unless-stopped
volumes:
- /srv/uptime:/app/data
labels:
caddy: status.example.org
caddy.reverse_proxy: "* {{upstreams 3001}}"
caddy:
image: "lucaslorentz/caddy-docker-proxy:ci-alpine"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /srv/caddy/:/data
restart: unless-stopped
environment:
- CADDY_INGRESS_NETWORKS=proxy_network
```
</details>
- <details><summary>Https-Portal</summary>
Enabling `WEBSOCKET=true`, or the equivalent in your docker environment variables will do the trick.
Enabling `WEBSOCKET=true`, or the equivalent in your docker environment variables will do the trick.\
Link to https-portal Websocket under [Advanced Usage](https://github.com/SteveLTN/https-portal#configure-nginx-through-environment-variables).
Example docker-compose.yml file using Https-Portal:
```yml
version: '3.3'
version: "3.3"
services:
https-portal:
image: steveltn/https-portal:1
ports:
- '80:80'
- '443:443'
links:
- uptime-kuma
restart: always
environment:
DOMAINS: 'status.domain.com -> http://uptime-kuma:3001'
STAGE: 'production' # Don't use production until staging works
# FORCE_RENEW: 'true'
WEBSOCKET: 'true'
volumes:
- https-portal-data:/var/lib/https-portal
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
volumes:
- ./uptime-kuma:/app/data
ports:
- 3001:3001
https-portal:
image: steveltn/https-portal:1
ports:
- "80:80"
- "443:443"
links:
- uptime-kuma
restart: always
environment:
DOMAINS: "status.domain.com -> http://uptime-kuma:3001"
STAGE: "production" # Don't use production until staging works
# FORCE_RENEW: 'true'
WEBSOCKET: "true"
volumes:
- https-portal-data:/var/lib/https-portal
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
volumes:
- ./uptime-kuma:/app/data
ports:
- 3001:3001
volumes:
https-portal-data:
https-portal-data:
```
Only change "status.domain.com" to your domain
</details>
- <details><summary>Synology Builtin Reverse Proxy</summary>
1. Bind IP to localhost when starting Kuma
```bash
docker run -d --restart=always -p 127.0.0.1:3002:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
```
2. On your NAS, open *Control Panel* and then *Login Portal*
3. Click on *Advanced*
4. Open *Reverse Proxy*
2. On your NAS, open _Control Panel_ and then _Login Portal_
3. Click on _Advanced_
4. Open _Reverse Proxy_
5. Create a new Entry with the following values:
![Reverse Proxy](./img/Synology-reverse-proxy.png)
6. Click on the tab *Custom Header*
6. Click on the tab _Custom Header_
7. Click `Create` -> `Websockets`, this automatically fills in the required headers for websockets.
- <details><summary>Traefik</summary>
```yml
labels:
- "traefik.enable=true"
@ -239,79 +230,72 @@ Unlike other web apps, Uptime Kuma is based on WebSocket. You need two more head
- "traefik.http.routers.uptime-kuma.tls.certresolver=myresolver"
- "traefik.http.services.uptime-kuma.loadBalancer.server.port=3001"
```
Add the above to your `docker-compose.yml` file and replace "YourOwnHostname" with the hostname you want to use. When setup correctly, Traefik can automatically get a Lets Encrypt certificate for your service.
Add the above to your `docker-compose.yml` file and replace "YourOwnHostname" with the hostname you want to use. When setup correctly, Traefik can automatically get a Lets Encrypt certificate for your service.
</details>
- <details><summary>Cloudflare</summary>
You must enable "WebSockets" in Cloudflare Dashboard:
Cloudflare Dashboard -> Network -> Enable WebSockets
Read more:
https://github.com/louislam/uptime-kuma/issues/138#issuecomment-890485229
Read more: https://github.com/louislam/uptime-kuma/issues/138#issuecomment-890485229
</details>
- <details><summary>Cloudflare Tunnels</summary>
It is the easiest way in my opinion.
Read more: https://github.com/louislam/uptime-kuma/wiki/Reverse-Proxy-with-Cloudflare-Tunnel
</details>
- <details><summary>OpenLiteSpeed</summary>
Create a new virtual host through the graphical admin like you normally would.
**Basic tab**
- Name: `uptime-kuma`
- Virtual Host Root: `/path/to/uptime-kuma`
- Enable Scripts/ExtApps: `Yes`
- Virtual Host Root:`/path/to/uptime-kuma`
- Enable Scripts/ExtApps:`Yes`
**External app tab**
- Add a `web server` app type
- Name: `uptime-kuma`
- Address: `http://localhost:3001`
- Address:`http://localhost:3001`
**Context tab**
- Add a `proxy` context
- URI: `/`
- Web Server: `[VHost Level]: uptime-kuma`
- URI:`/`
- Web Server:`[VHost Level]: uptime-kuma`
- Header Operations:
```
Upgrade websocket
Connection upgrade
```
- Access Allowed: `*`
- Access Allowed:`*`
**Web Socket Proxy tab**
- Add a `Web Socket Proxy Setup`
- URI: `/`
- URI:`/`
- Address: `127.0.0.1:3001`
**SSL tab (if needeed)**
- Private Key File: `/path/to/ssl/key/privkey.pem`
- Certificate File: `/path/to/ssl/cert/fullchain.pem`
- Chained Certificate: `yes`
Perform a graceful restart and launch uptime-kuma.
</details>
- <details><summary>HAProxy</summary>
No special configuration is required when using HAProxy as a reverse
proxy although you may wish to add the `timeout tunnel` option to either
the `defaults`, `listen`, or `backend` sections. If using the `timeout
tunnel` option, it is also recommended to set `timeout client-fin` to
handle instances where the client stops responding.
Read more:
http://cbonte.github.io/haproxy-dconv/2.4/configuration.html#4.2-timeout%20tunnel
No special configuration is required when using HAProxy as a reverse proxy although you may wish to add the `timeout tunnel` option to either the `defaults`, `listen`, or `backend` sections. If using the `timeout
tunnel` option, it is also recommended to set `timeout client-fin` to handle instances where the client stops responding.
Read more: http://cbonte.github.io/haproxy-dconv/2.4/configuration.html#4.2-timeout%20tunnel
</details>

@ -1 +1 @@
Move to https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md
Move to https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md

@ -1,4 +1,3 @@
## Things You Should Know
- Status page is intended for public users to check the status of your services
@ -9,9 +8,11 @@
- `http://example.com/status` is pointing to `http://example.com/status/default`
## Multiple Status Pages
(Version >= 1.13.0)
## Domain Names for Status Pages
(Version >= 1.14.0)
Now you can show different status pages based on the domain names.
@ -23,37 +24,43 @@ Now you can show different status pages based on the domain names.
1. If you are not using a reverse proxy, you should expose your Uptime Kuma in port 80.
2. If you are using a reverse proxy, add your domain name in your reverse proxy and point to Uptime Kuma.
(⚠️ PS: For such as Apache or nginx, you need to forward the header `X-Forwarded-Host` or `Host` to Uptime Kuma, otherwise Uptime Kuma do not know the current domain name)
(⚠️ PS: For such as Apache or nginx, you need to forward the header `X-Forwarded-Host` or `Host` to Uptime Kuma, otherwise Uptime Kuma do not know the current domain name)
3. Add a A/CNAME record for your domain name in your DNS management.
4. Add your domain name in your status page settings sidebar.
This is my example, they both are from the same instance:
- https://status.louislam.net
- https://status.kuma.pet
## Custom Subdirectory / custom html on status pages
> [!CAUTION]
> For the following to work the [environment variable `UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN=true`](https://github.com/louislam/uptime-kuma/wiki/Environment-Variables) needs to be set.
> This allows other pages to include Uptime Kuma as an `iframe` and makes you vulnerable to [`clickjacking`](https://en.wikipedia.org/wiki/Clickjacking).
> For the following to work the [environment variable `UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN=true`](https://github.com/louislam/uptime-kuma/wiki/Environment-Variables) needs to be set. This allows other pages to include Uptime Kuma as an `iframe` and makes you vulnerable to [`clickjacking`](https://en.wikipedia.org/wiki/Clickjacking).
Changing the subdirectory of Uptime Kuma is tracked in https://github.com/louislam/uptime-kuma/pull/1092
Embedding `script`s/`meta`-tags/... into Uptime Kuma is tracked in https://github.com/louislam/uptime-kuma/issues/3115
Changing the subdirectory of Uptime Kuma is tracked in https://github.com/louislam/uptime-kuma/pull/1092 Embedding `script`s/`meta`-tags/... into Uptime Kuma is tracked in https://github.com/louislam/uptime-kuma/issues/3115
A solution to get around this limitation is to utilise an `iframe`.
Here is an example of how to configure this (replacing `INSERT_{...}_HERE` with your own values):
A solution to get around this limitation is to utilise an `iframe`. Here is an example of how to configure this (replacing `INSERT_{...}_HERE` with your own values):
```html
<html data-lt-installed="true"><head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="description" content="INSERT_DESCRIPTION_HERE">
<title>INSERT_TITLE_HERE</title>
</head>
<body style="height: 100vh;margin: 0;padding: 0;overflow: hidden;">
<iframe src="INSERT_UPTIME_KUMA_URL_HERE" frameborder="0" width="100%" height="100%" allowtransparency="yes" style="overflow:hidden;margin: 0; border: none;"></iframe>
</body>
<html data-lt-installed="true">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="description" content="INSERT_DESCRIPTION_HERE">
<title>INSERT_TITLE_HERE</title>
</head>
<body style="height: 100vh; margin: 0; padding: 0; overflow: hidden">
<iframe
src="INSERT_UPTIME_KUMA_URL_HERE"
frameborder="0"
width="100%"
height="100%"
allowtransparency="yes"
style="overflow: hidden; margin: 0; border: none"
></iframe>
</body>
</html>
```

@ -18,8 +18,7 @@ WantedBy=multi-user.target
```
> [!NOTE]
> This unit file assumes that you are running the software as a separate 'uptime' user.
> If you have node/npm installed in a different path, you will need to alter the ExecStart line to match this.
> This unit file assumes that you are running the software as a separate 'uptime' user. If you have node/npm installed in a different path, you will need to alter the ExecStart line to match this.
This unit file may be installed to /etc/systemd/system/uptime-kuma.service (Or whatever service name you'd prefer)
@ -28,4 +27,4 @@ Once installed, issue the following commands to reload systemd unit files, enabl
```bash
systemctl daemon-reload
systemctl enable --now uptime-kuma
```
```

@ -9,20 +9,17 @@ docker run --rm -it -p 3000:3000 -p 3001:3001 --pull always -e 'UPTIME_KUMA_GH_R
```
v1.23.x
```bash
docker run --rm -it -p 3000:3000 -p 3001:3001 --pull always -e 'UPTIME_KUMA_GH_REPO=<PR REPO, YOU CAN COPY>' louislam/uptime-kuma:pr-test
```
Example:
UPTIME_KUMA_GH_REPO=`chakflying:fix/beat-schedule-delay`
Example: UPTIME_KUMA_GH_REPO=`chakflying:fix/beat-schedule-delay`
You can copy the name from here easily:
<img src="https://user-images.githubusercontent.com/1336778/189304667-f0dbce41-95d1-4828-a0e4-e210859a160c.png" width=500 />
Add `-v uptime-kuma-pr-test:/app/data` if you need a persistent storage.
After started, go to http://localhost:3000
After started, go to http://localhost:3000

@ -1,9 +1,7 @@
## Uptime Kuma reports `DOWN`, but the service can be accessed
> [!TIP]
> In case you did not know:
> docker has [more than one network type](https://youtu.be/bKFMS5C4CG0) with only some of them allowing access to the local network and some not even allowing access to remote networks
> In case you did not know: docker has [more than one network type](https://youtu.be/bKFMS5C4CG0) with only some of them allowing access to the local network and some not even allowing access to remote networks
If your Uptime Kuma reports `DOWN` of your service, knowing if it is a bug of Uptime Kuma / a docker network misconfiguration or a firewall is a good start to fixing the issue.
@ -19,8 +17,7 @@ Install `curl`
apt update && apt --yes install curl
```
Then you can debug this issue with commands like `ping`, `curl`, ...
Examples:
Then you can debug this issue with commands like `ping`, `curl`, ... Examples:
```bash
curl https://google.com
@ -28,5 +25,6 @@ ping google.com
```
### IPv6
If you are running Uptime Kuma on top of Docker and the service can only be access via IPv6. Please follow the Docker's [official wiki](https://docs.docker.com/config/daemon/ipv6/) to enable IPv6 support.
IPv6 are not supported out of the box on Docker.
If you are running Uptime Kuma on top of Docker and the service can only be access via IPv6. Please follow the Docker's [official wiki](https://docs.docker.com/config/daemon/ipv6/) to enable IPv6 support.\
IPv6 are not supported out of the box on Docker.

@ -1 +1 @@
[Edit this page](https://github.com/louislam/uptime-kuma-wiki)
[Edit this page](https://github.com/louislam/uptime-kuma-wiki)

@ -1,5 +1,4 @@
- **Introduction**
- [Home](README.md)
- [How to Install](🔧-How-to-Install.md)
- [How to Update](🆙-How-to-Update.md)
@ -8,7 +7,6 @@
- [API Documentation](API-Documentation.md)
- **Advanced**
- [Reverse Proxy](Reverse-Proxy.md)
- [Environment Variables](Environment-Variables.md)
- [Cloudflare Side Note](Cloudflare-Side-Note.md)

@ -9,11 +9,12 @@ Wow! When I was preparing this changelog, I just couldn't believe that we have a
Migration Guide: https://github.com/louislam/uptime-kuma/wiki/Migration-From-v1-To-v2
### 🆕 New Features
- #2738 #4728 #5258 #5075 Support MariaDB
- #2086 #4052 #5257 Rootless docker image
- #3441 Feat: Toast notification timeout settings (Thanks @chakflying)
- #3499 Adding x-www-form-urlencoded (Thanks @anderskvist)
- #3414 Feature: SMTP-templating of `customBody` and `customHeader` via liquidjs (Thanks @CommanderStorm)
- #3414 Feature: SMTP-templating of `customBody` and `customHeader` via liquidjs (Thanks @CommanderStorm)
- #2783 Add Grafana Oncall notification provider (Thanks @atmaniak)
- #3941 Chore: Allow MS Edge for real-browser monitor (Thanks @chakflying)
- #3814 Feat: Retries persistence (Thanks @chakflying)
@ -40,7 +41,7 @@ Migration Guide: https://github.com/louislam/uptime-kuma/wiki/Migration-From-v1-
- #5058 New Notification Provider SIGNL4 (Thanks @rons4)
- #5048 [DNS Monitor] Conditions (Thanks @simshaun)
- #5047 feat: implement very crude and bare-bones RSS feed (Thanks @MrYakobo)
- #5145 Add serverchan3 support for serverchan notification provider (Thanks @easychen)
- #5145 Add serverchan3 support for serverchan notification provider (Thanks @easychen)
- #5167 [slack] allow the user to choose the message format to send (Thanks @DaanMeijer)
- #5253 Add `next` and `next-slim` tags
- #4880 #5251 Apprise update to 1.9.0
@ -48,18 +49,19 @@ Migration Guide: https://github.com/louislam/uptime-kuma/wiki/Migration-From-v1-
- #5205 feat: add notification provider `SendGrid` (Thanks @sctnightcore)
- #5199 feat: add `RabbitMQ` monitor (Thanks @Suven-p)
### Breaking Changes
- #3892 Drop backup and restore feature
- #3955 Drop install.sh and related files
- #4178 Drop cacheable-lookup
- #3747 Drop support for Node.js 14 and 16 (Thanks @harryzcy)
- #2085 Drop support for Alpine based docker image
- The `:duration` of these endpoints accepts `24`, `24h`, `30d`, `1y` only
- <kuma-url>/api/badge/:monitorID/ping/:duration
- <kuma-url>/api/badge/:monitorID/uptime/:duration
- <kuma-url>/api/badge/:monitorID/ping/:duration
- <kuma-url>/api/badge/:monitorID/uptime/:duration
### 💇‍♀️ Improvements
- #2750 Uptime calculation improvement and 1-year uptime
- #3676 UI/UX: Added no tags found message to tags filter when empty (Thanks @BrandonDR)
- #3735 #3739 Push Examples
@ -100,8 +102,8 @@ Migration Guide: https://github.com/louislam/uptime-kuma/wiki/Migration-From-v1-
- #5223 fix: expand hover trigger area of beat (Thanks @R-HNF)
- #5227 Update API URL to compatible with the latest version of ServerChan (Thanks @easychen)
### 🐞 Bug Fixes
- #3017 Fix: Add external mariaDB setup (Thanks @chakflying)
- #3706 Fix: Incorrect database type check in sqlHourOffset (Thanks @chakflying)
- #3757 Fix: SetupDatabase misc. styling fixes (Thanks @chakflying)
@ -135,7 +137,7 @@ Migration Guide: https://github.com/louislam/uptime-kuma/wiki/Migration-From-v1-
- #4871 Fix Slack notifications when URL is present (Thanks @Rudedog9d)
- #4850 Fix uptime & ping badge duration (Thanks @ZhaoQi99)
- #5018 fix: `!important` in the prim-css editor is rendered incorrectly (Thanks @solidsniper)
- #4193 Fix: name column in the dashboad being squashed in some aspect ratios (Thanks @jaybhanushali3166)
- #4193 Fix: name column in the dashboad being squashed in some aspect ratios (Thanks @jaybhanushali3166)
- #5084 Fix missing monitors in subgroups due to missing filterFunc (Thanks @David-Development)
- #3256 fix: Both `Add` and `Home` being shown as selected on the homescreen (Thanks @CommanderStorm)
- #5166 Fix: Resolve notice title definition issue and add newline between title and content in notification (Thanks @dingdayu)
@ -143,18 +145,19 @@ Migration Guide: https://github.com/louislam/uptime-kuma/wiki/Migration-From-v1-
- #5209 fix: slack rich notification not working correctly (Thanks @CommanderStorm)
### ⬆️ Security Fixes
- #912 push monitor: increase token security (Thanks @andreasbrett)
- #4214 Feat: Refresh login token for the client initiating password change (Thanks @chakflying)
- #5252 Update dependencies
### 🦎 Translation Contributions
- #3959 Added Uzbek language
- #4487 Added Irish language (Thanks @aindriu80)
- #4666 Changed Hebrew to be a RTL language (Thanks @msrl2000)
- #3263 #3847 #3694 #3684 #4135 #4527 #4565 #4436 #4813 #5103 #4814 #4791 #4816 #4320 #4200 #4363 #5046 (Thanks @mueller-ma @chakflying @CommanderStorm @Vista2003 @LeoThies @bertday @whiteonred @purplespider @cyril59310)
- #3659 #3891 #4386 #4394 #5071 #4794 #5072 #5232 (Unfortunately, there are too many contributors, GitHub is not allow me to tag everyone here)
### Others
Other small changes, code refactoring and comment/doc updates in this repo.
@ -167,4 +170,4 @@ Other small changes, code refactoring and comment/doc updates in this repo.
Let me know if your name is missing in the list if your pull request had been merged in this version.
Special thanks to @chakflying and @CommanderStorm for their great contributions. 🎉
Special thanks to @chakflying and @CommanderStorm for their great contributions. 🎉

@ -11,36 +11,40 @@
- If you are using Raspbian (Buster) (Raspberry Pi), due to the bug of `libseccomp2`, it will be running into a startup problem. Click here to
#### Other breaking changes
- The `:duration` of these endpoints accepts `24`, `24h`, `30d`, `1y` only
- <kuma-url>/api/badge/:monitorID/ping/:duration
- <kuma-url>/api/badge/:monitorID/uptime/:duration
- <kuma-url>/api/badge/:monitorID/ping/:duration
- <kuma-url>/api/badge/:monitorID/uptime/:duration
- Drop support for legacy browsers
- The deprecated backup feature is completely removed now
### [Docker] Migrate from v1 to v2
### [Non-Docker] Migrate from v1 to v2
### [Non-Docker] Migrate from v1 to v2
### 🆕 New Features
- #3017 #2738 #3017 Add support for MariaDB/MySQL
- #2750 1-year uptime
- #3441 Added Toast notification timeout settings and clear all toast notifications button (Thanks @chakflying)
- #3499 [HTTP(s) monitor] Add support for x-www-form-urlencoded (Thanks @anderskvist @CommanderStorm @Computroniks)
- #3414 [SMTP notification] Added an ability to custom the email body and switched to a better template engine (Thanks @CommanderStorm)
- #2783 Add Grafana Oncall notification provider (Thanks @atmaniak)
<!-- - #3350 [exe] Added `--intranet` argument (Thanks @vanhoutenbos)-->
### 💇‍♀️ Improvements
- #2750 Improve uptime calculation performance
- #3515 Full server-side pagination for important events (Thanks @chakflying)
- #3676 Show no tags message in the filter (Thanks @BrandonDR)
- #3072 Checking interval will now subtract the checking time
- (e.g. Interval = 60s, the website page takes 2s to load, the next checking = 60 - 2 = 58s)
- (e.g. Interval = 60s, the website page takes 2s to load, the next checking = 60 - 2 = 58s)
- #2759 Use API v2 for Bark notification (Thanks @harryzcy @chakflying)
- #3636 [Webhook notification] Improve the documentation (Thanks @CommanderStorm)
### 🐛 Bug Fixes
- #3864 Fix: Use ActionSelect for Docker Host & validate input (Thanks @chakflying)
- #3820 Clickable link monitors aren't underlined when editing status page (Thanks @dreygur)
@ -48,16 +52,15 @@
- #912 Hardening: Increased the push token length from 10 to 32. Added reset button to reset a push token (Thanks @andreasbrett)
### 🦎 Translation Contributors
- #3263 #3684 Add ability to translate toast messages (Thanks @chakflying)
- #3959 Add Uzbek language (Thanks @golibnarzullayev)
- #3659 (Thanks )
### Others
- Other small changes, code refactoring and comment/doc updates in this repo:
@M1CK431 @Computroniks @CommanderStorm @mueller-ma @chakflying @Zaid-maker @Saibamen @harryzcy
- Other small changes, code refactoring and comment/doc updates in this repo: @M1CK431 @Computroniks @CommanderStorm @mueller-ma @chakflying @Zaid-maker @Saibamen @harryzcy
- @chakflying and @CommanderStorm have been added as collaborators and will help with moderation, organizing and managing issues
Please let me know if your username is missing, if your pull request has been merged in this version, or your commit has been included in one of the pull requests.

12
deno.jsonc Normal file

@ -0,0 +1,12 @@
{
// Run `deno fmt` to format
"fmt": {
"indentWidth": 4,
"semiColons": true,
"singleQuote": false,
"lineWidth": 9999,
"exclude": [
"Badge.md" // Formatting not stable for this file
]
}
}

@ -1,40 +1,49 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Uptime Kuma Docs</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="description" content="Description">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/docsify/4.12.1/themes/vue.min.css">
<link rel="icon" type="image/svg+xml" href="https://raw.githubusercontent.com/louislam/uptime-kuma/master/public/icon.svg">
<style>
.app-name-link img {
width: 96px;
border-radius: 32px;
padding: 18px;
}
</style>
</head>
<body>
<div id="app"></div>
<script>
window.$docsify = {
name: 'Uptime Kuma Docs',
repo: 'https://github.com/louislam/uptime-kuma',
loadSidebar: "_Menu.md",
auto2top: true,
search: 'auto',
routerMode: 'history',
executeScript: true,
logo: 'https://raw.githubusercontent.com/louislam/uptime-kuma/master/public/icon.svg',
relativePath: true,
}
</script>
<head>
<meta charset="UTF-8">
<title>Uptime Kuma Docs</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="Description">
<meta
name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/docsify/4.12.1/themes/vue.min.css"
>
<link
rel="icon"
type="image/svg+xml"
href="https://raw.githubusercontent.com/louislam/uptime-kuma/master/public/icon.svg"
>
<style>
.app-name-link img {
width: 96px;
border-radius: 32px;
padding: 18px;
}
</style>
</head>
<body>
<div id="app"></div>
<script>
window.$docsify = {
name: "Uptime Kuma Docs",
repo: "https://github.com/louislam/uptime-kuma",
loadSidebar: "_Menu.md",
auto2top: true,
search: "auto",
routerMode: "history",
executeScript: true,
logo: "https://raw.githubusercontent.com/louislam/uptime-kuma/master/public/icon.svg",
relativePath: true,
};
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/docsify/4.12.1/docsify.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/docsify/4.12.1/plugins/search.min.js"></script>
<script src=" https://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/components/prism-typescript.min.js"></script>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/docsify/4.12.1/docsify.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/docsify/4.12.1/plugins/search.min.js"></script>
<script src=" https://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/components/prism-typescript.min.js"></script>
</body>
</html>

@ -7,9 +7,7 @@ docker run -d --restart=unless-stopped -p 3001:3001 -v uptime-kuma:/app/data --n
Uptime Kuma is now running on http://localhost:3001
> [!WARNING]
> Filesystem support for POSIX file locks is required to avoid SQLite database corruption.
> Be aware of possible [file locking problems](https://www.sqlite.org/howtocorrupt.html#_file_locking_problems) such as those [commonly encountered with NFS](https://www.sqlite.org/faq.html#q5).
> **Please map the `/app/data`-folder to a local directory or volume.**
> Filesystem support for POSIX file locks is required to avoid SQLite database corruption. Be aware of possible [file locking problems](https://www.sqlite.org/howtocorrupt.html#_file_locking_problems) such as those [commonly encountered with NFS](https://www.sqlite.org/faq.html#q5). **Please map the `/app/data`-folder to a local directory or volume.**
Browse to http://localhost:3001 after started.
@ -20,6 +18,7 @@ docker run -d --restart=unless-stopped -p <YOUR_PORT>:3001 -v <YOUR_DIR OR VOLUM
```
#### Docker Tags Description
<table>
<thead>
<tr>
@ -38,14 +37,12 @@ docker run -d --restart=unless-stopped -p <YOUR_PORT>:3001 -v <YOUR_DIR OR VOLUM
### 🐳 Docker Compose
Example docker-compose template:
[https://github.com/louislam/uptime-kuma/blob/1.23.X/docker/docker-compose.yml](https://github.com/louislam/uptime-kuma/blob/1.23.X/docker/docker-compose.yml)
Example docker-compose template: [https://github.com/louislam/uptime-kuma/blob/1.23.X/docker/docker-compose.yml](https://github.com/louislam/uptime-kuma/blob/1.23.X/docker/docker-compose.yml)
```bash
docker compose up -d
```
### 💪🏻 Non-Docker
Requirements:
@ -87,25 +84,19 @@ pm2 monit
pm2 save && pm2 startup
```
## (Optional) One more step for Reverse Proxy
This is optional for someone who want to use a reverse proxy.
Unlikely other web apps, Uptime Kuma is based on WebSocket. You need two more headers **"Upgrade"** and **"Connection"** in order to reverse proxy WebSocket.
Please read wiki for more info:
https://github.com/louislam/uptime-kuma/wiki/Reverse-Proxy
Please read wiki for more info: https://github.com/louislam/uptime-kuma/wiki/Reverse-Proxy
## Videos
- [Learn Uptime Kuma in 5 Minutes](https://www.youtube.com/watch?v=muZiPdH2JZ8) by DEVOPS UNLOCKED
Install with the docker run command
- [Meet Uptime Kuma, a Fancy Open Source Uptime Monitor](https://www.youtube.com/watch?v=r_A5NKkAqZM) by Techno Tim
Install with docker-compose
- [Monitor Status with Uptime Kuma - Let's install Uptime Kuma with Docker](https://www.youtube.com/watch?v=rRKvDMGeeBA) by Geeked
Install with Portainer
- [Learn Uptime Kuma in 5 Minutes](https://www.youtube.com/watch?v=muZiPdH2JZ8) by DEVOPS UNLOCKED Install with the docker run command
- [Meet Uptime Kuma, a Fancy Open Source Uptime Monitor](https://www.youtube.com/watch?v=r_A5NKkAqZM) by Techno Tim Install with docker-compose
- [Monitor Status with Uptime Kuma - Let's install Uptime Kuma with Docker](https://www.youtube.com/watch?v=rRKvDMGeeBA) by Geeked Install with Portainer
## Unofficial & Experimental
@ -115,10 +106,9 @@ https://github.com/louislam/uptime-kuma/wiki/Reverse-Proxy
### ☸️ OpenShift 4 and Kubernetes Helm 3 Chart (Unofficial)
> [!NOTE]
> This Chart relies on a repackaged OCI Container Image, which lets *uptime-kuma* run as **non-root** user.
> The entire repackage process is automated via GitHub Actions and renovate-bot keeps everything up to date. (feel free to audit it yourself)
> This Chart relies on a repackaged OCI Container Image, which lets _uptime-kuma_ run as **non-root** user. The entire repackage process is automated via GitHub Actions and renovate-bot keeps everything up to date. (feel free to audit it yourself)
The Containerfile used to rebundle *uptime-kuma*: [rootless Containerfile](https://github.com/k3rnelpan1c-dev/uptime-kuma-helm/blob/main/container/Containerfile)
The Containerfile used to rebundle _uptime-kuma_: [rootless Containerfile](https://github.com/k3rnelpan1c-dev/uptime-kuma-helm/blob/main/container/Containerfile)
https://github.com/k3rnelpan1c-dev/uptime-kuma-helm
@ -142,37 +132,34 @@ https://mariushosting.com/how-to-install-uptime-kuma-on-your-synology-nas/
### One-Click Hosting on PikaPods
Run with one click on [PikaPods.com](https://www.pikapods.com/). Free for about 3 months with welcome credit.
PikaPods have produced a [getting started video](https://www.youtube.com/watch?v=gbbcnNKPi8M) if you like consuming information in this form.
Run with one click on [PikaPods.com](https://www.pikapods.com/). Free for about 3 months with welcome credit. PikaPods have produced a [getting started video](https://www.youtube.com/watch?v=gbbcnNKPi8M) if you like consuming information in this form.
[![PikaPods](https://www.pikapods.com/static/run-button.svg)](https://www.pikapods.com/pods?run=uptime-kuma)
### Install on Azure Container Instance with TLS endpoint
Unofficial tutorial by Stefan:
https://haci.io/posts/uptime-kuma-azure-container-instance/
Unofficial tutorial by Stefan: https://haci.io/posts/uptime-kuma-azure-container-instance/
### Install on Azure AppService Container
Unofficial tutorial by Leandro:
https://www.leandroscardua.com/blog/deploy-uptime-kuma-on-azure/
Unofficial tutorial by Leandro: https://www.leandroscardua.com/blog/deploy-uptime-kuma-on-azure/
### Install on Azure AppService with persistent storage
Unofficial bicep deployment script by Yannick Zwijsen:
https://github.com/yzwijsen/deploy-uptime-kuma-azure
Unofficial bicep deployment script by Yannick Zwijsen: https://github.com/yzwijsen/deploy-uptime-kuma-azure
### SQLite S3 persistent storage with Litestream.io
### SQLite S3 persistent storage with Litestream.io
[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/new/template/UfDasl?referralCode=373)
Run uptime-kuma with S3 persistent sqlite database:
https://github.com/fluential/litestream-uptime-kuma/
Run uptime-kuma with S3 persistent sqlite database: https://github.com/fluential/litestream-uptime-kuma/
### One-Click Deployment on Alibaba Cloud
[![Deploy on AlibabaCloud ComputeNest](https://service-info-public.oss-cn-hangzhou.aliyuncs.com/computenest-en.svg)](https://computenest.console.aliyun.com/service/instance/create/default?type=user&ServiceName=Higress社区版)
Follow the deployment guide to deploy Uptime Kuma on Alibaba Cloud. Both domestic site and internationl sites are supported.
- [Deployment Guide in English](https://computenest.console.aliyun.com/service/detail/ap-southeast-1/service-6a4ce994c30c49b1ae6b/2?type=user&isRecommend=true)
- [中文部署文档](https://computenest.console.aliyun.com/service/detail/cn-hangzhou/service-34d66f31479747cd9957/2?type=user&isRecommend=true)
@ -198,7 +185,7 @@ Run with one click on [Sealos](https://sealos.io/).
[![Deploy to Dome](https://trydome.io/button-2.gif)](https://app.trydome.io/signup?package=uptime-kuma)
To try the self-hosted uptime-kuma, [🚀 one-click deploy with Dome](https://app.trydome.io/signup?package=uptime-kuma) with a free trial.
To try the self-hosted uptime-kuma, [🚀 one-click deploy with Dome](https://app.trydome.io/signup?package=uptime-kuma) with a free trial.
## Deploy to Fly.io