2025-10-25 13:52:01 +02:00
|
|
|
name: "docker.compose"
|
|
|
|
|
version: "1.0.0"
|
|
|
|
|
description: "Valknar's Stacks"
|
|
|
|
|
author: "valknar@pivoine.art"
|
|
|
|
|
license: "private"
|
|
|
|
|
|
|
|
|
|
envs:
|
|
|
|
|
default:
|
|
|
|
|
# Common
|
|
|
|
|
ADMIN_EMAIL: valknar@pivoine.art
|
2025-10-26 11:05:19 +01:00
|
|
|
NETWORK_NAME: falcon_network
|
2025-10-25 13:52:01 +02:00
|
|
|
TIMEZONE: Europe/Berlin
|
2025-11-09 02:50:40 +01:00
|
|
|
EMAIL_FROM: hi@pivoine.art
|
2025-10-25 13:52:01 +02:00
|
|
|
# Core
|
|
|
|
|
CORE_COMPOSE_PROJECT_NAME: core
|
|
|
|
|
CORE_DB_HOST: postgres
|
|
|
|
|
CORE_DB_PORT: 5432
|
|
|
|
|
CORE_REDIS_HOST: redis
|
|
|
|
|
CORE_REDIS_PORT: 6379
|
|
|
|
|
CORE_REDIS_IMAGE: redis:7-alpine
|
2025-11-08 22:31:58 +01:00
|
|
|
CORE_POSTGRES_IMAGE: postgres:16-alpine
|
2025-10-25 13:52:01 +02:00
|
|
|
# VPN
|
|
|
|
|
VPN_TRAEFIK_ENABLED: true
|
|
|
|
|
VPN_COMPOSE_PROJECT_NAME: vpn
|
|
|
|
|
VPN_DOCKER_IMAGE: ghcr.io/wg-easy/wg-easy:latest
|
|
|
|
|
VPN_TRAEFIK_HOST: vpn.pivoine.art
|
|
|
|
|
# Track
|
|
|
|
|
TRACK_TRAEFIK_ENABLED: true
|
|
|
|
|
TRACK_COMPOSE_PROJECT_NAME: track
|
|
|
|
|
TRACK_DOCKER_IMAGE: ghcr.io/umami-software/umami:postgresql-latest
|
2025-10-26 11:52:01 +01:00
|
|
|
TRACK_TRAEFIK_HOST: umami.pivoine.art
|
2025-10-25 13:52:01 +02:00
|
|
|
TRACK_DB_NAME: umami
|
2025-10-26 17:05:56 +01:00
|
|
|
# AWSM
|
|
|
|
|
AWESOME_TRAEFIK_ENABLED: true
|
|
|
|
|
AWESOME_COMPOSE_PROJECT_NAME: awesome
|
|
|
|
|
AWESOME_TRAEFIK_HOST: awesome.pivoine.art
|
2025-10-25 13:52:01 +02:00
|
|
|
# Sexy
|
|
|
|
|
SEXY_TRAEFIK_ENABLED: true
|
|
|
|
|
SEXY_COMPOSE_PROJECT_NAME: sexy
|
|
|
|
|
SEXY_TRAEFIK_HOST: sexy.pivoine.art
|
|
|
|
|
SEXY_DIRECTUS_IMAGE: directus/directus:11.12.0
|
2025-10-26 10:54:01 +01:00
|
|
|
SEXY_FRONTEND_IMAGE: ghcr.io/valknarxxx/sexy:latest
|
2025-10-25 13:52:01 +02:00
|
|
|
SEXY_DB_NAME: directus
|
|
|
|
|
SEXY_PUBLIC_URL: https://sexy.pivoine.art/api
|
|
|
|
|
SEXY_CORS_ORIGIN: https://sexy.pivoine.art
|
|
|
|
|
SEXY_SESSION_COOKIE_DOMAIN: sexy.pivoine.art
|
|
|
|
|
SEXY_CONTENT_SECURITY_POLICY_DIRECTIVES__FRAME_SRC: https://sexy.pivoine.art
|
|
|
|
|
SEXY_USER_REGISTER_URL_ALLOW_LIST: https://sexy.pivoine.art/signup/verify
|
|
|
|
|
SEXY_PASSWORD_RESET_URL_ALLOW_LIST: https://sexy.pivoine.art/password/reset
|
2025-10-26 12:33:05 +01:00
|
|
|
SEXY_FRONTEND_PUBLIC_API_URL: https://sexy.pivoine.art/api
|
|
|
|
|
SEXY_FRONTEND_PUBLIC_URL: https://sexy.pivoine.art
|
2025-11-08 19:43:11 +01:00
|
|
|
# Mattermost
|
|
|
|
|
MATTERMOST_TRAEFIK_ENABLED: true
|
|
|
|
|
MATTERMOST_COMPOSE_PROJECT_NAME: mattermost
|
|
|
|
|
MATTERMOST_IMAGE: mattermost/mattermost-team-edition:latest
|
|
|
|
|
MATTERMOST_TRAEFIK_HOST: mattermost.pivoine.art
|
|
|
|
|
MATTERMOST_DB_NAME: mattermost
|
2025-11-08 20:54:48 +01:00
|
|
|
# Tandoor
|
|
|
|
|
TANDOOR_TRAEFIK_ENABLED: true
|
|
|
|
|
TANDOOR_COMPOSE_PROJECT_NAME: tandoor
|
|
|
|
|
TANDOOR_IMAGE: vabene1111/recipes:latest
|
|
|
|
|
TANDOOR_TRAEFIK_HOST: tandoor.pivoine.art
|
|
|
|
|
TANDOOR_DB_NAME: tandoor
|
|
|
|
|
TANDOOR_ENABLE_SIGNUP: 0
|
|
|
|
|
TANDOOR_REVERSE_PROXY_AUTH: 0
|
|
|
|
|
TANDOOR_EMAIL_USE_TLS: 0
|
|
|
|
|
TANDOOR_EMAIL_USE_SSL: 1
|
|
|
|
|
TANDOOR_GUNICORN_MEDIA: 0
|
|
|
|
|
TANDOOR_COMMENT_PREF_DEFAULT: 1
|
|
|
|
|
TANDOOR_SHOPPING_MIN_AUTOSYNC_INTERVAL: 5
|
feat: add Scrapy, n8n, and Filestash stacks to Falcon
Added three new service stacks to the docker-compose infrastructure:
- **Scrapy stack** (scrapy.pivoine.art):
- scrapyd: Web scraping daemon with web interface (port 6800)
- scrapy: Development container for spider commands
- scrapyrt: Real-time API for running spiders (port 9080)
- **n8n stack** (n8n.pivoine.art):
- Workflow automation platform with PostgreSQL backend
- 200+ integrations for automated tasks
- Runners enabled for task execution
- Webhook support for external triggers
- **Filestash stack** (stash.pivoine.art):
- Web-based file manager with multi-backend support
- Supports SFTP, S3, Dropbox, Google Drive, FTP, WebDAV
- In-browser file viewing and media playback
Infrastructure updates:
- Updated PostgreSQL init script to create n8n database
- Added environment variables to arty.yml for all three stacks
- Updated compose.yaml include list
- Updated CLAUDE.md and README.md documentation
- Normalized service names in existing stacks (gotify, proxy, umami, vpn)
All services integrated with Traefik for SSL termination and include
Watchtower auto-update labels.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 22:36:13 +01:00
|
|
|
# Scrapy
|
|
|
|
|
SCRAPY_TRAEFIK_ENABLED: true
|
|
|
|
|
SCRAPY_COMPOSE_PROJECT_NAME: scrapy
|
|
|
|
|
SCRAPY_SCRAPYD_IMAGE: vimagick/scrapyd
|
|
|
|
|
SCRAPY_IMAGE: vimagick/scrapyd
|
|
|
|
|
SCRAPY_SCRAPYRT_IMAGE: vimagick/scrapyd
|
2025-11-05 06:43:42 +01:00
|
|
|
SCRAPY_UI_IMAGE: ghcr.io/valknarness/scrapy-ui:main
|
feat: add Scrapy, n8n, and Filestash stacks to Falcon
Added three new service stacks to the docker-compose infrastructure:
- **Scrapy stack** (scrapy.pivoine.art):
- scrapyd: Web scraping daemon with web interface (port 6800)
- scrapy: Development container for spider commands
- scrapyrt: Real-time API for running spiders (port 9080)
- **n8n stack** (n8n.pivoine.art):
- Workflow automation platform with PostgreSQL backend
- 200+ integrations for automated tasks
- Runners enabled for task execution
- Webhook support for external triggers
- **Filestash stack** (stash.pivoine.art):
- Web-based file manager with multi-backend support
- Supports SFTP, S3, Dropbox, Google Drive, FTP, WebDAV
- In-browser file viewing and media playback
Infrastructure updates:
- Updated PostgreSQL init script to create n8n database
- Added environment variables to arty.yml for all three stacks
- Updated compose.yaml include list
- Updated CLAUDE.md and README.md documentation
- Normalized service names in existing stacks (gotify, proxy, umami, vpn)
All services integrated with Traefik for SSL termination and include
Watchtower auto-update labels.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 22:36:13 +01:00
|
|
|
SCRAPY_TRAEFIK_HOST: scrapy.pivoine.art
|
|
|
|
|
SCRAPY_SCRAPYD_PORT: 6800
|
|
|
|
|
SCRAPY_SCRAPYRT_PORT: 9080
|
2025-11-05 06:43:42 +01:00
|
|
|
SCRAPY_UI_SCRAPYD_URL: https://scrapy.pivoine.art/scrapyd
|
feat: add Scrapy, n8n, and Filestash stacks to Falcon
Added three new service stacks to the docker-compose infrastructure:
- **Scrapy stack** (scrapy.pivoine.art):
- scrapyd: Web scraping daemon with web interface (port 6800)
- scrapy: Development container for spider commands
- scrapyrt: Real-time API for running spiders (port 9080)
- **n8n stack** (n8n.pivoine.art):
- Workflow automation platform with PostgreSQL backend
- 200+ integrations for automated tasks
- Runners enabled for task execution
- Webhook support for external triggers
- **Filestash stack** (stash.pivoine.art):
- Web-based file manager with multi-backend support
- Supports SFTP, S3, Dropbox, Google Drive, FTP, WebDAV
- In-browser file viewing and media playback
Infrastructure updates:
- Updated PostgreSQL init script to create n8n database
- Added environment variables to arty.yml for all three stacks
- Updated compose.yaml include list
- Updated CLAUDE.md and README.md documentation
- Normalized service names in existing stacks (gotify, proxy, umami, vpn)
All services integrated with Traefik for SSL termination and include
Watchtower auto-update labels.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 22:36:13 +01:00
|
|
|
# n8n
|
|
|
|
|
N8N_TRAEFIK_ENABLED: true
|
|
|
|
|
N8N_COMPOSE_PROJECT_NAME: n8n
|
|
|
|
|
N8N_IMAGE: docker.n8n.io/n8nio/n8n
|
|
|
|
|
N8N_TRAEFIK_HOST: n8n.pivoine.art
|
|
|
|
|
N8N_PORT: 5678
|
|
|
|
|
N8N_DB_NAME: n8n
|
|
|
|
|
N8N_DB_SCHEMA: public
|
|
|
|
|
# Filestash
|
|
|
|
|
STASH_TRAEFIK_ENABLED: true
|
|
|
|
|
STASH_COMPOSE_PROJECT_NAME: stash
|
|
|
|
|
STASH_IMAGE: machines/filestash:latest
|
|
|
|
|
STASH_TRAEFIK_HOST: stash.pivoine.art
|
|
|
|
|
STASH_PORT: 8334
|
|
|
|
|
STASH_CANARY: true
|
2025-11-06 07:49:49 +01:00
|
|
|
# Linkwarden
|
|
|
|
|
LINKS_TRAEFIK_ENABLED: true
|
|
|
|
|
LINKS_COMPOSE_PROJECT_NAME: links
|
|
|
|
|
LINKS_DOCKER_IMAGE: ghcr.io/linkwarden/linkwarden:latest
|
|
|
|
|
LINKS_TRAEFIK_HOST: links.pivoine.art
|
|
|
|
|
LINKS_DB_NAME: linkwarden
|
|
|
|
|
LINKS_MEILI_IMAGE: getmeili/meilisearch:v1.12.8
|
|
|
|
|
LINKS_MEILI_NO_ANALYTICS: true
|
2025-11-06 10:13:07 +01:00
|
|
|
# Restic
|
|
|
|
|
RESTIC_TRAEFIK_ENABLED: true
|
|
|
|
|
RESTIC_COMPOSE_PROJECT_NAME: restic
|
|
|
|
|
RESTIC_IMAGE: garethgeorge/backrest:latest
|
|
|
|
|
RESTIC_TRAEFIK_HOST: restic.pivoine.art
|
|
|
|
|
RESTIC_HOSTNAME: falcon
|
|
|
|
|
RESTIC_BACKUP_PATH: /mnt/hidrive/users/valknar/Backup
|
2025-11-06 11:15:12 +01:00
|
|
|
# Vault
|
|
|
|
|
VAULT_TRAEFIK_ENABLED: true
|
|
|
|
|
VAULT_COMPOSE_PROJECT_NAME: vault
|
|
|
|
|
VAULT_IMAGE: vaultwarden/server:latest
|
|
|
|
|
VAULT_TRAEFIK_HOST: vault.pivoine.art
|
|
|
|
|
VAULT_WEBSOCKET_ENABLED: true
|
2025-11-06 12:24:07 +01:00
|
|
|
VAULT_SIGNUPS_ALLOWED: true
|
2025-11-06 11:15:12 +01:00
|
|
|
VAULT_INVITATIONS_ALLOWED: true
|
|
|
|
|
VAULT_SHOW_PASSWORD_HINT: false
|
2025-11-06 12:24:07 +01:00
|
|
|
# Joplin
|
|
|
|
|
JOPLIN_TRAEFIK_ENABLED: true
|
|
|
|
|
JOPLIN_COMPOSE_PROJECT_NAME: joplin
|
|
|
|
|
JOPLIN_IMAGE: joplin/server:latest
|
|
|
|
|
JOPLIN_TRAEFIK_HOST: joplin.pivoine.art
|
|
|
|
|
JOPLIN_APP_PORT: 22300
|
|
|
|
|
JOPLIN_DB_NAME: joplin
|
2025-11-07 11:36:20 +01:00
|
|
|
# Kit (combines Vert and Paint with landing page)
|
2025-11-07 10:12:49 +01:00
|
|
|
KIT_TRAEFIK_ENABLED: true
|
|
|
|
|
KIT_COMPOSE_PROJECT_NAME: kit
|
2025-11-07 11:36:20 +01:00
|
|
|
KIT_TRAEFIK_HOST: kit.pivoine.art
|
|
|
|
|
KIT_LANDING_IMAGE: ghcr.io/valknarness/kit-ui:latest
|
2025-11-07 10:12:49 +01:00
|
|
|
KIT_VERT_IMAGE: ghcr.io/vert-sh/vert:latest
|
2025-11-07 10:26:30 +01:00
|
|
|
KIT_VERT_TRAEFIK_HOST: vert.kit.pivoine.art
|
|
|
|
|
KIT_PAINT_TRAEFIK_HOST: paint.kit.pivoine.art
|
2025-11-07 14:43:50 +01:00
|
|
|
KIT_PASTEL_API_IMAGE: ghcr.io/valknarness/pastel-api:latest
|
|
|
|
|
KIT_PASTEL_UI_IMAGE: ghcr.io/valknarness/pastel-ui:latest
|
|
|
|
|
KIT_PASTEL_TRAEFIK_HOST: pastel.kit.pivoine.art
|
2025-11-07 19:09:05 +01:00
|
|
|
KIT_STIRLING_IMAGE: frooodle/s-pdf:latest
|
|
|
|
|
KIT_STIRLING_TRAEFIK_HOST: stirling.kit.pivoine.art
|
2025-11-08 10:40:30 +01:00
|
|
|
KIT_UNITS_IMAGE: ghcr.io/valknarness/units-ui:latest
|
|
|
|
|
KIT_UNITS_TRAEFIK_HOST: units.kit.pivoine.art
|
2025-11-08 17:32:12 +01:00
|
|
|
KIT_DRAW_IMAGE: excalidraw/excalidraw:latest
|
|
|
|
|
KIT_DRAW_TRAEFIK_HOST: draw.kit.pivoine.art
|
2025-11-06 20:36:01 +01:00
|
|
|
# Jellyfin
|
|
|
|
|
JELLY_TRAEFIK_ENABLED: true
|
|
|
|
|
JELLY_COMPOSE_PROJECT_NAME: jelly
|
|
|
|
|
JELLY_TRAEFIK_HOST: jelly.pivoine.art
|
2025-11-06 21:22:12 +01:00
|
|
|
# PairDrop
|
|
|
|
|
DROP_TRAEFIK_ENABLED: true
|
|
|
|
|
DROP_COMPOSE_PROJECT_NAME: drop
|
|
|
|
|
DROP_TRAEFIK_HOST: drop.pivoine.art
|
feat: add Netdata monitoring stack
Added Netdata real-time monitoring system at netdata.pivoine.art:
- Real-time infrastructure and container monitoring
- Auto-discovers all Docker containers
- Tracks CPU, memory, disk, network usage per service
- Low overhead monitoring (~1-3% CPU)
- Self-hosted with web dashboard on port 19999
Configuration:
- Created netdata/compose.yaml with full Traefik integration
- Added to main compose.yaml include list
- Added environment variables to arty.yml
- Mounted Docker socket for container metrics
- Mounted system directories for host metrics (/proc, /sys, /var/log)
- Three persistent volumes: config, lib, cache
- Required capabilities: SYS_PTRACE, SYS_ADMIN for system monitoring
- Watchtower enabled for automatic updates
Benefits for infrastructure:
- Monitor 20+ running services in real-time
- Track PostgreSQL, Redis, Traefik performance
- Watch backup processes (Backrest/Restic)
- Monitor Jellyfin transcoding load
- Alert on resource issues before they become critical
- Historical data for capacity planning
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 18:28:47 +01:00
|
|
|
# Netdata
|
|
|
|
|
NETDATA_TRAEFIK_ENABLED: true
|
|
|
|
|
NETDATA_COMPOSE_PROJECT_NAME: netdata
|
|
|
|
|
NETDATA_IMAGE: netdata/netdata:latest
|
|
|
|
|
NETDATA_TRAEFIK_HOST: netdata.pivoine.art
|
|
|
|
|
NETDATA_HOSTNAME: netdata.pivoine.art
|
2025-10-25 13:52:01 +02:00
|
|
|
# Proxy
|
|
|
|
|
PROXY_COMPOSE_PROJECT_NAME: proxy
|
|
|
|
|
PROXY_DOCKER_IMAGE: traefik:latest
|
2025-11-06 08:17:42 +01:00
|
|
|
PROXY_TRAEFIK_HOST: proxy.pivoine.art
|
2025-11-06 09:23:20 +01:00
|
|
|
# Sablier
|
|
|
|
|
SABLIER_COMPOSE_PROJECT_NAME: sablier
|
2025-11-06 09:25:09 +01:00
|
|
|
SABLIER_VERSION: latest
|
2025-11-08 22:34:46 +01:00
|
|
|
# AI Stack
|
|
|
|
|
AI_TRAEFIK_ENABLED: true
|
|
|
|
|
AI_COMPOSE_PROJECT_NAME: ai
|
|
|
|
|
AI_POSTGRES_IMAGE: pgvector/pgvector:pg16
|
|
|
|
|
AI_WEBUI_IMAGE: ghcr.io/open-webui/open-webui:main
|
|
|
|
|
AI_CRAWL4AI_IMAGE: unclecode/crawl4ai:latest
|
|
|
|
|
AI_TRAEFIK_HOST: ai.pivoine.art
|
|
|
|
|
AI_DB_USER: ai
|
|
|
|
|
AI_DB_NAME: openwebui
|
|
|
|
|
AI_WEBUI_NAME: Pivoine AI
|
|
|
|
|
AI_ENABLE_SIGNUP: true
|
|
|
|
|
AI_ENABLE_RAG_WEB_SEARCH: true
|
|
|
|
|
AI_ENABLE_RAG_SSL_VERIFY: true
|
|
|
|
|
AI_RAG_EMBEDDING_ENGINE: openai
|
|
|
|
|
AI_RAG_EMBEDDING_MODEL: text-embedding-3-small
|
|
|
|
|
AI_VECTOR_DB: pgvector
|
|
|
|
|
AI_CRAWL4AI_PORT: 11235
|
|
|
|
|
AI_OPENAI_API_BASE_URLS: https://api.anthropic.com/v1
|
feat: add Asciinema terminal recording server stack
Added new asciinema stack for self-hosted terminal recording and sharing
platform with custom "Pivoine" theme inspired by pivoine.art aesthetic.
New Services:
- **asciinema**: Terminal recording server at asciinema.pivoine.art
- PostgreSQL backend for recording persistence
- Email authentication via IONOS SMTP magic links
- Public/private recording visibility controls
- Embed recordings on any website
- Custom rose/magenta themed UI
Custom Theme (asciinema/theme/custom.css):
- Primary color: RGB(206, 39, 91) - Deep rose/magenta
- Dark charcoal backgrounds: HSL(0, 0%, 17.5%)
- High contrast design with bold color accents
- Styled components: navigation, cards, forms, buttons, terminal player
- Smooth animations and hover effects
- Responsive design with mobile breakpoints
- Custom scrollbars, selection colors, loading states
Infrastructure Updates:
- PostgreSQL: Added `asciinema` database to init script
- arty.yml: Added ASCIINEMA_* environment variables
- compose.yaml: Included asciinema stack in root composition
- CLAUDE.md: Comprehensive documentation with CLI setup guide
- Backup: Added asciinema-backup plan (11 AM daily, 7d/4w/6m/2y retention)
Configuration:
- URL: https://asciinema.pivoine.art
- Database: PostgreSQL `asciinema` database
- SMTP: Email auth via IONOS SMTP
- Unclaimed TTL: 30 days (auto-cleanup)
- Secret: Generated 64-char hex key in .env
Features:
- Record terminal sessions with asciinema CLI
- Web player with play/pause controls and speed adjustment
- User profiles with personal recording collections
- Embed recordings via iframe or direct links
- Privacy controls (public/private recordings)
- Automatic cleanup of unclaimed recordings
Integration Points:
- Documentation: Embed terminal demos
- Blog posts: Share command-line tutorials
- GitHub: Link recordings in README files
- Tutorials: Interactive terminal walkthroughs
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 02:00:20 +01:00
|
|
|
# Asciinema
|
|
|
|
|
ASCIINEMA_TRAEFIK_ENABLED: true
|
|
|
|
|
ASCIINEMA_COMPOSE_PROJECT_NAME: asciinema
|
|
|
|
|
ASCIINEMA_IMAGE: ghcr.io/asciinema/asciinema-server:latest
|
|
|
|
|
ASCIINEMA_TRAEFIK_HOST: asciinema.pivoine.art
|
|
|
|
|
ASCIINEMA_DB_NAME: asciinema
|
2025-11-09 04:13:37 +01:00
|
|
|
ASCIINEMA_SIGN_UP_DISABLED: true
|
feat: add Asciinema terminal recording server stack
Added new asciinema stack for self-hosted terminal recording and sharing
platform with custom "Pivoine" theme inspired by pivoine.art aesthetic.
New Services:
- **asciinema**: Terminal recording server at asciinema.pivoine.art
- PostgreSQL backend for recording persistence
- Email authentication via IONOS SMTP magic links
- Public/private recording visibility controls
- Embed recordings on any website
- Custom rose/magenta themed UI
Custom Theme (asciinema/theme/custom.css):
- Primary color: RGB(206, 39, 91) - Deep rose/magenta
- Dark charcoal backgrounds: HSL(0, 0%, 17.5%)
- High contrast design with bold color accents
- Styled components: navigation, cards, forms, buttons, terminal player
- Smooth animations and hover effects
- Responsive design with mobile breakpoints
- Custom scrollbars, selection colors, loading states
Infrastructure Updates:
- PostgreSQL: Added `asciinema` database to init script
- arty.yml: Added ASCIINEMA_* environment variables
- compose.yaml: Included asciinema stack in root composition
- CLAUDE.md: Comprehensive documentation with CLI setup guide
- Backup: Added asciinema-backup plan (11 AM daily, 7d/4w/6m/2y retention)
Configuration:
- URL: https://asciinema.pivoine.art
- Database: PostgreSQL `asciinema` database
- SMTP: Email auth via IONOS SMTP
- Unclaimed TTL: 30 days (auto-cleanup)
- Secret: Generated 64-char hex key in .env
Features:
- Record terminal sessions with asciinema CLI
- Web player with play/pause controls and speed adjustment
- User profiles with personal recording collections
- Embed recordings via iframe or direct links
- Privacy controls (public/private recordings)
- Automatic cleanup of unclaimed recordings
Integration Points:
- Documentation: Embed terminal demos
- Blog posts: Share command-line tutorials
- GitHub: Link recordings in README files
- Tutorials: Interactive terminal walkthroughs
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 02:00:20 +01:00
|
|
|
ASCIINEMA_UNCLAIMED_TTL: 30
|
|
|
|
|
ASCIINEMA_MAIL_REPLY_TO: valknar@pivoine.art
|
2025-10-29 06:40:32 +01:00
|
|
|
# Watchtower
|
|
|
|
|
WATCHTOWER_POLL_INTERVAL: 300
|
|
|
|
|
WATCHTOWER_LABEL_ENABLE: true
|
|
|
|
|
WATCHTOWER_CLEANUP: true
|
|
|
|
|
WATCHTOWER_INCLUDE_STOPPED: false
|
|
|
|
|
WATCHTOWER_INCLUDE_RESTARTING: true
|
|
|
|
|
WATCHTOWER_RUN_ONCE: false
|
|
|
|
|
WATCHTOWER_LOG_LEVEL: info
|
|
|
|
|
WATCHTOWER_ROLLING_RESTART: false
|
2025-11-08 19:59:58 +01:00
|
|
|
WATCHTOWER_NOTIFICATIONS: mattermost
|
2025-10-25 13:52:01 +02:00
|
|
|
|
|
|
|
|
scripts:
|
|
|
|
|
config: docker compose config
|
|
|
|
|
up: docker compose up -d
|
|
|
|
|
down: docker compose down
|
|
|
|
|
logs: docker compose logs -f
|
2025-10-26 12:07:06 +01:00
|
|
|
restart: docker compose restart
|
|
|
|
|
ps: docker compose ps
|
2025-10-26 14:15:21 +01:00
|
|
|
pull: docker compose pull
|
2025-10-26 20:07:08 +01:00
|
|
|
run: docker compose exec -it
|
2025-10-26 12:07:06 +01:00
|
|
|
env/sync: rsync -avzhe ssh ./.env root@vps:~/Projects/docker-compose/
|
2025-10-28 22:12:25 +01:00
|
|
|
# Database export scripts for sexy.pivoine.art
|
|
|
|
|
# Export PostgreSQL database schema and data with DROP IF EXISTS statements
|
|
|
|
|
sexy/db/export: |
|
2025-10-28 22:27:33 +01:00
|
|
|
docker exec core_postgres pg_dump \
|
2025-10-29 04:16:17 +01:00
|
|
|
-U sexy \
|
|
|
|
|
-d sexy \
|
2025-10-28 22:12:25 +01:00
|
|
|
--no-owner \
|
|
|
|
|
--no-acl \
|
|
|
|
|
--clean \
|
|
|
|
|
--if-exists \
|
2025-10-28 22:27:33 +01:00
|
|
|
> ~/Projects/docker-compose/sexy/directus.sql &&
|
2025-10-28 22:12:25 +01:00
|
|
|
echo "Database exported to ~/Projects/docker-compose/sexy/directus.sql"
|
|
|
|
|
|
|
|
|
|
# Export Directus schema.yaml (collections, fields, relations, etc.)
|
|
|
|
|
sexy/schema/export: |
|
2025-10-28 22:27:33 +01:00
|
|
|
docker exec sexy_api mkdir -p /directus/snapshots &&
|
|
|
|
|
docker exec sexy_api npx directus schema snapshot /directus/snapshots/schema.yaml &&
|
|
|
|
|
docker cp sexy_api:/directus/snapshots/schema.yaml ~/Projects/docker-compose/sexy/schema.yaml &&
|
2025-10-28 22:12:25 +01:00
|
|
|
echo "Directus schema exported to ~/Projects/docker-compose/sexy/schema.yaml"
|
|
|
|
|
|
|
|
|
|
# Combined export: both database and schema
|
|
|
|
|
sexy/export/all: |
|
2025-10-28 22:27:33 +01:00
|
|
|
echo "Exporting database..." &&
|
|
|
|
|
docker exec core_postgres pg_dump \
|
2025-10-29 04:16:17 +01:00
|
|
|
-U sexy \
|
|
|
|
|
-d sexy \
|
2025-10-28 22:12:25 +01:00
|
|
|
--no-owner \
|
|
|
|
|
--no-acl \
|
|
|
|
|
--clean \
|
|
|
|
|
--if-exists \
|
2025-10-28 22:27:33 +01:00
|
|
|
> ~/Projects/docker-compose/sexy/directus.sql &&
|
|
|
|
|
echo "✓ Database exported" &&
|
|
|
|
|
echo "Exporting Directus schema..." &&
|
|
|
|
|
docker exec sexy_api mkdir -p /directus/snapshots &&
|
|
|
|
|
docker exec sexy_api npx directus schema snapshot /directus/snapshots/schema.yaml &&
|
|
|
|
|
docker cp sexy_api:/directus/snapshots/schema.yaml ~/Projects/docker-compose/sexy/schema.yaml &&
|
|
|
|
|
echo "✓ Directus schema exported" &&
|
2025-10-28 22:12:25 +01:00
|
|
|
echo "All exports completed successfully!"
|
|
|
|
|
|
|
|
|
|
# Import PostgreSQL database from SQL dump
|
|
|
|
|
# WARNING: This will DROP existing tables if they exist (uses --clean --if-exists)
|
|
|
|
|
sexy/db/import: |
|
2025-10-28 22:27:33 +01:00
|
|
|
echo "⚠️ WARNING: This will replace the current database!" &&
|
|
|
|
|
echo "Make sure core_postgres container is running..." &&
|
2025-10-29 04:16:17 +01:00
|
|
|
docker exec -i core_postgres psql -U valknar -d directus < ~/Projects/docker-compose/sexy/directus.sql &&
|
2025-10-28 22:27:33 +01:00
|
|
|
echo "✓ Database imported from ~/Projects/docker-compose/sexy/directus.sql" &&
|
|
|
|
|
echo "Restarting Directus API..." &&
|
|
|
|
|
docker restart sexy_api &&
|
2025-10-28 22:12:25 +01:00
|
|
|
echo "✓ Import completed successfully!"
|
|
|
|
|
|
|
|
|
|
# Apply Directus schema snapshot (collections, fields, relations)
|
|
|
|
|
# This uses 'directus schema apply' which is non-destructive by default
|
|
|
|
|
sexy/schema/import: |
|
2025-10-28 22:27:33 +01:00
|
|
|
echo "Applying Directus schema snapshot..." &&
|
|
|
|
|
docker cp ~/Projects/docker-compose/sexy/schema.yaml sexy_api:/directus/schema.yaml &&
|
|
|
|
|
docker exec sexy_api npx directus schema apply --yes /directus/schema.yaml &&
|
|
|
|
|
echo "✓ Directus schema applied from ~/Projects/docker-compose/sexy/schema.yaml" &&
|
|
|
|
|
echo "Restarting Directus API..." &&
|
|
|
|
|
docker restart sexy_api &&
|
2025-10-28 22:12:25 +01:00
|
|
|
echo "✓ Schema import completed successfully!"
|
|
|
|
|
|
|
|
|
|
# Combined import: database and schema (use with caution!)
|
|
|
|
|
# Step 1: Import database (drops/recreates all tables)
|
|
|
|
|
# Step 2: Apply schema (updates Directus metadata)
|
|
|
|
|
sexy/import/all: |
|
2025-10-28 22:27:33 +01:00
|
|
|
echo "⚠️ WARNING: This will completely replace the database and schema!" &&
|
2025-10-28 23:24:36 +01:00
|
|
|
echo "Importing database..." &&
|
2025-10-29 04:16:17 +01:00
|
|
|
docker exec -i core_postgres psql -U ${DB_USER} -d ${SEXY_DB_NAME} < ~/Projects/docker-compose/sexy/directus.sql &&
|
2025-10-28 23:24:36 +01:00
|
|
|
echo "✓ Database imported" &&
|
|
|
|
|
echo "Applying Directus schema..." &&
|
|
|
|
|
docker cp ~/Projects/docker-compose/sexy/schema.yaml sexy_api:/directus/schema.yaml &&
|
|
|
|
|
docker exec sexy_api npx directus schema apply --yes /directus/schema.yaml &&
|
|
|
|
|
echo "✓ Schema applied" &&
|
|
|
|
|
echo "Restarting Directus API..." &&
|
|
|
|
|
docker restart sexy_api &&
|
|
|
|
|
echo "✓✓✓ Complete import finished successfully!"
|
2025-10-28 22:12:25 +01:00
|
|
|
|
|
|
|
|
sexy/uploads/export: |
|
2025-10-26 11:38:32 +01:00
|
|
|
rm -rf sexy/uploads
|
|
|
|
|
docker cp "sexy_api:/directus/uploads" "sexy/uploads"
|
2025-10-28 22:12:25 +01:00
|
|
|
sexy/uploads/import: |
|
2025-10-26 11:40:07 +01:00
|
|
|
docker cp "sexy/uploads" "sexy_api:/directus"
|
2025-10-26 12:07:06 +01:00
|
|
|
net/create: docker network create "$NETWORK_NAME"
|
2025-10-26 19:41:56 +01:00
|
|
|
awsm/import: |
|
2025-10-26 21:08:56 +01:00
|
|
|
docker cp "/tmp/awesome-database" "awesome_app:/home/node/.awesome"
|