feat: consolidate media services into unified media stack

- Combine Jellyfin, Filestash, and Koel into single media/ compose stack
- Remove standalone jelly/ and stash/ compose files
- Add Koel music streaming with PostgreSQL backend
- Update core PostgreSQL init script to create koel database
- Add media stack to root compose.yaml include
- Configure media services with subdomain routing (jellyfin.media, filestash.media, koel.media)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-14 20:40:53 +01:00
parent 709dcd8882
commit fd059dbbb5
6 changed files with 184 additions and 92 deletions

View File

@@ -11,35 +11,39 @@ psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-E
-- Create databases for compose services
-- Main application database
SELECT 'CREATE DATABASE directus'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'directus')\gexec
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
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
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
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
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
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
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
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'asciinema')\\gexec
-- Koel music streaming database
SELECT 'CREATE DATABASE koel'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'koel')\\gexec
-- Grant privileges to all databases
GRANT ALL PRIVILEGES ON DATABASE directus TO $POSTGRES_USER;
@@ -50,11 +54,12 @@ psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-E
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;
GRANT ALL PRIVILEGES ON DATABASE koel 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')
WHERE datname IN ('directus', 'umami', 'n8n', 'linkwarden', 'joplin', 'mattermost', 'tandoor', 'asciinema', 'koel')
ORDER BY datname;
EOSQL
@@ -71,4 +76,5 @@ echo " • joplin - Note-taking server database"
echo " • mattermost - Chat platform database"
echo " • tandoor - Recipe manager database"
echo " • asciinema - Terminal recording server database"
echo " • koel - Music streaming server database"
echo ""