Add healthchecks and coder
This commit is contained in:
parent
acc83618f3
commit
e7c78aa678
16 changed files with 245 additions and 1 deletions
3
caddy/.env
Normal file
3
caddy/.env
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
ACME_CODER_USER=
|
||||||
|
ACME_CODER_PASS=
|
||||||
|
ACME_CODER_SUBD=
|
12
caddy/config/conf.002.d/coder.serguzim.me.conf
Normal file
12
caddy/config/conf.002.d/coder.serguzim.me.conf
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
coder.serguzim.me {
|
||||||
|
import default
|
||||||
|
reverse_proxy coder:7080
|
||||||
|
}
|
||||||
|
|
||||||
|
*.coder.serguzim.me {
|
||||||
|
import default
|
||||||
|
|
||||||
|
import acmedns {$ACMEDNS_CODER_USER} {$ACMEDNS_CODER_PASS} {$ACMEDNS_CODER_SUBD}
|
||||||
|
|
||||||
|
reverse_proxy coder:7080
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
msrg.cc {
|
msrg.cc {
|
||||||
import default
|
import default
|
||||||
header /.well-known/openpgpkey/* Access-Control-Allow-Origin *
|
header /.well-known/* Access-Control-Allow-Origin *
|
||||||
|
|
||||||
rewrite * /function/webpage-msrg-cc{uri}
|
rewrite * /function/webpage-msrg-cc{uri}
|
||||||
reverse_proxy https://faas.serguzim.me {
|
reverse_proxy https://faas.serguzim.me {
|
||||||
|
|
|
@ -17,3 +17,14 @@
|
||||||
(default) {
|
(default) {
|
||||||
encode zstd gzip
|
encode zstd gzip
|
||||||
}
|
}
|
||||||
|
|
||||||
|
(acmedns) {
|
||||||
|
tls {
|
||||||
|
dns acmedns {
|
||||||
|
username {args.0}
|
||||||
|
password {args.1}
|
||||||
|
subdomain {args.2}
|
||||||
|
server_url https://acme.serguzim.me
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -12,6 +12,9 @@ services:
|
||||||
- "443:443/udp"
|
- "443:443/udp"
|
||||||
- "8008:8008"
|
- "8008:8008"
|
||||||
- "8448:8448"
|
- "8448:8448"
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
- .secret.env
|
||||||
volumes:
|
volumes:
|
||||||
- ./config:/etc/caddy/
|
- ./config:/etc/caddy/
|
||||||
- data:/data
|
- data:/data
|
||||||
|
|
9
coder/.env
Normal file
9
coder/.env
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
CODER_ADDRESS="0.0.0.0:7080"
|
||||||
|
CODER_ACCESS_URL="https://coder.serguzim.me"
|
||||||
|
CODER_WILDCARD_ACCESS_URL="*.coder.serguzim.me"
|
||||||
|
|
||||||
|
CODER_PG_CONNECTION_URL="postgres://coder:xxxxxx@db.serguzim.me:5432/coder?sslmode=verify-full"
|
||||||
|
|
||||||
|
CODER_OIDC_ISSUER_URL="https://auth.serguzim.me/application/o/coder-serguzim-me/"
|
||||||
|
CODER_OIDC_CLIENT_ID=
|
||||||
|
CODER_OIDC_CLIENT_SECRET=
|
24
coder/docker-compose.yml
Normal file
24
coder/docker-compose.yml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
image: ghcr.io/coder/coder:latest
|
||||||
|
restart: always
|
||||||
|
labels:
|
||||||
|
com.centurylinklabs.watchtower.enable: true
|
||||||
|
ports:
|
||||||
|
- "7080:7080"
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
- .secret.env
|
||||||
|
group_add:
|
||||||
|
- "972" # docker group on host
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
networks:
|
||||||
|
apps:
|
||||||
|
aliases:
|
||||||
|
- coder
|
||||||
|
|
||||||
|
networks:
|
||||||
|
apps:
|
||||||
|
external: true
|
15
healthcheck/.env
Normal file
15
healthcheck/.env
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
USER_AGENT="healthcheck-bot for serguzim.net"
|
||||||
|
|
||||||
|
HTTP_HC_UID=
|
||||||
|
|
||||||
|
MATRIX_SERVER="https://matrix.msrg.cc"
|
||||||
|
MATRIX_SERVER_FEDTESTER="msrg.cc"
|
||||||
|
MATRIX_HC_UID=
|
||||||
|
MATRIX_TOKEN=
|
||||||
|
MATRIX_ROOM=
|
||||||
|
|
||||||
|
MAIL_HC_UID=
|
||||||
|
MAIL_HOST=mail.serguzim.me
|
||||||
|
MAIL_PORT=587
|
||||||
|
MAIL_USER=healthcheck@serguzim.me
|
||||||
|
MAIL_PASS=
|
2
healthcheck/.gitignore
vendored
Normal file
2
healthcheck/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
/mailcheck.mail
|
||||||
|
/msmtprc
|
7
healthcheck/Dockerfile
Normal file
7
healthcheck/Dockerfile
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
FROM ubuntu
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
RUN apt update -y \
|
||||||
|
&& apt install -y curl dnsutils msmtp gettext-base python3-pip python3-requests \
|
||||||
|
&& pip install matrix-nio
|
29
healthcheck/docker-compose.yml
Normal file
29
healthcheck/docker-compose.yml
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
version: "3.7"
|
||||||
|
|
||||||
|
x-common-elements:
|
||||||
|
&common-elements
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
image: healthcheck
|
||||||
|
restart: never
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
- .secret.env
|
||||||
|
volumes:
|
||||||
|
- ./:/opt
|
||||||
|
|
||||||
|
services:
|
||||||
|
http:
|
||||||
|
<<: *common-elements
|
||||||
|
command: "/opt/http"
|
||||||
|
matrix:
|
||||||
|
<<: *common-elements
|
||||||
|
command: "/opt/matrix"
|
||||||
|
mail:
|
||||||
|
<<: *common-elements
|
||||||
|
command: "/opt/mail"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
name: healthcheck
|
||||||
|
external: true
|
47
healthcheck/http
Executable file
47
healthcheck/http
Executable file
|
@ -0,0 +1,47 @@
|
||||||
|
#!/usr/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
cd /opt/ || exit
|
||||||
|
|
||||||
|
hc_url="https://hc-ping.com/$HTTP_HC_UID"
|
||||||
|
error=""
|
||||||
|
|
||||||
|
alias curl_hc='curl -LA "$USER_AGENT" --retry 3'
|
||||||
|
|
||||||
|
check_url ()
|
||||||
|
{
|
||||||
|
url="https://$1"
|
||||||
|
echo "checking url $url ..."
|
||||||
|
dig A "$1" >/dev/null
|
||||||
|
if curl_hc -sSf "$url" >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
echo "... good"
|
||||||
|
else
|
||||||
|
result=$(curl -Lv "$url" 2>&1)
|
||||||
|
error=$(printf "%s\n==========\n%s:\n%s" "$error" "$url" "$result")
|
||||||
|
echo "... bad"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
check_url "analytics.serguzim.me"
|
||||||
|
check_url "auth.serguzim.me"
|
||||||
|
check_url "ci.serguzim.me"
|
||||||
|
check_url "cloud.serguzim.me"
|
||||||
|
check_url "git.serguzim.me"
|
||||||
|
check_url "graph.serguzim.me"
|
||||||
|
check_url "hook.serguzim.me"
|
||||||
|
check_url "mail.serguzim.me"
|
||||||
|
check_url "msrg.cc"
|
||||||
|
check_url "prometheus.serguzim.me/-/healthy"
|
||||||
|
check_url "registry.serguzim.me"
|
||||||
|
check_url "rss.serguzim.me"
|
||||||
|
check_url "serguzim.me"
|
||||||
|
check_url "wiki.serguzim.me"
|
||||||
|
check_url "www.reitanlage-oranienburg.de"
|
||||||
|
|
||||||
|
if [ "$error" = "" ]
|
||||||
|
then
|
||||||
|
curl_hc "$hc_url" >/dev/null 2>&1
|
||||||
|
else
|
||||||
|
curl_hc --data-raw "$error" "$hc_url/fail" >/dev/null 2>&1
|
||||||
|
fi
|
9
healthcheck/mail
Executable file
9
healthcheck/mail
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
cd /opt/ || exit
|
||||||
|
|
||||||
|
envsubst < template.msmtprc > msmtprc
|
||||||
|
envsubst < mailcheck.template.mail > mailcheck.mail
|
||||||
|
|
||||||
|
msmtp -C /opt/msmtprc -a default "$MAIL_HC_UID@hc-ping.com" < /opt/mailcheck.mail
|
5
healthcheck/mailcheck.template.mail
Normal file
5
healthcheck/mailcheck.template.mail
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
To: ${MAIL_HC_UID}@hc-ping.com
|
||||||
|
From: ${MAIL_USER}
|
||||||
|
Subject: Healthcheck
|
||||||
|
|
||||||
|
Mailserver alive
|
55
healthcheck/matrix
Executable file
55
healthcheck/matrix
Executable file
|
@ -0,0 +1,55 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
import os
|
||||||
|
import requests
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
from nio import AsyncClient, RoomMessageNotice
|
||||||
|
|
||||||
|
healthcheck_url = "https://hc-ping.com/" + os.environ['MATRIX_HC_UID']
|
||||||
|
|
||||||
|
def send_ping(success, msg=""):
|
||||||
|
url = healthcheck_url
|
||||||
|
if not success:
|
||||||
|
url += "/fail"
|
||||||
|
|
||||||
|
requests.get(url, data=msg, headers={'user-agent': os.environ['USER_AGENT']})
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
try:
|
||||||
|
client = AsyncClient(os.environ['MATRIX_SERVER'])
|
||||||
|
client.access_token = os.environ['MATRIX_TOKEN']
|
||||||
|
client.device_id = os.environ['USER_AGENT']
|
||||||
|
await client.room_send(
|
||||||
|
room_id = os.environ['MATRIX_ROOM'],
|
||||||
|
message_type = "m.room.message",
|
||||||
|
content = {
|
||||||
|
"msgtype": "m.text",
|
||||||
|
"body": "!ping"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
print("exception during login or sending")
|
||||||
|
send_ping(False)
|
||||||
|
sys.exit(1)
|
||||||
|
await client.close()
|
||||||
|
|
||||||
|
url = "https://federationtester.matrix.org/api/report?server_name=" \
|
||||||
|
+ os.environ['MATRIX_SERVER_FEDTESTER']
|
||||||
|
resp = requests.get(url)
|
||||||
|
data = resp.json() # Check the JSON Response Content documentation below
|
||||||
|
if data["FederationOK"] != True:
|
||||||
|
send_ping(False)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
requests.get(url=healthcheck_url)
|
||||||
|
send_ping(True)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
asyncio.new_event_loop().run_until_complete(main())
|
13
healthcheck/template.msmtprc
Normal file
13
healthcheck/template.msmtprc
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
defaults
|
||||||
|
auth on
|
||||||
|
tls on
|
||||||
|
tls_trust_file /etc/ssl/certs/ca-certificates.crt
|
||||||
|
logfile /tmp/msmtp.log
|
||||||
|
|
||||||
|
account default
|
||||||
|
host ${MAIL_HOST}
|
||||||
|
port ${MAIL_PORT}
|
||||||
|
tls_starttls on
|
||||||
|
from ${MAIL_USER}
|
||||||
|
user ${MAIL_USER}
|
||||||
|
password ${MAIL_PASS}
|
Reference in a new issue