Author SHA1 Message Date
renovate Bot 9baa6d3ebf Update redis Docker tag to v7.4.12 2026-10-26 18:01:12 +00:00
nick 177dc4e9b8 Update renovate.json 2026-10-25 18:39:26 -07:00
nick bfff462f46 Update versions.env 2026-10-25 18:36:29 -07:00
nick 44e7b97d50 Update supernote/docker-compose.yml 2026-10-25 18:34:55 -07:00
nick 15cbb391e4 Update nametag/docker-compose.yml 2026-10-25 18:34:12 -07:00
nick 4ab7fa42b3 Update grist/docker-compose.yml 2026-10-25 18:32:55 -07:00
nick b4c95f1884 Merge pull request 'Update ghcr.io/renovatebot/renovate Docker tag to v44.181.7' (#10) from renovate/ghcr.io-renovatebot-renovate-44.x into main 2026-10-25 18:12:30 -07:00
nick 4821fd4e0b Merge branch 'main' into renovate/ghcr.io-renovatebot-renovate-44.x 2026-10-25 18:12:16 -07:00
nick 1509f14334 Merge pull request 'Update ghcr.io/anomalyco/opencode Docker tag to v1.19.4' (#7) from renovate/ghcr.io-anomalyco-opencode-1.x into main 2026-10-25 18:12:05 -07:00
nick 99aee8effd Merge pull request 'Update docker.io/supernote/supernote-service Docker tag to v26.10.09' (#11) from renovate/docker.io-supernote-supernote-service-26.x into main 2026-10-25 18:11:47 -07:00
renovate Bot 6725f1dfa4 Update ghcr.io/anomalyco/opencode Docker tag to v1.19.4 2026-10-26 00:04:29 +00:00
renovate Bot db2f2d065d Update docker.io/supernote/supernote-service Docker tag to v26.10.09 2026-10-26 00:04:26 +00:00
renovate Bot 8f8544901d Update ghcr.io/renovatebot/renovate Docker tag to v44.181.7 2026-10-26 00:01:15 +00:00
nick 8efaa3a0c2 Merge pull request 'Update ghcr.io/open-webui/open-webui Docker tag to v0.12.4' (#8) from renovate/ghcr.io-open-webui-open-webui-0.x into main
Reviewed-on: #8
2026-10-25 16:19:43 -07:00
nick d372c0574d Merge branch 'main' into renovate/ghcr.io-open-webui-open-webui-0.x 2026-10-25 16:19:18 -07:00
nick 42d48e1008 Merge pull request 'Update qdrant/qdrant Docker tag to v1.20.0' (#9) from renovate/qdrant-qdrant-1.x into main
Reviewed-on: #9
2026-10-25 16:19:05 -07:00
renovate Bot dff250c882 Update qdrant/qdrant Docker tag to v1.20.0 2026-10-25 23:18:46 +00:00
renovate Bot bbbda857a1 Update ghcr.io/open-webui/open-webui Docker tag to v0.12.4 2026-10-25 23:18:36 +00:00
nick 8ae8991193 Merge pull request 'Update mariadb Docker tag to v10.6.28' (#3) from renovate/mariadb-10.x into main
Reviewed-on: #3
2026-10-25 16:16:32 -07:00
renovate Bot 90d16ca5b3 Update mariadb Docker tag to v10.6.28 2026-10-25 23:16:11 +00:00
nick 055aa25ad8 Merge pull request 'Update redis Docker tag to v7.4.11' (#4) from renovate/redis-7.x into main
Reviewed-on: #4
2026-10-25 16:14:07 -07:00
nick 7cc9ff3006 Merge pull request 'Update ghcr.io/open-webui/open-terminal Docker tag to v0.14.5' (#2) from renovate/ghcr.io-open-webui-open-terminal-0.x into main
Reviewed-on: #2
2026-10-25 16:13:40 -07:00
renovate Bot fd869927ef Update redis Docker tag to v7.4.11 2026-10-25 23:12:46 +00:00
renovate Bot 4fba04fa95 Update ghcr.io/open-webui/open-terminal Docker tag to v0.14.5 2026-10-25 23:12:39 +00:00
nick 56ea282939 Merge pull request 'Update amir20/dozzle Docker tag to v11.3.5' (#5) from renovate/amir20-dozzle-11.x into main
Reviewed-on: #5
2026-10-25 16:09:09 -07:00
renovate Bot a8d0e57dd0 Update amir20/dozzle Docker tag to v11.3.5 2026-10-25 23:00:40 +00:00
nick 86a7177f12 Merge pull request 'Stable' (#1) from stable into main
Reviewed-on: #1
2026-10-25 15:54:20 -07:00
nick ab513c2de6 Add .gitea/workflows/renovate.yml 2026-10-25 15:53:50 -07:00
nick 995f247b9b Add renovate.json 2026-10-25 15:53:08 -07:00
nick 74d41a4f49 Update versions.env 2026-10-25 15:23:53 -07:00
nick ef621bcc7b Update versions.env 2026-10-25 14:47:52 -07:00
nick ea49bdf402 Update supernote/docker-compose.yml 2026-10-25 14:39:46 -07:00
nick 85de5b7c18 Update nametag/docker-compose.yml 2026-10-25 14:38:55 -07:00
nick 124d08c0fd Update grist/docker-compose.yml 2026-10-25 14:37:57 -07:00
nick 521103a956 Update domain-watchdog/docker-compose.yml 2026-10-25 14:37:35 -07:00
nick fc31a95a4a Add versions.env 2026-10-25 14:35:35 -07:00
nick fd188df6f5 Add supernote/README.md 2026-10-25 14:16:15 -07:00
nick 41d88b2a30 Add nametag/docker-compose.yml 2026-10-25 14:12:46 -07:00
nick 172721a36b Add domain-watchdog/docker-compose.yml 2026-10-25 14:11:42 -07:00
nick 9c16ad19c6 Add supernote/docker-compose.yml 2026-10-25 14:07:34 -07:00
8 changed files with 428 additions and 1 deletions

No files matched your search

+23
View File
@@ -0,0 +1,23 @@
name: renovate
on:
schedule:
- cron: "0 */6 * * *"
workflow_dispatch:
jobs:
renovate:
runs-on: ubuntu-latest
container:
image: ghcr.io/renovatebot/renovate:44.181.7
steps:
- name: Run Renovate
run: renovate
env:
RENOVATE_PLATFORM: gitea
RENOVATE_ENDPOINT: https://git.atlashorizon.net/api/v1
RENOVATE_TOKEN: ${{ secrets.RENOVATE_TOKEN }}
RENOVATE_REPOSITORIES: AtlasHorizon/compose
RENOVATE_GIT_AUTHOR: "Renovate Bot <[email protected]>"
GITHUB_COM_TOKEN: ${{ secrets.RENOVATE_GITHUB_COM_TOKEN }}
LOG_LEVEL: info
+86
View File
@@ -0,0 +1,86 @@
# Please see https://github.com/maelgangloff/domain-watchdog
services:
domainwatchdog:
image: ${DOMAIN_WATCHDOG_IMAGE:?set in versions.env}
container_name: domainwatchdog_app
restart: unless-stopped
env_file:
- .env.local
environment:
APP_ENV: prod
SERVER_NAME: ${SERVER_NAME:-:80}
DATABASE_URL: postgresql://${POSTGRES_USER:-app}:${POSTGRES_PASSWORD:-!ChangeMe!}@database:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-app}?serverVersion=${POSTGRES_VERSION:-15}&charset=${POSTGRES_CHARSET:-utf8}
MESSENGER_ASYNC_TRANSPORT_DSN: redis://valkey:6379/messages
MESSENGER_RDAP_LOW_TRANSPORT_DSN: redis://valkey:6379/messages-rdap-low
MESSENGER_RDAP_HIGH_TRANSPORT_DSN: redis://valkey:6379/messages-rdap-high
LOCK_DSN: redis://valkey:6379
HTTP_SECURE_COOKIE: true # Change to "false" if you are using HTTP
volumes:
- caddy_data:/data
- caddy_config:/config
- ./public/content:/app/public/content
ports:
- "127.0.0.1:8080:80"
depends_on:
- database
php-worker:
image: ${DOMAIN_WATCHDOG_IMAGE:?set in versions.env}
container_name: domainwatchdog_worker
restart: always
command: php /app/bin/console messenger:consume --all --time-limit=3600 -vvv
env_file:
- .env.local
environment:
APP_ENV: prod
DATABASE_URL: postgresql://${POSTGRES_USER:-app}:${POSTGRES_PASSWORD:-!ChangeMe!}@database:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-app}?serverVersion=${POSTGRES_VERSION:-15}&charset=${POSTGRES_CHARSET:-utf8}
LOCK_DSN: redis://valkey:6379
MESSENGER_ASYNC_TRANSPORT_DSN: redis://valkey:6379/messages
MESSENGER_RDAP_LOW_TRANSPORT_DSN: redis://valkey:6379/messages-rdap-low
MESSENGER_RDAP_HIGH_TRANSPORT_DSN: redis://valkey:6379/messages-rdap-high
MESSENGER_CONSUMER_NAME: worker
depends_on:
- database
healthcheck:
test: [ ]
disable: true
database:
image: ${DOMAIN_WATCHDOG_POSTGRES_IMAGE:?set in versions.env}
container_name: domainwatchdog_db
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB:-app}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!}
POSTGRES_USER: ${POSTGRES_USER:-app}
healthcheck:
test: [ "CMD", "pg_isready", "-d", "${POSTGRES_DB:-app}", "-U", "${POSTGRES_USER:-app}" ]
timeout: 5s
retries: 5
start_period: 60s
volumes:
- database_data:/var/lib/postgresql/data:rw
valkey:
image: ${DOMAIN_WATCHDOG_VALKEY_IMAGE:?set in versions.env}
container_name: valkey
restart: always
# influxdb2:
# image: influxdb:2
# ports:
# - "127.0.0.1:8086:8086"
# environment:
# DOCKER_INFLUXDB_INIT_MODE: setup
# DOCKER_INFLUXDB_INIT_USERNAME: USERNAME # Please modify
# DOCKER_INFLUXDB_INIT_PASSWORD: PASSWORD # Please modify
# DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: my-super-secret-auth-token # Please modify
# DOCKER_INFLUXDB_INIT_RETENTION: 0
# DOCKER_INFLUXDB_INIT_ORG: domainwatchdog
# DOCKER_INFLUXDB_INIT_BUCKET: domainwatchdog
volumes:
caddy_data:
caddy_config:
database_data:
+1 -1
View File
@@ -1,6 +1,6 @@
services:
grist:
image: gristlabs/grist:latest
image: gristlabs/grist:1.7.21
restart: unless-stopped
ports:
- "8484:8484"
+133
View File
@@ -0,0 +1,133 @@
# Production Docker Compose Configuration
# Use this for production and self-hosted deployments with proper secrets management
services:
db:
image: postgres:16.15-alpine
container_name: nametag-db
restart: always
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
ports:
- "${DB_PORT:-5432}:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: [CMD-SHELL, "pg_isready -U ${DB_USER} -d ${DB_NAME}"]
interval: 10s
timeout: 5s
retries: 5
networks:
- nametag-network
redis: # Optional. Comment out to disable Redis. See README.md for more details.
image: redis:7.4.12-alpine
container_name: nametag-redis
restart: always
command: redis-server --requirepass ${REDIS_PASSWORD:?Redis password required}
ports:
- "${REDIS_PORT:-6379}:6379"
volumes:
- redis_data:/data
healthcheck:
test: [CMD, redis-cli, --raw, incr, ping]
interval: 10s
timeout: 5s
retries: 5
networks:
- nametag-network
app:
image: ghcr.io/mattogodoy/nametag:0.66.0
container_name: nametag-app
restart: unless-stopped
labels:
com.datadoghq.ad.logs: '[{"source": "nodejs", "service": "nametag"}]'
ports:
- 3000:3000
# TRUSTED_PROXY_HEADER / TRUSTED_PROXY_COUNT (see .env.example /
# docs/self-hosting/reverse-proxy.md) only protect rate limiting if
# this port cannot be reached except through your reverse proxy.
# Publishing it on all interfaces, as above, lets anyone who can reach
# the host bypass the proxy (and the header it sets) entirely. If you
# run a reverse proxy in front of Nametag (recommended for any
# instance reachable from outside your own network), bind this to
# localhost instead so only the proxy on the same host can reach it:
# - "127.0.0.1:3000:3000"
env_file:
- .env
volumes:
- photo_data:/app/data/photos
depends_on:
db:
condition: service_healthy
redis: # Optional. Comment out to disable Redis. See README.md for more details.
condition: service_healthy
healthcheck:
test: [CMD, wget, -q, --spider, http://localhost:3000/api/health]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- nametag-network
- proxy
# Database backup service
backup:
image: prodrigestivill/postgres-backup-local:16-alpine
container_name: nametag-backup
restart: always
environment:
- POSTGRES_HOST=db
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
- SCHEDULE=@daily
- BACKUP_KEEP_DAYS=7
- BACKUP_KEEP_WEEKS=4
- BACKUP_KEEP_MONTHS=6
- HEALTHCHECK_PORT=8080
volumes:
- ./backups:/backups
depends_on:
- db
networks:
- nametag-network
# Cron service for scheduled jobs
cron:
image: alpine:3.24.3
container_name: nametag-cron
restart: always
environment:
- CRON_SECRET=${CRON_SECRET}
depends_on:
- app
command: >
sh -c "
echo '0 8 * * * wget -q -O - --header=\"Authorization: Bearer '\"$$CRON_SECRET\"'\" http://app:3000/api/cron/send-reminders > /proc/1/fd/1 2>&1' > /etc/crontabs/root &&
echo '0 3 * * * wget -q -O - --header=\"Authorization: Bearer '\"$$CRON_SECRET\"'\" http://app:3000/api/cron/purge-deleted > /proc/1/fd/1 2>&1' >> /etc/crontabs/root &&
echo '0 2,10,18 * * * wget -q -O - --header=\"Authorization: Bearer '\"$$CRON_SECRET\"'\" http://app:3000/api/cron/carddav-sync > /proc/1/fd/1 2>&1' >> /etc/crontabs/root &&
echo '*/5 * * * * wget -q -O - --header=\"Authorization: Bearer '\"$$CRON_SECRET\"'\" http://app:3000/api/cron/geocode > /proc/1/fd/1 2>&1' >> /etc/crontabs/root &&
crond -f -l 2
"
networks:
- nametag-network
volumes:
postgres_data:
driver: local
redis_data: # Optional. Comment out to disable Redis. See README.md for more details.
driver: local
photo_data:
driver: local
networks:
nametag-network:
external: true
name: nametag-network
proxy: # for reverse proxy (e.g., Nginx Proxy Manager) to access the app without exposing ports to the outside world
external: true
+39
View File
@@ -0,0 +1,39 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"customManagers": [
{
"customType": "regex",
"description": "Image tags in versions.env. The variable name is the display name, so PRs say which app they are for; the image is what gets looked up.",
"managerFilePatterns": ["/^versions\\.env$/"],
"matchStrings": [
"(?:^|\\n)(?<depName>[A-Z0-9_]+_IMAGE)=(?<packageName>[^:\\s]+):(?<currentValue>[^\\s@]+)"
],
"datasourceTemplate": "docker"
}
],
"packageRules": [
{
"description": "Name both the variable and the image in versions.env PR titles",
"matchManagers": ["custom.regex"],
"commitMessageTopic": "{{{depName}}} ({{{packageName}}})"
},
{
"description": "Database majors need a dump/restore, so never propose them",
"matchPackageNames": ["postgres", "prodrigestivill/postgres-backup-local"],
"matchUpdateTypes": ["major"],
"enabled": false
},
{
"description": "Stay on the 10.6 LTS line; 10.11 is effectively a major upgrade",
"matchPackageNames": ["mariadb"],
"allowedVersions": "/^10\\.6\\./"
},
{
"matchPackageNames": ["amir20/dozzle"],
"prBodyNotes": [
"Also bump the Dozzle agents on the TrueNAS hosts to the same tag. The hub and agents share the TLS pair baked into the image."
]
}
]
}
+30
View File
@@ -0,0 +1,30 @@
# Supernote Private Cloud
Copied from Supernote's official
[docker-compose.yml](https://supernote-private-cloud.supernote.com/cloud/docker-compose.yml),
with these changes:
- **Database init scripts are mounted.** The official file doesn't mount
anything into `docker-entrypoint-initdb.d`, so `supernotedb.sql` never
loads into a new database. This file mounts:
- `supernotedb.sql` → `00-supernotedb.sql` (the schema)
- `supernote-email-init.sql` → `01-supernote-email-init.sql`
- **SMTP settings are pre-loaded.** `supernote-email-init.sql` fills in
`u_email_config`. Registration and password-reset emails then work without
a manual trip to the web UI's "Email Settings" dialog.
- **Database and Redis settings are inline.** The official file loads
`supernote-service`'s `DB_HOSTNAME`, `MYSQL_*` and `REDIS_*` variables from
a separate `.dbenv` file. Here they're set directly in the compose file,
from the same `.env` that mariadb and redis use.
## Notes
- **Init scripts only run once.** They run only against an empty
`sndata/db_data`. The playbook re-applies the SMTP settings with
`docker compose exec` on every run, so changing them in Infisical still
takes effect.
- **Image versions are pinned** (`mariadb:10.6.24`, `redis:7.4.7`,
`notelib:6.9.3`, `supernote-service:26.06.04`). To upgrade, change the tags
here and push to `stable`.
- **Check Supernote's file when upgrading.** Compare against the official
file in case they've added services or variables.
+89
View File
@@ -0,0 +1,89 @@
services:
mariadb:
image: mariadb:10.6.28
container_name: mariadb
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: supernotedb
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
TZ: ${TZ:-UTC}
command: --skip-name-resolve --bind-address=0.0.0.0
volumes:
- ./sndata/db_data:/var/lib/mysql
- ./sndata/config/mysql/conf.d:/etc/mysql/conf.d:ro
- ./supernotedb.sql:/docker-entrypoint-initdb.d/00-supernotedb.sql:ro
- ./supernote-email-init.sql:/docker-entrypoint-initdb.d/01-supernote-email-init.sql:ro
- /etc/localtime:/etc/localtime:ro
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -u root -p$$MYSQL_ROOT_PASSWORD || exit 1"]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
restart: unless-stopped
redis:
image: redis:7.4.12
container_name: redis
environment:
TZ: ${TZ:-UTC}
command: ["redis-server", "--requirepass", "${REDIS_PASSWORD}"]
volumes:
- ./sndata/redis_data:/data
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 3
notelib:
image: docker.io/supernote/notelib:6.9.3
container_name: notelib
environment:
TZ: ${TZ:-UTC}
volumes:
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
supernote-service:
image: docker.io/supernote/supernote-service:26.10.09
container_name: supernote-service
depends_on:
mariadb:
condition: service_healthy
redis:
condition: service_healthy
ports:
- "19071:19071"
- "18072:18072"
- "${FRONTEND_PORT:-19072}:8080"
- "${DOMAIN_PORT:-8199}:8080"
environment:
EXTERNAL_PORT_BACKEND: "19071"
EXTERNAL_PORT_FRONTEND: ${FRONTEND_PORT:-19072}
EXTERNAL_PORT_DOMAIN: ${DOMAIN_PORT:-8199}
TZ: ${TZ:-UTC}
DB_HOSTNAME: mariadb
MYSQL_DATABASE: supernotedb
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: ${REDIS_PASSWORD}
volumes:
- ./sndata/recycle:/home/supernote/recycle
- ./supernote_data:/home/supernote/data
- ./sndata/logs/cloud:/home/supernote/cloud/logs
- ./sndata/logs/app:/home/supernote/logs
- ./sndata/logs/web:/var/log/nginx
- ./sndata/convert:/home/supernote/convert
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
+27
View File
@@ -0,0 +1,27 @@
# --- monitor (Flatcar) ---
# The hub and agents share the TLS pair baked into the image, so this must
# match the agent tag on ai, oswald_runner, oswl_connector and the TrueNAS hosts.
DOZZLE_IMAGE=amir20/dozzle:v11.3.5
ALERTA_IMAGE=alerta/alerta-web:9.1.0
# --- ai (Flatcar) ---
GITEA_MCP_IMAGE=docker.gitea.com/gitea-mcp-server:1.11.0
LITELLM_IMAGE=docker.litellm.ai/berriai/litellm:v1.106.4
QDRANT_IMAGE=qdrant/qdrant:v1.20.0
OPEN_TERMINAL_IMAGE=ghcr.io/open-webui/open-terminal:0.14.5
OPEN_WEBUI_IMAGE=ghcr.io/open-webui/open-webui:v0.12.4
OPENCODE_IMAGE=ghcr.io/anomalyco/opencode:1.19.4
# --- oswald_runner (Flatcar) ---
GITEA_RUNNER_IMAGE=docker.io/gitea/runner:3.5.0
N8N_IMAGE=docker.n8n.io/n8nio/n8n:2.40.5
CISA_KEV_RSS_IMAGE=ghcr.io/xsaveopt/cisa-kev-rss:0.0.5
DOMAIN_WATCHDOG_IMAGE=maelgangloff/domain-watchdog:v1.4.6
# Major must match POSTGRES_VERSION in domain-watchdog's .env (used in DATABASE_URL).
DOMAIN_WATCHDOG_POSTGRES_IMAGE=postgres:16.15-alpine
DOMAIN_WATCHDOG_VALKEY_IMAGE=valkey/valkey:9.1.2
# Domain Watchdog here shares DOMAIN_WATCHDOG_IMAGE and
# DOMAIN_WATCHDOG_VALKEY_IMAGE with the compose deployment.
# --- oswl_connector (Flatcar) ---
TAILSCALE_IMAGE=docker.io/tailscale/tailscale:v1.104.2