docs: update CLAUDE.md and README.md with Mattermost and Netdata
Updated documentation to reflect current infrastructure: **Added:** - Mattermost team collaboration platform - Team chat, file sharing, integrations - Email notifications via IONOS SMTP - Incoming webhooks for infrastructure alerts - PostgreSQL backend - Netdata real-time monitoring - System and service monitoring - PostgreSQL and Docker monitoring - Restic backup repository monitoring - Email and Mattermost alerts - HTTP Basic Auth protection **Removed:** - Gotify notification server (replaced by Mattermost) **Updated:** - Database initialization: Added mattermost database - Backup configuration: Added Mattermost volumes - Environment variables: Added MATTERMOST_WEBHOOK_URL and WATCHTOWER_NOTIFICATION_URL - Volume management: Added Mattermost, Joplin, and Jellyfin volumes - Service list in compose include pattern All documentation now reflects the current state of the infrastructure with Mattermost as the central notification and collaboration hub. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
53
CLAUDE.md
53
CLAUDE.md
@@ -15,7 +15,7 @@ Root `compose.yaml` uses Docker Compose's `include` directive to orchestrate mul
|
|||||||
- **sexy**: Directus 11 CMS + SvelteKit frontend
|
- **sexy**: Directus 11 CMS + SvelteKit frontend
|
||||||
- **awsm**: Next.js application with SQLite
|
- **awsm**: Next.js application with SQLite
|
||||||
- **track**: Umami analytics (PostgreSQL)
|
- **track**: Umami analytics (PostgreSQL)
|
||||||
- **gotify**: Push notification server
|
- **mattermost**: Team collaboration and chat platform (PostgreSQL)
|
||||||
- **scrapy**: Scrapyd web scraping cluster (scrapyd, scrapy, scrapyrt)
|
- **scrapy**: Scrapyd web scraping cluster (scrapyd, scrapy, scrapyrt)
|
||||||
- **n8n**: Workflow automation platform (PostgreSQL)
|
- **n8n**: Workflow automation platform (PostgreSQL)
|
||||||
- **stash**: Filestash web-based file manager
|
- **stash**: Filestash web-based file manager
|
||||||
@@ -26,6 +26,7 @@ Root `compose.yaml` uses Docker Compose's `include` directive to orchestrate mul
|
|||||||
- **jelly**: Jellyfin media server with hardware transcoding
|
- **jelly**: Jellyfin media server with hardware transcoding
|
||||||
- **drop**: PairDrop peer-to-peer file sharing
|
- **drop**: PairDrop peer-to-peer file sharing
|
||||||
- **restic**: Backrest backup system with restic backend
|
- **restic**: Backrest backup system with restic backend
|
||||||
|
- **netdata**: Real-time infrastructure monitoring
|
||||||
- **sablier**: Dynamic scaling plugin for Traefik
|
- **sablier**: Dynamic scaling plugin for Traefik
|
||||||
- **vpn**: WireGuard VPN (wg-easy)
|
- **vpn**: WireGuard VPN (wg-easy)
|
||||||
|
|
||||||
@@ -59,6 +60,7 @@ Services expose themselves via Docker labels:
|
|||||||
`core/postgres/init/01-init-databases.sh` runs on first PostgreSQL startup:
|
`core/postgres/init/01-init-databases.sh` runs on first PostgreSQL startup:
|
||||||
- Creates `directus` database for Sexy CMS
|
- Creates `directus` database for Sexy CMS
|
||||||
- Creates `umami` database for Track analytics
|
- Creates `umami` database for Track analytics
|
||||||
|
- Creates `mattermost` database for Mattermost chat platform
|
||||||
- Creates `n8n` database for workflow automation
|
- Creates `n8n` database for workflow automation
|
||||||
- Creates `linkwarden` database for Links bookmark manager
|
- Creates `linkwarden` database for Links bookmark manager
|
||||||
- Creates `joplin` database for Joplin Server
|
- Creates `joplin` database for Joplin Server
|
||||||
@@ -155,6 +157,22 @@ Next.js app with embedded SQLite:
|
|||||||
- Optional webhook secret for database updates
|
- Optional webhook secret for database updates
|
||||||
- Database persisted in `awesome_data` volume
|
- Database persisted in `awesome_data` volume
|
||||||
|
|
||||||
|
### Mattermost (mattermost/compose.yaml)
|
||||||
|
Team collaboration and chat platform:
|
||||||
|
- **mattermost**: Mattermost Team Edition exposed at `mattermost.pivoine.art:8065`
|
||||||
|
- Team chat with channels, direct messages, and threads
|
||||||
|
- File sharing and integrations
|
||||||
|
- PostgreSQL backend for message persistence
|
||||||
|
- Email notifications via IONOS SMTP
|
||||||
|
- Mobile and desktop app support
|
||||||
|
- Incoming webhooks for infrastructure notifications
|
||||||
|
- Data persisted in `mattermost_config`, `mattermost_data`, `mattermost_plugins` volumes
|
||||||
|
|
||||||
|
**Configuration**:
|
||||||
|
- **Email**: Configured with IONOS SMTP for notifications and invitations
|
||||||
|
- **Webhooks**: Incoming webhook URL stored in `.env` as `MATTERMOST_WEBHOOK_URL`
|
||||||
|
- **Integrations**: Netdata alerts, Watchtower updates, Restic backups, n8n workflows
|
||||||
|
|
||||||
### Scrapy (scrapy/compose.yaml)
|
### Scrapy (scrapy/compose.yaml)
|
||||||
Web scraping cluster with three services:
|
Web scraping cluster with three services:
|
||||||
- **scrapyd**: Scrapyd daemon exposed at `scrapy.pivoine.art:6800`
|
- **scrapyd**: Scrapyd daemon exposed at `scrapy.pivoine.art:6800`
|
||||||
@@ -411,6 +429,28 @@ PairDrop peer-to-peer file sharing service:
|
|||||||
|
|
||||||
**Note**: PairDrop is stateless and doesn't require backups as no data is persisted. All transfers happen directly between devices.
|
**Note**: PairDrop is stateless and doesn't require backups as no data is persisted. All transfers happen directly between devices.
|
||||||
|
|
||||||
|
### Netdata (netdata/compose.yaml)
|
||||||
|
Real-time infrastructure monitoring and alerting:
|
||||||
|
- **netdata**: Netdata monitoring agent exposed at `netdata.pivoine.art:19999`
|
||||||
|
- Real-time performance metrics for all services
|
||||||
|
- System monitoring (CPU, RAM, disk, network)
|
||||||
|
- PostgreSQL database monitoring via go.d collector
|
||||||
|
- Restic backup repository monitoring via filecheck collector
|
||||||
|
- Docker container monitoring
|
||||||
|
- Custom Dockerfile with msmtp for email alerts
|
||||||
|
- Protected by HTTP Basic Auth
|
||||||
|
|
||||||
|
**Monitoring Configuration**:
|
||||||
|
- **PostgreSQL**: Monitors core PostgreSQL instance (connection, queries, performance)
|
||||||
|
- **Filecheck**: Monitors Restic backup repository at `/mnt/hidrive/users/valknar/Backup`
|
||||||
|
- **Email Alerts**: Configured with IONOS SMTP via msmtp for health notifications
|
||||||
|
- **Mattermost Alerts**: Sends critical alerts to Mattermost via webhook
|
||||||
|
|
||||||
|
**Alert Configuration**:
|
||||||
|
- Health alerts sent to both email and Mattermost
|
||||||
|
- All alert roles (sysadmin, dba, webmaster, etc.) route to notifications
|
||||||
|
- Webhook URL configured via `MATTERMOST_WEBHOOK_URL` environment variable
|
||||||
|
|
||||||
### Restic (restic/compose.yaml)
|
### Restic (restic/compose.yaml)
|
||||||
Backrest backup system with restic backend:
|
Backrest backup system with restic backend:
|
||||||
- **backrest**: Backrest web UI exposed at `restic.pivoine.art:9898`
|
- **backrest**: Backrest web UI exposed at `restic.pivoine.art:9898`
|
||||||
@@ -452,9 +492,9 @@ Backrest backup system with restic backend:
|
|||||||
- Path: `/volumes/awesome_data`
|
- Path: `/volumes/awesome_data`
|
||||||
- Retention: 7 daily, 4 weekly, 6 monthly
|
- Retention: 7 daily, 4 weekly, 6 monthly
|
||||||
|
|
||||||
6. **gotify-backup** (5 AM daily)
|
6. **mattermost-backup** (5 AM daily)
|
||||||
- Path: `/volumes/gotify_data`
|
- Paths: `/volumes/mattermost_config`, `/volumes/mattermost_data`, `/volumes/mattermost_plugins`
|
||||||
- Retention: 7 daily, 4 weekly, 3 monthly
|
- Retention: 7 daily, 4 weekly, 6 monthly, 2 yearly
|
||||||
|
|
||||||
7. **scrapy-backup** (6 AM daily)
|
7. **scrapy-backup** (6 AM daily)
|
||||||
- Paths: `/volumes/scrapyd_data`, `/volumes/scrapy_code`
|
- Paths: `/volumes/scrapyd_data`, `/volumes/scrapy_code`
|
||||||
@@ -511,6 +551,8 @@ Key variables defined in `arty.yml` and overridden in `.env`:
|
|||||||
- `{SERVICE}_TRAEFIK_ENABLED`: Toggle Traefik exposure
|
- `{SERVICE}_TRAEFIK_ENABLED`: Toggle Traefik exposure
|
||||||
- `SEXY_DIRECTUS_SECRET`: Directus security secret
|
- `SEXY_DIRECTUS_SECRET`: Directus security secret
|
||||||
- `TRACK_APP_SECRET`: Umami analytics secret
|
- `TRACK_APP_SECRET`: Umami analytics secret
|
||||||
|
- `MATTERMOST_WEBHOOK_URL`: Incoming webhook URL for infrastructure notifications (stored in `.env` only)
|
||||||
|
- `WATCHTOWER_NOTIFICATION_URL`: Shoutrrr format URL for container update notifications
|
||||||
|
|
||||||
## Volume Management
|
## Volume Management
|
||||||
|
|
||||||
@@ -518,11 +560,14 @@ Each service uses named volumes prefixed with project name:
|
|||||||
- `core_postgres_data`, `core_redis_data`: Database persistence
|
- `core_postgres_data`, `core_redis_data`: Database persistence
|
||||||
- `core_directus_uploads`, `core_directus_bundle`: Directus media/extensions
|
- `core_directus_uploads`, `core_directus_bundle`: Directus media/extensions
|
||||||
- `awesome_data`: AWSM SQLite database
|
- `awesome_data`: AWSM SQLite database
|
||||||
|
- `mattermost_config`, `mattermost_data`, `mattermost_plugins`: Mattermost chat and configuration
|
||||||
- `scrapy_scrapyd_data`, `scrapy_scrapy_code`: Scrapy spider data and code
|
- `scrapy_scrapyd_data`, `scrapy_scrapy_code`: Scrapy spider data and code
|
||||||
- `n8n_n8n_data`: n8n workflow data
|
- `n8n_n8n_data`: n8n workflow data
|
||||||
- `stash_filestash_data`: Filestash configuration and state
|
- `stash_filestash_data`: Filestash configuration and state
|
||||||
- `links_data`, `links_meili_data`: Linkwarden bookmarks and Meilisearch index
|
- `links_data`, `links_meili_data`: Linkwarden bookmarks and Meilisearch index
|
||||||
- `vault_data`: Vaultwarden password vault (SQLite database)
|
- `vault_data`: Vaultwarden password vault (SQLite database)
|
||||||
|
- `joplin_data`: Joplin note-taking data
|
||||||
|
- `jelly_config`: Jellyfin media server configuration
|
||||||
- `restic_data`, `restic_config`, `restic_cache`, `restic_tmp`: Backrest backup system
|
- `restic_data`, `restic_config`, `restic_cache`, `restic_tmp`: Backrest backup system
|
||||||
- `proxy_letsencrypt_data`: SSL certificates
|
- `proxy_letsencrypt_data`: SSL certificates
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ The **Falcon** is a state-of-the-art containerized starship, powered by Docker's
|
|||||||
| **SEXY** | *Advanced alien encounter database* | [sexy.pivoine.art](https://sexy.pivoine.art) |
|
| **SEXY** | *Advanced alien encounter database* | [sexy.pivoine.art](https://sexy.pivoine.art) |
|
||||||
| **AWSM** | *Intergalactic discovery catalog* | [awesome.pivoine.art](https://awesome.pivoine.art) |
|
| **AWSM** | *Intergalactic discovery catalog* | [awesome.pivoine.art](https://awesome.pivoine.art) |
|
||||||
| **TRACK** | *Mission analytics & telemetry* | [umami.pivoine.art](https://umami.pivoine.art) |
|
| **TRACK** | *Mission analytics & telemetry* | [umami.pivoine.art](https://umami.pivoine.art) |
|
||||||
| **GOTIFY** | *Subspace communication relay* | [gotify.pivoine.art](https://gotify.pivoine.art) |
|
| **MATTERMOST** | *Crew collaboration & mission control* | [mattermost.pivoine.art](https://mattermost.pivoine.art) |
|
||||||
| **SCRAPY** | *Web scraping reconnaissance cluster* | [scrapy.pivoine.art](https://scrapy.pivoine.art) |
|
| **SCRAPY** | *Web scraping reconnaissance cluster* | [scrapy.pivoine.art](https://scrapy.pivoine.art) |
|
||||||
| **N8N** | *Automated workflow command center* | [n8n.pivoine.art](https://n8n.pivoine.art) |
|
| **N8N** | *Automated workflow command center* | [n8n.pivoine.art](https://n8n.pivoine.art) |
|
||||||
| **STASH** | *Universal file management portal* | [stash.pivoine.art](https://stash.pivoine.art) |
|
| **STASH** | *Universal file management portal* | [stash.pivoine.art](https://stash.pivoine.art) |
|
||||||
@@ -58,6 +58,7 @@ The **Falcon** is a state-of-the-art containerized starship, powered by Docker's
|
|||||||
| **JELLY** | *Media streaming server* | [jelly.pivoine.art](https://jelly.pivoine.art) |
|
| **JELLY** | *Media streaming server* | [jelly.pivoine.art](https://jelly.pivoine.art) |
|
||||||
| **DROP** | *Peer-to-peer file sharing* | [drop.pivoine.art](https://drop.pivoine.art) |
|
| **DROP** | *Peer-to-peer file sharing* | [drop.pivoine.art](https://drop.pivoine.art) |
|
||||||
| **RESTIC** | *Automated backup vault system* | [restic.pivoine.art](https://restic.pivoine.art) |
|
| **RESTIC** | *Automated backup vault system* | [restic.pivoine.art](https://restic.pivoine.art) |
|
||||||
|
| **NETDATA** | *Real-time ship diagnostics & alerts* | [netdata.pivoine.art](https://netdata.pivoine.art) |
|
||||||
| **PROXY** | *Shield control dashboard* | [proxy.pivoine.art](https://proxy.pivoine.art) |
|
| **PROXY** | *Shield control dashboard* | [proxy.pivoine.art](https://proxy.pivoine.art) |
|
||||||
| **VPN** | *Cloaking device network* | [vpn.pivoine.art](https://vpn.pivoine.art) |
|
| **VPN** | *Cloaking device network* | [vpn.pivoine.art](https://vpn.pivoine.art) |
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user