feat: add JFA-Go and SoulSync docker-compose configs
- jfa-go-docker-compose.yml: Jellyfin account invitation system (invite.jefflix.lol) - soulsync-docker-compose.yml: Spotify/Tidal to Soulseek music sync - tsconfig.json: formatting updates and jsx mode fix - package-lock.json: lock dependencies Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
38dc171af7
commit
95ac4129b3
|
|
@ -0,0 +1,21 @@
|
||||||
|
services:
|
||||||
|
jfa-go:
|
||||||
|
image: hrfee/jfa-go
|
||||||
|
container_name: jfa-go
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8056:8056"
|
||||||
|
volumes:
|
||||||
|
- ./jfa-go-data:/data
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.jfa-go.rule=Host(`invite.jefflix.lol`)"
|
||||||
|
- "traefik.http.services.jfa-go.loadbalancer.server.port=8056"
|
||||||
|
networks:
|
||||||
|
- traefik-public
|
||||||
|
environment:
|
||||||
|
- TZ=Europe/Berlin
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefik-public:
|
||||||
|
external: true
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,76 @@
|
||||||
|
services:
|
||||||
|
# slskd - Soulseek client with REST API
|
||||||
|
slskd:
|
||||||
|
image: slskd/slskd:latest
|
||||||
|
container_name: slskd
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- SLSKD_REMOTE_CONFIGURATION=true
|
||||||
|
- SLSKD_SHARED_DIR=/shared
|
||||||
|
- SLSKD_DOWNLOADS_DIR=/downloads
|
||||||
|
- SLSKD_NO_HTTPS=true
|
||||||
|
- TZ=Europe/Berlin
|
||||||
|
volumes:
|
||||||
|
- ./config/slskd:/app
|
||||||
|
- ./downloads:/downloads
|
||||||
|
# Share some of your music library back (important - avoid bans!)
|
||||||
|
- /mnt/hetzner-media/media/music:/shared:ro
|
||||||
|
# Transfer folder - completed downloads move here for import
|
||||||
|
- ./transfer:/transfer
|
||||||
|
ports:
|
||||||
|
- "50300:50300" # Soulseek listen port
|
||||||
|
- "50300:50300/udp"
|
||||||
|
networks:
|
||||||
|
- soulsync-network
|
||||||
|
- traefik-public
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.slskd.rule=Host(`soulseek.jefflix.lol`) || Host(`slskd.jefflix.lol`)"
|
||||||
|
- "traefik.http.routers.slskd.entrypoints=web"
|
||||||
|
- "traefik.http.services.slskd.loadbalancer.server.port=5030"
|
||||||
|
- "traefik.docker.network=traefik-public"
|
||||||
|
|
||||||
|
# SoulSync - Spotify/Tidal to Soulseek sync
|
||||||
|
soulsync:
|
||||||
|
image: boulderbadgedad/soulsync:latest
|
||||||
|
container_name: soulsync
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- TZ=Europe/Berlin
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- PYTHONPATH=/app
|
||||||
|
- FLASK_ENV=production
|
||||||
|
volumes:
|
||||||
|
- ./config/soulsync:/app/data
|
||||||
|
- ./config/soulsync/logs:/app/logs
|
||||||
|
- ./config/soulsync/config:/app/config
|
||||||
|
- ./config/soulsync/storage:/app/storage
|
||||||
|
# Access to existing music library for comparison
|
||||||
|
- /mnt/hetzner-media/media/music:/music:ro
|
||||||
|
# Downloads from slskd
|
||||||
|
- ./downloads:/downloads
|
||||||
|
# Transfer folder for completed/processed files
|
||||||
|
- ./transfer:/transfer
|
||||||
|
depends_on:
|
||||||
|
- slskd
|
||||||
|
networks:
|
||||||
|
- soulsync-network
|
||||||
|
- traefik-public
|
||||||
|
- media-network
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.soulsync.rule=Host(`soulsync.jefflix.lol`)"
|
||||||
|
- "traefik.http.routers.soulsync.entrypoints=web"
|
||||||
|
- "traefik.http.services.soulsync.loadbalancer.server.port=8008"
|
||||||
|
- "traefik.docker.network=traefik-public"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
soulsync-network:
|
||||||
|
driver: bridge
|
||||||
|
traefik-public:
|
||||||
|
external: true
|
||||||
|
media-network:
|
||||||
|
external: true
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"lib": ["dom", "dom.iterable", "esnext"],
|
"lib": [
|
||||||
|
"dom",
|
||||||
|
"dom.iterable",
|
||||||
|
"esnext"
|
||||||
|
],
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"target": "ES6",
|
"target": "ES6",
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
|
|
@ -11,7 +15,7 @@
|
||||||
"moduleResolution": "bundler",
|
"moduleResolution": "bundler",
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
"jsx": "preserve",
|
"jsx": "react-jsx",
|
||||||
"incremental": true,
|
"incremental": true,
|
||||||
"plugins": [
|
"plugins": [
|
||||||
{
|
{
|
||||||
|
|
@ -19,9 +23,19 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["./*"]
|
"@/*": [
|
||||||
|
"./*"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
"include": [
|
||||||
"exclude": ["node_modules"]
|
"next-env.d.ts",
|
||||||
|
"**/*.ts",
|
||||||
|
"**/*.tsx",
|
||||||
|
".next/types/**/*.ts",
|
||||||
|
".next/dev/types/**/*.ts"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue