diff --git a/checkmk/readme.md b/checkmk/readme.md
new file mode 100644
index 0000000..34b0f28
--- /dev/null
+++ b/checkmk/readme.md
@@ -0,0 +1,163 @@
+# checkmk
+
+###### guide-by-example
+
+![logo](https://i.imgur.com/yMDhlLJ.png)
+
+# Purpose
+
+Monitoring of machines, containers, services, logs, ...
+
+* [Official site](https://checkmk.com/)
+* [github](https://github.com/Checkmk/checkmk)
+
+Monitoring in this case means gathering and showing information on how services
+or machines or containers are running.
+Can be cpu, io, ram, disk use, network throughput, latency,...
+can be number of http requests, errors, results of backups...
+
+# Overview
+
+[Good youtube overview.](https://www.youtube.com/watch?v=7OnhuCsR7jg)
+
+checkmk is a fork of nagios and is mostly written in python.
+Interesting fact is that there is no database where data are stored,
+RRD files for metrics and plaintext logs for everything else.
+
+
+![overview](https://i.imgur.com/HB0bLyU.png)
+
+### Editions
+
+[Docs](https://docs.checkmk.com/master/en/intro_setup.html#editions)
+
+* **raw** - 100% open source, unlimited use, some features are missing
+ or are harder to set up. For example no containers monitoring,
+ no push mode from agents.
+* **cloud** - full featured with better performing version of the monitoring micro core,
+ but with 750 services limit
+
+I am gonna go with cloud for now, as 750 sounds like enough for my use cases.
+
+# Files and directory structure
+
+```
+/home/
+ └── ~/
+ └── docker/
+ └── checkmk/
+ ├── 🗁 checkmk_data/
+ ├── 🗋 docker-compose.yml
+ └── 🗋 .env
+```
+
+* `checkmk_data/` - a directory where checkmk_data stores its persistent data
+* `.env` - a file containing environment variables for docker compose
+* `docker-compose.yml` - a docker compose file, telling docker how to run the containers
+
+The two files must be provided.
+The directory is created by docker compose on the first run.
+
+# docker-compose
+
+A simple compose.
+Of note is use of ram as tmpfs mount into the container
+and setting a 1024 limit for max open files by a single process.
+
+*Note* - the port is only `expose`, since theres expectation of use
+of a reverse proxy and accessing the services by hostname, not ip and port.
+
+[Docs](https://docs.checkmk.com/latest/en/ports.html) on ports used in cmk.
+
+`docker-compose.yml`
+```yml
+services:
+ checkmk:
+ image: checkmk/check-mk-raw
+ container_name: checkmk
+ hostname: checkmk
+ restart: unless-stopped
+ env_file: .env
+ ulimits:
+ nofile: 1024
+ tmpfs:
+ - /opt/omd/sites/cmk/tmp:uid=1000,gid=1000
+ volumes:
+ - ./checkmk_data:/omd/sites
+ - /etc/localtime:/etc/localtime:ro
+ expose:
+ - "5000" # webgui
+ ports:
+ - 8000:8000 # agents who push
+
+networks:
+ default:
+ name: $DOCKER_MY_NETWORK
+ external: true
+```
+
+`.env`
+
+```bash
+# GENERAL
+DOCKER_MY_NETWORK=caddy_net
+TZ=Europe/Bratislava
+
+# CMK
+
+CMK_SITE_ID=dom
+CMK_PASSWORD=WUx666yd0qCWh
+```
+
+**All containers must be on the same network**.
+Which is named in the `.env` file.
+If one does not exist yet: `docker network create caddy_net`
+
+## Reverse proxy
+
+Caddy v2 is used, details
+[here](https://github.com/DoTheEvo/selfhosted-apps-docker/tree/master/caddy_v2).
+
+`Caddyfile`
+```php
+cmk.{$MY_DOMAIN} {
+ reverse_proxy checkmk:5000
+}
+```
+
+
+
+---
+---
+
+
+
+# Push
+
+
+# Alerts
+
+
+# Logs
+
+# Update
+
+Manual image update:
+
+- `docker-compose pull`
+- `docker-compose up -d`
+- `docker image prune`
+
+# Backup and restore
+
+#### Backup
+
+Using [borg](https://github.com/DoTheEvo/selfhosted-apps-docker/tree/master/borg_backup)
+that makes daily snapshot of the entire directory.
+
+#### Restore
+
+* down the containers `docker-compose down`
+* delete the entire monitoring directory
+* from the backup copy back the monitoring directory
+* start the containers `docker-compose up -d`