Compare commits

...

64 Commits

Author SHA1 Message Date
a74e6c796c ifx: service problem, better clients documentation
All checks were successful
Casa LMS CI/CD Pipeline / deploy (push) Successful in 17s
2025-12-01 02:55:48 +00:00
2649221f92 start using kustomize
All checks were successful
Casa LMS CI/CD Pipeline / deploy (push) Successful in 16s
2025-11-30 21:16:52 +00:00
8f0de6ca92 kubernetes documentation
All checks were successful
Casa LMS CI/CD Pipeline / deploy (push) Successful in 15s
2025-11-22 19:24:45 +00:00
b3451396a3 modified: README.md
All checks were successful
Casa LMS CI/CD Pipeline / deploy (push) Successful in 17s
modified:   deploy/lms-deploy.yaml
new file:   deploy/rbac.yaml
2025-11-22 19:03:54 +00:00
ef62602002 enable cd/cdp
Some checks failed
Casa LMS CI/CD Pipeline / deploy (push) Failing after 18s
2025-11-22 18:55:55 +00:00
b8558a7ba1 added storage-limbosolutions-com-media-music
Some checks failed
/ deploy-to-homesrv01 (push) Has been cancelled
2025-11-16 13:03:51 +00:00
79ff982b82 exposed lms squeezelite clients hostPorts
Some checks failed
/ deploy-to-homesrv01 (push) Has been cancelled
2025-11-16 03:21:03 +00:00
e0727515c8 added ingress
Some checks failed
/ deploy-to-homesrv01 (push) Has been cancelled
2025-11-16 02:27:56 +00:00
58c46d009f migrate to kubernetes
Some checks failed
/ deploy-to-homesrv01 (push) Has been cancelled
2025-11-16 01:05:04 +00:00
fa5d65d891 modified: README.md
Some checks failed
/ deploy-to-homesrv01 (push) Failing after 5s
2025-09-07 19:46:50 +00:00
ec86c2192c modified: .gitignore
All checks were successful
/ deploy-to-homesrv01 (push) Successful in 10s
2025-08-22 21:00:55 +00:00
e1675ae886 modified: docker-compose.yaml
All checks were successful
/ deploy-to-homesrv01 (push) Successful in 23s
2025-07-12 21:28:44 +00:00
100567a5f6 pipelines - cron weekly and changed act runner
Some checks failed
/ deploy-to-homesrv01 (push) Failing after 27s
2025-05-04 14:55:48 +01:00
9bd209ee01 modified: docker-compose.yaml
All checks were successful
/ deploy-to-homesrv01 (push) Successful in 21s
2025-01-26 19:36:38 +00:00
553733debf modified: .gitea/workflows/deploy.yml
Some checks failed
/ deploy-to-homesrv01 (push) Failing after 10s
2024-12-30 00:08:26 +00:00
51a9e55c19 modified: README.md
modified:   docker-compose.yaml
2024-12-29 19:42:53 +00:00
d0594d55b8 modified: .gitea/workflows/deploy.yml
modified:   README.md
2024-12-29 15:45:10 +00:00
2b58a3cea8 modified: docker-compose.yaml
Some checks are pending
deploy / deploy (push) Waiting to run
2024-12-29 14:05:36 +00:00
0a3add4e5f Update docker-compose.yaml
Some checks failed
deploy / deploy (push) Has been cancelled
2024-11-13 21:05:10 +00:00
6519bba6e9 Update docker-compose.yaml
Some checks are pending
deploy / deploy (push) Waiting to run
2024-11-13 21:00:36 +00:00
173c85101e Update docker-compose.yaml
Some checks are pending
deploy / deploy (push) Waiting to run
2024-11-13 20:29:41 +00:00
3929df9bb5 Update docker-compose.yaml
Some checks failed
deploy / deploy (push) Has been cancelled
2024-10-21 21:12:41 +00:00
c203c2f635 Update docker-compose.yaml
Some checks are pending
deploy / deploy (push) Waiting to run
2024-10-21 21:10:40 +00:00
a48dc2e2a5 Update docker-compose.yaml
Some checks are pending
deploy / deploy (push) Waiting to run
2024-10-21 20:57:17 +00:00
cd2a60f8f1 Update docker-compose.yaml
Some checks are pending
deploy / deploy (push) Waiting to run
2024-10-21 20:53:25 +00:00
a1f0d1beb8 Update docker-compose.yaml
Some checks are pending
deploy / deploy (push) Waiting to run
2024-10-20 21:30:05 +00:00
e1ea1e6905 removed direct port access 9000
All checks were successful
deploy / deploy (push) Successful in 15s
2024-08-29 00:07:25 +01:00
6a48dc135f README.md
All checks were successful
deploy / deploy (push) Successful in 3s
2024-08-28 23:28:13 +01:00
bf60add2f5 readme.md
All checks were successful
deploy / deploy (push) Successful in 5s
2024-08-28 23:23:45 +01:00
3a90bc8cba modified: README.md
All checks were successful
deploy / deploy (push) Successful in 51s
2024-08-24 23:54:31 +01:00
b541e20bd8 Update README.md
All checks were successful
deploy / deploy (push) Successful in 3s
2024-08-04 12:30:18 +00:00
5014a0d0c2 Update .gitea/workflows/deploy.yml
All checks were successful
deploy / deploy (push) Successful in 3s
2024-08-04 12:22:12 +00:00
d2dbc3c467 Update README.md
Some checks failed
deploy / deploy (push) Failing after 9s
2024-08-04 12:20:48 +00:00
0110629b31 Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Failing after 9s
2024-08-04 04:02:56 +00:00
fea93e4633 Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Failing after 41s
2024-08-04 04:01:25 +00:00
78b78c6c21 Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Failing after 9s
2024-08-04 03:53:35 +00:00
c48543165a Update .gitea/workflows/deploy.yml 2024-08-04 03:52:23 +00:00
2fbc329077 Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (3.10) (push) Failing after 42s
deploy / deploy (3.11) (push) Failing after 8s
deploy / deploy (3.12) (push) Failing after 8s
deploy / deploy (3.9) (push) Failing after 9s
deploy / deploy (pypy3.10) (push) Successful in 40s
deploy / deploy (pypy3.9) (push) Successful in 43s
2024-08-04 03:47:05 +00:00
e80f85b1bf Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Failing after 8s
2024-08-04 03:44:13 +00:00
22759bdbeb Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Failing after 7s
2024-08-04 03:42:40 +00:00
122fa397ef Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Failing after 8s
2024-08-04 03:41:56 +00:00
01f0a1d949 Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Failing after 7s
2024-08-04 03:39:51 +00:00
4e97d37196 Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (2.x) (push) Failing after 9s
deploy / deploy (3.x) (push) Failing after 8s
deploy / deploy (pypy2) (push) Failing after 7s
deploy / deploy (pypy3) (push) Failing after 7s
2024-08-04 03:37:12 +00:00
7fc5dbe23d Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Failing after 8s
2024-08-04 03:34:07 +00:00
e2b4f87ded Update .gitea/workflows/deploy.yml 2024-08-04 03:33:33 +00:00
c69ac54ade Update .gitea/workflows/deploy.yml
All checks were successful
deploy / deploy (push) Successful in 2m8s
2024-08-04 03:23:10 +00:00
b79f1c575b Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Has been cancelled
2024-08-04 03:21:29 +00:00
08a6e6610c Update .gitea/workflows/deploy.yml
All checks were successful
deploy / deploy (push) Successful in 5m18s
2024-08-04 03:15:29 +00:00
e9f868ee3d Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Failing after 2s
2024-08-04 03:13:58 +00:00
69e5695a8c Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Has been cancelled
2024-08-04 03:12:57 +00:00
9a22b1ba33 Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Failing after 4m43s
2024-08-04 03:07:37 +00:00
d3115dfc59 Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Failing after 3s
2024-08-04 03:07:01 +00:00
7a146b9930 Update README.md
All checks were successful
deploy / deploy (push) Successful in 4s
2024-08-04 01:04:23 +00:00
d8debf7d40 Update docker-compose.yaml
All checks were successful
deploy / deploy (push) Successful in 2s
2024-08-04 01:00:02 +00:00
fdf81b2712 Update .gitea/workflows/deploy.yml
All checks were successful
deploy / deploy (push) Successful in 17s
2024-08-04 00:37:25 +00:00
71d3fb8f1c Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Has been cancelled
2024-08-04 00:30:27 +00:00
8cfb292a1b Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Has been cancelled
2024-08-04 00:29:02 +00:00
a9620565c9 Update .gitea/workflows/deploy.yml
Some checks are pending
deploy / deploy (push) Waiting to run
2024-08-04 00:27:12 +00:00
62bb0b318f Update .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Failing after 1s
2024-08-04 00:09:39 +00:00
128489835d Add .gitea/workflows/deploy.yml
Some checks failed
deploy / deploy (push) Failing after 1s
2024-08-04 00:05:07 +00:00
34cc927b46 Update docker-compose.yaml 2024-08-03 23:46:26 +00:00
74df2f66dc documentation 2024-05-31 16:11:05 +01:00
2d344f3791 changed docker image to stable 2024-05-25 10:51:07 +01:00
3341f92fca . 2023-06-19 16:30:25 +01:00
17 changed files with 365 additions and 22 deletions

