Files
docker-compose/core/postgres/init/01-init-databases.sh
Sebastian Krüger c0611cb04f 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

75 lines
3.0 KiB
Bash

#!/bin/bash
set -e
# PostgreSQL initialization script for compose core stack
# This script runs on first database initialization
# Creates all databases required by compose.sh stacks
echo "Starting compose database initialization..."
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
-- Create databases for compose services
-- Main application database
SELECT 'CREATE DATABASE directus'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'directus')\gexec
-- Umami analytics database
SELECT 'CREATE DATABASE umami'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'umami')\gexec
-- n8n workflow automation database
SELECT 'CREATE DATABASE n8n'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'n8n')\gexec
-- Linkwarden bookmark manager database
SELECT 'CREATE DATABASE linkwarden'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'linkwarden')\gexec
-- Joplin note-taking server database
SELECT 'CREATE DATABASE joplin'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'joplin')\gexec
-- Mattermost chat platform database
SELECT 'CREATE DATABASE mattermost'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'mattermost')\gexec
-- Tandoor recipe manager database
SELECT 'CREATE DATABASE tandoor'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'tandoor')\gexec
-- Asciinema terminal recording server database
SELECT 'CREATE DATABASE asciinema'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'asciinema')\gexec
-- Grant privileges to all databases
GRANT ALL PRIVILEGES ON DATABASE directus TO $POSTGRES_USER;
GRANT ALL PRIVILEGES ON DATABASE umami TO $POSTGRES_USER;
GRANT ALL PRIVILEGES ON DATABASE n8n TO $POSTGRES_USER;
GRANT ALL PRIVILEGES ON DATABASE linkwarden TO $POSTGRES_USER;
GRANT ALL PRIVILEGES ON DATABASE joplin TO $POSTGRES_USER;
GRANT ALL PRIVILEGES ON DATABASE mattermost TO $POSTGRES_USER;
GRANT ALL PRIVILEGES ON DATABASE tandoor TO $POSTGRES_USER;
GRANT ALL PRIVILEGES ON DATABASE asciinema TO $POSTGRES_USER;
-- Log success
SELECT 'Compose databases initialized:' AS status;
SELECT datname FROM pg_database
WHERE datname IN ('directus', 'umami', 'n8n', 'linkwarden', 'joplin', 'mattermost', 'tandoor', 'asciinema')
ORDER BY datname;
EOSQL
echo ""
echo "✓ PostgreSQL initialization completed"
echo "✓ All compose databases created successfully"
echo ""
echo "Databases available:"
echo " • directus - Sexy application database"
echo " • umami - Tracking database"
echo " • n8n - Workflow automation database"
echo " • linkwarden - Bookmark manager database"
echo " • joplin - Note-taking server database"
echo " • mattermost - Chat platform database"
echo " • tandoor - Recipe manager database"
echo " • asciinema - Terminal recording server database"
echo ""