Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 29 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,25 @@ PORTAINER_OAUTH_CLIENT_SECRET=
# -----------------------------------------------------------------------------
# DATABASES (shared stack)
# -----------------------------------------------------------------------------
POSTGRES_PASSWORD= # REQUIRED: master postgres password
POSTGRES_ROOT_PASSWORD= # REQUIRED: master postgres password
REDIS_PASSWORD= # REQUIRED
MARIADB_ROOT_PASSWORD= # REQUIRED

PGADMIN_EMAIL= # REQUIRED: pgAdmin default email
PGADMIN_PASSWORD= # REQUIRED: pgAdmin default password

# Per-service database credentials
GITEA_DB_PASSWORD=
NEXTCLOUD_DB_PASSWORD=
OUTLINE_DB_PASSWORD=
AUTHENTIK_DB_PASSWORD=

# Productivity extra credentials
OUTLINE_SECRET_KEY= # REQUIRED: openssl rand -hex 32
OUTLINE_UTILS_SECRET= # REQUIRED: openssl rand -hex 32
GITEA_RUNNER_TOKEN= # REQUIRED for Gitea Actions
GRAFANA_DB_PASSWORD=

# -----------------------------------------------------------------------------
# GRAFANA
# -----------------------------------------------------------------------------
Expand Down Expand Up @@ -103,6 +112,11 @@ OLLAMA_GPU_ENABLED=false # Set to true if you have NVIDIA GPU
# -----------------------------------------------------------------------------
# NOTIFICATIONS
# -----------------------------------------------------------------------------
SMTP_HOST=
SMTP_PORT=
SMTP_USER=
SMTP_PASS=

GOTIFY_PASSWORD= # REQUIRED
NTFY_AUTH_ENABLED=true

Expand All @@ -120,3 +134,17 @@ DOCKER_PROXY_ENABLED=false
CN_MODE=false
CN_APT_MIRROR=https://mirrors.aliyun.com/ubuntu
CN_DOCKER_MIRROR=https://docker.m.daocloud.io

# -----------------------------------------------------------------------------
# BACKUP & RECOVERY
# -----------------------------------------------------------------------------
BACKUP_TARGET=local # local | s3 | b2 | sftp
RESTIC_PASSWORD= # REQUIRED: Strong password for restic repo
RESTIC_REPOSITORY=rest:http://localhost:8000/ # e.g., rest:http://localhost:8000/, s3:s3.amazonaws.com/bucket/repo
# Cloud storage credentials (if using s3/b2/r2)
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
# SFTP credentials (if using sftp)
SFTP_USER=
SFTP_HOST=
SFTP_PATH=
4 changes: 4 additions & 0 deletions config/alertmanager/alertmanager.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ receivers:
# slack_configs:
# - api_url: YOUR_SLACK_WEBHOOK
# channel: #alerts
- name: ntfy
webhook_configs:
- url: 'https://ntfy.${DOMAIN}/homelab-alerts'
send_resolved: true

inhibit_rules:
- source_match:
Expand Down
8 changes: 8 additions & 0 deletions config/cn-mirrors.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
mirrors:
gcr.io/cadvisor/cadvisor: m.daocloud.io/gcr.io/cadvisor/cadvisor
ghcr.io/goauthentik/server: m.daocloud.io/ghcr.io/goauthentik/server
ghcr.io/open-webui/open-webui: m.daocloud.io/ghcr.io/open-webui/open-webui
ghcr.io/abiosoft/sd-webui-docker: m.daocloud.io/ghcr.io/abiosoft/sd-webui-docker
ghcr.io/ajnart/homarr: m.daocloud.io/ghcr.io/ajnart/homarr
ghcr.io/gethomepage/homepage: m.daocloud.io/ghcr.io/gethomepage/homepage
lscr.io/linuxserver/bookstack: m.daocloud.io/lscr.io/linuxserver/bookstack
284 changes: 284 additions & 0 deletions config/grafana/dashboards/13639.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,284 @@
{
"__inputs": [
{
"name": "DS_LOKI",
"label": "Loki",
"description": "",
"type": "datasource",
"pluginId": "loki",
"pluginName": "Loki"
}
],
"__requires": [
{
"type": "grafana",
"id": "grafana",
"name": "Grafana",
"version": "7.1.0"
},
{
"type": "panel",
"id": "graph",
"name": "Graph",
"version": ""
},
{
"type": "panel",
"id": "logs",
"name": "Logs",
"version": ""
},
{
"type": "datasource",
"id": "loki",
"name": "Loki",
"version": "1.0.0"
}
],
"annotations": {
"list": [
{
"$$hashKey": "object:75",
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"description": "Log Viewer Dashboard for Loki",
"editable": false,
"gnetId": 13639,
"graphTooltip": 0,
"id": null,
"iteration": 1608932746420,
"links": [
{
"$$hashKey": "object:59",
"icon": "bolt",
"includeVars": true,
"keepTime": true,
"tags": [],
"targetBlank": true,
"title": "View In Explore",
"type": "link",
"url": "/explore?orgId=1&left=[\"now-1h\",\"now\",\"Loki\",{\"expr\":\"{job=\\\"$app\\\"}\"},{\"ui\":[true,true,true,\"none\"]}]"
},
{
"$$hashKey": "object:61",
"icon": "external link",
"tags": [],
"targetBlank": true,
"title": "Learn LogQL",
"type": "link",
"url": "https://grafana.com/docs/loki/latest/logql/"
}
],
"panels": [
{
"aliasColors": {},
"bars": true,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_LOKI}",
"fieldConfig": {
"defaults": {
"custom": {},
"links": []
},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 3,
"w": 24,
"x": 0,
"y": 0
},
"hiddenSeries": false,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": false,
"total": false,
"values": false
},
"lines": false,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pluginVersion": "7.1.0",
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "sum(count_over_time({job=\"$app\"} |= \"$search\" [$__interval]))",
"legendFormat": "",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"$$hashKey": "object:168",
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
},
{
"$$hashKey": "object:169",
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"datasource": "${DS_LOKI}",
"fieldConfig": {
"defaults": {
"custom": {}
},
"overrides": []
},
"gridPos": {
"h": 25,
"w": 24,
"x": 0,
"y": 3
},
"id": 2,
"maxDataPoints": "",
"options": {
"showLabels": false,
"showTime": true,
"sortOrder": "Descending",
"wrapLogMessage": false
},
"targets": [
{
"expr": "{job=\"$app\"} |= \"$search\" | logfmt",
"hide": false,
"legendFormat": "",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "",
"transparent": true,
"type": "logs"
}
],
"refresh": false,
"schemaVersion": 26,
"style": "dark",
"tags": [],
"templating": {
"list": [
{
"allValue": null,
"current": {},
"datasource": "${DS_LOKI}",
"definition": "label_values(job)",
"hide": 0,
"includeAll": false,
"label": "App",
"multi": false,
"name": "app",
"options": [],
"query": "label_values(job)",
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"sort": 0,
"tagValuesQuery": "",
"tags": [],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"current": {
"selected": false,
"text": "",
"value": ""
},
"hide": 0,
"label": "String Match",
"name": "search",
"options": [
{
"selected": true,
"text": "",
"value": ""
}
],
"query": "",
"skipUrlSync": false,
"type": "textbox"
}
]
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"hidden": false,
"refresh_intervals": [
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
]
},
"timezone": "",
"title": "Logs / App",
"uid": "sadlil-loki-apps-dashboard",
"version": 13
}
Loading