Initial commit

This commit is contained in:
Florian Zirker 2021-01-09 20:40:51 +01:00 committed by Florian Zirker
commit 6c8bbaf8ac
15 changed files with 918 additions and 0 deletions

18
.editorconfig Normal file
View file

@ -0,0 +1,18 @@
root = true
[*]
indent_style = space
indent_size = 3
tab_width = 3
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120
[*.{yml,yaml}]
indent_size = 2
tab_width = 2
[*.md]
trim_trailing_whitespace = false

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
.env
**/.vscode/*

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Florian Zirker
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

2
README.md Normal file
View file

@ -0,0 +1,2 @@
# homeserver

View file

@ -0,0 +1,27 @@
version: "3.3"
services:
app:
image: linuxserver/heimdall:version-2.2.2
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Berlin
volumes:
- ${VOLUMES_PATH}/heimdall:/config
expose:
- "80"
networks:
- web
labels:
- "traefik.enable=true"
- "traefik.http.routers.heimdall.rule=Host(`heimdall.${DOMAIN}`)"
- "traefik.http.routers.heimdall.entrypoints=web"
- "traefik.http.services.heimdall.loadbalancer.server.port=80"
- "docker.group=selfhost"
restart: unless-stopped
networks:
web:
external: true

View file

@ -0,0 +1,100 @@
version: "3.3"
services:
grafana:
image: grafana/grafana
restart: unless-stopped
expose:
- "3000"
networks:
- web
- monitoring
labels:
- "traefik.enable=true"
- "traefik.http.routers.monitoring.rule=Host(`monitoring.${DOMAIN}`)"
- "traefik.http.routers.monitoring.entrypoints=web"
- "traefik.http.services.monitoring.loadbalancer.server.port=3000"
- "traefik.docker.network=web"
- "docker.group=monitoring"
restart: unless-stopped
environment:
- GF_DEFAULT_INSTANCE_NAME=monitoring.${DOMAIN}
- GF_SERVER_ROOT_URL=http://monitoring.${DOMAIN}
- GF_SERVER_DOMAIN=monitoring.${DOMAIN}
- GF_SERVER_SERVE_FROM_SUB_PATH=true
- GF_SECURITY_DISABLE_GRAVATAR=true
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer
- GF_DATABASE_TYPE=postgres
- GF_DATABASE_HOST=grafanadb:5432
- GF_DATABASE_SSL_MODE=disable
- GF_DATABASE_NAME=grafana
- GF_DATABASE_USER=${POSTGRES_USER}
- GF_DATABASE_PASSWORD=${POSTGRES_PASSWORD}
- GF_INSTALL_PLUGINS=flant-statusmap-panel
depends_on:
- influxdb
- grafanadb
grafanadb:
image: postgres
volumes:
- ${VOLUMES_PATH}/grafanadb:/var/lib/postgresql/data
networks:
- monitoring
restart: unless-stopped
environment:
- POSTGRES_DB=grafana
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
labels:
- "docker.group=monitoring"
# influxdb to store time based data. Adress is drax.fzirker.lan:8086
influxdb:
image: influxdb
restart: unless-stopped
ports:
- 8086:8086
networks:
- web
- monitoring
environment:
- INFLUXDB_MONITOR_STORE_ENABLED=false
volumes:
- ${VOLUMES_PATH}/influxdb/:/var/lib/influxdb
- ${PWD}/influxdb.conf:/etc/influxdb/influxdb.conf:ro
labels:
- "docker.group=monitoring"
##################################################################
# here starts data collection
telegraf:
image: telegraf
restart: unless-stopped
environment:
- HOST_MOUNT_PREFIX=/hostfs
- HOST_PROC=/hostfs/proc
- HOST_SYS=/hostfs/sys
- HOST_ETC=/hostfs/etc
- HOST_VAR=/hostfs/var
- HOST_RUN=/hostfs/run
volumes:
- ./telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- /var/run/utmp:/var/run/utmp:ro
- /:/hostfs:ro
network_mode: "host"
labels:
- "docker.group=monitoring"
depends_on:
- influxdb
networks:
monitoring:
web:
external: true

12
monitoring/influxdb.conf Normal file
View file

@ -0,0 +1,12 @@
[meta]
dir = "/var/lib/influxdb/meta"
[data]
dir = "/var/lib/influxdb/data"
wal-dir = "/var/lib/influxdb/wal"
max-concurrent-compactions = 1
[monitor]
store-enabled = false
store-database = "_internal"
store-interval = "10s"

View file

@ -0,0 +1 @@
docker run --rm --link=monitoring_influxdb_1 -it --net monitoring_monitoring influxdb influx -host influxdb

View file

@ -0,0 +1,557 @@
# Telegraf Configuration
#
# Telegraf is entirely plugin driven. All metrics are gathered from the
# declared inputs, and sent to the declared outputs.
#
# Plugins must be declared in here to be active.
# To deactivate a plugin, comment out the name and any variables.
#
# Use 'telegraf -config telegraf.conf -test' to see what metrics a config
# file would generate.
#
# Environment variables can be used anywhere in this config file, simply surround
# them with ${}. For strings the variable must be within quotes (ie, "${STR_VAR}"),
# for numbers and booleans they should be plain (ie, ${INT_VAR}, ${BOOL_VAR})
# Config Sample under https://github.com/influxdata/telegraf/blob/master/etc/telegraf.conf
# Global tags can be specified here in key="value" format.
[global_tags]
# datacenter
dc="fzirker.lan"
# Configuration for telegraf agent
[agent]
## Default data collection interval for all inputs
interval = "10s"
## Rounds collection interval to 'interval'
## ie, if interval="10s" then always collect on :00, :10, :20, etc.
round_interval = true
## Telegraf will send metrics to outputs in batches of at most
## metric_batch_size metrics.
## This controls the size of writes that Telegraf sends to output plugins.
metric_batch_size = 1000
## Maximum number of unwritten metrics per output. Increasing this value
## allows for longer periods of output downtime without dropping metrics at the
## cost of higher maximum memory usage.
metric_buffer_limit = 10000
## Collection jitter is used to jitter the collection by a random amount.
## Each plugin will sleep for a random time within jitter before collecting.
## This can be used to avoid many plugins querying things like sysfs at the
## same time, which can have a measurable effect on the system.
collection_jitter = "0s"
## Default flushing interval for all outputs. Maximum flush_interval will be
## flush_interval + flush_jitter
flush_interval = "10s"
## Jitter the flush interval by a random amount. This is primarily to avoid
## large write spikes for users running a large number of telegraf instances.
## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s
flush_jitter = "0s"
## By default or when set to "0s", precision will be set to the same
## timestamp order as the collection interval, with the maximum being 1s.
## ie, when interval = "10s", precision will be "1s"
## when interval = "250ms", precision will be "1ms"
## Precision will NOT be used for service inputs. It is up to each individual
## service input to set the timestamp at the appropriate precision.
## Valid time units are "ns", "us" (or "µs"), "ms", "s".
precision = ""
## Override default hostname, if empty use os.Hostname()
hostname = ""
## If set to true, do no set the "host" tag in the telegraf agent.
omit_hostname = false
###############################################################################
# OUTPUT PLUGINS #
###############################################################################
# Configuration for sending metrics to InfluxDB
[[outputs.influxdb]]
## The full HTTP or UDP URL for your InfluxDB instance.
##
## Multiple URLs can be specified for a single cluster, only ONE of the
## urls will be written to each interval.
# urls = ["unix:///var/run/influxdb.sock"]
# urls = ["udp://127.0.0.1:8089"]
# urls = ["http://127.0.0.1:8086"]
urls = ["http://drax.fzirker.lan:8086"] # required
###############################################################################
# INPUT PLUGINS #
###############################################################################
# Read metrics about cpu usage
[[inputs.cpu]]
## Whether to report per-cpu stats or not
percpu = true
## Whether to report total system cpu stats or not
totalcpu = true
## If true, collect raw CPU time metrics.
collect_cpu_time = false
## If true, compute and report the sum of all non-idle CPU states.
report_active = false
# Read metrics about disk usage by mount point
[[inputs.disk]]
## By default stats will be gathered for all mount points.
## Set mount_points will restrict the stats to only the specified mount points.
mount_points = ["/hostfs", "/hostfs/mnt/sdcard"]
## Ignore mount points by filesystem type.
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.disk]]
# Festplatte lange schlafen lassen :)
interval = "12h"
mount_points = ["/hostfs/mnt/wdhdd"]
# Read metrics about disk IO by device
[[inputs.diskio]]
## By default, telegraf will gather stats for all devices including
## disk partitions.
## Setting devices will restrict the stats to the specified devices.
# devices = ["sda", "sdb", "vd*"]
## Uncomment the following line if you need disk serial numbers.
# skip_serial_number = false
#
## On systems which support it, device metadata can be added in the form of
## tags.
## Currently only Linux is supported via udev properties. You can view
## available properties for a device by running:
## 'udevadm info -q property -n /dev/sda'
## Note: Most, but not all, udev properties can be accessed this way. Properties
## that are currently inaccessible include DEVTYPE, DEVNAME, and DEVPATH.
# device_tags = ["ID_FS_TYPE", "ID_FS_USAGE"]
#
## Using the same metadata source as device_tags, you can also customize the
## name of the device via templates.
## The 'name_templates' parameter is a list of templates to try and apply to
## the device. The template may contain variables in the form of '$PROPERTY' or
## '${PROPERTY}'. The first template which does not contain any variables not
## present for the device is used as the device name tag.
## The typical use case is for LVM volumes, to get the VG/LV name instead of
## the near-meaningless DM-0 name.
# name_templates = ["$ID_FS_LABEL","$DM_VG_NAME/$DM_LV_NAME"]
# Get kernel statistics from /proc/stat
[[inputs.kernel]]
# no configuration
# Read metrics about memory usage
[[inputs.mem]]
# no configuration
# Get the number of processes and group them by status
[[inputs.processes]]
# no configuration
# Read metrics about swap memory usage
[[inputs.swap]]
# no configuration
# Read metrics about system load & uptime
[[inputs.system]]
## Uncomment to remove deprecated metrics.
# fielddrop = ["uptime_format"]
# Read metrics about docker containers
[[inputs.docker]]
## Docker Endpoint
## To use TCP, set endpoint = "tcp://[ip]:[port]"
## To use environment variables (ie, docker-machine), set endpoint = "ENV"
endpoint = "unix:///var/run/docker.sock"
## Set to true to collect Swarm metrics(desired_replicas, running_replicas)
gather_services = false
## Only collect metrics for these containers, collect all if empty
container_names = []
## Set the source tag for the metrics to the container ID hostname, eg first 12 chars
source_tag = false
## Containers to include and exclude. Globs accepted.
## Note that an empty array for both will include all containers
container_name_include = []
container_name_exclude = []
## Container states to include and exclude. Globs accepted.
## When empty only containers in the "running" state will be captured.
## example: container_state_include = ["created", "restarting", "running", "removing", "paused", "exited", "dead"]
## example: container_state_exclude = ["created", "restarting", "running", "removing", "paused", "exited", "dead"]
# container_state_include = []
# container_state_exclude = []
## Timeout for docker list, info, and stats commands
timeout = "5s"
## Whether to report for each container per-device blkio (8:0, 8:1...) and
## network (eth0, eth1, ...) stats or not
perdevice = true
## Whether to report for each container total blkio and network stats or not
total = false
## Which environment variables should we use as a tag
##tag_env = ["JAVA_HOME", "HEAP_SIZE"]
## docker labels to include and exclude as tags. Globs accepted.
## Note that an empty array for both will include all labels as tags
docker_label_include = []
docker_label_exclude = []
## Optional TLS Config
# tls_ca = "/etc/telegraf/ca.pem"
# tls_cert = "/etc/telegraf/cert.pem"
# tls_key = "/etc/telegraf/key.pem"
## Use TLS but skip chain & host verification
# insecure_skip_verify = false
# # Monitor disks' temperatures using hddtemp
# [[inputs.hddtemp]]
# ## By default, telegraf gathers temps data from all disks detected by the
# ## hddtemp.
# ##
# ## Only collect temps from the selected disks.
# ##
# ## A * as the device name will return the temperature values of all disks.
# ##
# # address = "127.0.0.1:7634"
# # devices = ["sda", "*"]
# HTTP/HTTPS request given an address a method and a timeout
[[inputs.http_response]]
## Deprecated in 1.12, use 'urls'
## Server address (default http://localhost)
# address = "http://localhost"
## List of urls to query.
urls = [
"https://florianzirker.de",
"https://cloud.florianzirker.de/login",
"https://wallabag.florianzirker.de/login",
"https://www.feuerwehr-kapsweyer.de",
"http://portainer.fzirker.lan",
"http://gpxviewer.fzirker.lan",
"http://traefik.fzirker.lan/dashboard/",
"http://heimdall.fzirker.lan",
"http://monitoring.fzirker.lan/login",
#"http://solarmaxpi.zirker.lan"
]
interval = "60s"
## Set http_proxy (telegraf uses the system wide proxy settings if it's is not set)
# http_proxy = "http://localhost:8888"
## Set response_timeout (default 5 seconds)
response_timeout = "10s"
## HTTP Request Method
method = "GET"
## Whether to follow redirects from the server (defaults to false)
follow_redirects = false
## Optional HTTP Request Body
# body = '''
# {'fake':'data'}
# '''
## Optional substring or regex match in body of the response
# response_string_match = "\"service_status\": \"up\""
# response_string_match = "ok"
# response_string_match = "\".*_status\".?:.?\"up\""
## Optional TLS Config
# tls_ca = "/etc/telegraf/ca.pem"
# tls_cert = "/etc/telegraf/cert.pem"
# tls_key = "/etc/telegraf/key.pem"
## Use TLS but skip chain & host verification
# insecure_skip_verify = false
## HTTP Request Headers (all values must be strings)
# [inputs.http_response.headers]
# Host = "github.com"
## Interface to use when dialing an address
# interface = "eth0"
# # Collect statistics about itself
# [[inputs.internal]]
# ## If true, collect telegraf memory stats.
# # collect_memstats = true
# # Read metrics about network interface usage
[[inputs.net]]
## By default, telegraf gathers stats from any up interface (excluding loopback)
## Setting interfaces will tell it to gather these explicit interfaces,
## regardless of status.
##
interfaces = ["enx001e0636be71"]
##
## On linux systems telegraf also collects protocol stats.
## Setting ignore_protocol_stats to true will skip reporting of protocol metrics.
##
# ignore_protocol_stats = false
##
# # Read TCP metrics such as established, time wait and sockets counts.
[[inputs.netstat]]
# no configuration
# Collect kernel snmp counters and network interface statistics
[[inputs.nstat]]
## file paths for proc files. If empty default paths will be used:
## /proc/net/netstat, /proc/net/snmp, /proc/net/snmp6
## These can also be overridden with env variables, see README.
proc_net_netstat = "/proc/net/netstat"
proc_net_snmp = "/proc/net/snmp"
proc_net_snmp6 = "/proc/net/snmp6"
## dump metrics with 0 values too
dump_zeros = true
# Ping given url(s) and return statistics
[[inputs.ping]]
## Hosts to send ping packets to.
urls = [
"fritz-box.fzirker.lan",
"wlan-ap.fzirker.lan",
"drax.fzirker.lan",
"florianzirker.de",
"t-online.de",
"8.8.8.8", # dns of google
"4.2.2.2", # dns of level3
"example.com"
]
interval = "60s"
## Method used for sending pings, can be either "exec" or "native". When set
## to "exec" the systems ping command will be executed. When set to "native"
## the plugin will send pings directly.
##
## While the default is "exec" for backwards compatibility, new deployments
## are encouraged to use the "native" method for improved compatibility and
## performance.
method = "native"
## Number of ping packets to send per interval. Corresponds to the "-c"
## option of the ping command.
count = 4
## Time to wait between sending ping packets in seconds. Operates like the
## "-i" option of the ping command.
ping_interval = 1.0
## If set, the time to wait for a ping response in seconds. Operates like
## the "-W" option of the ping command.
# timeout = 1.0
## If set, the total ping deadline, in seconds. Operates like the -w option
## of the ping command.
# deadline = 10
## Interface or source address to send ping from. Operates like the -I or -S
## option of the ping command.
# interface = ""
## Specify the ping executable binary.
# binary = "ping"
## Arguments for ping command. When arguments is not empty, the command from
## the binary option will be used and other options (ping_interval, timeout,
## etc) will be ignored.
# arguments = ["-c", "3"]
## Use only IPv6 addresses when resolving a hostname.
# ipv6 = false
# # Monitor process cpu and memory usage
# [[inputs.procstat]]
# ## PID file to monitor process
# pid_file = "/var/run/nginx.pid"
# ## executable name (ie, pgrep <exe>)
# # exe = "nginx"
# ## pattern as argument for pgrep (ie, pgrep -f <pattern>)
# # pattern = "nginx"
# ## user as argument for pgrep (ie, pgrep -u <user>)
# # user = "nginx"
# ## Systemd unit name
# # systemd_unit = "nginx.service"
# ## CGroup name or path
# # cgroup = "systemd/system.slice/nginx.service"
#
# ## Windows service name
# # win_service = ""
#
# ## override for process_name
# ## This is optional; default is sourced from /proc/<pid>/status
# # process_name = "bar"
#
# ## Field name prefix
# # prefix = ""
#
# ## When true add the full cmdline as a tag.
# # cmdline_tag = false
#
# ## Add PID as a tag instead of a field; useful to differentiate between
# ## processes whose tags are otherwise the same. Can create a large number
# ## of series, use judiciously.
# # pid_tag = false
#
# ## Method to use when finding process IDs. Can be one of 'pgrep', or
# ## 'native'. The pgrep finder calls the pgrep executable in the PATH while
# ## the native finder performs the search directly in a manor dependent on the
# ## platform. Default is 'pgrep'
# # pid_finder = "pgrep"
# # Read metrics from storage devices supporting S.M.A.R.T.
# [[inputs.smart]]
# ## Optionally specify the path to the smartctl executable
# # path = "/usr/bin/smartctl"
#
# ## On most platforms smartctl requires root access.
# ## Setting 'use_sudo' to true will make use of sudo to run smartctl.
# ## Sudo must be configured to to allow the telegraf user to run smartctl
# ## without a password.
# # use_sudo = false
#
# ## Skip checking disks in this power mode. Defaults to
# ## "standby" to not wake up disks that have stoped rotating.
# ## See --nocheck in the man pages for smartctl.
# ## smartctl version 5.41 and 5.42 have faulty detection of
# ## power mode and might require changing this value to
# ## "never" depending on your disks.
# # nocheck = "standby"
#
# ## Gather all returned S.M.A.R.T. attribute metrics and the detailed
# ## information from each drive into the 'smart_attribute' measurement.
# # attributes = false
#
# ## Optionally specify devices to exclude from reporting.
# # excludes = [ "/dev/pass6" ]
#
# ## Optionally specify devices and device type, if unset
# ## a scan (smartctl --scan) for S.M.A.R.T. devices will
# ## done and all found will be included except for the
# ## excluded in excludes.
# # devices = [ "/dev/ada0 -d atacam" ]
#
# ## Timeout for the smartctl command to complete.
# # timeout = "30s"
# # Sysstat metrics collector
# [[inputs.sysstat]]
# ## Path to the sadc command.
# #
# ## Common Defaults:
# ## Debian/Ubuntu: /usr/lib/sysstat/sadc
# ## Arch: /usr/lib/sa/sadc
# ## RHEL/CentOS: /usr/lib64/sa/sadc
# sadc_path = "/usr/lib/sa/sadc" # required
#
# ## Path to the sadf command, if it is not in PATH
# # sadf_path = "/usr/bin/sadf"
#
# ## Activities is a list of activities, that are passed as argument to the
# ## sadc collector utility (e.g: DISK, SNMP etc...)
# ## The more activities that are added, the more data is collected.
# # activities = ["DISK"]
#
# ## Group metrics to measurements.
# ##
# ## If group is false each metric will be prefixed with a description
# ## and represents itself a measurement.
# ##
# ## If Group is true, corresponding metrics are grouped to a single measurement.
# # group = true
#
# ## Options for the sadf command. The values on the left represent the sadf
# ## options and the values on the right their description (which are used for
# ## grouping and prefixing metrics).
# ##
# ## Run 'sar -h' or 'man sar' to find out the supported options for your
# ## sysstat version.
# [inputs.sysstat.options]
# -C = "cpu"
# -B = "paging"
# -b = "io"
# -d = "disk" # requires DISK activity
# "-n ALL" = "network"
# "-P ALL" = "per_cpu"
# -q = "queue"
# -R = "mem"
# -r = "mem_util"
# -S = "swap_util"
# -u = "cpu_util"
# -v = "inode"
# -W = "swap"
# -w = "task"
# # -H = "hugepages" # only available for newer linux distributions
# # "-I ALL" = "interrupts" # requires INT activity
#
# ## Device tags can be used to add additional tags for devices.
# ## For example the configuration below adds a tag vg with value rootvg for
# ## all metrics with sda devices.
# # [[inputs.sysstat.device_tags.sda]]
# # vg = "rootvg"
# Gather systemd units state
# [[inputs.systemd_units]]
# ## Set timeout for systemctl execution
# # timeout = "1s"
# #
# ## Filter for a specific unit type, default is "service", other possible
# ## values are "socket", "target", "device", "mount", "automount", "swap",
# ## "timer", "path", "slice" and "scope ":
# unittype = "service"
# # Read metrics about temperature
[[inputs.temp]]
# no configuration
# # Reads metrics from a SSL certificate
[[inputs.x509_cert]]
## List certificate sources
#sources = ["/etc/ssl/certs/ssl-cert-snakeoil.pem", "tcp://example.org:443"]
sources = ["https://florianzirker.de:443", "https://cloud.florianzirker.de:443", "https://wallabag.florianzirker.de:443", "https://gitea.florianzirker.de:443", "https://meet.florianzirker.de:443", "https://www.feuerwehr-kapsweyer.de:443"]
## Timeout for SSL connection
# timeout = "5s"
## Pass a different name into the TLS request (Server Name Indication)
## example: server_name = "myhost.example.org"
# server_name = ""
## Optional TLS Config
# tls_ca = "/etc/telegraf/ca.pem"
# tls_cert = "/etc/telegraf/cert.pem"
# tls_key = "/etc/telegraf/key.pem"

View file

@ -0,0 +1,19 @@
# call this script like "./test-telegraf.sh net:cpu"
docker run \
--rm \
--volume $(pwd)/telegraf/telegraf.conf:/telegraf.conf \
--volume /:/hostfs:ro \
--volume /var/run/utmp:/var/run/utmp:ro \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
-e HOST_ETC=/hostfs/etc \
-e HOST_PROC=/hostfs/proc \
-e HOST_SYS=/hostfs/sys \
-e HOST_VAR=/hostfs/var \
-e HOST_RUN=/hostfs/run \
-e HOST_MOUNT_PREFIX=/hostfs \
telegraf \
telegraf \
--config /telegraf.conf \
--input-filter $1 \
--test

View file

@ -0,0 +1,25 @@
version: "3.3"
services:
app:
image: portainer/portainer-ce
volumes:
- ${VOLUMES_PATH}/portainer:/data
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
expose:
- "9000"
networks:
- web
labels:
- "traefik.enable=true"
- "traefik.http.routers.portainer.rule=Host(`portainer.${DOMAIN}`)"
- "traefik.http.routers.portainer.entrypoints=web"
- "traefik.http.services.portainer.loadbalancer.server.port=9000"
- "docker.group=selfhost"
restart: unless-stopped
networks:
web:
external: true

46
proxy/docker-compose.yaml Normal file
View file

@ -0,0 +1,46 @@
version: "3.3"
services:
traefik:
image: "traefik:v2.2"
restart: always
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "443:443"
networks:
- web
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.rule=Host(`traefik.${DOMAIN}`)"
- "traefik.http.routers.traefik.entrypoints=web"
- "traefik.http.services.traefik.loadbalancer.server.port=8080"
- "docker.group=selfhost"
extra_hosts:
- host.docker.internal:172.17.0.1
whoami:
image: containous/whoami
networks:
- web
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.${DOMAIN}`)"
- "traefik.http.routers.whoami.entrypoints=web"
- "traefik.http.services.whoami.loadbalancer.server.port=80"
- "docker.group=selfhost"
restart: unless-stopped
networks:
web:
external: true

View file

@ -0,0 +1,46 @@
version: "3.3"
services:
homeassistant:
image: homeassistant/odroid-xu-homeassistant
volumes:
- ${VOLUMES_PATH}/homeassistent:/config
environment:
- TZ=Europe/Berlin
restart: unless-stopped
network_mode: host
labels:
- "traefik.enable=true"
- "traefik.http.routers.hassi.rule=Host(`hassi.${DOMAIN}`)"
- "traefik.http.routers.hassi.entrypoints=web"
- "traefik.http.services.hassi.loadbalancer.server.port=8123"
- "docker.group=selfhost"
deconz:
image: marthoc/deconz
network_mode: host
privileged: true
restart: unless-stopped
volumes:
- ${VOLUMES_PATH}/deCONZ:/root/.local/share/dresden-elektronik/deCONZ
- /etc/localtime:/etc/localtime:ro
devices:
- /dev/ttyACM0
environment:
- DECONZ_DEVICE=/dev/ttyACM0
- DECONZ_WEB_PORT=8080
- DECONZ_WS_PORT=8443
- DEBUG_INFO=1
- DEBUG_APS=0
- DEBUG_ZCL=0
- DEBUG_ZDP=0
- DEBUG_OTAU=0
- TZ=Europe/Berlin
- UDEV=1
labels:
- "traefik.enable=true"
- "traefik.http.routers.deconz.rule=Host(`deconz.${DOMAIN}`)"
- "traefik.http.routers.deconz.entrypoints=web"
- "traefik.http.services.deconz.loadbalancer.server.port=8080"
- "docker.group=selfhost"

21
start-all.sh Normal file
View file

@ -0,0 +1,21 @@
#/bin/bash/
cd proxy/
docker-compose up -d
cd ..
cd heimdall/
docker-compose up -d
cd ..
cd portainer/
docker-compose up -d
cd ..
cd smartHome/
docker-compose up -d
cd ..
cd monitoring/
docker-compose up -d
cd ..

21
stop-all.sh Normal file
View file

@ -0,0 +1,21 @@
#/bin/bash/
cd proxy/
docker-compose down
cd ..
cd heimdall/
docker-compose down
cd ..
cd portainer/
docker-compose down
cd ..
cd smartHome/
docker-compose down
cd ..
cd monitoring/
docker-compose down
cd ..