Herramientas de usuario

Herramientas del sitio


proyectos:servidormusica

Tabla de Contenidos

Objetivo

Tener un servidor de musica al estilo spotify pero con una libreria de musica personal para varios usuarios y varias listas.

Software a probar:

  1. minidlna - lightweight DLNA/UPnP-AV server targeted at embedded systems
  2. mopidy - music server with support for MPD/HTTP clients
  3. forked-daapd - DAAP/DACP (iTunes) server, support for AirPlay and Roku devices
  4. Mpc + mpd
    • Se deben abrir dos puertos, uno para controlar el mpd y el otro para el stream que se envía.
    • El stream no funciona nítidamente.
  5. Funkwhale
  6. ampache
  7. koel

Funkwhale

cd /srv
mkdir funkwhale
cd funkwhale/
mkdir -p config data/static data/media data/music front
 
curl -L -o "api-1.0.1.zip" "https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/artifacts/1.0.1/download?job=build_api"
unzip "api-1.0.1.zip" -d extracted
mv extracted/api/* api/
rm -rf extracted
 
curl -L -o "front-1.0.1.zip" "https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/artifacts/1.0.1/download?job=build_front"
unzip "front-1.0.1.zip" -d extracted
mv extracted/front/dist front/
rm -rf extracted
 
python3 -m venv /srv/funkwhale/virtualenv
source /srv/funkwhale/virtualenv/bin/activate
pip3 install wheel
vi api/requirements/base.txt 
        watchdog~=1.0.0
pip3 install -r api/requirements.txt    
cp /srv/funkwhale/deploy/env.prod.sample /srv/funkwhale/config/.env
openssl rand -base64 45
chmod 600 /srv/funkwhale/config/.env  # reduce permissions on the .env file since it contains sensitive data
nano /srv/funkwhale/config/.env
    FUNKWHALE_HOSTNAME=dominio.dominio.com
    DATABASE_URL=postgresql://funkwhale:elpedo@localhost:5432/funkwhale
    CACHE_URL=redis://localhost:6379/0c
    DJANGO_SECRET_KEY=<<PASTE>>
 
python3 api/manage.py migrate
 
python3 api/manage.py createsuperuser
 
python3 api/manage.py fw users create -u primerusuario -p musicapw -e primerusuario@dominio.com
 
python3 api/manage.py collectstatic
$ cat /etc/nginx/sites-enabled/funkwhale.conf 
# This file was generated from funkwhale.template
 
upstream funkwhale-api {
    # depending on your setup, you may want to update this
    server 127.0.0.1:5000;
}
 
server {
    listen 80;
    listen [::]:80;
    # update this to match your instance name
    server_name dominio.dominio.com;
    # useful for Let's Encrypt
    location /.well-known/acme-challenge/ { allow all; }
    location / { return 301 https://$host$request_uri; }
}
 
# required for websocket support
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
 
server {
    listen      443 ssl http2;
    listen [::]:443 ssl http2;
 
    server_name dominio.dominio.com;
 
    # TLS
    # Feel free to use your own configuration for SSL here or simply remove the
    # lines and move the configuration to the previous server block if you
    # don't want to run funkwhale behind https (this is not recommended)
    # have a look here for let's encrypt configuration:
    # https://certbot.eff.org/all-instructions/#debian-9-stretch-nginx
    ssl_protocols TLSv1.2;
    ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
 
    ssl_certificate     /etc/letsencrypt/live/dominio.dominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dominio.dominio.com/privkey.pem;
    # HSTS
    add_header Strict-Transport-Security "max-age=31536000";
 
    # If you are using S3 to host your files, remember to add your S3 URL to the
    # media-src and img-src headers (e.g. img-src 'self' https://<your-S3-URL> data:)
 
    add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:";
    add_header Referrer-Policy "strict-origin-when-cross-origin";
 
 
    root /srv/funkwhale/front/dist;
    #root /srv/funkwhale/front/public;
 
    # compression settings
    gzip on;
    gzip_comp_level    5;
    gzip_min_length    256;
    gzip_proxied       any;
    gzip_vary          on;
 
    gzip_types
        application/javascript
        application/vnd.geo+json
        application/vnd.ms-fontobject
        application/x-font-ttf
        application/x-web-app-manifest+json
        font/opentype
        image/bmp
        image/svg+xml
        image/x-icon
        text/cache-manifest
        text/css
        text/plain
        text/vcard
        text/vnd.rim.location.xloc
        text/vtt
        text/x-component
        text/x-cross-domain-policy;
 
    # end of compression settings
    location / {
        include /etc/nginx/funkwhale_proxy.conf;
        # this is needed if you have file import via upload enabled
        client_max_body_size 100M;
        proxy_pass   http://funkwhale-api/;
    }
 
    location /front/ {
        add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:";
        add_header Referrer-Policy "strict-origin-when-cross-origin";
 
        add_header X-Frame-Options "SAMEORIGIN";
        alias /srv/funkwhale/front/dist/;
        expires 30d;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }
    location /front/embed.html {
        add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:";
        add_header Referrer-Policy "strict-origin-when-cross-origin";
 
        add_header X-Frame-Options "ALLOW";
        alias /srv/funkwhale/front/dist/embed.html;
        expires 30d;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }
 
    location /federation/ {
        include /etc/nginx/funkwhale_proxy.conf;
        proxy_pass   http://funkwhale-api/federation/;
    }
 
    # You can comment this if you do not plan to use the Subsonic API
    location /rest/ {
        include /etc/nginx/funkwhale_proxy.conf;
        proxy_pass   http://funkwhale-api/api/subsonic/rest/;
    }
 
    location /.well-known/ {
        include /etc/nginx/funkwhale_proxy.conf;
        proxy_pass   http://funkwhale-api/.well-known/;
    }
 
    location /media/ {
        alias /srv/funkwhale/data/media/;
    }
 
    location /_protected/media {
        # this is an internal location that is used to serve
        # audio files once correct permission / authentication
        # has been checked on API side
        internal;
        alias   /srv/funkwhale/data/media;
    }
 
    # Comment the previous location and uncomment this one if you're storing
    # media files in a S3 bucket
    # location ~ /_protected/media/(.+) {
    #     internal;
    #     # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932
    #     proxy_set_header Authorization "";
    #     proxy_pass $1;
    # }
 
    location /_protected/music {
        # this is an internal location that is used to serve
        # audio files once correct permission / authentication
        # has been checked on API side
        # Set this to the same value as your MUSIC_DIRECTORY_PATH setting
        internal;
        alias   /srv/funkwhale/data/music;
    }
 
    location /staticfiles/ {
        # django static files
        alias /srv/funkwhale/data/static/;
    }
}
curl -L -o "/etc/systemd/system/funkwhale.target" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/1.0.1/deploy/funkwhale.target"
curl -L -o "/etc/systemd/system/funkwhale-server.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/1.0.1/deploy/funkwhale-server.service"
curl -L -o "/etc/systemd/system/funkwhale-worker.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/1.0.1/deploy/funkwhale-worker.service"
curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/1.0.1/deploy/funkwhale-beat.service"
 
nano /etc/systemd/system/funkwhale-worker.service
   ExecStart=/srv/funkwhale/virtualenv/bin/celery -A funkwhale_api.taskapp worker -l INFO --concurrency=${CELERYD_CONCURRENCY}
 
 
systemctl daemon-reload
 
systemctl  restart funkwhale-server; systemctl  restart funkwhale-worker; systemctl  restart funkwhale-beat; systemctl status funkwhale-\*;
export LIBRARY_ID="37802ba5-c403-486c-9fc5-1fbb218757a1"
python3 api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/albums/" --recursive --noinput --in-place

Exfalso

apt install exfalso
apt install kakasi
apt install python-paho-mqtt python3-paho-mqtt

Referencias

proyectos/servidormusica.txt · Última modificación: por manuel.floresv