All Projects → sentriz → Gonic

sentriz / Gonic

Licence: gpl-3.0
music streaming server / subsonic server API implementation

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Gonic

Lms
Lightweight Music Server. Access your self-hosted music using a web interface.
Stars: ✭ 315 (-30.16%)
Mutual labels:  self-hosted
Paste
A sensible, modern pastebin.
Stars: ✭ 367 (-18.63%)
Mutual labels:  self-hosted
Gossa
🎶 a fast and simple multimedia fileserver
Stars: ✭ 390 (-13.53%)
Mutual labels:  self-hosted
Sapphiredb
SapphireDb Server, a self-hosted, easy to use realtime database for Asp.Net Core and EF Core
Stars: ✭ 326 (-27.72%)
Mutual labels:  self-hosted
Kibitzr
Personal Web Assistant
Stars: ✭ 358 (-20.62%)
Mutual labels:  self-hosted
Swarmlet
A self-hosted, open-source Platform as a Service that enables easy swarm deployments, load balancing, automatic SSL, metrics, analytics and more.
Stars: ✭ 373 (-17.29%)
Mutual labels:  self-hosted
Deploy Your Own Saas
List of "only yours" cloud services for everyday needs 🏴
Stars: ✭ 3,561 (+689.58%)
Mutual labels:  self-hosted
Ontrack
💸 A simple self-hosted budgeting app
Stars: ✭ 438 (-2.88%)
Mutual labels:  self-hosted
Xbackbone
A lightweight file manager with full ShareX, Screencloud support and more
Stars: ✭ 359 (-20.4%)
Mutual labels:  self-hosted
Para
Open source back-end server for web, mobile and IoT. The backend for busy developers. (self-hosted or hosted)
Stars: ✭ 389 (-13.75%)
Mutual labels:  self-hosted
Terraform Aws Github Runner
Terraform module for scalable GitHub action runners on AWS
Stars: ✭ 326 (-27.72%)
Mutual labels:  self-hosted
Cloudflare Ddns
🎉🌩️ Dynamic DNS (DDNS) service based on Cloudflare! Access your home network remotely via a custom domain name without a static IP!
Stars: ✭ 332 (-26.39%)
Mutual labels:  self-hosted
Onpremise
Sentry, feature-complete and packaged up for low-volume deployments and proofs-of-concept
Stars: ✭ 4,558 (+910.64%)
Mutual labels:  self-hosted
Mediacms
MediaCMS is a modern, fully featured open source video and media CMS, written in Python/Django and React, featuring a REST API.
Stars: ✭ 313 (-30.6%)
Mutual labels:  self-hosted
Docker Ddns
Easy-to-deploy dynamic DNS with Docker, Go and Bind9
Stars: ✭ 392 (-13.08%)
Mutual labels:  self-hosted
Codervault
An Open Source, Self-Hosted, Snippet Manager
Stars: ✭ 315 (-30.16%)
Mutual labels:  self-hosted
Haven
Self-hostable private blogging
Stars: ✭ 373 (-17.29%)
Mutual labels:  self-hosted
Monitorr
"Monitorr” is a self-hosted PHP web app that monitors the status of local and remote network services, websites, and applications.
Stars: ✭ 449 (-0.44%)
Mutual labels:  self-hosted
Mealie
Mealie is a self hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the url and mealie will automatically import the relevant data or add a family recipe with the UI editor
Stars: ✭ 404 (-10.42%)
Mutual labels:  self-hosted
Offen
The fair and lightweight alternative to common web analytics tools.
Stars: ✭ 385 (-14.63%)
Mutual labels:  self-hosted

FLOSS alternative to subsonic, supporting its many clients

features

  • browsing by folder (keeping your full tree intact) see here
  • browsing by tags (using taglib - supports mp3, opus, flac, ape, m4a, wav, etc.)
  • on-the-fly audio transcoding and caching (requires ffmpeg) (thank you spijet)
  • jukebox mode (thank you lxea)
  • support for per-user podcasts (thank you lxea)
  • pretty fast scanning (with my library of ~27k tracks, initial scan takes about 10m, and about 5s after incrementally)
  • multiple users, each with their own transcoding preferences, playlists, top tracks, top artists, etc.
  • last.fm scrobbling
  • listenbrainz scrobbling (thank you spezifisch, lxea)
  • artist similarities and biographies from the last.fm api
  • multiple genre support (see GONIC_GENRE_SPLIT to split tag strings on a character, eg. ;, and browse them individually)
  • a web interface for configuration (set up last.fm, manage users, start scans, etc.)
  • support for the album-artist tag, to not clutter your artist list with compilation album appearances
  • written in go, so lightweight and suitable for a raspberry pi, etc. (see ARM images below)
  • newer salt and token auth
  • tested on dsub, jamstash, sublime music, soundwaves, and stmp

installation

