Self hosted

Docker Usage

The application can run without copying config.yaml into the container. If no config file exists, it will automatically create one with sensible defaults. Use environment variables to override specific settings:

# Build the image
podman build -t musicarr .

# Run with environment variables (config.yaml will be auto-created if missing)
podman run -d \
  --name musicarr \
  -p 3535:3535 \
  -v /host/music:/app/library \
  -v /host/downloads:/app/downloads \
  -v /host/logs:/app/logs \
  -v /host/library.db:/app/library.db \
  -v /host/config.yaml:/app/config.yaml \
  -e TELEGRAM_TOKEN="your_token" \
  -e DEEZER_ARL="your_arl" \
  musicarr

The web interface will be available at http://localhost:3535.

Alternatively, you can use the provided Containerfile to build a container image for Musicarr.

Here’s an example compose.yaml file:

version: "3.8"
services:
  musicarr:
    image: musicarr:latest
    ports:
      - "3535:3535"
    volumes:
      - ./config.yaml:/app/config.yaml
      - ./library.db:/app/library.db
      - ./logs:/app/logs
    environment:
      - TELEGRAM_TOKEN=your_telegram_bot_token_here
    restart: unless-stopped

Alternatively, you can use Podman commands or Podman-kube pod YAMLs for deployment.

apiVersion: v1
kind: Pod
metadata:
  name: musicarr
  annotations:
    io.podman.annotations.infra.name: "musicarr-infra"
  labels:
    app: Musicarr
    purpose: Music Server
    category: Musicarr
    language: Go
    content: movies,series,music
    homepage.group: Musicarr
    homepage.name: Musicarr
    homepage.icon: musicarr.png
    homepage.instance.internal.href: https://musicarr.server.home
    homepage.instance.public.href: https://musicarr.contre.io
    homepage.description: Musicarr server
spec:
  restartPolicy: OnFailure
  containers:
    - name: musicarr
      image: contre95/musicarr:beta
      ports:
        - containerPort: 3535
          hostPort: 3055
      securityContext:
        allowPrivilegeEscalation: false
        capabilities: {}
        privileged: false
        readOnlyRootFilesystem: false
      volumeMounts:
        - mountPath: /app/config.yaml
          name: config
        - mountPath: /music
          name: music
        - mountPath: /downloads
          name: downloads
        - mountPath: /dev
          name: disk-by-uuid
          readOnly: true
  volumes:
    - name: music
      hostPath:
        path: /path/to/musicarr_music
        type: DirectoryOrCreate
     - name: downloads
       hostPath:
         path: /path/to/musicarr_downloads
         type: DirectoryOrCreate
    - name: config
      hostPath:
        path: ./config/config.yaml
        type: File
     - name: disk-by-uuid
       hostPath:
         path: /dev
         Type: Directory

Development

If you are lucky enough to have nix. You can simple run the following command the all dev dependencies will be setup for you.

nix-shell dev.nix

Building CSS

Logs

Application logs are written to stdout/stderr. For more detailed logging, check the job logs in ./logs/jobs/ by default.