View File

@@ -0,0 +1,43 @@
name: Casa LMS CI/CD Pipeline
on:
push:
branches:
- fix/*
- main
- master
pull_request:
schedule:
- cron: '0 15 * * 0' # every sunday 3 pm
jobs:
deploy:
runs-on: casa-vlan-cicd
env:
GITHUB_TEMP: ${{ runner.temp }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Fetch limbo public actions
env:
RUNNER_TEMP: "${{ runner.temp }}"
WORKSPACE: "${{ gitea.workspace }}"
run: |
curl -fsSL https://git.limbosolutions.com/kb/gitea/raw/branch/main/cloud-scripts/setup-limbo-actions.sh | bash 2>&1
- name: Setup kubectl
uses: ./.gitea/limbo_actions/kubectl-setup
with:
kube_server: ${{ secrets.CASA_VLAN_KUBE_SERVER }}
kube_ca_base64: ${{ secrets.CASA_VLAN_KUBE_CA_BASE64 }}
kube_token: ${{ secrets.CASA_VLAN_KUBE_TOKEN }}
- name: Deploy
shell: bash
run: |
./ops-scripts/apply-app.sh

1
.gitignore vendored
View File

@@ -2,3 +2,4 @@
_volumes
_volumes
.vscode
.obsidian

View File

@@ -1 +1,79 @@
Welcome
# Lyrion Music Server (LMS)
Welcome to my Lyrion Music Server (LMS) setup repo.
Currently hosted on [kubernetes cluster - casa](https://git.limbosolutions.com/myLimbo/casa).
**Table of Contents:**
- [Music](#music)
- [Clients](#clients)
- [Setup and Deploy](#setup-and-deploy)
- [App](#app)
- [Infra](#infra)
- [Continuous Deploy](#continuous-deploy)
- [Links](#links)
## Music
Using the SeaweedFS CSI driver on the Casa Kubernetes cluster, connected to central storage on the Chimera Kubernetes cluster.
[Manifest deployed by app kustomization](./deploy/infra/music-pv.yaml).
## Clients
**RaspberryPI client:**
- <https://git.limbosolutions.com/marcio.fernandes/pi.bluetooth.speaker>
**Fedora workstation:**
``` bash
sudo dfn install squeezelite
```
``` bash
# ~/.config/systemd/user/squeezelite.service
[Unit]
Description=Squeezelite Client
After=pipewire.service
[Service]
ExecStart=/usr/bin/squeezelite -o pipewire -s lms.casa.limbosolutions.com -n dionysus
Restart=on-failure
[Install]
WantedBy=default.target
```
``` bash
systemctl --user enable --now squeezelite.service
```
## Setup and Deploy
### App
``` bash
./ops-scripts/apply-app.sh
```
### Infra
``` bash
./ops-scripts/apply-infra.sh
```
### Continuous Deploy
Weekly cron update.
[Gitea Workflow](./.gitea/workflows/deploy.yml)
## Links
- Lyrion Music Server - Official
- [WebSite](https://lyrion.org)
- [github](https://github.com/LMS-Community)
- [Community Forum](https://forums.slimdevices.com/)
- [Docker Hub](https://hub.docker.com/r/lmscommunity/lyrionmusicserver)

View File

@@ -0,0 +1,62 @@
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: lyrionmusicserver
name: lyrionmusicserver
labels:
app: lyrionmusicserver
spec:
replicas: 1
selector:
matchLabels:
app: lyrionmusicserver
template:
metadata:
labels:
app: lyrionmusicserver
spec:
nodeSelector:
role: worker-node
containers:
- name: lyrionmusicserver
image: lmscommunity/lyrionmusicserver:latest
imagePullPolicy: Always
volumeMounts:
- mountPath: /config
name: lyrionmusicserver
- mountPath: /music
readOnly: true
name: music
- mountPath: /playlist
name: playlists
ports:
- name: 9000-web
containerPort: 9000
protocol: TCP
- name: 9090-api
containerPort: 9090
protocol: TCP
- name: 3483-sqz-tcp
containerPort: 3483
protocol: TCP
- name: 3483-sqz-udp
containerPort: 3483
protocol: UDP
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "400m"
volumes:
- name: lyrionmusicserver
persistentVolumeClaim:
claimName: lyrionmusicserver
- name: music
persistentVolumeClaim:
claimName: storage-limbosolutions-com-media-music
- name: playlists
persistentVolumeClaim:
claimName: playlists

View File

@@ -0,0 +1,10 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
- music-pvc.yaml
- lms-data-pvc.yaml
- playlists-pvc.yaml
generatorOptions:
disableNameSuffixHash: true

View File

@@ -0,0 +1,11 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: lyrionmusicserver
namespace: lyrionmusicserver
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

15
deploy/app/music-pvc.yaml Normal file
View File

@@ -0,0 +1,15 @@
# check permissions on storage source
# lms required o+rx on /music folder to scan
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: storage-limbosolutions-com-media-music
namespace: lyrionmusicserver
spec:
storageClassName: "" # it must stay empty to work, dont know why storage-limbosolutions-com
volumeName: storage-limbosolutions-com-media-music
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 128Gi

View File

@@ -0,0 +1,11 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: playlists
namespace: lyrionmusicserver
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 64Mi

47
deploy/app/service.yaml Normal file
View File

@@ -0,0 +1,47 @@
apiVersion: v1
kind: Service
metadata:
name: lyrionmusicserver-web
namespace: lyrionmusicserver
labels:
app: lyrionmusicserver
spec:
selector:
app: lyrionmusicserver
ports:
- name: 9000-web
protocol: TCP
port: 9000
targetPort: 9000
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
name: lyrionmusicserver-clients
namespace: lyrionmusicserver
spec:
selector:
app: lyrionmusicserver
type: LoadBalancer
ports:
#! SlimProto clients require both control and stream ports.
# - TCP/UDP 3483: control channel (registration, handshake, status).
# - TCP 9000: audio stream channel for local library playback.
# If 9000 is blocked, internet radio may still work (clients connect directly to external servers),
# but playback of music stored on the LMS host will fail because audio delivery depends on 9000.
- name: sqz-http
port: 9000
targetPort: 9000
protocol: TCP
- name: sqz-tcp
port: 3483
nodePort: 31444
targetPort: 3483
protocol: TCP
- name: sqz-udp
port: 3483
nodePort: 31445
targetPort: 3483
protocol: UDP

27
deploy/infra/cd-rbac.yaml Normal file
View File

@@ -0,0 +1,27 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: lyrionmusicserver
name: ci-cd # change name to continuous-deploy
rules:
- apiGroups: [""]
resources: ["pods", "services", "secrets", "configmaps", "persistentvolumeclaims", "endpoints"]
verbs: ["get", "watch", "list", "create", "update", "patch", "delete"]
- apiGroups: ["apps"]
resources: ["deployments", "statefulsets"]
verbs: ["get", "watch", "list", "create", "update", "patch", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: ci-cd #change name to continuous-deploy
namespace: lyrionmusicserver
subjects:
- kind: ServiceAccount
name: casa-ci-cd
namespace: home-assistant
roleRef:
kind: Role
name: ci-cd
apiGroup: rbac.authorization.k8s.io

16
deploy/infra/ingress.yaml Normal file
View File

@@ -0,0 +1,16 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: lyrionmusicserver
namespace: lyrionmusicserver
spec:
entryPoints:
- websecure
routes:
- match: Host(`lms.casa.limbosolutions.com`)
kind: Rule
services:
- name: lyrionmusicserver-web
port: 9000
tls:
secretName: casa-limbosolutions-com-tls

View File

@@ -0,0 +1,8 @@
kind: Kustomization
resources:
- namespace.yaml
- cd-rbac.yaml
- music-pv.yaml
- ingress.yaml
generatorOptions:
disableNameSuffixHash: true

View File

@@ -0,0 +1,18 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: storage-limbosolutions-com-media-music
spec:
accessModes:
- ReadOnlyMany
capacity:
storage: 128Gi
csi:
driver: storage-limbosolutions-com-seaweedfs-csi
volumeHandle: storage-limbosolutions-com-media-music
volumeAttributes:
collection: media.music
path: /buckets/media.music
volumeServerAccess: filerProxy
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem

View File

@@ -0,0 +1,7 @@
apiVersion: v1
kind: Namespace
metadata:
name: lyrionmusicserver
labels:
name: lyrionmusicserver

View File

@@ -1,21 +0,0 @@
version: '3'
services:
lms:
image: lmscommunity/logitechmediaserver:8.3.0
volumes:
- config:/config
- music:/music
- playlist:/playlist
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
ports:
- 9000:9000/tcp
- 9090:9090/tcp
- 3483:3483/tcp
- 3483:3483/udp
restart: always
volumes:
config:
playlist:
music:
external: true # docker volume create --driver local --opt type=none --opt device=/srv/music@nas.lan --opt o=bind music

5
ops-scripts/apply-app.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/bash
set -e
echo "Executing app deploy."
kubectl kustomize deploy/app | kubectl apply -f -

5
ops-scripts/apply-infra.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/bash
set -e
echo "Executing infra deploy."
kubectl kustomize deploy/infra | kubectl apply -f -