the default login is admin/admin.
password can then be changed from the web interface

...from source

$ apt install build-essential git sqlite libtag1-dev ffmpeg libasound-dev # for debian like
$ pacman -S base-devel git sqlite taglib ffmpeg alsa-lib                  # for arch like
$ go get go.senan.xyz/gonic/cmd/gonic
$ export PATH=$PATH:$HOME/go/bin
$ gonic -h # or see "configuration options below"

note: unfortunately if you do this above, you'll be compiling gonic locally on your machine (if someone knows how I can statically link sqlite3 and taglib, please let me know so I can distribute static binaries)

...with docker

the image is available on dockerhub as sentriz/gonic

available architectures are

  • linux/amd64
  • linux/arm/v6
  • linux/arm/v7
  • linux/arm64
# example docker-compose.yml

version: '2.4'
services:
  gonic:
    image: sentriz/gonic:latest
    environment:
    - TZ
    # optionally, see more env vars below
    expose:
    - 80
    volumes:
    - ./data:/data                # gonic db etc
    - /path/to/music:/music:ro    # your music
    - /path/to/podcasts:/podcasts # your podcasts
    - /path/to/cache:/cache       # transcode / covers / etc cache dir

    # set the following two sections if you've enabled jukebox
    group_add:
    - audio
    devices:
    - /dev/snd:/dev/snd

then start with docker-compose up -d

...with systemd

example by @IUCCA, tested on Ubuntu 18.04

  1. add a repository with the latest Version of golang and install the prerequisites
$ sudo add-apt-repository ppa:longsleep/golang-backports
$ sudo apt update && sudo apt upgrade
$ sudo apt install build-essential git sqlite libtag1-dev ffmpeg libasound-dev golang
  1. download and compile gonic in the home directory
$ go get go.senan.xyz/gonic/cmd/gonic
  1. add a gonic user and create a directory for the server
$ sudo mkdir -p /var/gonic/
$ sudo adduser --disabled-login --gecos "" gonic
$ sudo mv go/bin/gonic /var/gonic/
$ sudo wget https://raw.githubusercontent.com/sentriz/gonic/master/contrib/config -O /var/gonic/config
$ sudo chmod -R 750 /var/gonic/
$ sudo chown -R gonic:gonic /var/gonic/
  1. add your music-path to the config file
$ sudo nano /var/gonic/config
  1. setup systemd service
$ sudo wget https://raw.githubusercontent.com/sentriz/gonic/master/contrib/gonic.service -O /etc/systemd/system/gonic.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now gonic

...elsewhere

configuration options

env var command line arg description
GONIC_MUSIC_PATH -music-path path to your music collection
GONIC_PODCAST_PATH -podcast-path path to a podcasts directory
GONIC_CACHE_PATH -cache-path path to store audio transcodes, covers, etc
GONIC_DB_PATH -db-path optional path to database file
GONIC_LISTEN_ADDR -listen-addr optional host and port to listen on (eg. 0.0.0.0:4747, 127.0.0.1:4747) (default 0.0.0.0:4747)
GONIC_PROXY_PREFIX -proxy-prefix optional url path prefix to use if behind reverse proxy. eg /gonic (see example configs below)
GONIC_SCAN_INTERVAL -scan-interval optional interval (in minutes) to check for new music (automatic scanning disabled if omitted)
GONIC_JUKEBOX_ENABLED -jukebox-enabled optional whether the subsonic jukebox api should be enabled
GONIC_GENRE_SPLIT -genre-split optional a string or character to split genre tags on for multi-genre support (eg. ;)

screenshots

example nginx config with GONIC_PROXY_PREFIX

  location /gonic/ {
      proxy_pass http://localhost:4747/;
      # set "Secure" cookie if using HTTPS
      proxy_cookie_path / "/; Secure";
      # set "X-Forwarded-Host" header for last.fm connection callback
      proxy_set_header X-Forwarded-Host $host;
  }

directory structure

when browsing by folder, any arbitrary and nested folder layout is supported. with one exception: albums must be contained in a single folder

please see here for more context

music
├── drum and bass
│   └── Photek
│       └── (1997) Modus Operandi
│           ├── 01.10 The Hidden Camera.flac
│           ├── 02.10 Smoke Rings.flac
│           ├── 03.10 Minotaur.flac
│           └── folder.jpg
└── experimental
    └── Alan Vega
        ├── (1980) Alan Vega
        │   ├── 01.08 Jukebox Babe.flac
        │   ├── 02.08 Fireball.flac
        │   ├── 03.08 Kung Foo Cowboy.flac
        │   └── folder.jpg
        └── (1990) Deuce Avenue
            ├── 01.13 Body Bop Jive.flac
            ├── 02.13 Sneaker Gun Fire.flac
            ├── 03.13 Jab Gee.flac
            └── folder.jpg
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].