config.yaml (9527B)
1 storage: 2 type: sqlite 3 path: /data/gatus.db 4 5 metrics: true 6 7 web: 8 port: 8080 9 10 ui: 11 title: "Status | midnightthoughts.space" 12 header: "Service Status" 13 dark-mode: true 14 15 # Announcements display a banner at the top of the status page. 16 # Useful for communicating planned maintenance or incidents. 17 # Types: outage, warning, information, operational, none 18 # Add new entries at the top — they're shown in reverse chronological order. 19 # Set archived: true to hide old announcements without deleting them. 20 # 21 # announcements: 22 # - timestamp: 2026-03-13T10:00:00Z 23 # type: warning 24 # message: "Scheduled maintenance 10:00-12:00 UTC — some services may be unavailable." 25 # - timestamp: 2026-03-13T12:00:00Z 26 # type: operational 27 # message: "Maintenance completed. All services restored." 28 # archived: false 29 30 endpoints: 31 32 ############################################################################## 33 # DNS 34 ############################################################################## 35 36 - name: dns-a Reachability 37 group: DNS 38 url: "tcp://46.62.175.246:53" 39 interval: 1m 40 conditions: 41 - "[CONNECTED] == true" 42 43 - name: dns-b Reachability 44 group: DNS 45 url: "tcp://46.62.199.69:53" 46 interval: 1m 47 conditions: 48 - "[CONNECTED] == true" 49 50 - name: dns-a Authoritative (nordgedanken.dev) 51 group: DNS 52 url: "46.62.175.246:53" 53 dns: 54 query-type: "A" 55 query-name: "nordgedanken.dev" 56 interval: 2m 57 conditions: 58 - "[DNS_RCODE] == NOERROR" 59 60 - name: dns-b Authoritative (nordgedanken.dev) 61 group: DNS 62 url: "46.62.199.69:53" 63 dns: 64 query-type: "A" 65 query-name: "nordgedanken.dev" 66 interval: 2m 67 conditions: 68 - "[DNS_RCODE] == NOERROR" 69 70 - name: dns-a Authoritative (midnightthoughts.space) 71 group: DNS 72 url: "46.62.175.246:53" 73 dns: 74 query-type: "A" 75 query-name: "midnightthoughts.space" 76 interval: 2m 77 conditions: 78 - "[DNS_RCODE] == NOERROR" 79 80 - name: dns-b Authoritative (midnightthoughts.space) 81 group: DNS 82 url: "46.62.199.69:53" 83 dns: 84 query-type: "A" 85 query-name: "midnightthoughts.space" 86 interval: 2m 87 conditions: 88 - "[DNS_RCODE] == NOERROR" 89 90 - name: dns-a Recursive 91 group: DNS 92 url: "46.62.175.246:53" 93 dns: 94 query-type: "A" 95 query-name: "one.one.one.one" 96 interval: 5m 97 conditions: 98 - "[DNS_RCODE] == NOERROR" 99 100 - name: dns-b Recursive 101 group: DNS 102 url: "46.62.199.69:53" 103 dns: 104 query-type: "A" 105 query-name: "one.one.one.one" 106 interval: 5m 107 conditions: 108 - "[DNS_RCODE] == NOERROR" 109 110 ############################################################################## 111 # INFRASTRUCTURE 112 ############################################################################## 113 114 - name: Authentik (SSO) 115 group: Infrastructure 116 url: "https://auth.midnightthoughts.space/-/health/live/" 117 interval: 1m 118 conditions: 119 - "[STATUS] == 200" 120 - "[CERTIFICATE_EXPIRATION] > 24h" 121 - "[RESPONSE_TIME] < 5000" 122 123 - name: Grafana 124 group: Infrastructure 125 url: "https://grafana.midnightthoughts.space/api/health" 126 interval: 2m 127 conditions: 128 - "[STATUS] == 200" 129 - "[CERTIFICATE_EXPIRATION] > 24h" 130 131 - name: ntfy 132 group: Infrastructure 133 url: "https://notify.mtrnord.blog/v1/health" 134 interval: 1m 135 conditions: 136 - "[STATUS] == 200" 137 - "[BODY].healthy == true" 138 - "[CERTIFICATE_EXPIRATION] > 24h" 139 140 - name: Flux Webhook 141 group: Infrastructure 142 url: "https://webhook.kubernetes.midnightthoughts.space" 143 interval: 5m 144 conditions: 145 - "[STATUS] == any(200, 404)" # endpoint exists, auth required 146 - "[CERTIFICATE_EXPIRATION] > 24h" 147 148 ############################################################################## 149 # SOCIAL & COMMUNICATION 150 ############################################################################## 151 152 - name: GoToSocial 153 group: Social 154 url: "https://gts.mtrnord.blog/livez" 155 interval: 1m 156 conditions: 157 - "[STATUS] == 200" 158 - "[CERTIFICATE_EXPIRATION] > 24h" 159 - "[RESPONSE_TIME] < 3000" 160 161 - name: Matrix (continuwuity) 162 group: Social 163 url: "https://matrix.mtrnord.blog/_matrix/client/versions" 164 interval: 1m 165 conditions: 166 - "[STATUS] == 200" 167 - "[CERTIFICATE_EXPIRATION] > 24h" 168 - "has([BODY].versions) == true" 169 170 - name: Matrix Well-Known 171 group: Social 172 url: "https://mtrnord.blog/.well-known/matrix/server" 173 interval: 5m 174 conditions: 175 - "[STATUS] == 200" 176 - "[CERTIFICATE_EXPIRATION] > 24h" 177 178 - name: Matrix Client Well-Known 179 group: Social 180 url: "https://mtrnord.blog/.well-known/matrix/client" 181 interval: 5m 182 conditions: 183 - "[STATUS] == 200" 184 - "[CERTIFICATE_EXPIRATION] > 24h" 185 186 - name: Draupnir 187 group: Social 188 url: "https://draupnir.midnightthoughts.space" 189 interval: 5m 190 conditions: 191 - "[STATUS] == any(200, 404)" 192 - "[CERTIFICATE_EXPIRATION] > 24h" 193 194 ############################################################################## 195 # MAIL 196 ############################################################################## 197 198 - name: SMTP (25) 199 group: Mail 200 url: "tcp://mail.midnightthoughts.space:25" 201 interval: 2m 202 conditions: 203 - "[CONNECTED] == true" 204 205 - name: SMTPS (465) 206 group: Mail 207 url: "tcp://mail.midnightthoughts.space:465" 208 interval: 2m 209 conditions: 210 - "[CONNECTED] == true" 211 212 - name: SMTP Submission (587) 213 group: Mail 214 url: "tcp://mail.midnightthoughts.space:587" 215 interval: 2m 216 conditions: 217 - "[CONNECTED] == true" 218 219 - name: IMAPS (993) 220 group: Mail 221 url: "tcp://mail.midnightthoughts.space:993" 222 interval: 2m 223 conditions: 224 - "[CONNECTED] == true" 225 226 - name: MTA-STS 227 group: Mail 228 url: "https://mta-sts.midnightthoughts.space/.well-known/mta-sts.txt" 229 interval: 15m 230 conditions: 231 - "[STATUS] == 200" 232 - "[CERTIFICATE_EXPIRATION] > 24h" 233 234 - name: WKD (nordgedanken.dev) 235 group: Mail 236 url: "https://openpgpkey.nordgedanken.dev/.well-known/openpgpkey/nordgedanken.dev/policy" 237 interval: 15m 238 conditions: 239 - "[STATUS] == 200" 240 - "[CERTIFICATE_EXPIRATION] > 24h" 241 242 ############################################################################## 243 # PERSONAL SERVICES 244 ############################################################################## 245 246 - name: Vaultwarden 247 group: Personal 248 url: "https://vault.midnightthoughts.space/alive" 249 interval: 1m 250 conditions: 251 - "[STATUS] == 200" 252 - "[CERTIFICATE_EXPIRATION] > 24h" 253 254 - name: Immich 255 group: Personal 256 url: "https://immich.mtrnord.blog/api/server/ping" 257 interval: 2m 258 conditions: 259 - "[STATUS] == 200" 260 - "[BODY].res == pong" 261 - "[CERTIFICATE_EXPIRATION] > 24h" 262 263 - name: FreshRSS 264 group: Personal 265 url: "https://rss.mtrnord.blog" 266 interval: 5m 267 conditions: 268 - "[STATUS] == 200" 269 - "[CERTIFICATE_EXPIRATION] > 24h" 270 271 - name: Bookwyrm 272 group: Personal 273 url: "https://books.mtrnord.blog" 274 interval: 5m 275 conditions: 276 - "[STATUS] == 200" 277 - "[CERTIFICATE_EXPIRATION] > 24h" 278 279 - name: ActualBudget 280 group: Personal 281 url: "https://budget.midnightthoughts.space" 282 interval: 5m 283 conditions: 284 - "[STATUS] == 200" 285 - "[CERTIFICATE_EXPIRATION] > 24h" 286 287 - name: Peertube 288 group: Personal 289 url: "https://peertube.mtrnord.blog" 290 interval: 5m 291 conditions: 292 - "[STATUS] == 200" 293 - "[CERTIFICATE_EXPIRATION] > 24h" 294 295 - name: Collabora 296 group: Personal 297 url: "https://collabora.midnightthoughts.space" 298 interval: 5m 299 conditions: 300 - "[STATUS] == 200" 301 - "[CERTIFICATE_EXPIRATION] > 24h" 302 303 ############################################################################## 304 # PRODUCTIVITY 305 ############################################################################## 306 307 - name: Kimai 308 group: Productivity 309 url: "https://kimai.midnightthoughts.space" 310 interval: 5m 311 conditions: 312 - "[STATUS] == 200" 313 - "[CERTIFICATE_EXPIRATION] > 24h" 314 315 - name: Plane 316 group: Productivity 317 url: "https://plane.midnightthoughts.space" 318 interval: 5m 319 conditions: 320 - "[STATUS] == 200" 321 - "[CERTIFICATE_EXPIRATION] > 24h" 322 323 - name: Weblate 324 group: Productivity 325 url: "https://weblate.mtrnord.blog" 326 interval: 5m 327 conditions: 328 - "[STATUS] == 200" 329 - "[CERTIFICATE_EXPIRATION] > 24h" 330 331 ############################################################################## 332 # PUBLISHING & DEV 333 ############################################################################## 334 335 - name: Blog 336 group: Publishing 337 url: "https://mtrnord.blog" 338 interval: 5m 339 conditions: 340 - "[STATUS] == 200" 341 - "[CERTIFICATE_EXPIRATION] > 24h" 342 343 - name: cgit 344 group: Publishing 345 url: "https://git.midnightthoughts.space" 346 interval: 5m 347 conditions: 348 - "[STATUS] == 200" 349 - "[CERTIFICATE_EXPIRATION] > 24h" 350 351 - name: Connectivity Tester 352 group: Publishing 353 url: "https://connectivity-tester.mtrnord.blog" 354 interval: 2m 355 conditions: 356 - "[STATUS] == 200" 357 - "[CERTIFICATE_EXPIRATION] > 24h" 358 359 - name: Connectivity Tester API 360 group: Publishing 361 url: "https://api.connectivity-tester.mtrnord.blog/api/federation/federation-ok?server_name=mtrnord.blog" 362 interval: 5m 363 conditions: 364 - "[STATUS] == 200" 365 - "[CERTIFICATE_EXPIRATION] > 24h"