diff options
author | getzze | 2018-11-03 23:41:48 +0000 |
---|---|---|
committer | getzze | 2018-11-03 23:41:48 +0000 |
commit | 0a98f273576c7ed2bf000882730e2ccac1dcd9cb (patch) | |
tree | f50174daa78173beb5a410a565952ff92b760fc6 | |
download | aur-0a98f273576c7ed2bf000882730e2ccac1dcd9cb.tar.gz |
version 0.17
-rw-r--r-- | .SRCINFO | 81 | ||||
-rw-r--r-- | PKGBUILD | 121 | ||||
-rw-r--r-- | apache-funkwhale.conf | 136 | ||||
-rw-r--r-- | env-template | 141 |
4 files changed, 479 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..eb0c702f30b3 --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,81 @@ +pkgbase = funkwhale + pkgdesc = A self-hosted, modern free and open-source music server, heavily inspired by Grooveshark. + pkgver = 0.17 + pkgrel = 1 + url = https://funkwhale.audio/ + arch = any + license = GPL3 + makedepends = git + depends = ffmpeg + depends = libjpeg + depends = postgresql + depends = python + depends = youtube-dl + depends = ipython + depends = mod_xsendfile + depends = python-django>=2 + depends = python-django-environ + depends = python-whitenoise + depends = python-pillow + depends = python-django-allauth + depends = python-psycopg2 + depends = python-pytz + depends = python-redis + depends = python-django-redis + depends = python-celery + depends = python-django-cors-headers + depends = python-musicbrainzngs + depends = python-django-rest-framework + depends = python-django-rest-framework-jwt + depends = python-oauth2client + depends = python-google-api-python-client + depends = python-pendulum + depends = python-persisting-theory + depends = python-django-versatile-imagefield + depends = python-django-filter1.1 + depends = python-django-rest-auth + depends = python-beautifulsoup4 + depends = python-markdown + depends = python-mutagen + depends = python-django-taggit + depends = python-pymemoize + depends = python-django-dynamic-preferences + depends = python-pyacoustid + depends = python-raven + depends = python-magic-git + depends = python-ffmpeg + depends = python-django-channels + depends = python-django-channels-redis + depends = python-daphne + depends = python-cryptography + depends = python-requests-http-signature + depends = python-django-cleanup + depends = python-ldap + depends = python-django-auth-ldap + depends = python-service-identity + optdepends = apache: to use the Apache web server + optdepends = certbot-apache: for the server to be accessible from outside + optdepends = nginx: to use nginx web server + source = funkwhale-0.17-api.zip::https://code.eliotberriot.com/funkwhale/funkwhale/builds/artifacts/0.17/download?job=build_api + source = funkwhale-0.17-front.zip::https://code.eliotberriot.com/funkwhale/funkwhale/builds/artifacts/0.17/download?job=build_front + source = https://code.eliotberriot.com/funkwhale/funkwhale/raw/0.17/deploy/funkwhale_proxy.conf + source = https://code.eliotberriot.com/funkwhale/funkwhale/raw/0.17/deploy/nginx.template + source = https://code.eliotberriot.com/funkwhale/funkwhale/raw/0.17/deploy/funkwhale.target + source = https://code.eliotberriot.com/funkwhale/funkwhale/raw/0.17/deploy/funkwhale-beat.service + source = https://code.eliotberriot.com/funkwhale/funkwhale/raw/0.17/deploy/funkwhale-worker.service + source = https://code.eliotberriot.com/funkwhale/funkwhale/raw/0.17/deploy/funkwhale-server.service + source = apache-funkwhale.conf + source = env-template + sha256sums = 8211b9ff86cde6557ff8b3904ffeb7380e18e47b7b4b76c91f30986d284911a3 + sha256sums = 3578e1c60da578681c4e60a94dde1e18511f2455814c980b24748c87ffb8b4a2 + sha256sums = 2906a075b41dcd2375c601482cb5a00e42cb87c613012b176c570d77918afbf2 + sha256sums = 0d022981f24c9ed8306751d905e85a2fa086c124d7284cc765a3a83814e6efd8 + sha256sums = 9a84d9e1f105cd92448e6e4696e11412584b616b248d578e2fe756972a20f74e + sha256sums = b30fd8f119a53a424c9372a3fdcaad3175f33f242b498b0348c697942573588d + sha256sums = 976ddd2f409efa367e8f53d96092007d0886a473507294a3092a96e885b5e59a + sha256sums = b2ff1a2911883416b3a8c35a3e579d493c0bcf4039604020a206c6e8b5fc0ba7 + sha256sums = 26f91e1b22d7c46a6e26c25889babb8d5e77f7a4aec06bd61833cf953fd48f4a + sha256sums = 90c9a2b1ef1ac58589eda10c09a9af8141813aa6b661251eb571a1f757bea8c5 + +pkgname = funkwhale + diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..66744ee0a7d5 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,121 @@ +# Maintainer: getzze <getzze at gmail dot com> + +pkgname=funkwhale +pkgver=0.17 +pkgrel=1 +pkgdesc="A self-hosted, modern free and open-source music server, heavily inspired by Grooveshark." +arch=(any) +url="https://funkwhale.audio/" +license=(GPL3) +optdepends=('apache: to use the Apache web server' + 'certbot-apache: for the server to be accessible from outside' + 'nginx: to use nginx web server') +depends=('ffmpeg' 'libjpeg' 'postgresql' 'python' 'youtube-dl' + 'ipython' + 'mod_xsendfile' + 'python-django>=2' + 'python-django-environ' + 'python-whitenoise' + 'python-pillow' + 'python-django-allauth' + 'python-psycopg2' + 'python-pytz' + 'python-redis' + 'python-django-redis' + 'python-celery' + 'python-django-cors-headers' + 'python-musicbrainzngs' + 'python-django-rest-framework' + 'python-django-rest-framework-jwt' + 'python-oauth2client' + 'python-google-api-python-client' + 'python-pendulum' + 'python-persisting-theory' + 'python-django-versatile-imagefield' + 'python-django-filter1.1' + 'python-django-rest-auth' + 'python-beautifulsoup4' + 'python-markdown' + 'python-mutagen' + 'python-django-taggit' + 'python-pymemoize' + 'python-django-dynamic-preferences' + 'python-pyacoustid' + 'python-raven' + 'python-magic-git' + 'python-ffmpeg' + 'python-django-channels' + 'python-django-channels-redis' + 'python-daphne' + 'python-cryptography' + 'python-requests-http-signature' + 'python-django-cleanup' + 'python-ldap' + 'python-django-auth-ldap' + 'python-service-identity' +) +makedepends=(git) +_source_api="https://code.eliotberriot.com/funkwhale/funkwhale/builds/artifacts/${pkgver}/download?job=" +_source_env="https://code.eliotberriot.com/funkwhale/funkwhale/raw/${pkgver}/deploy/" +source=("${pkgname}-${pkgver}-api.zip::${_source_api}build_api" + "${pkgname}-${pkgver}-front.zip::${_source_api}build_front" + "${_source_env}funkwhale_proxy.conf" + "${_source_env}nginx.template" + "${_source_env}funkwhale.target" + "${_source_env}funkwhale-beat.service" + "${_source_env}funkwhale-worker.service" + "${_source_env}funkwhale-server.service" + "apache-funkwhale.conf" + "env-template" +) +sha256sums=('8211b9ff86cde6557ff8b3904ffeb7380e18e47b7b4b76c91f30986d284911a3' + '3578e1c60da578681c4e60a94dde1e18511f2455814c980b24748c87ffb8b4a2' + '2906a075b41dcd2375c601482cb5a00e42cb87c613012b176c570d77918afbf2' + '0d022981f24c9ed8306751d905e85a2fa086c124d7284cc765a3a83814e6efd8' + '9a84d9e1f105cd92448e6e4696e11412584b616b248d578e2fe756972a20f74e' + 'b30fd8f119a53a424c9372a3fdcaad3175f33f242b498b0348c697942573588d' + '976ddd2f409efa367e8f53d96092007d0886a473507294a3092a96e885b5e59a' + 'b2ff1a2911883416b3a8c35a3e579d493c0bcf4039604020a206c6e8b5fc0ba7' + '26f91e1b22d7c46a6e26c25889babb8d5e77f7a4aec06bd61833cf953fd48f4a' + '90c9a2b1ef1ac58589eda10c09a9af8141813aa6b661251eb571a1f757bea8c5') + +prepare() { + cd "$srcdir" + + sed -i 's#WorkingDirectory=/srv/funkwhale/api#WorkingDirectory=/usr/share/webapps/funkwhale/api#' *.service + sed -i 's#EnvironmentFile=/srv/funkwhale/config/.env#EnvironmentFile=/etc/webapps/funkwhale/config/.env#' *.service + sed -i 's#ExecStart=/srv/funkwhale/virtualenv/bin/#ExecStart=/usr/bin/#' *.service + + +} + +build() { + cd "$srcdir" + ## TODO: build front-end from source +} + +package() { + cd "$srcdir" + + # install project + install -d "$pkgdir"/usr/share/webapps/${pkgname} + cp -R api "$pkgdir"/usr/share/webapps/${pkgname}/. + cp -R front "$pkgdir"/usr/share/webapps/${pkgname}/. + chown -R funkwhale:funkwhale "$pkgdir"/usr/share/webapps/${pkgname} + + install -d "$pkgdir"/etc/webapps/${pkgname}/config + install -Dm644 funkwhale_proxy.conf "$pkgdir"/etc/webapps/${pkgname}/. + install -Dm644 nginx.template "$pkgdir"/etc/webapps/${pkgname}/. + install -Dm644 apache-funkwhale.conf "$pkgdir"/etc/webapps/${pkgname}/. + install -Dm644 env-template "$pkgdir"/etc/webapps/${pkgname}/env.template + + install -Dm644 funkwhale.target "$pkgdir/usr/lib/systemd/system/funkwhale.target" + install -Dm644 funkwhale-beat.service "$pkgdir/usr/lib/systemd/system/funkwhale-beat.service" + install -Dm644 funkwhale-worker.service "$pkgdir/usr/lib/systemd/system/funkwhale-worker.service" + install -Dm644 funkwhale-server.service "$pkgdir/usr/lib/systemd/system/funkwhale-server.service" + + echo 'u funkwhale - "Funkwhale music server" /srv/funkwhale' | + install -Dm644 /dev/stdin "$pkgdir/usr/lib/sysusers.d/$pkgname.conf" + echo 'd /srv/funkwhale 0775 funkwhale funkwhale' | + install -Dm644 /dev/stdin "$pkgdir/usr/lib/tmpfiles.d/$pkgname.conf" +} diff --git a/apache-funkwhale.conf b/apache-funkwhale.conf new file mode 100644 index 000000000000..18a1cdf831fc --- /dev/null +++ b/apache-funkwhale.conf @@ -0,0 +1,136 @@ +# Following variables MUST be modified according to your setup +Define funkwhale-sn funkwhale.local + +# Following variables should be modified according to your setup and if you +# use different configuration than what is described in our installation guide. +Define funkwhale-api http://localhost:5000 +Define funkwhale-api-ws ws://localhost:5000 +Define FRONTEND_PATH /usr/share/webapps/funkwhale/front/dist +Define MUSIC_DIRECTORY_PATH /srv/funkwhale/data/music + +# HTTP requests redirected to HTTPS +<VirtualHost 127.0.0.2:80> + ServerName ${funkwhale-sn} + + # Default is to force https + RewriteEngine on + RewriteCond %{SERVER_NAME} =${funkwhale-sn} + RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] + + <Location "/.well-known/acme-challenge/"> + Options None + Require all granted + </Location> +</VirtualHost> + + +<IfModule mod_ssl.c> +<VirtualHost 127.0.0.2:443> + # Protocols h2 http/1.1 + ServerName ${funkwhale-sn} + + # Path to ErrorLog and access log + ErrorLog /var/log/httpd/funkwhale/error.log + CustomLog /var/log/httpd/funkwhale/access.log combined + + # 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/lets-encrypt/debianstretch-apache.html + SSLEngine on + SSLProxyEngine On + SSLCertificateFile "/etc/webapps/funkwhale/config/funkwhale-server.crt" + SSLCertificateKeyFile "/etc/webapps/funkwhale/config/funkwhale-server.key" +# SSLCertificateFile /etc/letsencrypt/live/${funkwhale-sn}/fullchain.pem +# SSLCertificateKeyFile /etc/letsencrypt/live/${funkwhale-sn}/privkey.pem +# Include /etc/letsencrypt/options-ssl-apache.conf + + # Tell the api that the client is using https + RequestHeader set X-Forwarded-Proto "https" + + DocumentRoot ${FRONTEND_PATH} + + FallbackResource /index.html + + # Configure Proxy settings + # ProxyPreserveHost pass the original Host header to the backend server + ProxyVia On + ProxyPreserveHost On + <IfModule mod_remoteip.c> + RemoteIPHeader X-Forwarded-For + </IfModule> + + # Turning ProxyRequests on and allowing proxying from all may allow + # spammers to use your proxy to send email. + ProxyRequests Off + + <Proxy *> + AddDefaultCharset off + Order Allow,Deny + Allow from all + </Proxy> + + # Activating WebSockets + ProxyPass "/api/v1/instance/activity" ${funkwhale-api-ws}/api/v1/instance/activity + + <Location "/api"> + # similar to nginx 'client_max_body_size 30M;' + LimitRequestBody 31457280 + + ProxyPass ${funkwhale-api}/api + ProxyPassReverse ${funkwhale-api}/api + </Location> + <Location "/federation"> + ProxyPass ${funkwhale-api}/federation + ProxyPassReverse ${funkwhale-api}/federation + </Location> + + # You can comment this if you don't plan to use the Subsonic API + <Location "/rest"> + ProxyPass ${funkwhale-api}/api/subsonic/rest + ProxyPassReverse ${funkwhale-api}/api/subsonic/rest + </Location> + + <Location "/.well-known/"> + ProxyPass ${funkwhale-api}/.well-known/ + ProxyPassReverse ${funkwhale-api}/.well-known/ + </Location> + + Alias /media /srv/funkwhale/data/media + + Alias /staticfiles /srv/funkwhale/data/static + + # Setting appropriate access levels to serve frontend + <Directory "/srv/funkwhale/data/static"> + Options FollowSymLinks + AllowOverride None + Require all granted + </Directory> + + <Directory ${FRONTEND_PATH}> + Options FollowSymLinks + AllowOverride None + Require all granted + </Directory> + + <Directory /srv/funkwhale/data/media> + Options FollowSymLinks + AllowOverride None + Require all granted + </Directory> + + # XSendFile is serving audio files + # WARNING : permissions on paths specified below overrides previous definition, + # everything under those paths is potentially exposed. + # Following directive may be needed to ensure xsendfile is loaded + LoadModule xsendfile_module modules/mod_xsendfile.so + <IfModule mod_xsendfile.c> + XSendFile On + XSendFilePath /srv/funkwhale/data/media + XSendFilePath ${MUSIC_DIRECTORY_PATH} + SetEnv MOD_X_SENDFILE_ENABLED 1 + </IfModule> +</VirtualHost> +</IfModule> diff --git a/env-template b/env-template new file mode 100644 index 000000000000..595ed943a985 --- /dev/null +++ b/env-template @@ -0,0 +1,141 @@ +# If you have any doubts about what a setting does, +# check https://docs.funkwhale.audio/configuration.html#configuration-reference + +# If you're tweaking this file from the template, ensure you edit at least the +# following variables: +# - DJANGO_SECRET_KEY +# - DJANGO_ALLOWED_HOSTS +# - FUNKWHALE_HOSTNAME +# - EMAIL_CONFIG and DEFAULT_FROM_EMAIL if you plan to send emails) +# On non-docker setup **only**, you'll also have to tweak/uncomment those variables: +# - DATABASE_URL +# - CACHE_URL +# +# You **don't** need to update those variables on pure docker setups. +# +# Additional options you may want to check: +# - MUSIC_DIRECTORY_PATH and MUSIC_DIRECTORY_SERVE_PATH if you plan to use +# in-place import +# +# Docker only +# ----------- + +# The tag of the image we should use +# (it will be interpolated in docker-compose file) +# You can comment or ignore this if you're not using docker +FUNKWHALE_VERSION=latest + +# End of Docker-only configuration + +# General configuration +# --------------------- + +# Set this variables to bind the API server to another interface/port +# example: FUNKWHALE_API_IP=0.0.0.0 +# example: FUNKWHALE_API_PORT=5678 +FUNKWHALE_API_IP=127.0.0.1 +FUNKWHALE_API_PORT=5000 + +# Replace this by the definitive, public domain you will use for +# your instance +FUNKWHALE_HOSTNAME=funkwhale.local +FUNKWHALE_PROTOCOL=https + +# Configure email sending using this variale +# By default, funkwhale will output emails sent to stdout +# here are a few examples for this setting +# EMAIL_CONFIG=consolemail:// # output emails to console (the default) +# EMAIL_CONFIG=dummymail:// # disable email sending completely +# On a production instance, you'll usually want to use an external SMTP server: +# EMAIL_CONFIG=smtp://user@:password@youremail.host:25 +# EMAIL_CONFIG=smtp+ssl://user@:password@youremail.host:465 +# EMAIL_CONFIG=smtp+tls://user@:password@youremail.host:587 + +# The email address to use to send system emails. +# DEFAULT_FROM_EMAIL=noreply@yourdomain + +# Depending on the reverse proxy used in front of your funkwhale instance, +# the API will use different kind of headers to serve audio files +# Allowed values: nginx, apache2 +REVERSE_PROXY_TYPE=apache2 + +# API/Django configuration + +# Database configuration +# Examples: +# DATABASE_URL=postgresql://<user>:<password>@<host>:<port>/<database> +# DATABASE_URL=postgresql://funkwhale:passw0rd@localhost:5432/funkwhale_database +# Use the next one if you followed Debian installation guide +DATABASE_URL=postgresql://funkwhale@:5432/funkwhale + +# Cache configuration +# Examples: +# CACHE_URL=redis://<host>:<port>/<database> +# CACHE_URL=redis://localhost:6379/0 +# Use the next one if you followed Debian installation guide +CACHE_URL=redis://127.0.0.1:6379/0 + +# Where media files (such as album covers or audio tracks) should be stored +# on your system? +# (Ensure this directory actually exists) +MEDIA_ROOT=/srv/funkwhale/data/media + +# Where static files (such as API css or icons) should be compiled +# on your system? +# (Ensure this directory actually exists) +STATIC_ROOT=/srv/funkwhale/data/static + +# Update it to match the domain that will be used to reach your funkwhale +# instance +# Example: DJANGO_ALLOWED_HOSTS=funkwhale.yourdomain.com +DJANGO_ALLOWED_HOSTS=127.0.0.2,funkwhale.local + +# which settings module should django use? +# You don't have to touch this unless you really know what you're doing +DJANGO_SETTINGS_MODULE=config.settings.production + +# Generate one using `openssl rand -base64 45`, for example +DJANGO_SECRET_KEY= + +# You don't have to edit this, but you can put the admin on another URL if you +# want to +# DJANGO_ADMIN_URL=^api/admin/ + +# Sentry/Raven error reporting (server side) +# Enable Raven if you want to help improve funkwhale by +# automatically sending error reports our Sentry instance. +# This will help us detect and correct bugs +RAVEN_ENABLED=false +RAVEN_DSN=https://44332e9fdd3d42879c7d35bf8562c6a4:0062dc16a22b41679cd5765e5342f716@sentry.eliotberriot.com/5 + +# In-place import settings +# You can safely leave those settings uncommented if you don't plan to use +# in place imports. +# Typical docker setup: +# MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music +# MUSIC_DIRECTORY_SERVE_PATH=/music # docker-only +# Typical non-docker setup: +# MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music +# # MUSIC_DIRECTORY_SERVE_PATH= # stays commented, not needed + +MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music +MUSIC_DIRECTORY_SERVE_PATH=/srv/funkwhale/data/music + +# LDAP settings +# Use the following options to allow authentication on your Funkwhale instance +# using a LDAP directory. +# Have a look at https://docs.funkwhale.audio/installation/ldap.html for +# detailed instructions. + +# LDAP_ENABLED=False +# LDAP_SERVER_URI=ldap://your.server:389 +# LDAP_BIND_DN=cn=admin,dc=domain,dc=com +# LDAP_BIND_PASSWORD=bindpassword +# LDAP_SEARCH_FILTER=(|(cn={0})(mail={0})) +# LDAP_START_TLS=False +# LDAP_ROOT_DN=dc=domain,dc=com + +FUNKWHALE_FRONTEND_PATH=/usr/share/webapps/funkwhale/front/dist + +# Nginx related configuration +NGINX_MAX_BODY_SIZE=30M |