Compare commits
42
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
68ba36caf0 | ||
|
|
94b7bbfc36 | ||
|
|
93a3bc0887 | ||
|
|
177dc4e9b8 | ||
|
|
bfff462f46 | ||
|
|
44e7b97d50 | ||
|
|
15cbb391e4 | ||
|
|
4ab7fa42b3 | ||
|
|
b4c95f1884 | ||
|
|
4821fd4e0b | ||
|
|
1509f14334 | ||
|
|
99aee8effd | ||
|
|
6725f1dfa4 | ||
|
|
db2f2d065d | ||
|
|
8f8544901d | ||
|
|
8efaa3a0c2 | ||
|
|
d372c0574d | ||
|
|
42d48e1008 | ||
|
|
dff250c882 | ||
|
|
bbbda857a1 | ||
|
|
8ae8991193 | ||
|
|
90d16ca5b3 | ||
|
|
055aa25ad8 | ||
|
|
7cc9ff3006 | ||
|
|
fd869927ef | ||
|
|
4fba04fa95 | ||
|
|
56ea282939 | ||
|
|
a8d0e57dd0 | ||
|
|
86a7177f12 | ||
|
|
ab513c2de6 | ||
|
|
995f247b9b | ||
|
|
74d41a4f49 | ||
|
|
ef621bcc7b | ||
|
|
ea49bdf402 | ||
|
|
85de5b7c18 | ||
|
|
124d08c0fd | ||
|
|
521103a956 | ||
|
|
fc31a95a4a | ||
|
|
fd188df6f5 | ||
|
|
41d88b2a30 | ||
|
|
172721a36b | ||
|
|
9c16ad19c6 |
No files matched your search
@@ -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
|
||||||
@@ -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,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
grist:
|
grist:
|
||||||
image: gristlabs/grist:latest
|
image: gristlabs/grist:1.7.21
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "8484:8484"
|
- "8484:8484"
|
||||||
|
|||||||
@@ -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.11-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
|
||||||
@@ -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."
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -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.
|
||||||
@@ -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.11
|
||||||
|
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"
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# --- 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:2.2.5
|
||||||
|
|
||||||
|
# --- 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
|
||||||
|
|
||||||
|
# --- utility (Flatcar) ---
|
||||||
|
# cturra/ntp only publishes "latest", so it is pinned by digest (2025-11-30 build).
|
||||||
|
NTP_IMAGE=cturra/ntp@sha256:7224d4e7c7833aabbcb7dd70c46c8a8dcccda365314c6db047b9b10403ace3bc
|
||||||
|
APT_CACHER_NG_IMAGE=mbentley/apt-cacher-ng:trixie-20261026
|
||||||
|
REGISTRY_CACHE_IMAGE=registry:3.1.2
|
||||||
|
|
||||||
|
# --- phpipam (Flatcar) ---
|
||||||
|
PHPIPAM_WWW_IMAGE=phpipam/phpipam-www:v1.8.3
|
||||||
|
PHPIPAM_CRON_IMAGE=phpipam/phpipam-cron:v1.8.3
|
||||||
Reference in new issue
Block a user