Chimera (monitoring node)
Docker
Docker Compose
### OCI Chimera - Monitoring server
## NETWORKS
networks:
caddy_chimera:
name: caddy_chimera
driver: bridge
ipam:
config:
- subnet: 172.16.3.0/24
## SERVICES
services:
# Caddy (Reverse proxy, webserver)
caddy:
container_name: caddy
build: ${CADDY_HOME}/build/
security_opt:
- no-new-privileges:true
networks:
- caddy_chimera
restart: unless-stopped
ports:
- 80:80
- 443:443
- ${LOCAL_IP}:2019:2019
- 127.0.0.1:2019:2019
volumes:
- ${CADDY_HOME}/Caddyfile:/etc/caddy/Caddyfile
- ${CADDY_HOME}/sites:/srv
- ${CADDY_HOME}/data:/data
- ${CADDY_HOME}/config:/config
environment:
- TZ=${TZ}
# Docker Socket Proxy
socket-proxy:
container_name: socket-proxy
image: tecnativa/docker-socket-proxy
security_opt:
- no-new-privileges:true
networks:
- caddy_chimera
restart: unless-stopped
ports:
- ${LOCAL_IP}:2375:2375
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- LOG_LEVEL=info # debug,info,notice,warning,err,crit,alert,emerg
## Variables match the URL prefix (i.e. AUTH blocks access to /auth/* parts of the API, etc.).
# 0 to revoke access.
# 1 to grant access.
## Granted by Default
- EVENTS=1
- PING=1
- VERSION=1
## Revoked by Default
# Security critical
- AUTH=0
- SECRETS=0
- POST=1 # Watchtower
# Not always needed
- BUILD=0
- COMMIT=0
- CONFIGS=0
- CONTAINERS=1 # Portainer, etc.
- DISTRIBUTION=0
- EXEC=0
- IMAGES=1 # Portainer
- INFO=1 # Portainer
- NETWORKS=1 # Portainer
- NODES=0
- PLUGINS=0
- SERVICES=1 # Portainer
- SESSION=0
- SWARM=0
- SYSTEM=0
- TASKS=1 # Portainer
- VOLUMES=1 # Portainer
# Uptime Kuma Monitoring
uptime-kuma:
container_name: uptime-kuma
image: louislam/uptime-kuma
security_opt:
- no-new-privileges:true
networks:
- caddy_chimera
restart: unless-stopped
volumes:
- ${UPTIME_KUMA_HOME}/data:/app/data
# - ${UPTIME_KUMA_HOME}/config.yaml:/app/config.yaml
environment:
- UPTIME_KUMA_PORT=${UPTIME_KUMA_PORT}
- PGID=${PGID}
- PUID=${PUID}
# Watchtower container updates
watchtower:
container_name: watchtower
image: containrrr/watchtower
security_opt:
- no-new-privileges:true
networks:
- caddy_chimera
restart: unless-stopped
volumes:
- /etc/timezone:/etc/timezone:ro
environment:
- WATCHTOWER_NOTIFICATIONS_HOSTNAME=oci-chimera
- WATCHTOWER_CLEANUP=true
- DOCKER_HOST=tcp://socket-proxy:2375
- WATCHTOWER_INCLUDE_STOPPED=true
- WATCHTOWER_SCHEDULE=* 30 3 * * *
- WATCHTOWER_MONITOR_ONLY=true
- WATCHTOWER_NOTIFICATION_URL=discord://{WEBHOOK_URL}
#- WATCHTOWER_RUN_ONCE=true
# php-fpm
# php-fpm:
# container_name: php-fpm
# build: ${PHP_FPM_HOME}/build/
# security_opt:
# - no-new-privileges:true
# networks:
# - caddy_chimera
# restart: unless-stopped
# ports:
# - ${LOCAL_IP}:9000:9000
# add to caddy
# depends_on:
# - php-fpm
.env
# GENERAL
TZ=Europe/Berlin
PUID=1001
PGID=999
USERDIR=/home/ubuntu/
DOCKERDIR=/home/ubuntu/docker/
# NETWORK
TAILSCALE_IP={}
LOCAL_IP={} # IP on the OCI local network
## SERVICES ##
# TRAEFIK
TRAEFIK_HOME=/home/ubuntu/docker/traefik/
TRAEFIK_API_PORT=8000
# CADDY
CADDY_HOME=/home/ubuntu/docker/caddy/
# PHP-FPM
PHP_FPM_HOME=/home/ubuntu/docker/php-fpm/
# UPTIME KUMA
UPTIME_KUMA_HOME=/home/ubuntu/docker/uptime-kuma/
UPTIME_KUMA_PORT=3000
# WATCHTOWER
WATCHTOWER_HOME=/home/ubuntu/docker/watchtower/
Needs information in the {TAILSCALE_IP} and {LOCAL_IP} fields.
Caddy
Dockerfile
FROM caddy:alpine
RUN apk add --no-cache gzip
LABEL com.centurylinklabs.watchtower.enable="false"
caddy_reload.sh
A script to reload the Caddyfile configuration inside a running container:
#!/bin/bash
# Check if the "caddy" container is running
if ! docker ps | grep -q "caddy"; then
echo "Error: The 'caddy' container is not running."
exit 1
fi
# Execute "caddy reload" inside the container
docker compose exec caddy caddy reload -c /etc/caddy/Caddyfile
echo "Caddy configuration reloaded successfully."
Caddyfile
(common) {
header /* {
-Server
}
}
{
email {tls_email}
}
status.{hostname} {
tls {
protocols tls1.2
}
encode gzip
import common
log {
output file /srv/logs/status.{hostname}/caddy.log {
roll size 150mb
roll_keep 15
roll_keep_for 2880h
}
}
reverse_proxy uptime-kuma:3000
}
Needs information in {tls_email} (for TLS cert) and {hostname} fields.
Backups
cron
Backblaze B2 and OneDrive
PHP-FPM
Currently used version: 8.1-alpine
{DOCKER_DIR}/php-fpm/
Dockerfile
FROM php:8.1-fpm-alpine
RUN curl -sSL https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions -o - | sh -s \
gd zip apcu opcache yam
Add different PHP extensions here.
Uptime Kuma
Last modified: 03 April 2024