Rewrite admin documentation

gitpod/test-1866
Ciarán Ainsworth 2022-07-01 09:02:29 +00:00
rodzic f0857ae5fd
commit 17f1941b0b
248 zmienionych plików z 11422 dodań i 10670 usunięć

Wyświetl plik

@ -3587,8 +3587,8 @@ without developping our own alternative clients for each and every platform.
Most advanced Subsonic clients support offline caching of music files,
playlist management and search, which makes them well-suited for nomadic use.
Please head over :doc:`users/apps` for more informations about supported clients
and user instructions.
Please see `our list of supported apps <https://funkwhale.audio/en_US/apps>`_
for more informations about supported clients and user instructions.
At the instance-level, the Subsonic API is enabled by default, but require
and additional endpoint to be added in you reverse-proxy configuration.

Wyświetl plik

@ -125,7 +125,7 @@ else:
try:
FUNKWHALE_HOSTNAME = env("FUNKWHALE_HOSTNAME")
"""
Hostname of your Funkwhale pod, e.g. ``mypod.audio``
Hostname of your Funkwhale pod, e.g. ``mypod.audio``.
"""
FUNKWHALE_PROTOCOL = env("FUNKWHALE_PROTOCOL", default="https")
@ -309,7 +309,7 @@ DEFAULT_FROM_EMAIL = env(
"DEFAULT_FROM_EMAIL", default="Funkwhale <noreply@{}>".format(FUNKWHALE_HOSTNAME)
)
"""
Name and e-mail address used to send system e-mails.
Name and email address used to send system emails.
Default: ``Funkwhale <noreply@yourdomain>``
@ -321,17 +321,17 @@ Default: ``Funkwhale <noreply@yourdomain>``
"""
EMAIL_SUBJECT_PREFIX = env("EMAIL_SUBJECT_PREFIX", default="[Funkwhale] ")
"""
Subject prefix for system e-mails.
Subject prefix for system emails.
"""
SERVER_EMAIL = env("SERVER_EMAIL", default=DEFAULT_FROM_EMAIL)
EMAIL_CONFIG = env.email_url("EMAIL_CONFIG", default="consolemail://")
"""
SMTP configuration for sending e-mails. Possible values:
SMTP configuration for sending emails. Possible values:
- ``EMAIL_CONFIG=consolemail://``: output e-mails to console (the default)
- ``EMAIL_CONFIG=dummymail://``: disable e-mail sending completely
- ``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:
@ -339,15 +339,6 @@ On a production instance, you'll usually want to use an external SMTP server:
- ``EMAIL_CONFIG=smtp+ssl://user:password@youremail.host:465``
- ``EMAIL_CONFIG=smtp+tls://user:password@youremail.host:587``
.. note::
If ``user`` or ``password`` contain special characters (eg.
``noreply@youremail.host`` as ``user``), be sure to urlencode them, using
for example the command:
``python3 -c 'import urllib.parse; print(urllib.parse.quote_plus
("noreply@youremail.host"))'``
(returns ``noreply%40youremail.host``)
"""
vars().update(EMAIL_CONFIG)
@ -356,7 +347,7 @@ vars().update(EMAIL_CONFIG)
# See: https://docs.djangoproject.com/en/dev/ref/settings/#databases
DATABASE_URL = env.db("DATABASE_URL")
"""
URL to connect to the PostgreSQL database. Examples:
The URL used to connect to the PostgreSQL database. Examples:
- ``postgresql://funkwhale@:5432/funkwhale``
- ``postgresql://<user>:<password>@<host>:<port>/<database>``
@ -371,7 +362,7 @@ DB_CONN_MAX_AGE = DATABASES["default"]["CONN_MAX_AGE"] = env(
"DB_CONN_MAX_AGE", default=60 * 5
)
"""
Max time, in seconds, before database connections are closed.
The maximum time in seconds before database connections close.
"""
MIGRATION_MODULES = {
# see https://github.com/jazzband/django-oauth-toolkit/issues/634
@ -463,10 +454,11 @@ DEFAULT_FILE_STORAGE = "funkwhale_api.common.storage.ASCIIFileSystemStorage"
PROXY_MEDIA = env.bool("PROXY_MEDIA", default=True)
"""
Wether to proxy audio files through your reverse proxy.
It's recommended to keep this on, as a way to enforce access control, however,
if you're using S3 storage with :attr:`AWS_QUERYSTRING_AUTH`,
it's safe to disable it.
Whether to proxy audio files through your reverse proxy.
We recommend you leave this enabled to enforce access control.
If you're using S3 storage with :attr:`AWS_QUERYSTRING_AUTH`
enabled, it's safe to disable this setting.
"""
AWS_DEFAULT_ACL = env("AWS_DEFAULT_ACL", default=None)
"""
@ -483,9 +475,10 @@ See: https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#can
"""
AWS_QUERYSTRING_AUTH = env.bool("AWS_QUERYSTRING_AUTH", default=not PROXY_MEDIA)
"""
Whether to include signatures in S3 urls, as a way to enforce access-control.
Whether to include signatures in S3 URLs. Signatures
are used to enforce access control.
Defaults to the inverse of :attr:`PROXY_MEDIA`.
Defaults to the opposite of :attr:`PROXY_MEDIA`.
"""
AWS_S3_MAX_MEMORY_SIZE = env.int(
@ -494,8 +487,8 @@ AWS_S3_MAX_MEMORY_SIZE = env.int(
AWS_QUERYSTRING_EXPIRE = env.int("AWS_QUERYSTRING_EXPIRE", default=3600)
"""
Expiration delay, in seconds, of signatures generated when
:attr:`AWS_QUERYSTRING_AUTH` is enabled.
The time in seconds before AWS signatures expire.
Only takes effect you enable :attr:`AWS_QUERYSTRING_AUTH`
"""
AWS_ACCESS_KEY_ID = env("AWS_ACCESS_KEY_ID", default=None)
@ -511,7 +504,7 @@ if AWS_ACCESS_KEY_ID:
"""
AWS_STORAGE_BUCKET_NAME = env("AWS_STORAGE_BUCKET_NAME")
"""
Bucket name of your S3 storage.
Your S3 bucket name.
"""
AWS_S3_CUSTOM_DOMAIN = env("AWS_S3_CUSTOM_DOMAIN", default=None)
"""
@ -520,14 +513,17 @@ if AWS_ACCESS_KEY_ID:
AWS_S3_ENDPOINT_URL = env("AWS_S3_ENDPOINT_URL", default=None)
"""
If you use a S3-compatible storage such as minio,
set the following variable to the full URL to the storage server. Example:
set the following variable to the full URL to the storage server.
Examples:
- ``https://minio.mydomain.com``
- ``https://s3.wasabisys.com``
"""
AWS_S3_REGION_NAME = env("AWS_S3_REGION_NAME", default=None)
"""If you are using Amazon S3 to serve media directly,
you will need to specify your region name in order to access files.
"""
If you're using Amazon S3 to serve media without a proxy,
you need to specify your region name to access files.
Example:
@ -537,9 +533,8 @@ if AWS_ACCESS_KEY_ID:
AWS_S3_SIGNATURE_VERSION = "s3v4"
AWS_LOCATION = env("AWS_LOCATION", default="")
"""
An optional bucket subdirectory were you want to store the files.
This is especially useful if you plan to use share the bucket with other
services.
A directory in your S3 bucket where you store files.
Use this if you plan to share the bucket between services.
"""
DEFAULT_FILE_STORAGE = "funkwhale_api.common.storage.ASCIIS3Boto3Storage"
@ -560,14 +555,13 @@ STATICFILES_FINDERS = (
# See: https://docs.djangoproject.com/en/dev/ref/settings/#media-root
MEDIA_ROOT = env("MEDIA_ROOT", default=str(APPS_DIR("media")))
"""
Path where media files (such as album covers or audio tracks) are stored
on your system. Ensure this directory actually exists.
The path where you store media files (such as album covers or audio tracks)
on your system. Make sure this directory actually exists.
"""
# See: https://docs.djangoproject.com/en/dev/ref/settings/#media-url
MEDIA_URL = env("MEDIA_URL", default=FUNKWHALE_URL + "/media/")
"""
URL where media files are served. The default value should work fine on most
configurations, but could can tweak this if you are hosting media
The URL from which your pod serves media files. Change this if you're hosting media
files on a separate domain, or if you host Funkwhale on a non-standard port.
"""
FILE_UPLOAD_PERMISSIONS = 0o644
@ -576,7 +570,7 @@ ATTACHMENTS_UNATTACHED_PRUNE_DELAY = env.int(
"ATTACHMENTS_UNATTACHED_PRUNE_DELAY", default=3600 * 24
)
"""
Delay in seconds before uploaded but unattached attachements are pruned
The delay in seconds before Funkwhale prunes uploaded but detached attachments
from the system.
"""
@ -607,14 +601,12 @@ ACCOUNT_EMAIL_VERIFICATION_ENFORCE = env.bool(
"ACCOUNT_EMAIL_VERIFICATION_ENFORCE", default=False
)
"""
Determine wether users need to verify their e-mail address before using the service. Enabling this can be useful
to reduce spam or bots accounts, however, you'll need to configure a mail server so that your users can receive the
verification e-mails, using :attr:`EMAIL_CONFIG`.
Set whether users need to verify their email address before using your pod. Enabling this setting
is useful for reducing spam and bot accounts. To use this setting you need to configure a mail server
to send verification emails. See :attr:`EMAIL_CONFIG`.
Note that regardless of the setting value, superusers created through the command line will never require verification.
Note that regardless of the setting value, superusers created through the
command line will never require verification.
.. note::
Superusers created through the command line never need to verify their email address.
"""
ACCOUNT_EMAIL_VERIFICATION = (
"mandatory" if ACCOUNT_EMAIL_VERIFICATION_ENFORCE else "optional"
@ -653,9 +645,9 @@ SCOPED_TOKENS_MAX_AGE = 60 * 60 * 24 * 3
# ------------------------------------------------------------------------------
AUTH_LDAP_ENABLED = env.bool("LDAP_ENABLED", default=False)
"""
Wether to enable LDAP authentication.
Whether to enable LDAP authentication.
See :doc:`/installation/ldap` for more information.
See :doc:`/administrator_documentation/configuration_docs/ldap` for more information.
"""
if AUTH_LDAP_ENABLED:
@ -730,17 +722,18 @@ AUTOSLUG_SLUGIFY_FUNCTION = "slugify.slugify"
CACHE_DEFAULT = "redis://127.0.0.1:6379/0"
CACHE_URL = env.cache_url("CACHE_URL", default=CACHE_DEFAULT)
"""
URL to your redis server. Examples:
The URL of your redis server. For example:
- ``redis://<host>:<port>/<database>``
- ``redis://127.0.0.1:6379/0``
- ``redis://:password@localhost:6379/0``
for password auth (the extra semicolon is important)
If you're using password auth (the extra slash is important)
- ``redis:///run/redis/redis.sock?db=0`` over unix sockets
.. note::
If you want to use Redis over unix sockets, you'll also need to update
If you want to use Redis over unix sockets, you also need to update
:attr:`CELERY_BROKER_URL`
"""
@ -785,11 +778,11 @@ CELERY_BROKER_URL = env(
"CELERY_BROKER_URL", default=env("CACHE_URL", default=CACHE_DEFAULT)
)
"""
URL to celery's task broker. Defaults to :attr:`CACHE_URL`,
so you shouldn't have to tweak this, unless you want
to use a different one, or use Redis sockets to connect.
The celery task broker URL. Defaults to :attr:`CACHE_URL`.
You don't need to tweak this unless you want
to use a different server or use Redis sockets to connect.
Exemple:
Example:
- ``redis://127.0.0.1:6379/0``
- ``redis+socket:///run/redis/redis.sock?virtual_host=0``
@ -885,8 +878,8 @@ AUTH_PASSWORD_VALIDATORS = [
]
DISABLE_PASSWORD_VALIDATORS = env.bool("DISABLE_PASSWORD_VALIDATORS", default=False)
"""
Wether to disable password validators (length, common words,
similarity with username) used during regitration.
Whether to disable password validation rules during registration.
Validators include password length, common words, similarity with username.
"""
if DISABLE_PASSWORD_VALIDATORS:
AUTH_PASSWORD_VALIDATORS = []
@ -925,9 +918,9 @@ REST_FRAMEWORK = {
}
THROTTLING_ENABLED = env.bool("THROTTLING_ENABLED", default=True)
"""
Wether to enable throttling (also known as rate-limiting).
Leaving this enabled is recommended
especially on public pods, to improve the quality of service.
Whether to enable throttling (also known as rate-limiting).
We recommend you leave this enabled to improve the quality
of the service, especially on public pods .
"""
if THROTTLING_ENABLED:
@ -1076,9 +1069,10 @@ THROTTLING_RATES = {
}
THROTTLING_RATES = THROTTLING_RATES
"""
Throttling rates for specific endpoints and features of the app.
You can tweak this if you are encountering to severe rate limiting issues or,
on the contrary, if you want to reduce the consumption on some endpoints.
Throttling rates for specific endpoints and app features.
Tweak this if you're hitting rate limit issues or if you want
to reduce the consumption of specific endpoints. Takes
the format ``<endpoint name>=<number>/<interval>``.
Example:
@ -1100,35 +1094,39 @@ ATOMIC_REQUESTS = False
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = True
# Wether we should use Apache, Nginx (or other) headers
# Whether we should use Apache, Nginx (or other) headers
# when serving audio files. Defaults to Nginx.
REVERSE_PROXY_TYPE = env("REVERSE_PROXY_TYPE", default="nginx")
"""
Depending on the reverse proxy used in front of your funkwhale instance,
the API will use different kind of headers to serve audio files
Set your reverse proxy type. This changes the headers the
API uses to serve audio files. Allowed values:
Allowed values: ``nginx``, ``apache2``
- ``nginx``
- ``apache2``
"""
assert REVERSE_PROXY_TYPE in ["apache2", "nginx"], "Unsupported REVERSE_PROXY_TYPE"
PROTECT_FILES_PATH = env("PROTECT_FILES_PATH", default="/_protected")
"""
Which path will be used to process the internal redirection
to the reverse proxy **DO NOT** put a slash at the end.
The path used to process internal redirection
to the reverse proxy.
You shouldn't have to tweak this.
.. important::
Don't insert a slash at the end of this path.
"""
MUSICBRAINZ_CACHE_DURATION = env.int("MUSICBRAINZ_CACHE_DURATION", default=300)
"""
How long to cache MusicBrainz results, in seconds.
Length of time in seconds to cache MusicBrainz results.
"""
MUSICBRAINZ_HOSTNAME = env("MUSICBRAINZ_HOSTNAME", default="musicbrainz.org")
"""
Use this setting to change the MusicBrainz hostname, for instance to
use a mirror. The hostname can also contain a port number.
The hostname of your MusicBrainz instance. Change
this setting if you run your own server or use a mirror.
You can include a port number in the hostname.
Example:
Examples:
- ``mymusicbrainz.mirror``
- ``localhost:5000``
@ -1137,7 +1135,7 @@ Example:
# Custom Admin URL, use {% url 'admin:index' %}
ADMIN_URL = env("DJANGO_ADMIN_URL", default="^api/admin/")
"""
Path to the Django admin area.
Path to the Django admin dashboard.
Examples:
@ -1173,14 +1171,14 @@ ACCOUNT_USERNAME_BLACKLIST = [
"actor",
] + env.list("ACCOUNT_USERNAME_BLACKLIST", default=[])
"""
List of usernames that will be unavailable during registration,
given as a list of strings.
List of usernames that can't be used for registration. Given as a list of strings.
"""
EXTERNAL_REQUESTS_VERIFY_SSL = env.bool("EXTERNAL_REQUESTS_VERIFY_SSL", default=True)
"""
Wether to enforce HTTPS certificates verification when doing outgoing HTTP
requests (typically with federation).
Disabling this is not recommended.
Whether to enforce TLS certificate verification
when performing outgoing HTTP requests.
Disabling this feature is not recommended.
"""
EXTERNAL_REQUESTS_TIMEOUT = env.int("EXTERNAL_REQUESTS_TIMEOUT", default=10)
"""
@ -1189,43 +1187,43 @@ Default timeout for external requests.
MUSIC_DIRECTORY_PATH = env("MUSIC_DIRECTORY_PATH", default=None)
"""
The path on your server where Funkwhale can import files using
:ref:`in-place import <in-place-import>`. It must be readable by the webserver
and Funkwhale api and worker processes.
The path on your server where Funkwhale places
files from in-place imports. This path needs to be
readable by the webserver and ``api`` and ``worker``
processes.
On docker installations, we recommend you use the default of ``/music``
for this value. For non-docker installation, you can use any absolute path.
``/srv/funkwhale/data/music`` is a safe choice if you don't know what to use.
.. important::
.. note:: This path should not include any trailing slash.
Dont insert a slash at the end of this path.
.. warning::
On Docker installations, we recommend you use the default ``/music`` path.
On Debian installations you can use any absolute path. Defaults to
``/srv/funkwhale/data/music``.
You need to adapt your :ref:`reverse proxy configuration
<reverse-proxy-setup>` to serve the directory pointed by
``MUSIC_DIRECTORY_PATH`` on ``/_protected/music`` URL.
.. note::
You need to add this path to your reverse proxy configuration.
Add the directory to your ``/_protected/music`` server block.
"""
MUSIC_DIRECTORY_SERVE_PATH = env(
"MUSIC_DIRECTORY_SERVE_PATH", default=MUSIC_DIRECTORY_PATH
)
"""
Default: :attr:`MUSIC_DIRECTORY_PATH`
When using Docker, the value of :attr:`MUSIC_DIRECTORY_PATH` in your containers
may differ from the real path on your host.
Assuming you have the following directive
in your :file:`docker-compose.yml` file::
On Docker setups the value of :attr:`MUSIC_DIRECTORY_PATH`
may be different from the actual path on your server.
You can specify this path in your :file:`docker-compose.yml` file::
volumes:
- /srv/funkwhale/data/music:/music:ro
- /srv/funkwhale/data/music:/music:ro
Then, the value of :attr:`MUSIC_DIRECTORY_SERVE_PATH` should be
``/srv/funkwhale/data/music``. This must be readable by the webserver.
In this case, you need to set :attr:`MUSIC_DIRECTORY_SERVE_PATH`
to ``/srv/funkwhale/data/music``. The webserver needs to be
able to read this directory.
On non-docker setup, you don't need to configure this setting.
.. important::
.. note:: This path should not include any trailing slash.
Dont insert a slash at the end of this path.
"""
# When this is set to default=True, we need to reenable migration music/0042
@ -1236,7 +1234,7 @@ USERS_INVITATION_EXPIRATION_DAYS = env.int(
"USERS_INVITATION_EXPIRATION_DAYS", default=14
)
"""
Expiration delay, in days, for user invitations.
The number of days before a user invite expires.
"""
VERSATILEIMAGEFIELD_RENDITION_KEY_SETS = {
@ -1266,26 +1264,27 @@ SUBSONIC_DEFAULT_TRANSCODING_FORMAT = (
env("SUBSONIC_DEFAULT_TRANSCODING_FORMAT", default="mp3") or None
)
"""
Default format for transcoding when using Subsonic API.
The default format files are transcoded into when using the Subsonic
API.
"""
# extra tags will be ignored
TAGS_MAX_BY_OBJ = env.int("TAGS_MAX_BY_OBJ", default=30)
"""
Maximum number of tags that can be associated with an object.
Extra tags will be ignored.
Extra tags are ignored.
"""
FEDERATION_OBJECT_FETCH_DELAY = env.int(
"FEDERATION_OBJECT_FETCH_DELAY", default=60 * 24 * 3
)
"""
Delay, in minutes, before a remote object will be automatically
The delay in minutes before a remote object is automatically
refetched when accessed in the UI.
"""
MODERATION_EMAIL_NOTIFICATIONS_ENABLED = env.bool(
"MODERATION_EMAIL_NOTIFICATIONS_ENABLED", default=True
)
"""
Whether to enable e-mail notifications to moderators and pods admins.
Whether to enable email notifications to moderators and pod admins.
"""
FEDERATION_AUTHENTIFY_FETCHES = True
FEDERATION_SYNCHRONOUS_FETCH = env.bool("FEDERATION_SYNCHRONOUS_FETCH", default=True)
@ -1293,27 +1292,27 @@ FEDERATION_DUPLICATE_FETCH_DELAY = env.int(
"FEDERATION_DUPLICATE_FETCH_DELAY", default=60 * 50
)
"""
Delay, in seconds, between two manual fetch of the same remote object.
The delay in seconds between two manual fetches of the same remote object.
"""
INSTANCE_SUPPORT_MESSAGE_DELAY = env.int("INSTANCE_SUPPORT_MESSAGE_DELAY", default=15)
"""
Delay after signup, in days, before the "support your pod" message is shown.
The number of days after signup before the "support your pod" message is shown.
"""
FUNKWHALE_SUPPORT_MESSAGE_DELAY = env.int("FUNKWHALE_SUPPORT_MESSAGE_DELAY", default=15)
"""
Delay after signup, in days, before the "support Funkwhale" message is shown.
The number of days after signup before the "support Funkwhale" message is shown.
"""
MIN_DELAY_BETWEEN_DOWNLOADS_COUNT = env.int(
"MIN_DELAY_BETWEEN_DOWNLOADS_COUNT", default=60 * 60 * 6
)
"""
Minimum required period, in seconds, for two downloads of the same track
by the same IP or user to be recorded in statistics.
The required number of seconds between downloads of a track
by the same IP or user to be counted separately in listen statistics.
"""
MARKDOWN_EXTENSIONS = env.list("MARKDOWN_EXTENSIONS", default=["nl2br", "extra"])
"""
List of markdown extensions to enable.
A list of markdown extensions to enable.
See `<https://python-markdown.github.io/extensions/>`_.
"""
@ -1323,27 +1322,28 @@ Additional TLDs to support with our markdown linkifier.
"""
EXTERNAL_MEDIA_PROXY_ENABLED = env.bool("EXTERNAL_MEDIA_PROXY_ENABLED", default=True)
"""
Wether to proxy attachment files hosted on third party pods and and servers.
Keeping this to true is recommended, to reduce leaking browsing information
of your users, and reduce the bandwidth used on remote pods.
Whether to proxy attachment files hosted on third party pods and and servers.
Leaving this set to ``true`` is recommended. This reduces the risk of leaking
user browsing information and reduces the bandwidth used on remote pods.
"""
PODCASTS_THIRD_PARTY_VISIBILITY = env("PODCASTS_THIRD_PARTY_VISIBILITY", default="me")
"""
By default, only people who subscribe to a podcast RSS will have access
to their episodes.
By default, only people who subscribe to a podcast RSS have access
to its episodes. Switch to "instance" or "everyone" to change the default
visibility.
Switch to "instance" or "everyone" to change that.
.. note::
Changing it only affect new podcasts.
Changing this value only affect new podcasts.
"""
PODCASTS_RSS_FEED_REFRESH_DELAY = env.int(
"PODCASTS_RSS_FEED_REFRESH_DELAY", default=60 * 60 * 24
)
"""
Delay, in seconds, between two fetch of RSS feeds.
The delay in seconds between two fetch of RSS feeds.
Reducing this mean you'll receive new episodes faster,
but will require more resources.
A lower rate means new episodes are fetched sooner,
but requires more resources.
"""
# maximum items loaded through XML feed
PODCASTS_RSS_FEED_MAX_ITEMS = env.int("PODCASTS_RSS_FEED_MAX_ITEMS", default=250)

Wyświetl plik

@ -0,0 +1 @@
All administrator documentation has been rewritten to improve clarity and update outdated information.

Wyświetl plik

@ -1,214 +0,0 @@
About Funkwhale 0.17
====================
Funkwhale 0.17 is a special version, which contains a lot of breaking changes.
Before doing the upgrade, please read this document carefully.
Overview of the changes
^^^^^^^^^^^^^^^^^^^^^^^
.. note::
The what and why are described more thoroughly in this page: https://dev.funkwhale.audio/funkwhale/funkwhale/merge_requests/368
To sum it up, this release big completely changes the way audio content is managed in Funkwhale.
As you may guess, this has a huge impact on the whole project, because audio is at the
core of Funkwhale.
Here is a side by side comparison of earlier versions and this release
to help you understand the scale of the changes:
+----------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Before | After | Reason |
+========================================================================================+=================================================================================================+=========================================================================================================================================================================================================================================================+
| There is one big audio library, managed at the instance level | Each user can have their own libraries (either public, private or shared at the instance level) | Managing the library at instance was cumbersome and dangerous: sharing an instance library over federation would quickly pose copyright issues, as well as opening public instances. It also made it impossible to only share a subset of the music. |
+----------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Users needed a specific permissions from instance owners to upload audio content | Users can upload music to their own libraries without any specific permissions | This change makes it easier for new users to start using Funkwhale, and for creators to share their content on the network. |
+----------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Users with permissions can upload as much content as they want in the instance library | Users have a storage quota and cannot exceed that storage | This change gives visibiliy to instance owners about their resource usage. If you host 100 users with a 1Gb quota, you know that your Funkwhale instance will not store more than 100Gb of music files. |
+----------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| N/A | Users can upload private content or share content with only specific users | This is a new feature, and we think it will enable users to upload their own music libraries to their instance, without breaking the law or putting their admins in trouble, since their media will remain private. |
+----------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Youtube Import | This feature is removed | This feature posed copyright issues and impacted the credibility of the project, so we removed it. |
+----------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Music requests | This feature is removed | Since all users can now upload content without specific permissions, we think this feature is less-likely to be useful in its current state. |
+----------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
From a shared, instance-wide library to users libraries
-------------------------------------------------------
As you can see, there is a big switch: in earlier versions, each instance had one big library,
that was available to all its users. This model don't scale well (especially if you put
federation on top of that), because it's an all-or-nothing choice if you want to share it.
Starting from version 0.17, each user will be able to create personal libraries
and upload content in those, up to a configurable quota.
Those libraries can have one of the following visibility level:
- **Private**: only the owner of the library can access its content
- **Instance**: users from the same instance can access the library content
- **Public**: everyone (including other instances) can access the library content
Regardless of this visibility level, library owners can also share them manually
with other users, both from the same instance or from the federation.
We think this change will have a really positive impact:
- Admins should be more inclined to open their instance to strangers, because copyrighted media
can be upload and shared privately
- Creators should have a better experience when joining the network, because they can now
upload their own content and share it over the federation without any admin intervention
- The federation should grow faster, because user libraries can contain copyrighted content
and be shared, without putting the admins at risk
Accessing music
---------------
From an end-user perspective, you will be able to browse any artist or album or track
that is known by your instance, but you'll only be able to listen to content
that match one of those criteria:
- The content is available is one of your libraries
- The content is available in a public library
- The content is available in one library from your instance that has a visibility level set to "instance"
- The content is available in one of the libraries you follow
Following someone else's library is a four step process:
1. Get the library link from its owner
2. Use this link on your instance to follow the library
3. Wait until your follow request is approved by the library owner
4. If this library is unknown on your instance, it will be scanned to import its content, which may take a few minutes
Libraries owner can revoke follows at any time, which will effectively prevent
the ancient follower from accessing the library content.
A brand new federation
----------------------
This is more "under the hood" work, but the whole federation/ActivityPub logic
was rewritten for this release. This new implementation is more spec compliant
and should scale better.
The following activities are propagated over federation:
- Library follow creation, accept and reject
- Audio creation and deletion
- Library deletion
A better import UI
------------------
This version includes a completely new import UI which should make
file uploading less annoying. In particular, the UI updates in real-time
and has a better error reporting.
A better import engine
----------------------
Funkwhale is known for its quircks during music import. Missing covers,
split albums, bad management of tracks with multiple artists, missing
data for files imported over federation, bad performance, discrepancies between
the user-provided tags and what is actually stored in the database...
This should be greatly improved now, as the whole import logic was rewritten
from scratch.
Import is done completely offline and no longer calls the MusicBrainz API,
except to retrieve covers if those are not embedded in the imported files.
MusicBrainz references are still stored in the database, but we rely solely
on the tags from the audio file now.
This has two positive consequences:
- Improved performance for both small and big imports (possibly by a factor of 10)
- More reliable import result: if your file is tagged in a specific way, we will only
use tags for the import.
Imports from federation, command-line and UI/API all use the same code,
which should greatly reduce the bugs/discrepencies.
Finally, the import engine now understands the difference between a track artist
and an album artist, which should put an end to the album splitting issues
for tracks that had a different artist than the album artist.
What will break
---------------
If you've read until here, you can probably understand that all of these changes
comes at a cost: version 0.17 contains breaking changes, removed features and other
changes.
The following features were removed:
- YouTube imports: for copyright reasons, keeping this in the core was not possible
- Music requests: those are now less useful since anyone can upload content
Also, the current federation will break, as it's absolutely not compatible
with what we've built in version 0.17, and maintaining compatibility was simply not possible.
Apart from that, other features should work the same way as they did before.
Migration path
--------------
.. warning::
This migration is huge. Do a backup. Please. The database, and the music files.
Please.
.. warning:: I'm not kidding.
Migration will be similar to previous ones, with an additional script to run that will
take care of updating existing rows in the database. Especially, this script
will be responsible to create a library for each registered user, and to
bind content imported by each one to this library.
Libraries created this way will have a different visibility level depending of your instance configuration:
- If your instance requires authentication to access the API / listen to music, libraries will
be marked with "instance" visibility. As a result, all users from the instance will still
be able to listen to all the music of the instance after the migration
- If your instance does not require authentication to access the API / listen to music,
libraries will be completely public, allowing anyone to access the content (including federation)
This script will also contain other database-related operations, but the impact will remain
invisible.
Upgrade instructions
--------------------
Follow instructions from https://docs.funkwhale.audio/upgrading/index.html,
then run the migrations script.
On docker-setups::
# if you missed this one from a previous upgrade
docker-compose run --rm api python manage.py script create_actors --no-input
docker-compose run --rm api python manage.py script migrate_to_user_libraries --no-input
On non docker-setups::
# if you missed this one from a previous upgrade
sudo -u funkwhale -H -E /srv/funkwhale/virtualenv/bin/python api/manage.py script create_actors --no-input
sudo -u funkwhale -H -E /srv/funkwhale/virtualenv/bin/python api/manage.py script migrate_to_user_libraries --no-input
If the scripts complete without errors, your instance should be updated and ready to use :)
.. note::
If you use nginx, ensure your funkwhale_proxy.conf file does not contain this:
proxy_set_header X-Forwarded-Host $host:$server_port;
If you have this line present, replace it with:
proxy_set_header X-Forwarded-Host $host;
And reload your nginx server.

Wyświetl plik

@ -1,79 +0,0 @@
Backup your Funkwhale instance
==============================
.. note::
Before upgrading your instance, we strongly advise you to make at least a database backup. Ideally, you should make a full backup, including the database and the media files.
Docker setup
------------
If you've followed the setup instructions in :doc:`../installation/docker`, here is the backup path:
Multi-container installation
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Backup the database
^^^^^^^^^^^^^^^^^^^
On docker setups, you have to ``pg_dumpall`` in container ``funkwhale_postgres_1``:
.. code-block:: shell
docker exec -t funkwhale_postgres_1 pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
Backup the media files
^^^^^^^^^^^^^^^^^^^^^^
To backup docker data volumes, as the volumes are bound mounted to the host, the ``rsync`` way would go like this:
.. code-block:: shell
rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media
rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music
Backup the configuration files
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
On docker setups, the configuration file is located at the root level:
.. code-block:: shell
rsync -avzhP /srv/funkwhale/.env /path/to/your/backup/.env
Non-docker setup
----------------
Backup the database
^^^^^^^^^^^^^^^^^^^
On non-docker setups, you have to ``pg_dump`` as user ``postgres``:
.. code-block:: shell
sudo -u postgres -H pg_dump funkwhale > /path/to/your/backup/dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
Backup the media files
^^^^^^^^^^^^^^^^^^^^^^
A simple way to backup your media files is to use ``rsync``:
.. code-block:: shell
rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media
rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music
Backup the configuration files
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: shell
rsync -avzhP /srv/funkwhale/config/.env /path/to/your/backup/.env
.. note::
You may also want to backup your proxy configuration file.
For frequent backups, you may want to use deduplication and compression to keep the backup size low. In this case, a tool like ``borg`` will be more appropriate.

Wyświetl plik

@ -1,197 +0,0 @@
Management commands
===================
User management
---------------
It's possible to create, remove and update users directly from the command line.
This feature is useful if you want to experiment, automate or perform batch actions that
would be too repetitive through the web UI.
All users-related commands are available under the ``python manage.py fw users`` namespace:
.. code-block:: sh
# print subcommands and help
python manage.py fw users --help
Creation
^^^^^^^^
.. code-block:: sh
# print help
python manage.py fw users create --help
# create a user interactively
python manage.py fw users create
# create a user with a random password
python manage.py fw users create --username alice --email alice@email.host -p ""
# create a user with password set from an environment variable
export FUNKWHALE_CLI_USER_PASSWORD=securepassword
python manage.py fw users create --username bob --email bob@email.host
Additional options are available to further configure the user during creation, such as
setting permissions or user quota. Please refer to the command help.
Update
^^^^^^
.. code-block:: sh
# print help
python manage.py fw users set --help
# set upload quota to 500MB for alice
python manage.py fw users set --upload-quota 500 alice
# disable confirmation prompt with --no-input
python manage.py fw users set --no-input --upload-quota 500 alice
# make alice and bob staff members
python manage.py fw users set --staff --superuser alice bob
# remove staff privileges from bob
python manage.py fw users set --no-staff --no-superuser bob
# give bob moderation permission
python manage.py fw users set --permission-moderation bob
# reset alice's password
python manage.py fw users set --password "securepassword" alice
# reset bob's password through an environment variable
export FUNKWHALE_CLI_USER_UPDATE_PASSWORD=newsecurepassword
python manage.py fw users set bob
Deletion
^^^^^^^^
.. code-block:: sh
# print help
python manage.py fw users rm --help
# delete bob's account, but keep a reference to their account in the database
# to prevent future signup with the same username
python manage.py fw users rm bob
# delete alice's account, with no confirmation prompt
python manage.py fw users rm --no-input alice
# delete alice and bob accounts, including all reference to their account
# (people will be able to signup again with their usernames)
python manage.py fw users rm --hard alice bob
Pruning library
---------------
Because Funkwhale is a multi-user and federated audio server, we don't delete any artist, album
and track objects in the database when you delete the corresponding files.
This is on purpose, because those objects may be referenced in user playlists, favorites,
listening history or on other instances, or other users could have upload files matching
linked to those entities in their own private libraries.
Therefore, Funkwhale has a really conservative approach and doesn't delete metadata when
audio files are deleted.
This behaviour can be problematic in some situations though, e.g. if you imported
a lot of wrongly tagged files, then deleted the files to reimport them later.
To help with that, we provide a management you can run on the server and that will effectively
prune you library from track, album and artist metadata that is not tied to any file:
.. code-block:: sh
# print help
python manage.py prune_library --help
# prune tracks with no uploads
python manage.py prune_library --tracks
# prune albums with no tracks
python manage.py prune_library --albums
# prune artists with no tracks/albums
python manage.py prune_library --artists
# prune everything (tracks, albums and artists)
python manage.py prune_library --tracks --albums --artists
The ``prune_library`` command will not delete anything by default, and only gives
you an estimate of how many database objects would be affected by the pruning.
Once you have reviewed the output and are comfortable with the changes, you should rerun
the command with the ``--no-dry-run`` flag to disable dry run mode and actually apply
the changes on the database.
.. warning::
Running this command with ``--no-dry-run`` is irreversible. Unless you have a backup,
there will be no way to retrieve the deleted data.
.. note::
The command will exclude tracks that are favorited, included in playlists or listening
history by default. If you want to include those in the pruning process as well,
add the corresponding ``--ignore-favorites``, ``--ignore-playlists`` and ``--ignore-listenings``
flags.
Remove obsolete files from database
-----------------------------------
When importing using the :ref:`in-place method <in-place-import>`, if you move or remove
in-place imported files on disk, Funkwhale will still have a reference to those files and won't
be able to serve them properly.
To help with that, whenever you remove or move files that were previously imported
with the ``--in-place`` flag, you can run the following command::
python manage.py check_inplace_files
This command will loop through all the database objects that reference
an in-place imported file, check that the file is accessible on disk,
or delete the database object if it's not.
Once you have reviewed the output and are comfortable with the changes, you should rerun
the command with the ``--no-dry-run`` flag to disable dry run mode and actually delete the
database objects.
.. warning::
Running this command with ``--no-dry-run`` is irreversible. Unless you have a backup,
there will be no way to retrieve the deleted data.
Adding tags from tracks
-----------------------
By default, genre tags found imported files are associated with the corresponding track.
While you can always associate genre information with an artist or album through the web UI,
it may be tedious to do so by hand for a large number of objects.
We offer a command you can run after an import to do this for you. It will:
1. Find all local artists or albums with no tags
2. Get all the tags associated with the corresponding tracks
3. Associate tags that are found on all tracks to the corresponding artist or album
..note::
A periodic task also runs in the background every few days to perform the same process.
Usage:
.. code-block:: sh
# For albums
python manage.py fw albums add-tags-from-tracks --help
# For artists
python manage.py fw artists add-tags-from-tracks --help

Wyświetl plik

@ -1,340 +0,0 @@
Instance configuration
======================
General configuration is achieved using two type of settings:
- :ref:`environment variables <environment-variables>` and
- :ref:`instance settings <instance-settings>`.
.. _environment-variables:
Environment variables
---------------------
Those are located in your ``.env`` file, which you should have created
during installation. A full list of available variables is given :ref:`below <environment-variables>`.
Options from this file are heavily commented, and usually target lower level
and technical aspects of your instance, such as database credentials.
.. note::
You should restart all Funkwhale processes when you change the values
on environment variables::
sudo systemctl restart funkwhale.target
.. note::
Some characters are unsafe to use in configuration variables that are URLs,
such as the user and password in the database and SMTP sections.
If those variables contain such characters, they must be urlencoded, for
instance using the following command::
python3 -c 'import urllib.parse; print(urllib.parse.quote_plus("p@ssword"))
See as well https://github.com/joke2k/django-environ#using-unsafe-characters-in-urls
.. _instance-settings:
Instance settings
-----------------
These settings are stored in the database and do not require a restart of your
instance after modification. They typically relate to higher level configuration,
such your instance description, signup policy and so on.
You can edit those settings directly from the web application, assuming
you have the required permissions. The URL is ``/manage/settings``, and
you will also find a link to this page in the sidebar.
If you plan to use acoustid and external imports
(e.g. with the YouTube backends), you should edit the corresponding
settings in this interface.
.. note::
If you have any issue with the web application, a management interface is also
available for those settings from :doc:`Django's administration interface <django>`. It's
less user friendly, though, and we recommend you use the web app interface
whenever possible.
The URL should be ``/api/admin/dynamic_preferences/globalpreferencemodel/`` (prepend your domain in front of it, of course).
Configuration reference
-----------------------
Pod
^^^
.. autodata:: config.settings.common.FUNKWHALE_HOSTNAME
:annotation:
.. autodata:: config.settings.common.FUNKWHALE_PROTOCOL
Database and redis
^^^^^^^^^^^^^^^^^^
.. autodata:: config.settings.common.DATABASE_URL
:annotation:
.. autodata:: config.settings.common.DB_CONN_MAX_AGE
.. autodata:: config.settings.common.CACHE_URL
:annotation:
.. autodata:: config.settings.common.CELERY_BROKER_URL
:annotation:
Accounts and registration
^^^^^^^^^^^^^^^^^^^^^^^^^
.. autodata:: config.settings.common.ACCOUNT_EMAIL_VERIFICATION_ENFORCE
:annotation:
.. autodata:: config.settings.common.USERS_INVITATION_EXPIRATION_DAYS
:annotation:
.. autodata:: config.settings.common.DISABLE_PASSWORD_VALIDATORS
:annotation:
.. autodata:: config.settings.common.ACCOUNT_USERNAME_BLACKLIST
:annotation:
.. autodata:: config.settings.common.AUTH_LDAP_ENABLED
:annotation:
Media storage and serving
^^^^^^^^^^^^^^^^^^^^^^^^^
.. autodata:: config.settings.common.MEDIA_URL
:annotation: = https://mypod.audio/media/
.. autodata:: config.settings.common.MEDIA_ROOT
:annotation: = /srv/funkwhale/data/media
.. autodata:: config.settings.common.PROXY_MEDIA
:annotation: = true
.. autodata:: config.settings.common.EXTERNAL_MEDIA_PROXY_ENABLED
.. autodata:: config.settings.common.ATTACHMENTS_UNATTACHED_PRUNE_DELAY
:annotation: = true
.. autodata:: config.settings.common.REVERSE_PROXY_TYPE
.. autodata:: config.settings.common.PROTECT_FILES_PATH
Audio acquisition
^^^^^^^^^^^^^^^^^
.. autodata:: config.settings.common.MUSIC_DIRECTORY_PATH
.. autodata:: config.settings.common.MUSIC_DIRECTORY_SERVE_PATH
S3 Storage
^^^^^^^^^^
.. autodata:: config.settings.common.AWS_QUERYSTRING_AUTH
.. autodata:: config.settings.common.AWS_QUERYSTRING_EXPIRE
.. autodata:: config.settings.common.AWS_ACCESS_KEY_ID
.. autodata:: config.settings.common.AWS_SECRET_ACCESS_KEY
.. autodata:: config.settings.common.AWS_STORAGE_BUCKET_NAME
.. autodata:: config.settings.common.AWS_S3_CUSTOM_DOMAIN
.. autodata:: config.settings.common.AWS_S3_ENDPOINT_URL
.. autodata:: config.settings.common.AWS_S3_REGION_NAME
.. autodata:: config.settings.common.AWS_LOCATION
API configuration
^^^^^^^^^^^^^^^^^
.. autodata:: config.settings.common.THROTTLING_ENABLED
.. autodata:: config.settings.common.THROTTLING_RATES
.. autodata:: config.settings.common.ADMIN_URL
.. autodata:: config.settings.common.EXTERNAL_REQUESTS_VERIFY_SSL
.. autodata:: config.settings.common.EXTERNAL_REQUESTS_TIMEOUT
Federation
^^^^^^^^^^
.. autodata:: config.settings.common.FEDERATION_OBJECT_FETCH_DELAY
.. autodata:: config.settings.common.FEDERATION_DUPLICATE_FETCH_DELAY
Metadata
^^^^^^^^
.. autodata:: config.settings.common.TAGS_MAX_BY_OBJ
.. autodata:: config.settings.common.MUSICBRAINZ_HOSTNAME
.. autodata:: config.settings.common.MUSICBRAINZ_CACHE_DURATION
Channels and podcasts
^^^^^^^^^^^^^^^^^^^^^
.. autodata:: config.settings.common.PODCASTS_RSS_FEED_REFRESH_DELAY
.. autodata:: config.settings.common.PODCASTS_RSS_FEED_MAX_ITEMS
.. autodata:: config.settings.common.PODCASTS_THIRD_PARTY_VISIBILITY
Subsonic
^^^^^^^^
.. autodata:: config.settings.common.SUBSONIC_DEFAULT_TRANSCODING_FORMAT
Email configuration
^^^^^^^^^^^^^^^^^^^
.. autodata:: config.settings.common.EMAIL_CONFIG
:annotation: = consolemail://
.. autodata:: config.settings.common.DEFAULT_FROM_EMAIL
:annotation: = Funkwhale <noreply@yourdomain>
.. autodata:: config.settings.common.EMAIL_SUBJECT_PREFIX
Other settings
^^^^^^^^^^^^^^
.. autodata:: config.settings.common.INSTANCE_SUPPORT_MESSAGE_DELAY
.. autodata:: config.settings.common.FUNKWHALE_SUPPORT_MESSAGE_DELAY
.. autodata:: config.settings.common.MIN_DELAY_BETWEEN_DOWNLOADS_COUNT
.. autodata:: config.settings.common.MARKDOWN_EXTENSIONS
.. autodata:: config.settings.common.LINKIFIER_SUPPORTED_TLDS
User permissions
----------------
Funkwhale's permission model works as follows:
- Anonymous users cannot do anything unless configured specifically;
- Logged-in users can use the application, but cannot do things that affect the whole instance;
- Superusers can do anything.
To make things more granular and allow some delegation of responsibility,
superusers can grant specific permissions to specific users. Available
permissions are:
- **Manage instance-level settings**: users with this permission can edit instance
settings as described in :ref:`instance-settings`;
- **Manage library**: users with this permission can import new music in the
instance;
- **Manage library federation**: users with this permission can ask to federate with
other instances, and accept/deny federation requests from other instances.
There is no dedicated interface to manage users permissions, but superusers
can login on the :doc:`Django's admin <django>` at ``/api/admin/`` and grant permissions
to users at ``/api/admin/users/user/``.
Front-end settings
------------------
We offer a basic mechanism to customize the behavior and look and feel of Funkwhale's Web UI.
To use any of the options below, you will need to create a custom JSON configuration file and serve it
on ``https://yourinstanceurl/settings.json``.
On typical deployments, this url returns a 404 error, which is simply ignored.
Set-up
^^^^^^
First, create the settings file:
.. code-block:: shell
cd /srv/funkwhale/
# create a directory for your configuration file
# you can use a different name / path of course
mkdir custom
# populate the configuration file with default values
cat <<EOF > custom/settings.json
{
"additionalStylesheets": [],
"defaultServerUrl": null
}
EOF
Once the ``settings.json`` file is created, you will need to serve it from your reverse proxy.
If you are using nginx, add the following snippet to your vhost configuration::
location /settings.json {
alias /srv/funkwhale/custom/settings.json;
}
On Apache, add the following to your vhost configuration::
Alias /settings.json /srv/funkwhale/custom/settings.json
Then, reload your reverse proxy.
At this point, visiting ``https://yourinstanceurl/settings.json`` should serve the content
of the settings.json file.
.. warning::
The settings.json file must be a valid JSON file. If you have any issue, try linting
the file with a tool such as `<https://github.com/zaach/jsonlint>`_ to detect potential
syntax issues.
Available configuration options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Your :file:`settings.json` can contain the following options:
+----------------------------------+--------------------+---------------------------------------+---------------------------------------------------------------+
| Name | Type | Example value | Description |
+----------------------------------+--------------------+---------------------------------------+---------------------------------------------------------------+
| ``additionalStylesheets`` | Array of URLs | ``["https://test/theme.css"]`` | A list of stylesheets URL (absolute or relative) |
| | | (default: ``[]``) | that the web UI should load. see the "Theming" section |
| | | | below for a detailed explanation |
| | | | |
+----------------------------------+--------------------+---------------------------------------+---------------------------------------------------------------+
| ``defaultServerUrl`` | URL | ``"https://api.yourdomain.com"`` | The URL of the API server this front-end should |
| | | (default: ``null``) | connect with. If null, the UI will use |
| | | | the value of VUE_APP_INSTANCE_URL |
| | | | (specified during build) or fallback to the current domain |
+----------------------------------+--------------------+---------------------------------------+---------------------------------------------------------------+
Missing options or options with a ``null`` value in the ``settings.json`` file are ignored.
Theming
^^^^^^^
To theme your Funkwhale instance, you need:
1. A CSS file for your theme, that can be loaded by the front-end;
2. To update the value of ``additionalStylesheets`` in your settings.json file to point to your CSS file URL.
.. code-block:: shell
cd /srv/funkwhale/custom
nano settings.json
# append
# "additionalStylesheets": ["/front/custom/custom.css"]
# to the configuration or replace the existing value, if any
# create a basic theming file changing the background to red
cat <<EOF > custom.css
body {
background-color: red;
}
EOF
The last step to make this work is to ensure your CSS file is served by the reverse proxy.
On nginx, add the following snippet to your vhost config::
location /custom {
alias /srv/funkwhale/custom;
}
On Apache, use the following::
Alias /custom /srv/funkwhale/custom
<Directory "/srv/funkwhale/custom">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Once done, reload your reverse proxy, refresh Funkwhale in your web browser, and you should see
a red background.
.. note::
You can reference external urls as well in ``additionalStylesheets``, simply use
the full urls. Be especially careful with external urls as they may affect your users
privacy.
.. warning::
Loading additional stylesheets and CSS rules can affect the performance and
usability of your instance. If you encounter issues with the interfaces and use
custom stylesheets, try to disable those to ensure the issue is not caused
by your customizations.

Wyświetl plik

@ -1,50 +0,0 @@
Debugging Funkwhale
===================
In order to track down errors its useful to provide as many information as possible. Usually pasting
the logs should be sufficient, but there are some tools for some deeper debugging.
Frontend Logs
-------------
Logs and errors written by the Frontend can be accessed with Firefox. When opening the website of
your Funkwhale instance, simply hit ``Ctlr + Shift + J``. Alternatively open the Firefox Menu and open
the Browser Console in the developers menu.
In the opening window you can see all the output. You can copy what you want to share or repeat the
failing operation to see what error occurs.
Backend Logs
------------
Depending on your setup you can see the logs from our API server in different ways.
Docker
^^^^^^
Simply run ``docker-compose logs --tail=100 api`` If you want continuous logs, add the ``f`` flag.
Quick install
^^^^^^^^^^^^^
To get the logs, run ``journalctl -xn -u funkwhale-server``
Profiling
---------
In order to find performance issues, its possible to run API requests with activated profiling. In
order to do this, add ``funkwhale_api.common.middleware.ProfilerMiddleware`` to the environment
variable ``ADDITIONAL_MIDDLEWARES_BEFORE``
If enabled, simply add ``?prof`` to the request URL you want to profile. You should get an HTML-Report
of the running request.
Memory Tracing
--------------
Its possible to print memory traces for each API request to the API logs. In order to do this, add
``funkwhale_api.common.middleware.PymallocMiddleware`` to the environment variable
``ADDITIONAL_MODDLEWARES_BEFORE`` This adds a middleware which should not do anything by default.
Tracing can be activated by setting ``PYTHONTRACEMALLOC=1`` This might has some inpact on the
performance, please report how it goes. The Middleware now prints the top 25 memory allocations to
the API logs.

Wyświetl plik

@ -1,79 +0,0 @@
Using the Django Administration Backend
=======================================
Funkwhale is being actively developed, and new features are being added to the frontend all the time. However, there are some administrative tasks that can only be undertaken in the Django Administration backend.
.. Warning::
Deleting items on the backend is **not** recommended. Deletions performed on the backend are permanent. If you remove something in the backend, you will need to re-add it from scratch.
Accessing the Django Backend
----------------------------
To access your instance's backend, navigate to ``https://yourdomain/api/admin``. You will be prompted to log in. By default, the login details will be those of the priviliged user created during the setup process.
Deleting Items
-------------------
By default, deleting items in the front end removes the file from the server but **does not** delete associated entities such as artists, albums, and track data, meaning that they will still be viewable but no longer playable. Items deleted in this way will also still count on the instance statistics. To remove them completely, it is necessary to remove them from the database entirely using the Django Administration backend.
.. Warning::
Deleting tracks, albums, or artists will also remove them completely from any associated playlists, radios, or favorites lists. Before continuing, make sure other users on the instance are aware of the deletion(s).
Deleting a Track
^^^^^^^^^^^^^^^^
* Navigate to ``https://yourdomain/api/admin/music/track``
* Select the track(s) you wish to delete
* In the ``Action`` dropdown menu, select "Delete Selected Items"
* Click on "Go". You will be prompted to confirm the track's deletion
Deleting an Album
^^^^^^^^^^^^^^^^^
* Navigate to ``https://yourdomain/api/admin/music/album``
* Select the album(s) you wish to delete
* In the ``Action`` dropdown menu, select "Delete Selected Items"
* Click on "Go". You will be prompted to confirm the album's deletion
.. note::
Deleting an album will remove all tracks associated with the album
Deleting an Artist
^^^^^^^^^^^^^^^^^^
* Navigate to ``https://yourdomain/api/admin/music/artist``
* Select the artist(s) you wish to delete
* In the ``Action`` dropdown menu, select "Delete Selected Items"
* Click on "Go". You will be prompted to confirm the artist's deletion
.. note::
Deleting an artist will remove all tracks and albums associated with the artist
Removing a Followed Library
---------------------------
In Funkwhale, unfollowing a library will leave the items in place but inaccessible. To completely remove them:
* Navigate to ``https://yourdomain/api/admin/music/library/``
* Tick the box next to the library you wish to remove
* In the ``Action`` dropdown menu, select "Delete Selected Items"
* Click on "Go". You will be prompted to confirm the library's deletion
Adding Missing Album Art
-------------------------
Sometimes album art can fail to appear despite music being properly tagged. When this happens, it is possible to replace the missing art.
* Navigate to ``https://yourdomain/api/admin/music/album``
* Search for and select the album in question
* Find the item marked "Cover"
* Click "Browse" and select the file from your computer
* Click "Save" to confirm the changes
The album art will now be present on the frontend.
.. note::
You can also clear currently loaded album art by checking the checkbox next to the current item and selecting "Clear"

Wyświetl plik

@ -1,206 +0,0 @@
Using external storages to store Funkwhale content
==================================================
By default, Funkwhale will store user-uploaded and related media such as audio files,
transcoded files, avatars and album covers on a server directory.
However, for bigger instances or more complex deployment scenarios, you may want
to use distributed or external storages.
S3 and S3-compatible servers
----------------------------
.. note::
This feature was released in Funkwhale 0.19 and is still considered experimental.
Please let us know if you see anything unusual while using it.
Funkwhale supports storing media files Amazon S3 and compatible implementations such as Minio or Wasabi.
In this scenario, the content itself is stored in the S3 bucket. Non-sensitive media such as
album covers or user avatars are served directly from the bucket. However, audio files
are still served by the reverse proxy, to enforce proper authentication.
To enable S3 on Funkwhale, add the following environment variables::
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_STORAGE_BUCKET_NAME=
# An optional bucket subdirectory were you want to store the files. This is especially useful
# if you plan to use share the bucket with other services
# AWS_LOCATION=
# If you use a S3-compatible storage such as minio, set the following variable
# the full URL to the storage server. Example:
# AWS_S3_ENDPOINT_URL=https://minio.mydomain.com
# AWS_S3_ENDPOINT_URL=
Then, edit your nginx configuration. On docker setups, the file is located at ``/srv/funkwhale/nginx/funkwhale.template``,
and at ``/etc/nginx/sites-available/funkwhale.template`` on non-docker setups.
Replace the ``location /_protected/media`` block with the following::
location ~ /_protected/media/(.+) {
internal;
# Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932
proxy_set_header Authorization "";
proxy_pass $1;
}
Add your S3 store URL to the ``img-src`` and ``media-src`` headers
.. code-block:: shell
add_header Content-Security-Policy "...img-src 'self' https://<your-s3-URL> data:;...media-src https://<your-s3-URL> 'self' data:";
Then restart Funkwhale and nginx.
From now on, media files will be stored on the S3 bucket you configured. If you already
had media files before configuring the S3 bucket, you also have to move those on the bucket
by hand (which is outside the scope of this guide).
.. note::
At the moment, we do not support S3 when using Apache as a reverse proxy.
.. note::
If you are attempting to integrate your docker deployment with an existing nginx webserver,
such as the one provided by `linuxserver/swag <https://docs.linuxserver.io/images/docker-swag>`_
(formerly `linuxserver/letsencrypt <https://docs.linuxserver.io/images/docker-swag#migrating-from-the-old-linuxserver-letsencrypt-image>`_),
you may run into an issue where an additional ``Content-Security-Policy`` header appears in responses from the server,
without the newly included S3 URL values.
In this case, you can suppress the extraneous ``Content-Security-Policy`` header by specifying it in a ``proxy_hide_header``
`directive <http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_hide_header>`_ in the ``location /`` block.
.. code-block:: shell
location / {
proxy_pass http://funkwhale:80;
# ...
# ... include the rest of the preset directives
# ...
proxy_hide_header Content-Security-Policy;
}
Serving audio files directly from the bucket
********************************************
Depending on your setup, you may want to serve audio files directly from the S3 bucket
instead of proxying them through Funkwhale, e.g to reduce the bandwidth consumption on your server,
or get better performance.
You can achieve that by adding ``PROXY_MEDIA=false`` to your ``.env`` file.
When receiving a request on the stream endpoint, Funkwhale will check for authentication and permissions,
then issue a 302 redirect to the file URL in the bucket.
This URL is actually be visible by the client, but contains a signature valid only for one hour, to ensure
no one can reuse this URL or share it publicly to distribute unauthorized content.
.. note::
If you are using Amazon S3, you will need to set your ``AWS_S3_REGION_NAME`` in the ``.env`` file to
use this feature.
.. note::
Since some Subsonic clients don't support 302 redirections, Funkwhale will ignore
the ``PROXY_MEDIA`` setting and always proxy file when accessed through the Subsonic API.
Securing your S3 bucket
***********************
It's important to ensure your the root of your bucket doesn't list its content,
which is the default on many S3 servers. Otherwise, anyone could find out the true
URLs of your audio files and bypass authentication.
To avoid that, you can set the following policy on your bucket::
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Resource": [
"arn:aws:s3:::<yourbucketname>/*"
],
"Sid": "Public"
}
]
}
If you are using ``awscli``, you can store this policy in a ``/tmp/policy`` file, and
apply it using the following command::
aws s3api put-bucket-policy --bucket <yourbucketname> --policy file:///tmp/policy
Troubleshooting
***************
No Resolver Found
^^^^^^^^^^^^^^^^^
Depending on your setup, you may experience the following issue when trying to stream
music directly from your S3-compatible store.
.. code-block:: shell
[error] 2832#2832: *1 no resolver defined to resolve [address] client: [IP], server: [servername], request: "GET API request", host: "[your_domain]", referrer: "[your_domain/library]"
This happpens when the nginx config is unable to use your server's DNS resolver. This issue
is still under investigation, but in the meantime can be worked around by specifying a resolver
in your ``funkwhale.template`` under the ``location ~/_protected/media/(.+)`` section.
.. code-block:: shell
location ~ /_protected/media/(.+) {
resolver 1.1.1.1;
internal;
proxy_set_header Authorization "";
proxy_pass $1;
}
No Images or Media Loading
^^^^^^^^^^^^^^^^^^^^^^^^^^
If you are serving media from an S3-compatible store, you may experience an issue where
nothing loads in the front end. The error logs in your browser may show something like
the following:
.. code-block:: text
Content Security Policy: The page's settings blocked the loading of a resource at https://<your-s3-url> ("img-src")
Content Security Policy: The page's settings blocked the loading of a resource at https://<your-s3-url> ("media-src")
This happens when your S3 store isn't defined in the ``Content-Security-Policy`` headers
in your Nginx files. To resolve the issue, add the base URL of your S3 store to the ``img-src``
and ``media-src`` headers and reload nginx.
.. code-block:: shell
add_header Content-Security-Policy "...img-src 'self' https://<your-s3-URL> data:;...media-src https://<your-s3-URL> 'self' data:";
Broken Images in Audio Player On Page Reload
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If you are serving media directly from an S3-compatible store, you may find that images
in the queue and the player won't load after the page is refreshed. This happens if the
generated URL has expired and the authorization is no longer valid. You can extend the expiry time
using the following setting in your ``.env`` file:
.. code-block:: shell
# The default value is 3600 (60 mins). The maximum is 604800 (7 days)
AWS_QUERYSTRING_EXPIRE=604800

Wyświetl plik

@ -1,227 +0,0 @@
Importing music from the server
===============================
Funkwhale can import music files saved on the server
assuming they are readable by the Funkwhale application.
Your music files should contain at least
``artist``, ``album`` and ``title`` tags,
but we recommend you tag extensively using a proper tool,
such as Beets or Musicbrainz Picard.
Funkwhale supports two different import modes:
- copy(default): files are copied into Funkwhale's internal storage. This means importing a 1GB library will result in the same amount of space being used by Funkwhale.
- :ref:`in-place <in-place-import>` (with ``--in-place`` flag): files are referenced in Funkwhale's DB but not copied or touched in anyway. This is useful if you have a huge library, or one that is updated by an external tool such as Beets.
Regardless of the mode you choose,
follow the below steps to import music,
assuming your files are located in
``/srv/funkwhale/data/music``:
.. code-block:: bash
export LIBRARY_ID="<your_libary_id>"
python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/" --recursive --noinput
.. note::
You have to create a library in the Web UI to get your library ID.
Simply visit https://yourdomain/content/libraries/ to create one.
Library IDs are part of the library url or sharing link.
For example, the library ID of
https://funkwhale.instance/content/libraries/769a2ae3-eb3d-4aff-9f94-2c4d80d5c2d1,
is 769a2bc3-eb1d-4aff-9f84-2c4d80d5c2d1
You can use only the first characters of the ID when calling the command, like that:
``export LIBRARY_ID="769a2bc3"``
When you use docker, ``/srv/funkwhale/data/music`` is mounted from the host
to the ``/music`` directory on the container:
.. code-block:: bash
export LIBRARY_ID="<your_libary_id>"
docker-compose run --rm api python manage.py import_files $LIBRARY_ID "/music/" --recursive --noinput
When you installed Funkwhale via ansible, you need to call a script instead of Python, and the folder path must be adapted accordingly:
.. code-block:: bash
export LIBRARY_ID="<your_libary_id>"
/srv/funkwhale/manage import_files $LIBRARY_ID "/srv/funkwhale/data/music/" --recursive --noinput
The import command supports several options,
check the help for details::
docker-compose run --rm api python manage.py import_files --help
.. note::
We recommend tagging your music collection using `Picard <http://picard.musicbrainz.org/>`_ to have the best quality metadata.
.. note::
This command is idempotent,
meaning you can run it multiple times on the same files
and already imported files are simply skipped.
.. note::
At the moment, only Flac, OGG/Vorbis and MP3 or AIFF files with ID3 tags are supported.
.. _in-place-import:
In-place import
^^^^^^^^^^^^^^^
By default, the CLI-importer will copy imported files to Funkwhale's internal storage.
This means importing a 1GB library will result
in the same amount of space being used by Funkwhale.
While this behaviour has some benefits (easier backups and configuration),
it is not always the best choice,
especially if you have a huge library to import
and don't want to double your disk usage.
The CLI importer supports an additional ``--in-place`` option
through which Funkwhale will store file paths rather than file content.
Structure
*********
Because imported files are not managed by Funkwhale,
we offer additional configuration options
to ensure the webserver can serve them properly:
- :data:`MUSIC_DIRECTORY_PATH <config.settings.common.MUSIC_DIRECTORY_PATH>`
- :data:`MUSIC_DIRECTORY_SERVING_PATH <config.settings.common.MUSIC_DIRECTORY_SERVE_PATH>`
We recommend you symlink all your music directories into ``/srv/funkwhale/data/music``
and run the `import_files` command from that directory.
This will make it possible to use multiple music directories
without any additional configuration on the webserver side.
For instance, if you have an NFS share
with your music mounted at ``/media/mynfsshare``,
you can create a symlink like this::
ln -s /media/mynfsshare /srv/funkwhale/data/music/nfsshare
And import music from the share::
export LIBRARY_ID="<your_libary_id>"
python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/nfsshare/" --recursive --noinput --in-place
Docker
******
Docker setups require a bit more work,
because while the ``/srv/funkwhale/data/music`` is mounted in containers,
symlinked directories are not.
To fix that, you can use bind mounts instead of symbolic links,
as they replicate the source directory tree.
With the previous NFS share, use this command::
mount --bind /media/mynfsshare /srv/funkwhale/data/music/nfsshare
If you want to go with symlinks,
ensure each symlinked directory is mounted as a volume
as well as in your ``docker-compose.yml`` file::
celeryworker:
volumes:
- ./data/music:/music:ro
- ./data/media:/app/funkwhale_api/media
# add your symlinked dirs here
- /media/nfsshare:/media/nfsshare:ro
api:
volumes:
- ./data/music:/music:ro
- ./data/media:/app/funkwhale_api/media
# add your symlinked dirs here
- /media/nfsshare:/media/nfsshare:ro
Metadata updates
^^^^^^^^^^^^^^^^
When doing an import with in ``in-place`` mode,
the importer will also check and update existing entries found in the database.
For instance, if the ID3 Title tag of an existing song was updated since the last scan, Funkwhale picks up the new title.
The following fields can be updated this way:
- Track mbid
- Track title
- Track position and disc number
- Track license and copyright
- Track genre (`from version 1.2 <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/1225>`_)
- Album cover
- Album title
- Album mbid
- Album release date
- Artist name
- Artist mbid
- Album artist name
- Album artist mbid
Changes in artist name can lead to multiple artists with the same name in the database,
`this is a known issue <https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1318>`_
and can be remedied by adding mbids.
React to filesystem events with ``--watch``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If you have a really big library or update it regularly,
running the ``import_files`` command by hand may not be practical.
For this use case,
the ``import_files`` command supports a ``--watch`` flag
through which it observes filesystem events instead of performing a full import.
File creation, move, update and removal
are handled when ``--watch`` is provided:
- Files created in the watched directory are imported immediately
- If using ``in-place`` mode, files updates trigger a metadata update on the corresponding entries
- If using ``in-place`` mode, files that are moved and known by Funkwhale will see their path updated in Funkwhale's DB
- If using ``in-place`` mode, files that are removed and known by Funkwhale will be removed from Funkwhale's DB
Pruning dangling metadata with ``--prune``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Funkwhale is, by design, conservative with music metadata in its database.
If you remove a file from Funkwhale's DB,
the corresponding artist, album and track object won't be deleted by default.
If you want to prune dangling metadata from the database once the ``import_files`` command is over, simply add the ``--prune`` flag.
This also works in with ``--watch``.
Album covers
^^^^^^^^^^^^
Whenever possible, Funkwhale obtains album covers for tracks,
with the following precedence:
1. The cover embedded in the audio files themeselves, if any (Flac/MP3 only)
2. Use a cover.jpg or a cover.png file from the imported track directory, if any
3. Fetch cover art from musicbrainz, assuming the file is tagged correctly
Getting demo tracks
^^^^^^^^^^^^^^^^^^^
If you do not have any music on your server
but want to test the import process,
you can call the following methods
to download a few albums licenced under creative commons (courtesy of Jamendo):
.. parsed-literal::
curl -L -o download-tracks.sh "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/demo/download-tracks.sh"
curl -L -o music.txt "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/demo/music.txt"
chmod +x download-tracks.sh
./download-tracks.sh music.txt
This will download a bunch of zip archives (one per album)
under the ``data/music`` directory and unzip their content.

Wyświetl plik

@ -1,43 +0,0 @@
Administrator Documentation
=====================================
This documentation is targeted at administrators of instances. This typically refers to
the person(s) responsible for running the server and managing the software on a technical
level.
Setup Guides
------------
.. toctree::
:maxdepth: 2
../installation/index
configuration
importing-music
external-storages
optimization
backup
migration
uninstall
ldap
Administration
--------------
.. toctree::
:maxdepth: 2
django
commands
url
upgrading
mrf
Troubleshooting
---------------
.. toctree::
:maxdepth: 2
troubleshooting
debugging

Wyświetl plik

@ -1,43 +0,0 @@
LDAP configuration
==================
LDAP is a protocol for providing directory services, in practice allowing a central authority for user login information.
Funkwhale supports LDAP through the Django LDAP authentication module and by setting several configuration options.
.. warning::
Note that LDAP-based users cannot change their password inside the app.
Dependencies
------------
LDAP support requires some additional dependencies to enable. On the OS level both ``libldap2-dev`` and ``libsasl2-dev`` are required, and the Python modules ``python-ldap`` and ``python-django-auth-ldap`` must be installed. These dependencies are all included in the ``requirements.*`` files so deploying with those will install these dependencies by default. However, they are not required unless LDAP support is explicitly enabled.
Environment variables
---------------------
LDAP authentication is configured entirely through the environment variables. The following options enable the LDAP features:
Basic features
^^^^^^^^^^^^^^
- ``LDAP_ENABLED``: Set to ``True`` to enable LDAP support. Default: ``False``.
- ``LDAP_SERVER_URI``: LDAP URI to the authentication server, e.g. ``ldap://my.host:389``.
- ``LDAP_BIND_DN``: LDAP user DN to bind as to perform searches.
- ``LDAP_BIND_PASSWORD``: LDAP user password for bind DN.
- ``LDAP_SEARCH_FILTER``: The LDAP user filter, using ``{0}`` as the username placeholder, e.g. ``(|(cn={0})(mail={0}))``; uses standard LDAP search syntax. Default: ``(uid={0})``.
- ``LDAP_START_TLS``: Set to ``True`` to enable LDAP StartTLS support. Default: ``False``.
- ``LDAP_ROOT_DN``: The LDAP search root DN, e.g. ``dc=my,dc=domain,dc=com``; supports multiple entries in a space-delimited list, e.g. ``dc=users,dc=domain,dc=com dc=admins,dc=domain,dc=com``.
- ``LDAP_USER_ATTR_MAP``: A mapping of Django user attributes to LDAP values, e.g. ``first_name:givenName, last_name:sn, username:cn, email:mail``. Default: ``first_name:givenName, last_name:sn, username:cn, email:mail``.
- ``AUTH_LDAP_BIND_AS_AUTHENTICATING_USER``: Controls whether direct binding is used. Default: ``False``.
Group features
^^^^^^^^^^^^^^
For details on these options, see the `Django documentation <https://django-auth-ldap.readthedocs.io/en/latest/groups.html>`_. Group configuration is disabled unless an ``LDAP_GROUP_DN`` is set. This is an advanced LDAP feature and most users should not need to configure these settings.
- ``LDAP_GROUP_DN``: The LDAP group search root DN, e.g. ``ou=groups,dc=domain,dc=com``.
- ``LDAP_GROUP_FILTER``: The LDAP group filter, e.g. ``(objectClass=groupOfNames)``.
- ``LDAP_REQUIRE_GROUP``: A group users must be a part of to authenticate, e.g. ``cn=enabled,ou=groups,dc=domain,dc=com``.
- ``LDAP_DENY_GROUP``: A group users must not be a part of to authenticate, e.g. ``cn=disabled,ou=groups,dc=domain,dc=com``.

Wyświetl plik

@ -1,113 +0,0 @@
Migrating to a New Server
=========================
Sometimes, it may be necessary or desirable to migrate your
existing Funkwhale setup to a new server. This can be helpful
if you need to boost resources or if you wish to use a different
hosting platform.
In this guide, the existing Funkwhale setup is called the origin server, and the new setup the destination server.
Requirements
------------
To get started with your new setup, you will need to have the
following:
- `rsync <https://linux.die.net/man/1/rsync>`_ installed on the **destination** server
- SSH access set up between the two servers
Non-Docker
----------
On the destination server, run through the :doc:`installation steps<../installation/debian>` with the exception of the following points:
- Do not enable the extensions ``unaccent`` and ``citext`` when setting up the database;
- Do not initialize the database by applying the migrate command;
- Do not create an admin account.
Stop all funkwhale related services on the destination server:
.. code-block:: shell
sudo systemctl stop funkwhale.target
On the origin server, create a database backup:
.. code-block:: shell
sudo -u funkwhale pg_dump -d funkwhale > "db.dump"
On the destination server, use rsync to fetch the contents of ``/srv/funwkhale/data/media/music/`` and ``/srv/funkwhale/data/media/`` from the origin server, as well as the database dump and the ``.env`` file:
.. code-block:: shell
origin = <origin server IP/hostname>
username = <your username>
rsync -a $username@$origin:/srv/funkwhale/data/media/ /srv/funkwhale/data/media/
rsync -a $username@$origin:/srv/funkwhale/data/music/ /srv/funkwhale/data/music/
rsync -a $username@$origin:/srv/funkwhale/config/.env /srv/funkwhale/config/
rsync -a $username@$origin:/srv/funkwhale/db.dump /srv/funkwhale/
On the destination server, restore the database dump:
.. code-block:: shell
sudo psql -d funkwhale db.dump
Once the database has been restored, follow the database migration steps from the non-docker installation guide to complete the installation on the destination server.
Ensure that all DNS changes have been made and start the services:
.. code-block:: shell
sudo systemctl start funkwhale.target
Docker
------
On the destination server, run through the :doc:`installation steps<../installation/docker>` but skip the ``docker-compose run --rm api python manage.py migrate`` step.
Stop all funkwhale related containers on the destination server.
On the origin server, create a database backup:
.. code-block:: shell
docker exec -t funkwhale_postgres_1 pg_dumpall -c -U postgres > "db.dump"
On the destination server, use rsync to fetch the contents of ``/srv/funwkhale/data/media/music`` and ``/srv/funkwhale/data/media`` from the origin server, as well as the database dump nd the ``.env`` file:
.. code-block:: shell
origin = <origin server IP/hostname>
username = <your username>
rsync -a $username@$origin:/srv/funkwhale/data/media/ /srv/funkwhale/data/media/
rsync -a $username@$origin:/srv/funkwhale/data/music/ /srv/funkwhale/data/music/
rsync -a $username@$origin:/srv/funkwhale/.env /srv/funkwhale/
rsync -a $username@$origin:/srv/funkwhale/db.dump /srv/funkwhale/
Initialize the Postgres container with the funkwhale database and its user. For easier, we create a db init dump file than we import in the postgres container:
.. code-block:: shell
echo "CREATE DATABASE "funkwhale"
WITH ENCODING 'utf8';
CREATE USER funkwhale;
GRANT ALL PRIVILEGES ON DATABASE funkwhale TO funkwhale;" > init.dump
docker exec -i funkwhale_postgres_1 psql -U postgres -d postgres < "init.dump"
After that, we can restore the database dump:
.. code-block:: shell
docker exec -i funkwhale_postgres_1 psql -U postgres -d postgres < "db.dump"
Once the database has been restored, run the migrations following the docker installation guide.
Ensure that all DNS changes have been made and start the services.

Wyświetl plik

@ -1,117 +0,0 @@
Message Rewrite Facility (MRF)
==============================
Funkwhale includes a feature that mimics `Pleroma's Message Rewrite Facility <https://docs-develop.pleroma.social/backend/configuration/mrf/>`_.
Using the MRF, instance admins can write and configure custom and automated moderation rules
that couldn't be implemented otherwise using :doc:`our other built-in moderation tools <../moderator/index>`.
Architecture
------------
The MRF is a pluggable system that will process messages and forward those to the list
of registered policies, in turn. Each policy can mutate the message, leave it as is, or discard it entirely.
Some of our built-in moderation tools are actually implemented as a MRF policy, e.g:
- Allow-list, when checking incoming messages (`code <https://dev.funkwhale.audio/funkwhale/funkwhale/blob/develop/api/funkwhale_api/moderation/mrf_policies.py>`__)
- Domain and user blocking, when checking incoming messages (`code <https://dev.funkwhale.audio/funkwhale/funkwhale/blob/develop/api/funkwhale_api/federation/mrf_policies.py>`__)
.. note::
While Pleroma MRF policies can also affect outgoing messages, this is not supported yet in Funkwhale.
Disclaimer
----------
Writing custom MRF can impact negatively the performance and stability of your pod, as well as message
delivery. Your policy will be called everytime a message is delivered, so ensure you don't execute
any slow operation here.
Please note that the Funkwhale developers consider custom MRF policy modules to fall under the purview of the AGPL. As such, you are obligated to release the sources to your custom MRF policy modules upon request.
Writing your first MRF policy
-----------------------------
MRF Policies are written as Python 3 functions that take at least one ``payload`` parameter.
This payload is the raw ActivityPub message, received via HTTP, after the HTTP signature check.
In the example below we write a policy that discards all Follow requests from listed domains:
.. code-block:: python
import urllib.parse
from funkwhale_api.moderation import mrf
BLOCKED_FOLLOW_DOMAINS = ['domain1.com', 'botdomain.org']
# registering the policy is required to have it applied
# the name can be anything you want, it will appear in the mrf logs
@mrf.inbox.register(name='blocked_follow_domains')
def blocked_follow_domains_policy(payload, **kwargs):
actor_id = payload.get('actor')
domain = urllib.parse.urlparse(actor_id).hostname
if domain not in BLOCKED_FOLLOW_DOMAINS:
# raising mrf.Skip isn't strictly necessary but it provides
# for info in the debug logs. Otherwise, you can simply return
raise mrf.Skip("This domain isn't blocked")
activity_type = payload.get('type')
object_type = payload.get('object', {}).get('type')
if object_type == 'Follow' and activity_type == 'Create':
raise mrf.Discard('Follow from blocked domain')
This code must be stored in a Funkwhale plugin. To create one, just execute the following:
.. code-block:: shell
# plugin name must contain only ASCII letters, numbers and undercores
export PLUGIN_NAME="myplugin"
# this is the default path where Funkwhale will look for plugins
# if you want to use another path, update this path and ensure
# your PLUGINS_PATH is also included in your .env
export PLUGINS_PATH="/srv/funkwhale/plugins/"
mkdir -p $PLUGINS_PATH/$PLUGIN_NAME
cd $PLUGINS_PATH/$PLUGIN_NAME
touch __init__.py # required to make the plugin a valid Python package
# create the required apps.py file to register our plugin in Funkwhale
cat > apps.py <<EOF
from django.apps import AppConfig
class Plugin(AppConfig):
name = "$PLUGIN_NAME"
EOF
Once you have a Funkwhale plugin, simply put your MRF policy code inside a ``mrf_policies.py``
file whithin the plugin directory. Then enable the plugin in your ``.env`` by
adding its name to the coma-separated list of ``FUNKWHALE_PLUGINS`` (add the variable if it's not there).
Testing a MRF policy
--------------------
To make the job of writing and debugging MRF policies easier, we provide a management
command:
.. code-block:: shell
python manage.py mrf_check --help
# list registered MRF policies
python manage.py mrf_check --list
# check how our MRF would handle a legit follow
export MRF_MESSAGE='{"actor": "https://normal.domain/@alice", "type": "Create", "object": {"type": "Follow"}}'
echo $MRF_MESSAGE | python manage.py mrf_check inbox - -p blocked_follow_domains
# check how our MRF would handle a problematic follow
export MRF_MESSAGE='{"actor": "https://botdomain.org/@bob", "type": "Create", "object": {"type": "Follow"}}'
echo $MRF_MESSAGE | python manage.py mrf_check inbox - -p blocked_follow_domains
# check against an activity already present in the database
# you can get the UUID of activities by visiting /api/admin/federation/activity
export ACTIVITY_UUID="06208aea-c687-4e8b-aefd-22f1c3f76039"
echo $MRF_MESSAGE | python manage.py mrf_check inbox $ACTIVITY_UUID -p blocked_follow_domains

Wyświetl plik

@ -1,37 +0,0 @@
Optimizing your Funkwhale instance
==================================
Depending on your requirements, you may want to reduce as much as possible
Funkwhale's memory footprint.
Reduce workers concurrency
--------------------------
Asynchronous tasks are handled by a celery worker, which will by default
spawn a worker process per CPU available. This can lead to a higher
memory usage.
You can control this behavior using the ``--concurrency`` flag.
For instance, setting ``--concurrency=1`` will spawn only one worker.
This flag should be appended after the ``celery -A funkwhale_api.taskapp
worker`` command in your :file:`docker-compose.yml` file if your using Docker,
or in your :file:`/etc/systemd/system/funkwhale-worker.service` otherwise.
.. note::
Reducing concurrency comes at a cost: asynchronous tasks will be processed
more slowly. However, on small instances, this should not be an issue.
Switch from prefork to solo pool
--------------------------------
Using a different pool implementation for Celery tasks may also help.
Using the ``solo`` pool type should reduce your memory consumption.
You can control this behavior using the ``--pool=solo`` flag.
This flag should be appended after the ``celery -A funkwhale_api.taskapp worker``
command in your :file:`docker-compose.yml` file if you're using Docker, or in
your :file:`/etc/systemd/system/funkwhale-worker.service` otherwise.

Wyświetl plik

@ -1,169 +0,0 @@
Troubleshooting
===============
Various errors and issues can arise on your Funkwhale instance, caused by configuration errors,
deployment/environment specific issues, or bugs in the software itself.
On this document, you'll find:
- Tools and commands you can use to better understand the issues
- A list of common pitfalls and errors and how to solve them
- A collection of links and advice to get help from the community and report new issues
Diagnose problems
^^^^^^^^^^^^^^^^^
Funkwhale is made of several components, each one being a potential cause for failure. Having an even basic overview
of Funkwhale's technical architecture can help you understand what is going on. You can refer to :doc:`the technical architecture <../developers/architecture>` for that.
Problems usually fall into one of those categories:
- **Frontend**: Funkwhale's interface is not loading, not behaving as expected, music is not playing
- **API**: the interface do not display any data or show errors
- **Import**: uploaded/imported tracks are not imported correctly or at all
- **Federation**: you cannot contact other Funkwhale servers, access their library, play federated tracks
- **Everything else**
Each category comes with its own set of diagnose tools and/or commands we will detail below. We'll also give you simple
steps for each type of problem. Please try those to see if it fix your issues. If none of those works, please report your issue on our
issue tracker.
.. note::
To get detailed log messages, set the environment variable ``LOGLEVEL=debug``.
If you are using the docker setup you can configure this in the ``.env`` file.
Backend issues
^^^^^^^^^^^^^^
Diagnostic tools:
- Reverse proxy logs:
- Apache logs should be available at :file:`/var/log/apache/access.log` and :file:`/var/log/apache/error.log`
- Nginx logs should be available at :file:`/var/log/nginx/access.log` and :file:`/var/log/nginx/error.log`
- API logs:
- Docker setup: ``docker-compose logs -f --tail=50 api`` (remove the ``--tail`` flag to get the full logs)
- Non-docker setup: ``journalctl -xn -u funkwhale-server``
.. note::
If you edit your .env file to test a new configuration, you have to restart your services to pick up the changes:
- Docker setup: ``docker-compose up -d``
- Non-docker setup: ``systemctl restart funkwhale.target``
Common problems
***************
Instance works properly, but audio files are not served (404 error)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- If you're using docker, ensure the ``MEDIA_ROOT`` variable is commented in your env file
- Ensure the ``_protected/media`` block points toward the path where media files are stored (``/srv/funkwhale/data/media``, by default)
- If you're using in-place import, ensure :data:`MUSIC_DIRECTORY_PATH <config.settings.common.MUSIC_DIRECTORY_PATH>`, :data:`MUSIC_DIRECTORY_SERVE_PATH <config.settings.common.MUSIC_DIRECTORY_SERVE_PATH>` and :data:`REVERSE_PROXY_TYPE <config.settings.common.REVERSE_PROXY_TYPE>` are configured properly, and that the files are readable by the webserver
Weakref error when running ``python manage.py <command>``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
On Python <3.6, you may see this kind of errors when running commands like ``python manage.py migrate``::
Exception ignored in: <function WeakValueDictionary.__init__.<locals>.remove at 0x107e7a6a8>
Traceback (most recent call last):
File "/srv/funkwhale/venv/lib/python3.5/weakref.py", line 117, in remove
TypeError: 'NoneType' object is not callable
This is caused by a bug in Python (cf https://github.com/celery/celery/issues/3818), and is not affecting in any way
the command you execute. You can safely ignore this error.
``Your models have changes that are not yet reflected in a migration`` warning
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When running ``python manage.py migrate`` (both in docker or non-docker), you may end-up with this::
Operations to perform:
Apply all migrations: account, admin, auth, authtoken, common, contenttypes, dynamic_preferences, favorites, federation, history, music, playlists, radios, requests, sessions, sites, socialaccount, taggit, users
Running migrations:
No migrations to apply.
Your models have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
This warning can be safely ignored. You should not run the suggested ``manage.py makemigrations`` command.
File import issues
^^^^^^^^^^^^^^^^^^
Unless you are using the CLI to import files, imports are send as tasks in a queue to a celery worker that will process them.
Diagnostic tools:
- Celery worker logs:
- Docker setup: ``docker-compose logs -f --tail=50 celeryworker`` (remove the ``--tail`` flag to get the full logs)
- Non-docker setup: ``journalctl -xn -u funkwhale-worker``
Federation issues
^^^^^^^^^^^^^^^^^
Received federations messages are sent to a dedicated task queue and processed asynchronously by a celery worker.
Diagnostic tools:
- API logs:
- Docker setup: ``docker-compose logs -f --tail=50 api`` (remove the ``--tail`` flag to get the full logs)
- Non-docker setup: ``journalctl -xn -u funkwhale-server``
- Celery worker logs:
- Docker setup: ``docker-compose logs -f --tail=50 celeryworker`` (remove the ``--tail`` flag to get the full logs)
- Non-docker setup: ``journalctl -xn -u funkwhale-worker``
Common problems
***************
I have no access to another instance library
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Check if it works with the demo library (library@demo.funkwhale.audio)
- Check if the remote library received your follow request and approved it
- Trigger a scan via the interface
- Have a look in the celery logs for potential errors during the scan
Other problems
^^^^^^^^^^^^^^
It's a bit hard to give targeted advice about problems that do not fit in the previous categories. However, we can recommend to:
- Try to identify the scope of the issue and reproduce it reliably
- Ensure your instance is configured as detailed in the installation documentation, and if you did not use the default
values, to check what you changed
- To read the .env file carefully, as most of the options are described in the comments
Report an issue or get help
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Well be more than happy to help you to debug installation and configuration issues. The main channel
for receiving support about your Funkwhale installation is the `#funkwhale-troubleshooting:matrix.org <https://matrix.to/#/#funkwhale-troubleshooting:matrix.org>`_ Matrix channel.
Before asking for help, we'd really appreciate if you took the time to go through this document and try to diagnose the problem yourself. But if you don't find
anything relevant or don't have the time, we'll be there for you!
Here are a few recommendations on how to structure and what to include in your help requests:
- Give us as much context as possible about your installation (OS, version, Docker/non-docker, reverse-proxy type, relevant logs and errors, etc.)
- Including screenshots or small gifs or videos can help us considerably when debugging front-end issues
You can also open issues on our `issue tracker <https://dev.funkwhale.audio/funkwhale/funkwhale/issues>`_. Please have a quick look for
similar issues before doing that, and use the issue tracker only to report bugs, suggest enhancements (both in the software and the documentation) or new features.
.. warning::
If you ever need to share screenshots or urls with someone else, ensure those do not include your personal token.
This token is binded to your account and can be used to connect and use your account.
Urls that includes your token looks like: ``https://your.instance/api/v1/uploads/42/serve/?jwt=yoursecrettoken``
Improving this documentation
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If you feel like something should be improved in this document (and in the documentation in general), feel free to :doc:`contribute to the documentation <../documentation/creating>`.
If you're not comfortable contributing or would like to ask somebody else to do it, feel free to :doc:`request a change in documentation <../documentation/identifying>`.

Wyświetl plik

@ -1,89 +0,0 @@
Uninstall Funkwhale
===================
The following instructions helps you remove Funkwhale from your server, for instance after migrating to another server, or if you do not want to use Funkwhale anymore.
.. warning::
The following instructions cannot be undone and might result in loss of data. If necessary, please make a backup of your server following the :doc:`backup instructions<backup>`.
Especially, it must be noted that:
- Remote content hosted on an S3 or S3-compatible server will not be removed.
- In place imports will not be removed, provided they are located outside ``/srv/funkwhale/``
.. note::
These instructions apply only for the manual installation on Debian or Arch Linux. It matches the default setup.
First, stop the all funkwhale related services:
.. code-block:: shell
sudo systemctl stop funkwhale.target
Remove the reverse proxy configuration data and reload the reverse proxy.
If you are using nginx:
.. code-block:: shell
sudo rm /etc/nginx/sites-enabled/funkwhale.conf
sudo rm /etc/nginx/sites-available/funkwhale.conf
sudo rm /etc/nginx/funkwhale_proxy.conf
sudo systemctl reload nginx
If you are using Apache2:
.. code-block:: shell
sudo rm /etc/apache2/sites-enabled/funkwhale.conf
sudo rm /etc/apache2/sites-available/funkwhale.conf
sudo service apache2 restart
Remove the systemd services:
.. code-block:: shell
sudo systemctl disable funkwhale-server
sudo systemctl disable funkwhale-worker
sudo systemctl disable funkwhale-beat
sudo rm /etc/systemd/system/funkwhale-server.service
sudo rm /etc/systemd/system/funkwhale-worker.service
sudo rm /etc/systemd/system/funkwhale-beat.service
sudo rm /etc/systemd/system/funkwhale.target
sudo systemctl daemon-reload
sudo systemctl reset-failed
Then, remove the database:
.. code-block:: shell
sudo -u postgres psql -c 'DROP DATABASE funkwhale;'
sudo -u postgres psql -c 'DROP USER funkwhale;'
Finally, remove the user ``funkwhale`` and all funkwhale related data, including the server and the data:
.. code-block:: shell
sudo userdel -r funkwhale
.. warning::
The last command will remove ``/srv/funkwhale/``. On the default setup, this directory contains all user data. Please proceed cautiously!
However, it must be noted that:
- Remote content hosted on an S3 or S3-compatible server will not be removed.
- In place imports will not be removed, provided they are not located in the directory ``/srv/funkwhale/``
.. note::
If relevant, you might also want to:
- remove the SSL certificates;
- remove the corresponding DNS entries.

Wyświetl plik

@ -1,199 +0,0 @@
Upgrading your Funkwhale instance to a newer version
====================================================
.. note::
Before upgrading your instance, we strongly advise you to make at least a database backup. Ideally, you should make a full backup, including
the database and the media files.
We're commited to make upgrade as easy and straightforward as possible,
however, Funkwhale is still in development and you'll be safer with a backup.
Reading the release notes
-------------------------
Please take a few minutes to read the :doc:`../changelog`: updates should work
similarly from version to version, but some of them may require additional steps.
Those steps would be described in the version release notes.
Insights about new versions
---------------------------
Some versions may be bigger than usual, and we'll try to detail the changes
when possible.
.. toctree::
:maxdepth: 1
0.17
Docker setup
------------
If you've followed the setup instructions in :doc:`../installation/docker`, upgrade path is
easy:
Mono-container installation
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Basically, you need to pull the new container image, stop and delete your existing container,
and relaunch a new one:
To upgrade your service, change the version number of the image in ``docker-compose.yml`` with the latest release (i.e. |version|).
Pull the new images:
.. code-block:: shell
docker-compose pull
Restart the service:
.. code-block:: shell
docker-compose up -d
Multi-container installation
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. parsed-literal::
# this assumes you want to upgrade to version "|version|"
export FUNKWHALE_VERSION="|version|"
.. code-block:: shell
cd /srv/funkwhale
# hardcode the targeted version your env file
# (look for the FUNKWHALE_VERSION variable)
nano .env
# Load your environment variables
source .env
# Download newest nginx configuration file
curl -L -o nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/$FUNKWHALE_VERSION/deploy/docker.nginx.template"
curl -L -o nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/$FUNKWHALE_VERSION/deploy/docker.funkwhale_proxy.conf"
# Pull the new version containers
docker-compose pull
# Apply the database migrations
docker-compose run --rm api python manage.py migrate
# Relaunch the containers
docker-compose up -d
.. warning::
You may sometimes get the following warning while applying migrations::
"Your models have changes that are not yet reflected in a migration, and so won't be applied."
This is a warning, not an error, and it can be safely ignored.
Never run the ``makemigrations`` command yourself.
Upgrading the Postgres container
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
With some Funkwhale releases, it is recommended to upgrade the version of the
Postgres database server container. For example, Funkwhale 0.17 recommended
Postgres 9.4, but Funkwhale 0.18 recommends Postgres 11. When upgrading
Postgres, it is not sufficient to change the container referenced in
``docker-compose.yml``. New major versions of Postgres cannot read the databases
created by older major versions. The data has to be exported from a running
instance of the old version and imported by the new version.
Thankfully, there is a Docker container available to automate this process. You
can use the following snippet to upgrade your database in ``./postgres``,
keeping a backup of the old version in ``./postgres-old``:
.. code-block:: shell
# Replace "9.4" and "11" with the versions you are migrating between.
export OLD_POSTGRES=9.4
export NEW_POSTGRES=11
docker-compose stop postgres
docker run --rm \
-v $(pwd)/data/postgres:/var/lib/postgresql/${OLD_POSTGRES}/data \
-v $(pwd)/data/postgres-new:/var/lib/postgresql/${NEW_POSTGRES}/data \
tianon/postgres-upgrade:${OLD_POSTGRES}-to-${NEW_POSTGRES}
# Add back the access control rule that doesn't survive the upgrade
echo "host all all all trust" | sudo tee -a ./data/postgres-new/pg_hba.conf
# Swap over to the new database
mv ./data/postgres ./data/postgres-old
mv ./data/postgres-new ./data/postgres
Non-docker setup
----------------
If you installed Funkwhale using the install script, upgrading is done using ``sh -c "$(curl -sSL https://get.funkwhale.audio/upgrade.sh)"``. Make sure to run this command with root permissions.
If you manually installed Funkwhale, please use the following instructions.
Upgrade the static files
^^^^^^^^^^^^^^^^^^^^^^^^
On non-docker setups, the front-end app
is updated separately from the API. This is as simple as downloading
the zip with the static files and extracting it in the correct place.
The following example assume your setup match :ref:`frontend-setup`.
.. parsed-literal::
# this assumes you want to upgrade to version "|version|"
export FUNKWHALE_VERSION="|version|"
cd /srv/funkwhale
sudo -u funkwhale curl -L -o front.zip "https://dev.funkwhale.audio/funkwhale/funkwhale/builds/artifacts/$FUNKWHALE_VERSION/download?job=build_front"
sudo -u funkwhale unzip -o front.zip
sudo -u funkwhale rm front.zip
Upgrading the API
^^^^^^^^^^^^^^^^^
On non-docker, upgrade involves a few more commands. We assume your setup
match what is described in :doc:`/installation/debian`:
.. parsed-literal::
# this assumes you want to upgrade to version "|version|"
export FUNKWHALE_VERSION="|version|"
cd /srv/funkwhale
# download more recent API files
sudo -u funkwhale curl -L -o "api-$FUNKWHALE_VERSION.zip" "https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/artifacts/$FUNKWHALE_VERSION/download?job=build_api"
sudo -u funkwhale unzip "api-$FUNKWHALE_VERSION.zip" -d extracted
sudo -u funkwhale rm -rf api/ && sudo -u funkwhale mv extracted/api .
sudo -u funkwhale rm -rf extracted
sudo -u funkwhale rm api-$FUNKWHALE_VERSION.zip
# update os dependencies
sudo api/install_os_dependencies.sh install
cd api
sudo -u funkwhale -H -E poetry install --no-dev
# collect static files
sudo -u funkwhale -H -E poetry run python manage.py collectstatic --no-input
# stop the services
sudo systemctl stop funkwhale.target
# apply database migrations
sudo -u funkwhale -H -E poetry run python api/manage.py migrate
# restart the services
sudo systemctl start funkwhale.target
.. note::
If you see a PermissionError when running the ``migrate`` command, try running the following commands by hand, and relaunch the migrations::
sudo -u postgres psql funkwhale -c 'CREATE EXTENSION IF NOT EXISTS "citext";'
sudo -u postgres psql funkwhale -c 'CREATE EXTENSION IF NOT EXISTS "unaccent";'
.. warning::
You may sometimes get the following warning while applying migrations::
"Your models have changes that are not yet reflected in a migration, and so won't be applied."
This is a warning, not an error, and it can be safely ignored.
Never run the ``makemigrations`` command yourself.

Wyświetl plik

@ -1,98 +0,0 @@
Changing Your Instance URL
==========================
.. DANGER::
We highly recommend not to change your instance URL. Members of the community tried to do this and documented their steps here.
This guide might be incomplete or fail for your instance. There is no support for this procedure and likely no way back.
At some point, you may wish to change your instance URL. In order to
do this, you will need to change the following:
- The instance URL in your .env file
- The instance URL in your ``/etc/nginx/sites-enabled/funkwhale.conf`` or ``/etc/apache2/sites-enabled/funkwhale.conf`` depending on your web server setup
- Any references to the old URL in your database
The changes to the database can be achieved with the ``fix_federation_ids`` script in the ``manage.py``
file.
Example output:
.. code-block:: shell
# For Docker setups
docker-compose run --rm api python manage.py fix_federation_ids https://old-url https://new-url --no-dry-run --no-input
# For non-Docker setups
python manage.py fix_federation_ids https://old-url https://new-url --no-dry-run --no-input
# Output
Will replace 108 found occurrences of 'https://old-url' by 'https://new-url':
- 20 music.Artist
- 13 music.Album
- 39 music.Track
- 31 music.Upload
- 1 music.Library
- 4 federation.Actor
- 0 federation.Activity
- 0 federation.Follow
- 0 federation.LibraryFollow
Replacing on 20 music.Artist…
Replacing on 13 music.Album…
Replacing on 39 music.Track…
Replacing on 31 music.Upload…
Replacing on 1 music.Library…
Replacing on 4 federation.Actor…
Replacing on 0 federation.Activity…
Replacing on 0 federation.Follow…
Replacing on 0 federation.LibraryFollow…
On Docker Installations
-----------------------
If you have followed the :doc:`Docker installation instructions <../installation/docker>`, you
will need to do the following:
- Edit your .env file to change the ``FUNKWHALE_HOSTNAME`` and ``DJANGO_ALLOWED_HOSTS`` value to your new URL
- Edit your ``/etc/nginx/sites-enabled/funkwhale.conf`` file to change the ``server_name`` values to your new URL
- Run the following command to change all mentions of your old instance URL in the database:
.. code-block:: shell
docker-compose run --rm api python manage.py fix_federation_ids https://old-url https://new-url --no-dry-run --no-input
- Restart Nginx or Apache to pick up the new changes
.. code-block:: shell
# For Nginx
sudo systemctl restart nginx
# For Apache
sudo systemctl restart apache2
On Non-Docker Installations
---------------------------
If you have followed the :doc:`non-docker setup <../installation/debian>`, you will need to do the following:
- Edit your .env file to change the ``FUNKWHALE_HOSTNAME`` and ``DJANGO_ALLOWED_HOSTS`` value to your new URL
- Edit your ``/etc/nginx/sites-enabled/funkwhale.conf`` file to change the ``server_name`` values to your new URL
- Run the following command to change all mentions of your old instance URL in the database:
.. code-block:: shell
python manage.py fix_federation_ids https://old-url https://new-url --no-dry-run --no-input
- Restart Nginx or Apache to pick up the new changes
.. code-block:: shell
# For Nginx
sudo systemctl restart nginx
# For Apache
sudo systemctl restart apache2

Wyświetl plik

@ -0,0 +1,88 @@
# Change your instance URL
```{danger}
We recommend you don't change your instance URL. Changing it __will__ cause instability and problems with federation. If you change your URL, the Funkwhale project can't offer support for problems that arise.
```
Your instance URL is your pod's unique identifier in the {term}`fediverse`. If you want to change it, you need to update a lot of information
- The instance URL in your {file}`.env` file.
- The instance URL in your vhost.
- Any references to the old URL in your database.
To clean the database, the {file}`manage.py` script contains a `fix_federation_ids` command.
```{warning}
Running `fix_federation_ids` with the `--no-dry-run` flag is irreversible. Make sure you [back up your data](../upgrade_docs/backup.md).
```
## Update your instance URL
1. Change the `FUNKWHALE_HOSTNAME` and `DJANGO_ALLOWED_HOSTS` value in your {file}`.env` file.
2. Change the `server_name` values in your {file}`/etc/nginx/sites-enabled/funkwhale.conf` file.
3. Run the `fix_federation_ids` command to clean up your database.
````{tabbed} Debian
```{code} bash
poetry run python manage.py fix_federation_ids https://old-url https://new-url --no-dry-run --no-input
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fix_federation_ids https://old-url https://new-url --no-dry-run --no-input
```
````
Example output:
```
Will replace 108 found occurrences of 'https://old-url' by 'https://new-url':
- 20 music.Artist
- 13 music.Album
- 39 music.Track
- 31 music.Upload
- 1 music.Library
- 4 federation.Actor
- 0 federation.Activity
- 0 federation.Follow
- 0 federation.LibraryFollow
Replacing on 20 music.Artist…
Replacing on 13 music.Album…
Replacing on 39 music.Track…
Replacing on 31 music.Upload…
Replacing on 1 music.Library…
Replacing on 4 federation.Actor…
Replacing on 0 federation.Activity…
Replacing on 0 federation.Follow…
Replacing on 0 federation.LibraryFollow…
```
4. Restart your webserver to pick up the changes.
````{tabbed} Nginx
```{code} bash
sudo systemctl restart nginx
```
````
````{tabbed} Apache
```{code} bash
sudo systemctl restart apache2
```
````

Wyświetl plik

@ -0,0 +1,277 @@
# Customize your environment file
Your `.env` (environment) file contains variables you can change to customize your pod. You can change these variables at any time to alter how your pod runs.
You need to restart your Funkwhale services after changing your `.env` file.
````{tabbed} Debian
```{code} bash
sudo systemctl restart funkwhale.target
```
````
````{tabbed} Docker
```{code} bash
docker-compose restart
```
````
## Variables
````{important}
Some environment variables accept a URL as a value. To encode URLs and avoid problems with special characters, use `urllib.parse` on your URL value.
```py
python3 -c 'import urllib.parse; print(urllib.parse.quote_plus("p@ssword"))
```
```{seealso}
The [django-environ documentation](https://github.com/joke2k/django-environ/blob/main/docs/tips.rst#using-unsafe-characters-in-urls).
```
````
### Pod configuration
```{eval-rst}
.. autodata:: config.settings.common.FUNKWHALE_HOSTNAME
:annotation: = mypod.audio
.. autodata:: config.settings.common.FUNKWHALE_PROTOCOL
:annotation: = https
```
### Database and redis configuration
```{eval-rst}
.. autodata:: config.settings.common.DATABASE_URL
:annotation: = postgresql://<user>:<password>@<host>:<port>/<database>
.. autodata:: config.settings.common.DB_CONN_MAX_AGE
.. autodata:: config.settings.common.CACHE_URL
:annotation: = redis://<host>:<port>/<database>
.. autodata:: config.settings.common.CELERY_BROKER_URL
:annotation: = redis://127.0.0.1:6379/0
```
### Accounts and registration
```{eval-rst}
.. autodata:: config.settings.common.ACCOUNT_EMAIL_VERIFICATION_ENFORCE
:annotation: = true
.. autodata:: config.settings.common.USERS_INVITATION_EXPIRATION_DAYS
:annotation: = 7
.. autodata:: config.settings.common.DISABLE_PASSWORD_VALIDATORS
:annotation: = true
.. autodata:: config.settings.common.ACCOUNT_USERNAME_BLACKLIST
:annotation: = test,funkwhale
```
```{py:data} LDAP_ENABLED
---
value: false
---
Whether to enable LDAP authentication.
See {doc}`/administrator_documentation/configuration_docs/ldap` for more information.
```
### Media storage and serving configuration
```{eval-rst}
.. autodata:: config.settings.common.MEDIA_URL
:annotation: = https://mypod.audio/media/
.. autodata:: config.settings.common.MEDIA_ROOT
:annotation: = /srv/funkwhale/data/media
.. autodata:: config.settings.common.PROXY_MEDIA
:annotation: = true
.. autodata:: config.settings.common.EXTERNAL_MEDIA_PROXY_ENABLED
:annotation: = false
.. autodata:: config.settings.common.ATTACHMENTS_UNATTACHED_PRUNE_DELAY
:annotation: = true
.. autodata:: config.settings.common.REVERSE_PROXY_TYPE
:annotation: = nginx
.. autodata:: config.settings.common.PROTECT_FILES_PATH
:annotation: = /_protected
```
### S3 storage configuration
```{eval-rst}
.. autodata:: config.settings.common.AWS_QUERYSTRING_AUTH
.. autodata:: config.settings.common.AWS_QUERYSTRING_EXPIRE
.. autodata:: config.settings.common.AWS_ACCESS_KEY_ID
.. autodata:: config.settings.common.AWS_SECRET_ACCESS_KEY
.. autodata:: config.settings.common.AWS_STORAGE_BUCKET_NAME
.. autodata:: config.settings.common.AWS_S3_CUSTOM_DOMAIN
.. autodata:: config.settings.common.AWS_S3_ENDPOINT_URL
:annotation: = https://minio.mydomain.com
.. autodata:: config.settings.common.AWS_S3_REGION_NAME
:annotation: = eu-west-2
.. autodata:: config.settings.common.AWS_LOCATION
:annotation: = funkwhale_music
```
### In-place import configuration
```{eval-rst}
.. autodata:: config.settings.common.MUSIC_DIRECTORY_PATH
:annotation: = /srv/funkwhale/data/music
.. autodata:: config.settings.common.MUSIC_DIRECTORY_SERVE_PATH
:annotation: = /srv/funkwhale/data/music
```
### API configuration
```{eval-rst}
.. autodata:: config.settings.common.THROTTLING_ENABLED
.. autodata:: config.settings.common.THROTTLING_RATES
:annotation: = signup=5/d,password-reset=2/d,anonymous-reports=5/d
```
```{dropdown} Standard endpoints
| Endpoint name | Description | Default rate (per user) |
|---------------------------|----------------------------------------------------------|-------------------------|
| `anonymous-wildcard` | Anonymous requests not covered by other limits | 1000 per hour |
| `authenticated-wildcard` | Authenticated requests not covered by other limits | 2000 per hour |
| `authenticated-create` | Authenticated POST requests | 1000 per hour |
| `anonymous-create` | Anonymous POST requests | 1000 per day |
| `authenticated-list` | Authenticated GET requests | 10000 per hour |
| `anonymous-list` | Anonymous GET requests | 10000 per day |
| `authenticated-retrieve` | Authenticated GET requests on resource details | 10000 per hour |
| `anonymous-retrieve` | Anonymous GET requests on resource details | 10000 per day |
| `authenticated-destroy` | Authenticated DELETE requests on resource details | 500 per hour |
| `anonymous-destroy` | Anonymous DELETE requests on resource details | 1000 per day |
| `authenticated-update` | Authenticated PATCH and PUT requests on resource details | 1000 per hour |
| `anonymous-update` | Anonymous PATCH and PUT requests on resource details | 1000 per day |
| `subsonic` | All Subsonic API requests | 2000 per hour |
```
```{dropdown} User action endpoints
| Endpoint name | Description | Default rate (per user) |
|---------------------------|----------------------------------------------------------|-------------------------|
| `login` | User login | 30 per hour |
| `signup` | User signup | 10 per day |
| `verify-email` | Email address confirmation | 20 per hour |
| `password-change` | Password change (when authenticated) | 20 per hour |
| `password-reset` | Password reset request | 20 per hour |
| `password-reset-confirm` | Password reset confirmation | 20 per hour |
| `fetch` | Fetch remote objects | 200 per day |
```
```{dropdown} Dangerous endpoints
| Endpoint name | Description | Default rate (per user) |
|---------------------------|----------------------------------------------------------|-------------------------|
| `authenticated-reports` | Authenticated report submissions | 100 per day |
| `anonymous-reports` | Anonymous report submissions | 10 per day |
| `authenticated-oauth-app` | Authenticated OAuth app creation | 10 per hour |
| `anonymous-oauth-app` | Anonymous OAuth app creation | 10 per day |
| `oauth-authorize` | OAuth app authorization | 100 per hour |
| `oauth-token` | OAuth token creation | 100 per hour |
| `oauth-revoke-token` | OAuth token deletion | 100 per hour |
```
```{eval-rst}
.. autodata:: config.settings.common.ADMIN_URL
.. autodata:: config.settings.common.EXTERNAL_REQUESTS_VERIFY_SSL
.. autodata:: config.settings.common.EXTERNAL_REQUESTS_TIMEOUT
```
### Federation configuration
```{eval-rst}
.. autodata:: config.settings.common.FEDERATION_OBJECT_FETCH_DELAY
.. autodata:: config.settings.common.FEDERATION_DUPLICATE_FETCH_DELAY
```
### Metadata configuration
```{eval-rst}
.. autodata:: config.settings.common.TAGS_MAX_BY_OBJ
.. autodata:: config.settings.common.MUSICBRAINZ_HOSTNAME
.. autodata:: config.settings.common.MUSICBRAINZ_CACHE_DURATION
```
### Channels and podcast configuration
```{eval-rst}
.. autodata:: config.settings.common.PODCASTS_RSS_FEED_REFRESH_DELAY
.. autodata:: config.settings.common.PODCASTS_RSS_FEED_MAX_ITEMS
.. autodata:: config.settings.common.PODCASTS_THIRD_PARTY_VISIBILITY
```
### Subsonic configuration
```{eval-rst}
.. autodata:: config.settings.common.SUBSONIC_DEFAULT_TRANSCODING_FORMAT
```
### Email configuration
```{eval-rst}
.. autodata:: config.settings.common.EMAIL_CONFIG
:annotation: = consolemail://
.. autodata:: config.settings.common.DEFAULT_FROM_EMAIL
:annotation: = Funkwhale <noreply@yourdomain>
.. autodata:: config.settings.common.EMAIL_SUBJECT_PREFIX
```
### Plugin configuration
```{eval-rst}
.. autodata:: config.settings.common.FUNKWHALE_PLUGINS_PATH
```
```{py:data} FUNKWHALE_PLUGINS
---
value: "['funkwhale_api.contrib.scrobbler', 'funkwhale_api.contrib.listenbrainz', 'funkwhale_api.contrib.maloja']"
---
List of Funkwhale plugins to load.
```
### Other settings
```{eval-rst}
.. autodata:: config.settings.common.INSTANCE_SUPPORT_MESSAGE_DELAY
.. autodata:: config.settings.common.FUNKWHALE_SUPPORT_MESSAGE_DELAY
.. autodata:: config.settings.common.MIN_DELAY_BETWEEN_DOWNLOADS_COUNT
.. autodata:: config.settings.common.MARKDOWN_EXTENSIONS
.. autodata:: config.settings.common.LINKIFIER_SUPPORTED_TLDS
```

Wyświetl plik

@ -0,0 +1,137 @@
# Customize the Funkwhale frontend
You can customize the look and behavior of the Funkwhale UI using a JSON configuration file. This file enables you to make very basic changes to the Funkwhale web app.
## Set up your custom configuration
### Create your configuration file
To customize your Funkwhale pod, you need to serve a {file}`settings.json` file at `https://yourinstanceurl/settings.json`. Follow these steps to set up your configuration file:
1. SSH into your Funkwhale server.
2. Navigate to your `/srv/funkwhale` folder
```{code} bash
cd /srv/funkwhale
```
3. Create a new `custom` directory for your file.
```{code} bash
mkdir custom
```
4. Create a new config file and populate it with placeholder settings.
```{code} bash
cat <<EOF > custom/settings.json
{
"additionalStylesheets": [],
"defaultServerUrl": null
}
EOF
```
```{dropdown} Supported parameters
| Parameter | Data type | Description | Example |
|-------------------------|------------|-----------------------------------------------------------------------------------------------|--------------------------------|
| `additionalStylesheets` | Array<URL> | A list of URLs (relative or absolute) pointing to stylesheets. | `["https://test/theme.css"]` |
| `defaultServerUrl` | URL | The URL of the API server you want to connect the frontend to. Defaults to the current domain | `"https://api.yourdomain.com"` |
```
### Configure your reverse proxy
Once you've created your {file}`settings.json` file you need to configure your reverse proxy to serve it.
````{tabbed} Nginx
Add the following snippet to your {file}`/etc/nginx/sites-available/funkwhale.conf` config file:
```
location /settings.json {
alias /srv/funkwhale/custom;
}
```
````
````{tabbed} Apache
Add the following snippet to your vhost configuration:
```
Alias /settings.json /srv/funkwhale/custom/settings.json
```
````
Reload your webserver. You should be able to see the contents of your configuration file at `https://yourinstanceurl/settings.json`.
## Add a custom theme
You can use a custom stylesheet to theme your Funkwhale pod. To do this:
1. Navigate to your {file}`/srv/funkwhale/custom` directory.
```{code} bash
cd /srv/funkwhale/custom
```
2. Copy your CSS file to this directory, or create a new one.
```{code} bash
# A basic CSS file. Turns the pod's background red.
cat <<EOF > custom.css
body {
background-color: red;
}
EOF
```
3. Add the location of your CSS file to the `additionalStylesheets` parameter in your {file}`settings.json` file.
```{code} bash
nano settings.json
# Add ["/front/custom/custom.css"] to the additionalStylesheets parameter
# The resulting file looks like this:
# {
# "additionalStylesheets": ["/front/custom/custom.css"],
# "defaultServerUrl": null
# }
```
4. Add the whole {file}`custom` dir to your vhost configuration.
````{tabbed} Nginx
Add the following to your {file}`/etc/nginx/sites-available/funkwhale.conf` file:
```
location /custom {
alias /srv/funkwhale/custom;
}
```
````
````{tabbed} Apache
Add the following to your vhost file.
```
Alias /custom /srv/funkwhale/custom
<Directory "/srv/funkwhale/custom">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
```
````
5. Restart your webserver.
Refresh your Funkwhale app. The background should now be red.

Wyświetl plik

@ -0,0 +1,20 @@
# Configure your Funkwhale pod
You can customize a lot of settings relating to your Funkwhale pod. These range from server-level settings to user-specific settings. Check out the guides in this section to get started.
```{toctree}
---
caption: Configuration options
maxdepth: 1
---
Environment file <env_file>
Instance settings <instance_settings>
object_storage
Frontend customization <frontend>
optimize
ldap
change_url
mrf
```

Wyświetl plik

@ -0,0 +1,211 @@
# Instance settings
You can find instance settings on your pod's web interface. These settings control high level pod configuration. You don't need to restart the pod after changing these settings.
To find your instance settings:
```{tabbed} Desktop
1. Log in to your {term}`pod`.
2. Select the wrench icon ({fa}`wrench`) at the top of the sidebar to open the {guilabel}`Administration` menu.
3. Select {guilabel}`Settings`. The {guilabel}`Instance settings` page opens.
```
```{tabbed} Mobile
1. Log in to your {term}`pod`.
2. Select the wrench icon ({fa}`wrench`) at the top of the page to open the {guilabel}`Administration` menu.
3. Select {guilabel}`Settings`. The {guilabel}`Instance settings` page opens.
```
## Available settings
### Instance information
```{glossary}
Pod name
The public name of your Funkwhale pod. This is displayed on the "Home" and "About" pages.
Short description
A short description of your pod. Users see this on the pod's "Home" page.
Long description
A longer description of your pod. Users see this on the pod's "About" page. Supports markdown formatting.
Contact email
A contact email address that users and visitors can use to contact the pod administrator.
Rules
A free text field for you to add your pod's rules and code of conduct. This is seen on the pod's "About" page. Supports markdown formatting
Terms of service
A free text field for you to add your pod's terms of service and privacy policy. This is seen on the pod's "About" page. Supports markdown formatting.
Banner image
A large image seen on the pod's "Home" and "About" pages. The image should be at least 600x100px.
Support message
A short message you can display to your pod's users to ask for support or just send a periodic message. Supports markdown.
```
---
### Sign-ups
```{glossary}
Open registration to new users
Enable this setting to allow new users to create an account on your pod.
Enable manual sign-up validation
Enable this setting to require all new registrations to be validated by a moderator.
Sign-up form customization
Use this tool to create a custom sign-up form. New users see this form when creating a new account. Supports markdown
```
---
### Security
````{glossary}
API Requires authentication
Controls whether {term}`unauthenticated users <Anonymous>` can access content on your pod. If __enabled__, users need to have an account on your pod to access content. If __disabled__, users without an account can listen to content stored in public libraries.
```{seealso}
{doc}`../../moderator_documentation/content/library_visibility`.
```
Default permissions
A list of {term}`permissions` that are added to users by default. If your pod is publicly accessible, you should leave this empty.
Upload quota
The default upload quota for users in MB. You can override this on a per-user basis.
```{seealso}
{doc}`../../moderator_documentation/reports/handle_users`
```
````
---
### Music
```{glossary}
Transcoding enabled
Enable this setting to let your server transcode files into a different format if the client requests it. This is useful if a device doesn't support formats like Ogg or FLAC.
Transcoding cache duration
The number of minutes you want to store transcoded files on your server. Funkwhale removes transcoded tracks that haven't been downloaded within this duration to save space.
```
### Channels
```{glossary}
Enable channels
Whether user channels can be created and followed on your pod.
Max channels allowed per user
The maximum number of channels each user can create.
```
---
### Playlists
```{glossary}
Max tracks per playlist
The maximum number of tracks a user can add to a playlist.
```
---
### Moderation
```{glossary}
Enable allow-listing
Enable this setting to ensure your pod only communicates with pods you have added to your allow list. When this setting is disabled, your pod will communicate with all other servers not included in your deny list.
Publish your allowed-domains list
Whether to make your list of allowed domains public. Enable this if you want users to check who you are federating with.
Accountless report categories
A list of {term}`categories <Report categories>` that {term}`anonymous` users can submit.
```
---
### Federation
```{glossary}
Federation enabled
Whether to enable federation features on your pod.
Enable public index
Whether to allow other pods and bots to index public content on your pod.
Federation collection page size
The number of items to display in ActivityPub collections.
Music cache duration
The number of minutes you want to store local copies of federated tracks on your server. Funkwhale removes federated tracks that haven't been downloaded within this duration to save space.
Federation actor fetch delay
The number of minutes the server waits before refetching actors on request authentication.
```
---
### Subsonic
```{glossary}
Enabled Subsonic API
Whether to enable the Subsonic API. This controls whether users are able to connect to your pod using Subsonic apps.
```
---
### User Interface
```{glossary}
Custom CSS code
Add CSS rules to control the look and feel of your pod. These rules are added to a `<style>` tag on each page.
Funkwhale Support message
Whether to show a notification to your pod's users to support the Funkwhale project.
```
---
### Statistics
```{glossary}
Enable usage and library stats in nodeinfo endpoint
Whether to share anonymized usage and library statistics in your pod's nodeinfo endpoint.
Private mode in nodeinfo
Enable this setting to indicate you don't want your instance to be tracked by third-party services.
```

Wyświetl plik

@ -0,0 +1,156 @@
# Configure LDAP
{abbr}`LDAP (Lightweight Directory Access Protocol)` is a protocol for providing directory services. It acts as a central authority for user login information. Funkwhale supports LDAP through the [Django LDAP authentication module](https://django-auth-ldap.readthedocs.io/).
```{important}
LDAP users can't change their password in the app.
```
## Dependencies
LDAP support requires extra dependencies. We include these in our requirements files to make it easier to set up. If you aren't using LDAP, you can safely remove these.
```{dropdown} OS dependencies
- `libldap2-dev`
- `libsasl2-dev`
```
```{dropdown} Python dependencies
- `python-ldap`
- `python-django-auth-ldap`
```
## Environment variables
You can configure LDAP authentication using environment variables in your `.env` file.
### Basic features
```{py:data} LDAP_ENABLED
---
value: True
type: Boolean
---
Set this to `True` to enable LDAP support
```
```{py:data} LDAP_SERVER_URI
---
type: URI
value: ldap://my.host:389
---
The LDAP {abbr}`URI (Uniform Resource Identifier)` of your authentication server.
```
```{py:data} LDAP_BIND_DN
---
type: String
value: cn=admin,dc=domain,dc=com
---
LDAP user {abbr}`DN (Distinguised Name)` to bind on so you can perform searches.
```
```{py:data} LDAP_BIND_PASSWORD
---
type: String
value: bindpassword
---
LDAP user password for bind {abbr}`DN (Distinguised Name)`.
```
```{py:data} LDAP_SEARCH_FILTER
---
type: String
value: (|(cn={0})(mail={0}))
---
The LDAP user filter, using `{0}` as the username placeholder. Uses standard [LDAP search syntax](https://social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters.aspx).
```
```{py:data} LDAP_START_TLS
---
type: Boolean
value: False
---
Set to `True` to enable LDAP StartTLS support.
```
```{py:data} LDAP_ROOT_DN
---
type: String
value: dc=domain,dc=com
---
The LDAP search root {abbr}`DN (Distinguised Name)`. Supports several entries in a comma-delimited list.
```
```{py:data} LDAP_USER_ATTR_MAP
---
type: String
value: first_name:givenName, last_name:sn, username:cn, email:mail
---
A mapping of Django user attributes to LDAP values.
```
```{py:data} AUTH_LDAP_BIND_AS_AUTHENTICATING_USER
---
type: Boolean
value: False
---
Controls whether to use direct binding.
```
### Group features
LDAP provides extra features for working with groups. Group configuration is an advanced feature. Most users don't need to configure these settings.
```{seealso}
[Django's LDAP documentation](https://django-auth-ldap.readthedocs.io/en/latest/groups.html) for groups.
```
```{py:data} LDAP_GROUP_DN
---
type: String
value: ou=groups,dc=domain,dc=com
---
The LDAP group search root {abbr}`DN (Distinguised Name)`. This needs to be set to `True` to enable group features.
```
```{py:data} LDAP_GROUP_FILTER
---
type: String
value: objectClass=groupOfNames
---
The LDAP group filter.
```
```{py:data} LDAP_REQUIRE_GROUP
---
type: String
value: cn=enabled,ou=groups,dc=domain,dc=com
---
The group that users need to be a member of to authenticate.
```
```{py:data} LDAP_DENY_GROUP
---
type: String
value: cn=disabled,ou=groups,dc=domain,dc=com
---
A group whose members can't authenticate.
```

Wyświetl plik

@ -0,0 +1,182 @@
# Message Rewrite Facility (MRF)
Funkwhale includes a feature that mimics [Pleromas Message Rewrite Facility (MRF)](https://docs-develop.pleroma.social/backend/configuration/mrf/). The MRF enables instance admins to create custom moderation rules. You can use these rules to complement Funkwhale's [built-in moderation tools](../../moderator_documentation/index.md).
## Architecture
The MRF is a pluggable system that processes messages and forwards them to a list of registered policies. Each policy can mutate the message, leave it as is, or discard it.
We implement some of Funkwhale's built-in moderation tools as a MRF policy. For example:
- Allow-list, when checking incoming messages ([code](https://dev.funkwhale.audio/funkwhale/funkwhale/blob/stable/api/funkwhale_api/moderation/mrf_policies.py)).
- Domain and user blocking, when checking incoming messages ([code](https://dev.funkwhale.audio/funkwhale/funkwhale/blob/stable/api/funkwhale_api/federation/mrf_policies.py))
```{note}
Pleroma MRF policies can also affect outgoing messages. This is not currently supported in Funkwhale.
```
## Disclaimer
Writing custom MRF rules can impact the performance and stability of your pod. It can also affect message delivery. Every time your pod receives a message it calls your policy.
The Funkwhale project consider all custom MRF policies to fall under the purview of the AGPL. This means you're required to release the source of your custom MRF policy modules publicly.
## Write your first MRF policy
MRF policies are written as Python 3 functions that take at least one `payload` parameter. This payload is the raw ActivityPub message, received via HTTP, following the HTTP signature check.
In the example below we write a policy that discards all Follow requests from listed domains:
```{code} py
import urllib.parse
from funkwhale_api.moderation import mrf
BLOCKED_FOLLOW_DOMAINS = ['domain1.com', 'botdomain.org']
# You need to register the policy to apply it.
# The name can be anything you want. It will appear in the mrf logs
@mrf.inbox.register(name='blocked_follow_domains')
def blocked_follow_domains_policy(payload, **kwargs):
actor_id = payload.get('actor')
domain = urllib.parse.urlparse(actor_id).hostname
if domain not in BLOCKED_FOLLOW_DOMAINS:
# Raising mrf.Skip isn't necessary but it provides
# info in the debug logs. Otherwise, you can return:
raise mrf.Skip("This domain isn't blocked")
activity_type = payload.get('type')
object_type = payload.get('object', {}).get('type')
if object_type == 'Follow' and activity_type == 'Create':
raise mrf.Discard('Follow from blocked domain')
```
You need to store this code in a Funkwhale plugin. To create one, execute the following:
```{code} bash
# Plugin names can only contain ASCII letters, numbers and underscores.
export PLUGIN_NAME="myplugin"
# This is the default path where Funkwhale will look for plugins.
# If you want to use another path, update this path and ensure
# your PLUGINS_PATH is also included in your .env file.
export PLUGINS_PATH="/srv/funkwhale/plugins/"
mkdir -p $PLUGINS_PATH/$PLUGIN_NAME
cd $PLUGINS_PATH/$PLUGIN_NAME
touch __init__.py # required to make the plugin a valid Python package
# Create the required apps.py file to register our plugin in Funkwhale.
cat > apps.py <<EOF
from django.apps import AppConfig
class Plugin(AppConfig):
name = "$PLUGIN_NAME"
EOF
```
Once you've created the plugin, put your code in an `mrf_policies.py` file. Place this file inside the plugin directory. Next, enable the plugin in your {file}`.env` file by adding its name to the {attr}`FUNKWHALE_PLUGINS` list. Add this variable if it's not there.
## Test your MRF policy
To make the job of writing and debugging MRF policies easier, we provide a management command.
- List registered MRF policies.
````{tabbed} Debian
```{code} bash
poetry run python manage.py mrf_check --list
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py mrf_check --list
```
````
- Check how your MRF policy handles a follow.
````{tabbed} Debian
```{code} bash
export MRF_MESSAGE='{"actor": "https://normal.domain/@alice", "type": "Create", "object": {"type": "Follow"}}'
echo $MRF_MESSAGE | poetry run python manage.py mrf_check inbox - -p blocked_follow_domains
```
````
````{tabbed} Docker
```{code} bash
export MRF_MESSAGE='{"actor": "https://normal.domain/@alice", "type": "Create", "object": {"type": "Follow"}}'
echo $MRF_MESSAGE | docker-compose run --rm api python manage.py mrf_check inbox - -p blocked_follow_domains
```
````
- Check how your MRF handles a problematic follow.
````{tabbed} Debian
```{code} bash
export MRF_MESSAGE='{"actor": "https://botdomain.org/@bob", "type": "Create", "object": {"type": "Follow"}}'
echo $MRF_MESSAGE | poetry run python manage.py mrf_check inbox - -p blocked_follow_domains
```
````
````{tabbed} Docker
```{code} bash
export MRF_MESSAGE='{"actor": "https://botdomain.org/@bob", "type": "Create", "object": {"type": "Follow"}}'
echo $MRF_MESSAGE | docker-compose run --rm api python manage.py mrf_check inbox - -p blocked_follow_domains
```
````
- Check a payload against activity already present in the database. You can find the UUID of an activity by visiting `/api/admin/federation/activity`.
````{tabbed} Debian
```{code} bash
export ACTIVITY_UUID="06208aea-c687-4e8b-aefd-22f1c3f76039"
echo $MRF_MESSAGE | poetry run python manage.py mrf_check inbox $ACTIVITY_UUID -p blocked_follow_domains
```
````
````{tabbed} Docker
```{code} bash
export ACTIVITY_UUID="06208aea-c687-4e8b-aefd-22f1c3f76039"
echo $MRF_MESSAGE | docker-compose run --rm api python manage.py mrf_check inbox $ACTIVITY_UUID -p blocked_follow_domains
```
````
There are extra options for testing MRF policies. Check the command help for more options.
````{tabbed} Debian
```{code} bash
poetry run python manage.py mrf_check --help
```
````
````{tabbed} Docker
```{code}
docker-compose run --rm api python manage.py mrf_check --help
```
````

Wyświetl plik

@ -0,0 +1,171 @@
# Store media in an object store
By default, Funkwhale stores all media data in the `/srv/funkwhale/data/media` directory. If you prefer to use an S3-compatible object store, follow the instructions in this guide.
```{contents}
:local:
:depth: 1
```
## Secure your object store
Before you begin, you need to secure your object store. Many S3-compatible stores list contents in the root by default. This exposes the URLs of your audio files and means that users can bypass authentication.
To prevent listing content, add the following policy to your S3-compatible object store.
```{code} json
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Resource": [
"arn:aws:s3:::<yourbucketname>/*"
],
"Sid": "Public"
}
]
}
```
If you're using `awscli`, you can store this policy in a `/tmp/policy` file and apply it using the following command:
```{code} bash
aws s3api put-bucket-policy --bucket <yourbucketname> --policy file:///tmp/policy
```
## Update your environment file
To set up S3-compatible storage, fill out the relevant details in the `.env` file. If you want to serve audio files from the bucket, set `PROXY_MEDIA` to `false`.
````{dropdown} Environment variables
```{eval-rst}
.. autodata:: config.settings.common.AWS_QUERYSTRING_AUTH
.. autodata:: config.settings.common.AWS_QUERYSTRING_EXPIRE
.. autodata:: config.settings.common.AWS_ACCESS_KEY_ID
.. autodata:: config.settings.common.AWS_SECRET_ACCESS_KEY
.. autodata:: config.settings.common.AWS_STORAGE_BUCKET_NAME
.. autodata:: config.settings.common.AWS_S3_CUSTOM_DOMAIN
.. autodata:: config.settings.common.AWS_S3_ENDPOINT_URL
:annotation: = https://minio.mydomain.com
.. autodata:: config.settings.common.AWS_S3_REGION_NAME
:annotation: = eu-west-2
.. autodata:: config.settings.common.AWS_LOCATION
:annotation: = funkwhale_music
.. autodata:: config.settings.common.PROXY_MEDIA
```
````
## Set up your reverse proxy
```{note}
Serving files from object storage is not currently supported on Apache deployments.
```
Serving files from an object store requires some changes to the reverse proxy.
1. Open your Nginx configuration file in an editor.
````{tabbed} Debian
```{code} bash
sudo nano /etc/nginx/sites-available/funkwhale.template
```
````
````{tabbed} Docker
```{code} bash
nano /srv/funkwhale/nginx/funkwhale.template
```
````
2. Comment out the `location /_protected/media/` block by adding a `#` to the start of each line.
```{code}
# location /_protected/media/ {
# internal;
# alias ${MEDIA_ROOT};
# }
```
3. Uncomment the `location ~ /_protected/media/(.+)` block by removing the `#` from the start of each line.
```{code}
location ~ /_protected/media/(.+) {
internal;
proxy_set_header Authorization "";
proxy_pass $1;
}
```
4. Add your S3 store URL to the `img-src` and `media-src` headers.
```{code}
add_header Content-Security-Policy "...img-src 'self' https://<your-s3-URL> data:;...media-src https://<your-s3-URL> 'self' data:";
```
5. Test your Nginx configuration.
```{code} bash
sudo nginx -t
```
6. Restart Funkwhale and Nginx to pick up the changes.
````{tabbed} Debian
```{code} bash
sudo systemctl restart funkwhale.target
sudo systemctl restart nginx
```
````
````{tabbed} Docker
```{code} bash
docker-compose restart
sudo systemctl restart nginx
```
````
That's it! Files are now uploaded to and stored from your S3 bucket.
## Troubleshooting
````{dropdown} No Resolver Found
You may see the following error when streaming music from your S3-compatible store:
```{code}
[error] 2832#2832: *1 no resolver defined to resolve [address] client: [IP], server: [servername], request: "GET API request", host: "[your_domain]", referrer: "[your_domain/library]"
```
This happens when the Nginx config is unable to use your servers DNS resolver. We're still looking into this issue. You can work around this by adding a resolver to the `location ~/_protected/media/(.+)` block.
```{code}
location ~ /_protected/media/(.+) {
resolver 1.1.1.1;
internal;
proxy_set_header Authorization "";
proxy_pass $1;
}
```
````

Wyświetl plik

@ -0,0 +1,57 @@
# Optimize memory usage
Funkwhale has a reasonable memory footprint. If you're running Funkwhale on a limited device, you can use these tweaks to reduce the footprint.
## Reduce workers concurrency
Funkwhale uses Celery to handle asynchronous tasks. By default, Celery spawns a worker per CPU core. This can lead to higher memory usage.
You can set the number of workers using the `CELERYD_CONCURRENCY` variable in your `.env` file. For example, a value of `CELERYD_CONCURRENCY=1` spawns a single worker.
```{note}
Reducing the number of celery workers slows down the handling of asynchronous tasks. On larger instances, this can cause performance problems.
```
## Switch to solo pool execution
Celery uses a `prefork` pool by default. This enables the server to process many tasks at the same time. You can switch to a `solo` pool which handles tasks one at a time. This reduces memory overhead but removes the ability to process tasks concurrently.
````{tabbed} Debian
1. Open your `funkwhale-worker` unit file in an editor.
```{code} bash
sudo nano /etc/systemd/system/funkwhale-worker.service
```
2. Add the `--pool=solo` flag to the `ExecStart` line of your unit file.
```{code} text
ExecStart=/srv/funkwhale/.local/bin/poetry run celery -A --pool=solo funkwhale_api.taskapp worker -l INFO --concurrency=${CELERYD_CONCURRENCY}
```
3. Restart the Celery service.
```{code} bash
sudo systemctl restart funkwhale-worker.service
```
````
````{tabbed} Docker
1. Add the `--pool=solo` flag to the `celerybeat` command in `docker-compose.yml`.
```{code} yaml
celerybeat:
command: celery -A --pool=solo funkwhale_api.taskapp beat --pidfile= -l INFO
```
2. Restart Celery.
```{code} bash
docker-compose restart celerybeat
```
````

Wyświetl plik

@ -0,0 +1,59 @@
# Delete content in the Django dashboard
```{note}
Deleting content using the Django dashboard isn't recommended. Use an object's [moderation page](../../moderator_documentation/content/delete_content.md) where possible.
```
You can delete content from your pod in the Django dashboard. The dashboard gives you access to all data associated with the content.
```{warning}
Deleting content removes it from associated playlists, channels, libraries, and favorites lists.
```
## Delete tracks
To delete tracks in the Django dashboard:
1. Open the Django dashboard.
2. Select {guilabel}`Tracks` in the {guilabel}`MUSIC` table.
3. Search for the track(s) you want to delete.
4. Check ({fa}`check-square`) the checkbox next to the track(s) you want to delete.
5. Select {guilabel}`Delete selected tracks` in the {guilabel}`Action` dropdown.
6. Select {guilabel}`Go`. A confirmation page opens showing you the items that are affected by the action.
7. Review the information and select {guilabel}`Yes, I'm sure` to delete the item(s).
## Delete albums
To delete albums in the Django dashboard:
1. Open the Django dashboard.
2. Select {guilabel}`Albums` in the {guilabel}`MUSIC` table.
3. Search for the album(s) you want to delete.
4. Check ({fa}`check-square`) the checkbox next to the album(s) you want to delete.
5. Select {guilabel}`Delete selected albums` in the {guilabel}`Action` dropdown.
6. Select {guilabel}`Go`. A confirmation page opens showing you the items that are affected by the action.
7. Review the information and select {guilabel}`Yes, I'm sure` to delete the item(s).
## Delete artists
To delete artists in the Django dashboard:
1. Open the Django dashboard.
2. Select {guilabel}`Artists` in the {guilabel}`MUSIC` table.
3. Search for the artist(s) you want to delete.
4. Check ({fa}`check-square`) the checkbox next to the artist(s) you want to delete.
5. Select {guilabel}`Delete selected artists` in the {guilabel}`Action` dropdown.
6. Select {guilabel}`Go`. A confirmation page opens showing you the items that are affected by the action.
7. Review the information and select {guilabel}`Yes, I'm sure` to delete the item(s).
## Delete followed libraries
In Funkwhale, unfollowing a library leaves the items in place but you can't access them. To completely remove them:
1. Open the Django dashboard.
2. Select {guilabel}`Librarys` in the {guilabel}`MUSIC` table.
3. Search for the libraries you want to delete.
4. Check ({fa}`check-square`) the checkbox next to the libraries you want to delete.
5. Select {guilabel}`Delete selected libraries` in the {guilabel}`Action` dropdown.
6. Select {guilabel}`Go`. A confirmation page opens showing you the items that are affected by the action.
7. Review the information and select {guilabel}`Yes, I'm sure` to delete the item(s).

Wyświetl plik

@ -0,0 +1,18 @@
# Use the Django dashboard
For some administration you need to access data that isn't available on the frontend. Funkwhale makes use of the [Django web framework](https://www.djangoproject.com/). This provides a dashboard that gives pod admins access to more tools and data than the frontend.
There are two ways to access the Django administration dashboard:
1. Navigate to `https://<yourdomain>/api/admin` and log in with your pod admin credentials.
2. Navigate to an object's moderation page and select {guilabel}`View in Django's admin` from the dropdown menu.
```{toctree}
---
caption: Administrative tasks
maxdepth: 1
---
delete_content
```

Wyświetl plik

@ -0,0 +1,251 @@
# Import music from your server
You can import music files you have saved on your server. You need to make sure your files have the [required ID3 tags](../../user_documentation/libraries/tag_music.md). We recommend using [Musicbrainz Picard](https://picard.musicbrainz.org/) for tagging.
Funkwhale supports the following import methods:
- Copy (default) – Funkwhale copies files from your server into the media store.
- In-place import – Funkwhale adds the storage location of your files to the database. This uses less space than the copy method and ensures your collection is always up-to-date.
To see a full list of options, run the command with the `--help` flag.
````{tabbed} Debian
```{code} bash
poetry run python manage.py import_files --help
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py import_files --help
```
````
```{contents}
:local:
```
## Get demo music
If you don't have music on your server, you can download creative commons music to test imports with. The Funkwhale project provides a collection courtesy of [Jamendo](https://jamendo.com). To download these tracks:
1. Download the shell script.
```{parsed-literal}
curl -L -o download-tracks.sh "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/{sub-ref}`version`/demo/download-tracks.sh"
```
2. Download the music list.
```{parsed-literal}
curl -L -o music.txt "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/{sub-ref}`version`/demo/music.txt" chmod +x download-tracks.sh
```
3. Run the shell script against the music list to download the tracks.
```{code} bash
./download-tracks.sh music.txt
```
This downloads a set compressed albums to your `data/music` directory and unzips them. You can then import these tracks using the methods in this article.
## Find your library ID
You need to create a library before you can import music. Follow the instructions in [Create a library](../../user_documentation/libraries/create_library.md) to get started.
Once you've created your library, you can find its ID by following these steps:
1. Visit `https://<yourdomain>/content/libraries/` in your browser. This page contains a list of your libraries.
2. Find the library you want to upload content into. Select {guilabel}`Library details` to open the library details page.
3. Your library's ID is the long string of letters and numbers shown in the URL bar. Copy the content before the first hyphen (`-`).
For example, if your library ID is `769a2bc3-eb1d-4aff-9f84-2c4d80d5c2d1`, copy the `769a2bc3`. You can use this as a shorthand reference for your library.
## Import your music
### Copy files from your server
Once you have your library ID, you can copy content from your server and import it into the library. To do this:
1. Log in to your server and navigate to your Funkwhale directory.
```{code} bash
cd /srv/funkwhale
```
2. Export your library ID to reference it later. In this example, the library ID is "769a2bc3". Replace this with your library ID.
```{code} bash
export LIBRARY_ID="769a2bc3"
```
3. Run the `import_files` command to copy your files. In this example, the music is stored in `data/music`. Replace this with your music directory.
```{code} bash
poetry run python manage.py import_files $LIBRARY_ID "data/music" --recursive --noinput
```
Funkwhale copies your files to your media store.
### Access your files in-place
The in-place import method references your files in their current directory. This is useful if you have limited storage space.
#### Link your file directory
We recommend you symbolically link your music directories to `/srv/funkwhale/data/music`. You can then run the `import_files` command from that directory. This means you can use many directories without needing to add to them to your webserver.
````{tabbed} Debian
To link your storage directory to the Funkwhale store, use the `ln -s` command. For example, if you have an NFS share at `/media/nfsshare`, you can link it to a folder like this:
```{code} bash
ln -s ln -s /media/mynfsshare /srv/funkwhale/data/music/nfsshare
```
You can then run the `import_files` command against `/srv/funkwhale/data/music/nfsshare`.
````
````{tabbed} Docker
On a Docker install you can use bind mounts to reference your storage directory. To do this, you need to add the directory to the `api` and `celeryworker` blocks in your `docker-compose.yml` file. For example, if you have an NFS share at `/media/nfsshare`, you can add the following to your `docker-compose.yml` file:
```{code} yaml
celeryworker:
volumes:
- ./data/music:/music:ro
- ./data/media:/app/funkwhale_api/media
# Add your bind here
- type: bind
source: /media/nfsshare
destination: /srv/funkwhale/data/music/nfsshare
api:
volumes:
- ./data/music:/music:ro
- ./data/media:/app/funkwhale_api/media
# Add your bind here
- type: bind
source: /media/nfsshare
destination: /srv/funkwhale/data/music/nfsshare
```
You can then run the `import_files` command against `/srv/funkwhale/data/music/nfsshare`.
````
#### Import your files
To use the in-place import method, follow these steps:
````{tabbed} Debian
1. Add your storage location to your `.env` file if you don't want to link it to the Funkwhale store. See the [in-place import configuration variables](../configuration_docs/env_file.md#in-place-import-configuration) for more information.
2. Run your import command against your music storage directory:
```{code} bash
poetry run python manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/nfsshare/" --recursive --noinput --in-place
```
Funkwhale imports the music in your storage directory into the specified library.
````
````{tabbed} Docker
1. Add your storage location to your `.env` file if you don't want to bind it to the Funkwhale store. See the [in-place import configuration variables](../configuration_docs/env_file.md#in-place-import-configuration) for more information.
2. Run your import command against your music storage directory:
```{code} bash
docker-compose run --rm api python manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/nfsshare/" --recursive --noinput --in-place
```
Funkwhale imports the music in your storage directory into the specified library.
````
### Album art
Funkwhale attempts to import album art for your music library. The import process checks for the following.
1. The cover embedded in the audio files (works with FLAC and MP3 files).
2. A `cover.jpg` or `cover.png` in the the track's directory.
3. An `mbid` in the file's tags. If there is an `mbid`, the import process tries to fetch cover art from Musicbrainz.
## Watch for filesystem changes
You can run the `import_files` command any time you add new files or update files. For larger collections, this may not be practical. To watch for changes, run the `import_files` command with the `--watch` flag. This instructs the `import_files` command to watch for filesystem events and update your database when something changes.
The `--watch` flag performs the following actions when it detects a change:
- File created – imports the track.
- File moved – updates the location of the track in the database.
- File metadata updated – updates the track metadata in the database.
- File deleted – removes the file from the database.
```{dropdown} Watched metadata
The `import_files --watch` command watches for changes to the following metadata fields:
- Track mbid
- Track title
- Track position and disc number
- Track license and copyright
- Track genre
- Album cover
- Album title
- Album mbid
- Album release date
- Artist name
- Artist mbid
- Album artist name
- Album artist mbid
```
````{tabbed} Debian
```{code} bash
poetry run python manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/nfsshare/" --recursive --noinput --in-place --watch
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/nfsshare/" --recursive --noinput --in-place --watch
```
````
## Prune dangling metadata
Funkwhale doesn't delete track metadata when you delete a track. This is useful if you want to delete a file but keep a record of a track for created playlists or favorites.
If you want to remove the file's metadata when you delete the file, run `import_files` with the `--prune` flag. This flag removes the metadata of any
```{note}
You can use the `--prune` flag with the `--watch` flag. This means Funkwhale removes the metadata of referenced files you delete from your storage.
```
````{tabbed} Debian
```{code} bash
poetry run python manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/nfsshare/" --recursive --noinput --in-place --watch --prune
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/nfsshare/" --recursive --noinput --in-place --watch --prune
```
````

Wyświetl plik

@ -9,3 +9,15 @@ Follow the guides in this section to set up and administrate your pod.
## Install Funkwhale on your server
Funkwhale is self-hosted, meaning you run it on your own server. To set up your own Funkwhale pod, check out [our installation guides](installation_docs/index.md). Choose the installation method that works for you!
## Configure your Funkwhale pod
Once you've installed Funkwhale, you can use [the guides in this section](configuration_docs/index.md) to configure it.
## Upgrade your Funkwhale pod
Funkwhale releases new updates regularly. To keep up-to-date with these changes, check out our [upgrade guides](upgrade_docs/index.md). If you're moving from our deprecated mono-container Docker setup, check out our [migration guide](migration_guide/index.md).
## Manage your Funkwhale pod
Funkwhale provides tools for managing content and users on your Funkwhale pod. In addition to the [frontend moderation tools](../moderator_documentation/index.md), pod admins can use some extra tools for more powerful administration. Check out our [guide to the Django dashboard](django/index.md) and our [management script](manage_script/index.md) to get started.

Wyświetl plik

@ -46,22 +46,7 @@ This guide assumes you are using a [Debian](https://debian.org)-based system.
curl -L -o /srv/funkwhale/docker-compose.yml "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker-compose.yml"
```
4. Download the nginx templates. You need these to set up your reverse proxy.
```{code} bash
curl -L -o /srv/funkwhale/nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker.nginx.template"
curl -L -o /srv/funkwhale/nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker.funkwhale_proxy.conf"
```
That's it! You've set up your project files. The directory structure looks like this:
```{code}
.
├── docker-compose.yml
└── nginx
├── funkwhale_proxy.conf
└── funkwhale.template
```
That's it! You've set up your project files.
## 2. Set up your environment file
@ -236,4 +221,4 @@ To enable your users to connect to your pod securely, you need to set up {abbr}`
--reloadcmd "service nginx force-reload"
```
That's it! acme.sh renews your certificate every 60 days, so you don't need to about renewing it.
That's it! acme.sh renews your certificate every 60 days, so you don't need to worry about renewing it.

Wyświetl plik

@ -19,3 +19,13 @@ debian
third_party
```
```{toctree}
---
caption: Migrate your installation
maxdepth: 1
---
migrate
```

Wyświetl plik

@ -0,0 +1,185 @@
# Migrate to a new server
You can migrate your Funkwhale installation if you are setting up a new server. This can be useful if you are moving to a different hosting provider or upgrading your server.
In this guide we refer to your servers like this:
```{glossary}
Original server
The server on which you are running Funkwhale.
Destination server
The server to which you want to move your Funkwhale installation.
```
```{note}
Make sure you [back up your data](../upgrade_docs/backup.md) before proceeding. This ensures you don't lose anything during the migration.
```
```{contents}
:local:
```
## Requirements
To get started with your new setup, you need to do the following:
- [Set up SSH access between both servers](https://kerneltalks.com/howto/establish-passwordless-ssh-between-two-servers/).
- Install [rsync](https://linux.die.net/man/1/rsync) on the {term}`destination server`.
## 1. Install Funkwhale on your destination server
Before you move your data, you need to install Funkwhale on your {term}`destination server`.
````{tabbed} Debian
On your {term}`destination server`, follow the [installation guide](debian.md). Skip the following steps:
- Don't enable the `unaccent` and `citext` extensions when you set up the database.
- Don't run the `manage.py migrate` command to migrate the database.
- Don't create a superuser.
Once you have finished the installation, stop the Funkwhale services. These shouldn't be running when you copy your existing data over.
```{code} bash
sudo systemctl stop funkwhale.target
```
````
````{tabbed} Docker
On your {term}`destination server`, follow the [installation guide](docker.md). Skip the following steps:
- Don't run the `manage.py migrate` command to migrate the database.
- Don't create a superuser.
Once you have finished the installation, stop the Funkwhale services. These shouldn't be running when you copy your existing data over.
```{code} bash
docker-compose stop
```
````
## 2. Create a database backup
You need to create a database backup on your {term}`original server` so that you can migrate your database. To do this, run the following command:
````{tabbed} Debian
```{code} bash
sudo -u postgres -H pg_dump funkwhale > /srv/funkwhale/dump.sql
```
````
````{tabbed} Docker
```{code} bash
docker-compose exec postgres pg_dumpall -c -U postgres > dump.sql
```
````
## 3. Copy files to your destination server
Next, you can copy your files from your {term}`original server` to your {term}`destination server`. You need to copy the following data:
- Your `.env` file.
- The database backup.
- The `/srv/funkwhale/data/media` directory.
- The `/srv/funkwhale/data/music` directory.
To do this:
1. Log in to your {term}`destination server`.
2. Export your server hostname or IP address and your user name on the server. In this example, the IP address is `123.123.123.123` and the username is `funkwhale`.
```{code} bash
export ORIGIN="123.123.123.123"
export USERNAME="funkwhale"
```
3. Use `rsync` to copy the information to your {term}`destination server`.
```{code} bash
rsync -a $username@$origin:/srv/funkwhale/data/media/ /srv/funkwhale/data/media/ rsync -a #Copy the media folder
$username@$origin:/srv/funkwhale/data/music/ /srv/funkwhale/data/music/ rsync -a # Copy the music folder
$username@$origin:/srv/funkwhale/config/.env /srv/funkwhale/config/ rsync -a # Copy the .env file
$username@$origin:/srv/funkwhale/dump.sql /srv/funkwhale/ # Copy your database backup
```
## 4. Restore your database backup
When you've copied everything to the {term}`destination server`, you need to import your database backup. To do this:
````{tabbed} Debian
Run the following on your {term}`destination server`:
```{code} bash
sudo psql -d funkwhale dump.sql
```
When the import finishes, run the `manage.py migrate` command to set up the database.
```{code} bash
cd /srv/funkwhale/api
poetry run python manage.py migrate
```
````
````{tabbed} Docker
You need to initialize the postgres container on your {term}`destination server`. To do this:
1. Export the permissions and create an `init.sql` database dump.
```{code} bash
echo "CREATE DATABASE "funkwhale" WITH ENCODING 'utf8'; \
CREATE USER funkwhale; \
GRANT ALL PRIVILEGES ON DATABASE funkwhale TO funkwhale;" > init.sql # Create an init.sql file with the correct permissions
docker-compose run --rm postgres psql -U postgres -d postgres < "init.sql" # Import the init.sql file
```
2. Import your database backup.
```{code} bash
docker-compose run --rm postgres psql -U postgres -d postgres < "dump.sql"
```
3. When the import finishes, run the `manage.py migrate` command to set up the database.
```{code} bash
docker-compose run --rm api python manage.py migrate
```
````
## 5. Check your DNS settings
Before you start Funkwhale on your {term}`destination server`, check your DNS changes have propogated. Once your hostname is pointing to your {term}`destination server's <destination server>` IP address, proceed to the next step.
## 6. Start your new Funkwhale installation
Once you confirm DNS points to your {term}`destination server`, start the Funkwhale services:
````{tabbed} Debian
```{code} bash
sudo systemctl start funkwhale.target
```
````
````{tabbed} Docker
```{code} bash
docker-compose up -d
```
That's it! You've migrated your Funkwhale instance to a new server.

Wyświetl plik

@ -0,0 +1,27 @@
# Delete obsolete files from the database
Funkwhale keeps references to files imported using the in-place method. If you move or remove these, it invalidates the reference and Funkwhale can't serve the files.
Use the `check_inplace_files` command to check the database for invalid references. This command loops through all in-place imports and checks if the file is accessible. If the file isn't accessible, the command deletes the database object.
```{warning}
Running `check_inplace_files` with the `--no-dry-run` flag is irreversible. Make sure you [back up your data](../upgrade_docs/backup.md).
```
To ensure you don't remove data by accident, this command runs in dry run mode by default. In dry run mode, the command lists the items it will delete. Run the command with the `--no-dry-run` flag to perform the pruning action.
````{tabbed} Debian
```{code} bash
poetry run python manage.py check_inplace_files
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py check_inplace_files
```
````

Wyświetl plik

@ -0,0 +1,105 @@
# Fix uploads
Use the `fix_uploads` command to let Funkwhale sort out common issues with your audio files.
## Commands
### Fix mimetypes
Check and fix file mimetypes with the `--mimetype` flag. This helps prevent issues with serving music files.
````{tabbed} Debian
```{code} bash
poetry run python manage.py fix_uploads --mimetype
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fix_uploads --mimetype
```
````
### Fix bitrate and duration
Check and fix bitrate and duration with the `--audio-data` flag. This process can take a long time as it needs to access all files.
````{tabbed} Debian
```{code} bash
poetry run python manage.py fix_uploads --audio-data
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fix_uploads --audio-data
```
````
### Fix file size
Check and fix the file size with the `--size` flag.
````{tabbed} Debian
```{code} bash
poetry run python manage.py fix_uploads --size
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fix_uploads --size
```
````
### Fix file checksums
Check and fix file checksums with the `--checksum` flag.
````{tabbed} Debian
```{code} bash
poetry run python manage.py fix_uploads --checksum
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fix_uploads --checksum
```
````
### Change command batch size
Choose the batch size you want to process with the `--batch-size` or -`s` flag. Smaller batches process faster. Defaults to `1000`.
````{tabbed} Debian
```{code} bash
poetry run python manage.py fix_uploads --batch-size 500
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fix_uploads --batch-size 500
```
````

Wyświetl plik

@ -0,0 +1,18 @@
# Funkwhale management script
Funkwhale includes a {file}`manage.py` script that can help you automate a lot of admin tasks. Check out the guides in this section for instructions on how to use this tool.
```{toctree}
---
caption: Administration tasks
maxdepth: 1
---
Manage users <users>
Prune library <library>
Clean database <database>
Add album and artist tags <tags>
thumbnails
fix_uploads
```

Wyświetl plik

@ -0,0 +1,111 @@
# Prune your Funkwhale library
Funkwhale doesn't delete data objects from the database when you delete a file. This is because they might exist in users' playlists, favorites, and listening history. These objects might also be present in another user's private libraries.
Sometimes you may want to clear out dangling metadata. For example, if you import a lot of files with incorrect tags and then delete them.
To help with this, the {file}`manage.py` script includes commands to prune dangling metadata from your database. All prune commands are available under the python manage.py prune_library namespace. To ensure you don't remove data by accident, all commands run in dry run mode by default. Run commands with the `--no-dry-run` flag to perform the pruning action.
```{warning}
Running `prune_library` commands with the `--no-dry-run` flag is irreversible. Make sure you [back up your data](../upgrade_docs/backup.md).
```
## Commands
### Prune tracks with no associated uploads
````{tabbed} Debian
```bash
poetry run python manage.py prune_library --tracks
```
````
````{tabbed} Docker
```bash
docker-compose run --rm api python manage.py prune_library --tracks
```
````
### Prune albums with no associated tracks
````{tabbed} Debian
```{code} bash
poetry run python manage.py prune_library --albums
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py prune_library --albums
```
````
### Prune artists with no associated tracks or albums
````{tabbed} Debian
```{code} bash
poetry run python manage.py prune_library --artists
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py prune_library --artists
```
````
### Prune all tracks, albums, and artist without associated data
````{tabbed} Debian
```{code} bash
poetry run python manage.py prune_library --tracks --albums --artists
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py prune_library --tracks --albums --artists
```
````
There are extra options for pruning your database. Check the command help for more options.
````{tabbed} Debian
```{code} bash
poetry run python manage.py prune_library --help
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py prune_library --help
```
````
```{note}
The command excludes tracks that are in users' favorites, playlists, and listen history. To include these tracks, add the corresponding `ignore` flag:
- `--ignore-favorites`
- `--ignore-playlists`
- `--ignore-listenings`
```

Wyświetl plik

@ -0,0 +1,85 @@
# Add artist and album tags from track metadata
Funkwhale extracts track tags from the file's metadata. Funkwhale applies these tags to the track's album and artist by running a check every few days. You can run the process at any time using the `manage.py` script.
The command performs the following actions:
1. Finds all local artists or albums with no tags.
2. Gets all the tags associated with the album/artist's tracks.
3. Applies the track's tags to the album/artist.
## Add tags to albums
To add tags to untagged albums:
```{tabbed} Debian
1. SSH into your Funkwhale server.
2. Navigate to the Funkwhale directory.
```{code} bash
cd /srv/funkwhale
```
3. Run the `manage.py` script to generate tags for untagged albums.
```{code} bash
poetry run python manage.py fw albums add-tags-from-tracks
```
```
```{tabbed} Docker
1. SSH into your Funkwhale server.
2. Navigate to the Funkwhale directory.
```{code} bash
cd /srv/funkwhale
```
3. Run the `manage.py` script to generate tags for untagged albums.
```{code} bash
docker-compose run --rm api python manage.py fw albums add-tags-from-tracks
```
```
## Add tags to artists
To add tags to untagged artists:
```{tabbed} Debian
1. SSH into your Funkwhale server.
2. Navigate to the Funkwhale directory.
```{code} bash
cd /srv/funkwhale
```
3. Run the `manage.py` script to generate tags for untagged artists.
```{code} bash
poetry run python manage.py fw artists add-tags-from-tracks
```
```
```{tabbed} Docker
1. SSH into your Funkwhale server.
2. Navigate to the Funkwhale directory.
```{code} bash
cd /srv/funkwhale
```
3. Run the `manage.py` script to generate tags for untagged artists.
```{code} bash
docker-compose run --rm api python manage.py fw artists add-tags-from-tracks
```
```

Wyświetl plik

@ -0,0 +1,57 @@
# Regenerate thumbnails
We increased the quality of thumbnails from 70px to 95px in Funkwhale 1.0. This action removes visual artifacts that affect lower quality thumbnails. You can run the `manage.py` script to generate new thumbnails. If you want to keep thumbnails at their original quality, add `THUMBNAIL_JPEG_RESIZE_QUALITY=70` to your `.env` file.
```{note}
If you're using S3 storage, the `__sized__` folder is located in your S3 bucket.
```
To generate new thumbnails:
```{tabbed} Debian
1. SSH into your Funkwhale server.
2. Navigate to your Funkwhale directory.
```{code} bash
cd /srv/funkwhale
```
3. Delete the `__sized__` directory inside your `MEDIA_ROOT` directory. By default this is `/srv/funkwhale/data/media`. This directory contains the current thumbnails.
```{code} bash
rm -r __sized__/
```
4. Run the `manage.py` script to regenerate the thumbnails.
```{code} bash
poetry run python manage.py fw media generate-thumbnails
```
```
```{tabbed} Docker
1. SSH into your Funkwhale server.
2. Navigate to your Funkwhale directory.
```{code} bash
cd /srv/funkwhale/
```
3. Delete the `__sized__` directory inside your `MEDIA_ROOT` directory. By default this is `/srv/funkwhale/data/media`. This directory contains the current thumbnails.
```{code} bash
rm -r data/media/__sized__/
```
4. Run the `manage.py` script to regenerate the thumbnails.
```{code} bash
docker-compose run --rm api python manage.py fw media generate-thumbnails
```
```
The script generates new thumbnails for all album and artist art on your pod.

Wyświetl plik

@ -0,0 +1,275 @@
# Manage users with manage.py
The {file}`manage.py` script includes commands for user management. Use these commands to automate managing users from the command line.
All users-related commands are available under the `python manage.py fw users` namespace.
## Create users
You can create users with the {file}`manage.py` script. There are different ways to create users depending on what approach you want to take.
### Create a user interactively
````{tabbed} Debian
```{code} bash
poetry run python manage.py fw users create
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fw users create
```
````
### Create a user with a random password
````{tabbed} Debian
```{code} bash
poetry run python manage.py fw users create --username <username> --email <user email> -p ""
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fw users create --username <username> --email <user email> -p ""
```
````
### Create a user with a password set from an environment variable
````{tabbed} Debian
```{code} bash
export FUNKWHALE_CLI_USER_PASSWORD=<password>
poetry run python manage.py fw users create --username <username> --email <user email>
```
````
````{tabbed} Docker
```{code} bash
export FUNKWHALE_CLI_USER_PASSWORD=<password>
docker-compose run --rm api python manage.py fw users create --username <username> --email <user email>
```
````
There are extra options for user configuration, such as quota and {term}`permissions`. Check the command help for more options.
````{tabbed} Debian
```{code} bash
poetry run python manage.py fw users --help
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fw users --help
```
````
## Update users
You can update user accounts using the {file}`manage.py` script. Update commands are available under the `python manage.py fw users set` namespace.
### Set upload quota for a user
````{tabbed} Debian
```{code} bash
poetry run python manage.py fw users set --upload-quota 500 <user>
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fw users set --upload-quota 500 <user>
```
````
### Make users staff members
````{tabbed} Debian
```{code} bash
poetry run python manage.py fw users set --staff --superuser <user 1> <user 2>
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fw users set --staff --superuser <user 1> <user 2>
```
````
### Remove a user's staff privileges
````{tabbed} Debian
```{code} bash
poetry run python manage.py fw users set --no-staff --no-superuser <user>
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fw users set --no-staff --no-superuser <user>
```
````
### Give a user moderation permissions
````{tabbed} Debian
```{code} bash
poetry run python manage.py fw users set --permission-moderation <user>
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fw users set --permission-moderation <user>
```
````
### Reset a user's password
````{tabbed} Debian
```{code} bash
poetry run python manage.py fw users set --password "<password>" <user>
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fw users set --password "<password>" <user>
```
````
### Reset a user's password using an environment variable
````{tabbed} Debian
```{code} bash
export FUNKWHALE_CLI_USER_UPDATE_PASSWORD=<password>
poetry run python manage.py fw users set <user>
```
````
````{tabbed} Docker
```{code} bash
export FUNKWHALE_CLI_USER_UPDATE_PASSWORD=<password>
docker-compose run --rm api python manage.py fw users set <user>
```
````
There are extra options for updating users. Check the command help for more options.
````{tabbed} Debian
```{code} bash
poetry run python manage.py fw users set --help
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fw users set --help
```
````
## Delete users
### Delete a user's account but leave a reference to them in the database
This prevents the same username being used in future.
````{tabbed} Debian
```{code} py
poetry run python manage.py fw users rm <user>
```
````
````{tabbed} Docker
```{code} py
docker-compose run --rm api python manage.py fw users rm <user>
```
````
### Delete a user's account, including all references in the database
This means the username can be reused.
````{tabbed} Debian
```{code} py
poetry run python manage.py fw users rm --hard <user>
```
````
````{tabbed} Docker
```{code} py
docker-compose run --rm api python manage.py fw users rm --hard <user>
```
````
There are extra options for deleting users. Check the command help for more options.
````{tabbed} Debian
```{code} bash
poetry run python manage.py fw users rm --help
```
````
````{tabbed} Docker
```{code} bash
docker-compose run --rm api python manage.py fw users rm --help
```
````

Wyświetl plik

@ -0,0 +1,176 @@
# Troubleshoot backend issues
The Funkwhale backend is made up of lots of moving parts. This guide shows you how to troubleshoot and gather information about the most important elements of the backend.
## Tools
If you have access to the Funkwhale backend, you can use logs to get more information about an issue.
- __Reverse proxy logs__ – check these logs if you have connectivity issues.
````{tabbed} Nginx
```{code} bash
sudo tail -f /var/log/nginx/access.log # Follow the access log
sudo tail -f /var/log/nginx/error.log # Follow the error log
```
````
````{tabbed} Apache
```{code} bash
sudo tail -f /var/log/apache/access.log # Follow the access log
sudo tail -f /var/log/apache/error.log # Follow the error log
```
````
- __API logs__ – check these if you are having issues with the Funkwhale app, federation, or imports.
````{tabbed} Debian
```{code} bash
journalctl -xn -u funkwhale-server
```
````
````{tabbed} Docker
```{code} bash
docker-compose logs -f --tail=50 api # Follow the last 50 messages
```
````
- __Celery logs__ – check these if a federation or import task isn't working.
````{tabbed} Debian
```{code} bash
journalctl -xn -u funkwhale-worker
```
````
````{tabbed} Docker
```{code} bash
docker-compose logs -f --tail=50 celery # Follow the last 50 messages
```
````
## Troubleshoot issues
### API issues
If the API isn't serving audio files, try the following:
- If youre using Docker, check you have commented out the `MEDIA_ROOT` variable in your `.env` file.
- Check the `_protected/media` block in your webserver points to your media path. This is `/srv/funkwhale/data/media` by default.
- If youre using the in-place import, check you have configured your media paths. Check the `MUSIC_DIRECTORY_PATH`, `MUSIC_DIRECTORY_SERVE_PATH` and `REVERSE_PROXY_TYPE` variables in your `.env` file. Make sure the webserver can read these directories.
### Import issues
If you're having issues importing files, try the following:
- Check that the file is encoded in a supported format
```{dropdown} Supported formats
- flac
- ogg
- mp3
- opus
- aac
- m4a
- aiff
- aif
```
- Make sure your files play in another media player.
- Make sure your files are [tagged correctly](../../user_documentation/libraries/tag_music.md).
- Check the Celery logs for errors during the import.
### Federation issues
If you are having issues accessing federated content, try the following:
- Check that the remote library received your follow request and approved it.
- Trigger a library scan in the Funkwhale frontend.
- Check the Celery logs for errors during the scan.
### Memory tracing
If your Funkwhale server uses more memory than expected, you can check the footprint of requests. This requires a middleware to check memory allocation. To set up this middleware:
1. Add the middleware to your `.env` file.
```{code}
ADDITIONAL_MIDDLEWARES_BEFORE=funkwhale_api.common.middleware.PymallocMiddleware
```
2. Enable memory tracing in your `.env` file.
```{code}
PYTHONTRACEMALLOC=1
```
3. Restart your Funkwhale server.
````{tabbed} Debian
```{code} bash
sudo systemctl restart funkwhale.target
```
````
````{tabbed} Docker
```{code} bash
docker-compose restart
```
````
The middleware prints out the top 25 memory allocations to the API logs. You can use these to see what requests use the most memory.
To disable memory tracing:
1. Remove the middleware from your `.env` file.
```{code}
# ADDITIONAL_MIDDLEWARES_BEFORE=funkwhale_api.common.middleware.PymallocMiddleware
```
2. Disable memory tracing in your `.env` file.
```{code}
PYTHONTRACEMALLOC=0
```
3. Restart your Funkwhale server.
````{tabbed} Debian
```{code} bash
sudo systemctl restart funkwhale.target
```
````
````{tabbed} Docker
```{code} bash
docker-compose restart
```
````
## Get help
If you can't solve the issue yourself, ask the community for help. Check out the [get help](get_help.md) guide for information about where to ask your question and what details to provide.

Wyświetl plik

@ -0,0 +1,49 @@
# Troubleshoot frontend issues
The Funkwhale frontend is a {abbr}`SPA (Single Page Application)` written in [Vue.js](https://vuejs.org). It consumes the Funkwhale API to serve content and to federate with other Fediverse software.
## Tools
The most useful tools for troubleshooting issues with the Funkwhale frontend are your web browser's developer tools. The `Console` and `Network` tabs are particularly useful for tracking down issues in the Javascript code and API responses respectively. Use the following shortcut to open the developer tools for your browser:
| Browser | Shortcut |
| -------- | --------- |
| Google Chrome/Chromium | {kbd}`F12` |
| Microsoft Edge | {kbd}`F12` |
| Opera | {kbd}`F12` |
| Vivaldi | {kbd}`F12` |
| Firefox | {kbd}`F12` |
| Safari | {kbd}`Command+Option+U` |
## Troubleshoot the issue
### Crashes or performance issues
To start troubleshooting your issue, try the following:
1. Open your browser's developer tools.
2. Select the `Console` tab.
3. Open Funkwhale and try to replicate the issue.
4. Take note of any errors or warnings that appear in the `Console` tab.
If applicable, try these steps while logged in and again while logged out to see if there is any difference.
### Content not appearing
If content isn't appearing, it is usually due to one of the following reasons:
1. A conditional statement in the frontend code isn't working.
2. The API is not serving content.
You can confirm which of these is causing the issue by checking the `Network` tab in your browser's developer tools.
1. Open your browser's developer tools.
2. Select the `Network` tab.
3. Open Funkwhale and try to replicate the issue.
4. Take not of any `4XX` or `5XX` responses in the API calls.
If you are receiving `4XX` or `5XX` responses, this means the API isn't serving your content properly. You can investigate further by following the [backend troubleshooting guide](backend.md).
## Get help
If you can't solve the issue yourself, ask the community for help. Check out the [get help](get_help.md) guide for information about where to ask your question and what details to provide.

Wyświetl plik

@ -0,0 +1,21 @@
# Get help with Funkwhale
The Funkwhale community is always happy to help! Choose the best place to contact us based on the type of problem you're having.
- The [Funkwhale support chatroom](https://matrix.to/#/#funkwhale-support:tchncs.de) is the best place to ask quick questions and get immediate feedback.
- The [Funkwhale forum](https://forum.funkwhale.audio/t/support) is the best place to investigate trickier problems that require a lot of investigation.
- The [Funkwhale GitLab](https://dev.funkwhale.audio) is the best place to raise bugs in the project code.
```{note}
Please go to the forum or chatroom before opening an issue in GitLab. The Funkwhale community will help you work out what the issue is and whether a fix needs to be applied.
```
Before you raise an issue, please check out the [other guides in this section](index.md) to see if you can resolve the issue. If you still need help, please provide as much detail as possible. This includes things like:
- Screenshots or recordings of the issue.
- Logs or error messages you found during your investigation.
- Details about your installation:
- Operating system
- Web server
- Installation method
- Web browser

Wyświetl plik

@ -0,0 +1,23 @@
# Troubleshoot Funkwhale
If you're running into issues with Funkwhale, follow the guides in this section. If you need to report an issue, make sure you include as much information as possible to help us get to the bottom of it.
Issues usually fall into one of the following categories:
- Frontend – issues relating to the Funkwhale web interface.
- Backend – issues affecting one or more of the following:
- API – tracks or data not being returned properly
- Imports – tracks you have added aren't being imported correctly
- Federation – your pod can't contact other fediverse servers or access federated content
```{toctree}
---
caption: Troubleshoot
maxdepth: 1
---
frontend
backend
get_help
```

Wyświetl plik

@ -0,0 +1,160 @@
# Uninstall Debian installation
To uninstall Funkwhale from your Debian server, follow the instructions in this guide.
```{warning}
Removing Funkwhale data is __irreversible__. Make sure you [back up your data](../upgrade_docs/backup.md).
```
```{contents}
:local:
:depth: 1
```
## Stop the Funkwhale server
Before you uninstall anything from your server, you need to stop the Funkwhale systemd services.
1. Stop all systemd services listed under the `funkwhale` target
```{code} bash
sudo systemctl stop funkwhale.target
```
2. Disable all systemd services to prevent launch at startup.
```{code} bash
sudo systemctl disable funkwhale-server
sudo systemctl disable funkwhale-worker
sudo systemctl disable funkwhale-beat
```
3. Remove the service files.
```{code} bash
sudo rm /etc/systemd/system/funkwhale-server.service
sudo rm /etc/systemd/system/funkwhale-worker.service
sudo rm /etc/systemd/system/funkwhale-beat.service
sudo rm /etc/systemd/system/funkwhale.target
```
4. Reload all services to pick up the changes.
```{code} bash
sudo systemctl daemon-reload
sudo systemctl reset-failed
```
## Remove the reverse proxy
To stop serving Funkwhale from your web server, you need to remove your reverse proxy configuration.
````{tabbed} Nginx
1. Remove the configuration files from your web host.
```{code} bash
sudo rm /etc/nginx/sites-enabled/funkwhale.conf
sudo rm /etc/nginx/sites-available/funkwhale.conf
sudo rm /etc/nginx/funkwhale_proxy.conf
```
2. Reload the web server.
```{code} bash
sudo systemctl reload nginx
```
````
````{tabbed} Apache2
1. Remove the configuration files from your web host.
```{code} bash
sudo rm /etc/apache2/sites-enabled/funkwhale.conf
sudo rm /etc/apache2/sites-available/funkwhale.conf
```
2. Reload the web server.
```{code} bash
sudo service apache2 restart
```
````
## Remove the Funkwhale database
```{warning}
This action is __irreversible__. Make sure you have [backed up your data](../upgrade_docs/backup.md) before proceeding.
```
Once you have stopped the Funkwhale services, you can remove the Funkwhale database.
1. Navigate to your Funkwhale directory.
```{code} bash
cd /srv/funkwhale
```
2. Delete the Funkwhale database.
```{code} bash
sudo -u postgres psql -c 'DROP DATABASE funkwhale;'
```
3. Delete the Funkwhale user.
```{code} bash
sudo -u postgres psql -c 'DROP USER funkwhale;'
```
## Delete the Funkwhale account
```{warning}
This action deletes the `/srv/funkwhale/` directory. Make sure you have [backed up any data](../upgrade_docs/backup.md) you want to keep.
```
Once you have removed the database, you can delete the `funkwhale` user and all associated data.
```{code} bash
sudo userdel -r funkwhale
```
This deletes the `funkwhale` user and everything in their home directory (`/srv/funkwhale/`). If your content is hosted in an S3-compatible store, you need to delete this data separately.
## Uninstall dependencies
Funkwhale uses the following dependencies on your server:
````{tabbed} apt
```{code} txt
build-essential
curl
ffmpeg
libjpeg-dev
libmagic-dev
libpq-dev
postgresql-client
python3-dev
libldap2-dev
libsasl2-dev
make
```
````
````{tabbed} Python
```{literalinclude} ../../../api/pyproject.toml
:language: toml
:lines: 9-59
```
````
Uninstall any dependencies you don't need.

Wyświetl plik

@ -0,0 +1,89 @@
# Uninstall Docker installation
To uninstall a Docker-based Funkwhale installation from your server, follow the instructions in this guide.
```{warning}
Removing Funkwhale data is __irreversible__. Make sure you [back up your data](../upgrade_docs/backup.md).
```
```{contents}
:local:
:depth: 1
```
## Stop the Docker containers
Before you remove any data, you need to stop the Funkwhale containers.
1. Navigate to your Funkwhale directory.
```{code} bash
cd /srv/funkwhale
```
2. Stop the containers
```{code} bash
docker-compose down
```
## Remove the reverse proxy
To stop serving Funkwhale from your web server, you need to remove your reverse proxy configuration.
````{tabbed} Nginx
1. Remove the configuration files from your web host.
```{code} bash
sudo rm /etc/nginx/sites-enabled/funkwhale.conf
sudo rm /etc/nginx/sites-available/funkwhale.conf
sudo rm /etc/nginx/funkwhale_proxy.conf
```
2. Reload the web server.
```{code} bash
sudo systemctl reload nginx
```
````
````{tabbed} Apache2
1. Remove the configuration files from your web host.
```{code} bash
sudo rm /etc/apache2/sites-enabled/funkwhale.conf
sudo rm /etc/apache2/sites-available/funkwhale.conf
```
2. Reload the web server.
```{code} bash
sudo service apache2 restart
```
````
## Remove the containers and their volumes
```{warning}
This action is __irreversible__. Make sure you have [backed up your data](../upgrade_docs/backup.md) before proceeding.
```
Once you have stopped the containers, you can delete all containers and associated volumes.
```{code} bash
docker-compose rm -fsv
```
## Remove the Funkwhale directory
Once you have removed the containers and volumes, you can delete the Funkwhale directory.
```{code} bash
sudo rm -rf /srv/funkwhale
```
This deletes everything in the (`/srv/funkwhale/`) directory. If your content is hosted in an S3-compatible store, you need to delete this data separately.

Wyświetl plik

@ -0,0 +1,19 @@
# Uninstall Funkwhale
If you need to uninstall Funkwhale, follow the instructions in these guides. Uninstalling Funkwhale removes the app, all media, and all user data. Make sure to back up your data before you proceed.
```{note}
These guides show you how to delete data stored on your server. If you are using S3-compatible storage, you need to delete your media files separately.
```
```{toctree}
---
caption: Choose your setup
maxdepth: 1
---
quick_install
debian
docker
```

Wyświetl plik

@ -0,0 +1,160 @@
# Uninstall using the quick install script
The Funkwhale quick install script doesn't currently offer an uninstall command. This is because you may be using its dependencies for other software. To uninstall a quick install Funkwhale installation, follow the instructions in this guide.
```{warning}
Removing Funkwhale data is __irreversible__. Make sure you [back up your data](../upgrade_docs/backup.md).
```
```{contents}
:local:
:depth: 1
```
## Stop the Funkwhale server
Before you uninstall anything from your server, you need to stop the Funkwhale systemd services.
1. Stop all systemd services listed under the `funkwhale` target
```{code} bash
sudo systemctl stop funkwhale.target
```
2. Disable all systemd services to prevent launch at startup.
```{code} bash
sudo systemctl disable funkwhale-server
sudo systemctl disable funkwhale-worker
sudo systemctl disable funkwhale-beat
```
3. Remove the service files.
```{code} bash
sudo rm /etc/systemd/system/funkwhale-server.service
sudo rm /etc/systemd/system/funkwhale-worker.service
sudo rm /etc/systemd/system/funkwhale-beat.service
sudo rm /etc/systemd/system/funkwhale.target
```
4. Reload all services to pick up the changes.
```{code} bash
sudo systemctl daemon-reload
sudo systemctl reset-failed
```
## Remove the reverse proxy
To stop serving Funkwhale from your web server, you need to remove your reverse proxy configuration.
````{tabbed} Nginx
1. Remove the configuration files from your web host.
```{code} bash
sudo rm /etc/nginx/sites-enabled/funkwhale.conf
sudo rm /etc/nginx/sites-available/funkwhale.conf
sudo rm /etc/nginx/funkwhale_proxy.conf
```
2. Reload the web server.
```{code} bash
sudo systemctl reload nginx
```
````
````{tabbed} Apache2
1. Remove the configuration files from your web host.
```{code} bash
sudo rm /etc/apache2/sites-enabled/funkwhale.conf
sudo rm /etc/apache2/sites-available/funkwhale.conf
```
2. Reload the web server.
```{code} bash
sudo service apache2 restart
```
````
## Remove the Funkwhale database
```{warning}
This action is __irreversible__. Make sure you have [backed up your data](../upgrade_docs/backup.md) before proceeding.
```
Once you have stopped the Funkwhale services, you can remove the Funkwhale database.
1. Navigate to your Funkwhale directory.
```{code} bash
cd /srv/funkwhale
```
2. Delete the Funkwhale database.
```{code} bash
sudo -u postgres psql -c 'DROP DATABASE funkwhale;'
```
3. Delete the Funkwhale user.
```{code} bash
sudo -u postgres psql -c 'DROP USER funkwhale;'
```
## Delete the Funkwhale account
```{warning}
This action deletes the `/srv/funkwhale/` directory. Make sure you have [backed up any data](../upgrade_docs/backup.md) you want to keep.
```
Once you have removed the database, you can delete the `funkwhale` user and all associated data.
```{code} bash
sudo userdel -r funkwhale
```
This deletes the `funkwhale` user and everything in their home directory (`/srv/funkwhale/`). If your content is hosted in an S3-compatible store, you need to delete this data separately.
## Uninstall dependencies
The quick install script installs the following dependencies on your server:
````{tabbed} apt
```{code} txt
build-essential
curl
ffmpeg
libjpeg-dev
libmagic-dev
libpq-dev
postgresql-client
python3-dev
libldap2-dev
libsasl2-dev
make
```
````
````{tabbed} Python
```{literalinclude} ../../../api/pyproject.toml
:language: toml
:lines: 9-59
```
````
Uninstall any dependencies you don't need.

Wyświetl plik

@ -0,0 +1,62 @@
# Back up your Funkwhale instance
Before performing big changes, we recommend you back up your database and media files. Follow the instructions in this guide to back up your instance.
1. Back up your database.
````{tabbed} Debian
```{code} bash
sudo -u postgres -H pg_dump funkwhale > /path/to/your/backup/dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
```
````
````{tabbed} Docker
```{code} bash
docker-compose exec postgres pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
```
````
2. Back up your media files. In this example we use [rsync](https://rsync.samba.org) to back up the files.
````{tabbed} Debian
```{code} bash
rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media
rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music
```
````
````{tabbed} Docker
```{code} bash
rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media
rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music
```
````
3. Back up your configuration files.
````{tabbed} Debian
```{code} bash
rsync -avzhP /srv/funkwhale/config/.env /path/to/your/backup/.env
```
````
````{tabbed} Docker
```{code} bash
rsync -avzhP /srv/funkwhale/.env /path/to/your/backup/.env
```
````
If you are performing regular backups, you may need deduplication and compression to keep the size down. In this case, a tool like [`borg`](https://www.borgbackup.org/) is more appropriate.

Wyświetl plik

@ -0,0 +1,96 @@
# Upgrade your Debian Funkwhale installation
If you installed Funkwhale following the [Debian guide](../installation_docs/debian), follow these steps to upgrade.
## Download the updated files
1. SSH into your server.
2. Log in as your `funkwhale` user.
```{code} bash
su funkwhale
```
3. Navigate to your Funkwhale directory.
```{code} bash
cd /srv/funkwhale
```
4. Stop the Funkwhale services.
```{code} bash
sudo systemctl stop funkwhale.target
```
5. Export the Funkwhale version you want to update to. You'll use this in the rest of the commands in this guide.
```{parsed-literal}
export FUNKWHALE_VERSION={sub-ref}`version`
```
6. Download the API files for your chosen Funkwhale version.
```{code} bash
curl -L -o "api-$FUNKWHALE_VERSION.zip" "https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/artifacts/$FUNKWHALE_VERSION/download?job=build_api"
```
7. Extract the downloaded archive to a new directory.
```{code} bash
unzip "api-$FUNKWHALE_VERSION.zip" -o api_new
```
8. Remove the old `api` directory and move the extracted directory to the `api` directory.
```{code} bash
rm -rf api/ && mv api_new api
```
9. Remove the downloaded archive file.
```{code} bash
rm api-$FUNKWHALE_VERSION.zip
```
## Update your Funkwhale instance
Once you have downloaded the new files, you can update your Funkwhale instance. To do this:
1. Install or upgrade all OS dependencies using the dependencies script.
```{code} bash
sudo api/install_os_dependencies.sh install
```
2. Enter the `api` directory to run the following commands.
```{code} bash
cd api
```
3. Install all Python dependencies using `poetry`.
```{code} bash
poetry install
```
4. Collect the new static files to serve.
```{code} bash
poetry run python manage.py collectstatic --no-input
```
5. Apply new database migrations.
```{code} bash
poetry run python manage.py migrate
```
6. Restart the Funkwhale services.
```{code} bash
sudo systemctl start funkwhale.target
```
That's it! You've updated your Funkwhale pod. You should now see the new version running in your web browser.

Wyświetl plik

@ -0,0 +1,116 @@
# Upgrade your Docker Funkwhale installation
If you installed Funkwhale following the [Docker guide](../installation_docs/docker), follow these steps to upgrade.
## Upgrade Funkwhale
1. SSH into your server
2. Log in as your `funkwhale` user.
```{code} bash
su funkwhale
```
3. Navigate to your Funkwhale directory.
```{code} bash
cd /srv/funkwhale
```
4. Export the Funkwhale version you want to update to. You'll use this in the rest of the commands in this guide.
```{parsed-literal}
export FUNKWHALE_VERSION={sub-ref}`version`
```
5. Change the version number in your `.env` file. Update this to the same version number you exported in step 4.
```{code} bash
nano .env
```
6. Load the configuration from your `.env` file.
```{code} bash
source .env
```
7. Pull the updated containers.
```{code} bash
docker-compose pull
```
8. Apply the database migrations.
```{code} bash
docker-compose run --rm api python manage.py migrate
```
9. Relaunch your containers.
```{code} bash
docker-compose up -d
```
Thats it! Youve updated your Funkwhale pod. You should now see the new version running in your web browser.
## Upgrade the postgres container
Funkwhale depends on postgres for its database container. To upgrade postgres, you need to export your database and import it into the new container.
To upgrade postgres on Docker we use the [`postgres-upgrade`](https://hub.docker.com/r/tianon/postgres-upgrade/) container. This Docker container automates the process of upgrading between major versions of postgres. Use these commands to upgrade your postgres container:
1. Export your current postgres version number. You can find this in your `docker-compose.yml` file.
```{code} bash
export OLD_POSTGRES=13
```
2. Export the major version number you want to upgrade to.
```{code} bash
export NEW_POSTGRES=14
```
3. Stop the postgres container. This means no data changes while you are upgrading.
```{code} bash
docker-compose stop postgres
```
4. Run the migration using the `postgres-upgrade` container. This creates a new version of the database in the `/srv/funkwhale/data/postgres-new` directory.
```{code} bash
docker run --rm \
-v $(pwd)/data/postgres:/var/lib/postgresql/${OLD_POSTGRES}/data \
-v $(pwd)/data/postgres-new:/var/lib/postgresql/${NEW_POSTGRES}/data \
tianon/postgres-upgrade:${OLD_POSTGRES}-to-${NEW_POSTGRES}
```
5. Re-add the access control rules required by Funkwhale.
```{code} bash
echo "host all all all trust" | sudo tee -a ./data/postgres-new/pg_hba.conf
```
6. Swap your old database out with your new database.
```{code} bash
mv ./data/postgres ./data/postgres-old
mv ./data/postgres-new ./data/postgres
```
7. Pull the new postgres version.
```{code} bash
docker-compose pull
```
8. Restart your containers.
```{code} bash
docker-compose up -d
```
That's it! Your Funkwhale pod is now running the new version of postgres. The old database is available in `/srv/funkwhale/data/postgres-old`. You can back this up and remove it from your server once you've confirmed everything is working.

Wyświetl plik

@ -0,0 +1,31 @@
# Upgrade your Funkwhale instance
We release new updates to Funkwhale to add new features and fix bugs. We recommend you install these updates to ensure you have the best experience.
```{note}
We recommend you back up your database and media files before performing and update.
```
Be sure to check the changelog for any specific instructions relating to upgrades.
```{toctree}
---
caption: Prepare for the upgrade
maxdepth: 1
---
backup
```
```{toctree}
---
caption: Choose your installation method
maxdepth: 1
---
Quick install script <quick_install>
Docker <docker>
Debian <debian>
```

Wyświetl plik

@ -0,0 +1,9 @@
# Upgrade using the quick install script
If you installed Funkwhale using the [quick install script](../installation_docs/quick_install), upgrading your instance is as simple as running the following command on your server:
```bash
sudo sh -c "$(curl -sSL https://get.funkwhale.audio/upgrade.sh)".
```
The script runs through the necessary setup instructions.

Wyświetl plik

@ -72,6 +72,10 @@ source_suffix = ".rst"
# The root toctree document.
root_doc = "index"
# Autogenerate anchors
myst_heading_anchors = 3
# General information about the project.
year = datetime.datetime.now().year
project = "funkwhale"
@ -203,58 +207,9 @@ texinfo_documents = [
# Define list of redirect files to be build in the Sphinx build process
redirect_files = [
("importing-music.html", "admin/importing-music.html"),
("architecture.html", "developers/architecture.html"),
("troubleshooting.html", "admin/troubleshooting.html"),
("configuration.html", "admin/configuration.html"),
("upgrading/index.html", "../admin/upgrading.html"),
("upgrading/0.17.html", "../admin/0.17.html"),
("users/django.html", "../admin/django.html"),
("cli/index.html", "../user_documentation/info/cli.html"),
("cli/examples.html", "../user_documentation/info/cli.html#examples"),
("installation/ldap.html", "../admin/ldap.html"),
("installation/optimization.html", "../admin/optimization.html"),
("installation/external_dependencies.html", "debian.html"),
("installation/systemd.html", "debian.html#systemd-unit-file"),
("backup.html", "../admin/backup.html"),
("users/create.html", "../user_documentation/accounts/create_account.html"),
("users/tagging.html", "../user_documentation/libraries/tag_music.html"),
("users/upload.html", "../user_documentation/libraries/upload_content.html"),
("users/editing.html", "../user_documentation/libraries/edit_content.html"),
("users/account.html", "../user_documentation/accounts/index.html"),
("users/queue.html", "../user_documentation/queue/index.html"),
("users/managing.html", "../user_documentation/libraries/index.html"),
("users/channels.html", "../user_documentation/channels/index.html"),
("users/playlists.html", "../user_documentation/radios/index.html"),
("users/favorites.html", "../user_documentation/favorites/index.html"),
("users/radios.html", "../user_documentation/radios/index.html"),
("users/followchannel.html", "../user_documentation/channels/follow_channel.html"),
("users/follow.html", "../user_documentation/libraries/follow_library.html"),
("users/reports.html", "../user_documentation/reports/index.html"),
("users/builtinplugins.html", "../user_documentation/plugins/index.html"),
("moderator/index.html", "../moderator_documentation/index.html"),
("moderator/reports.html", "../moderator_documentation/reports/index.html"),
("moderator/domains.html", "../moderator_documentation/domains/index.html"),
("moderator/users.html", "../moderator_documentation/users/index.html"),
("moderator/listing.html", "../moderator_documentation/allow_listing/index.html"),
(
"installation/index.html",
"../administrator_documentation/installation_docs/index.html",
),
(
"installation/index.html#quick-install",
"../administrator_documentation/installation_docs/quick_install.html",
),
(
"installation/docker.html",
"../administrator_documentation/installation_docs/docker.html",
),
(
"installation/debian.html",
"../administrator_documentation/installation_docs/debian.html",
),
]
redirect_list = []
with open("redirects.txt", "r") as fp:
data_list = [tuple(line.strip().split(",")) for line in fp]
# Generate redirect template
@ -274,7 +229,7 @@ redirect_template = """\
def copy_legacy_redirects(app, docname):
if app.builder.name == "html":
for html_src_path, new in redirect_files:
for html_src_path, new in data_list:
page = redirect_template.format(new=new)
target_path = app.outdir + "/" + html_src_path
if not os.path.exists(os.path.dirname(target_path)):

Wyświetl plik

@ -50,7 +50,7 @@ or persist data.
Third-party apps
----------------
Since Funkwhale implements a subset of the Subsonic API, it's compatible with existing :doc:`apps <../users/apps>` such
Since Funkwhale implements a subset of the Subsonic API, it's compatible with existing `apps <https://funkwhale.audio/en_US/apps>`_ such
as DSub, Ultrasonic or Clementine that support this API. Those apps can be used as a replacement
or in conjunction of the web interface, but the underlying data is the same.

Wyświetl plik

@ -2,7 +2,7 @@ Subsonic API
============
Funkwhale implements a subset of the `Subsonic API <http://www.subsonic.org/pages/api.jsp>`_ that makes it compatible
with various apps in the Subsonic ecosystem (See :doc:`../users/apps`).
with various apps in the Subsonic ecosystem (See `our list of supported apps <https://funkwhale.audio/en_US/apps>`_).
Supported endpoints
-------------------

Wyświetl plik

@ -7,6 +7,32 @@
Pod
A pod is an instance of Funkwhale running on a server. Pods can communicate with one another across the {term}`Fediverse`.
Authenticated
Users who have an account on a Funkwhale pod. These users provide their authentication information when accessing content.
Anonymous
Users who do not have an account on a Funkwhale pod. These users don't provide any authentication when accessing content.
Permissions
Additional rights that an administrator/moderator can grant to a user. Permissions grant access to menus and actions in Funkwhale.
Available permissions:
- {guilabel}`Moderation` – Grants access to the {guilabel}`Moderation` menu. Enables the user to moderate users, domains, and the allow-list.
- {guilabel}`Manage library` – Grants access to the {guilabel}`Library` menu. Enables the user to make changes to library content. This includes deleting local objects and handling edit suggestions.
- {guilabel}`Manage instance-level settings` – Grants access to the {guilabel}`Settings` menu. Enables the user to make changes to pod-level settings such as security settings and API behavior.
Report categories
The different types of report a person can submit to your pod.
Available categories:
- {guilabel}`Takedown request` – allow users to request content be removed from your pod.
- {guilabel}`Invalid metadata` – allow users to inform moderators about incorrect metadata on content.
- {guilabel}`Illegal content` – allow users to flag content as illegal.
- {guilabel}`Offensive content` – allow users to flag offensive or hurtful content to moderators.
- {guilabel}`Other` – allow users to submit reports that don't fit into the above categories.
```
## Channel glossary

Wyświetl plik

@ -35,7 +35,14 @@ hidden: true
administrator_documentation/index
administrator_documentation/installation_docs/index
administrator_documentation/configuration_docs/index
administrator_documentation/import_docs/index
administrator_documentation/upgrade_docs/index
administrator_documentation/migration_guide/index
administrator_documentation/django/index
administrator_documentation/manage_script/index
administrator_documentation/uninstall_docs/index
administrator_documentation/troubleshooting/index
```

Wyświetl plik

@ -1,398 +0,0 @@
Debian and Arch Linux installation
==================================
.. note::
This guide targets Debian 10 (Buster), which is the latest version available, as well as Arch Linux.
Cache setup (Redis)
-------------------
Funkwhale requires a cache server:
- to make the whole system faster, by caching network requests or database queries;
- to handle asynchronous tasks such as music import.
On Debian-like distributions, a redis package is available, and you can
install it:
.. code-block:: shell
sudo apt-get install redis-server
On Arch Linux and its derivatives:
.. code-block:: shell
sudo pacman -S redis
This should be enough to have your redis server set up.
Install system dependencies
---------------------------
On Debian-like systems, you can install them using:
.. code-block:: shell
sudo apt-get update
# Install system dependencies
sudo apt-get install curl python3-pip python3-venv git unzip libldap2-dev libsasl2-dev gettext-base zlib1g-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev
# Funkwhale dependencies
sudo apt install build-essential ffmpeg libjpeg-dev libmagic-dev libpq-dev postgresql-client python3-dev make
On Arch Linux and its derivatives:
.. code-block:: shell
# Install system dependencies
sudo pacman -S curl python-pip python-virtualenv git unzip
# Funkwhale dependencies
sudo pacman -S curl file ffmpeg libjpeg-turbo libpqxx python libldap libsasl
External Authentication (LDAP)
------------------------------
LDAP support requires some additional dependencies to enable. On the OS level both ``libldap2-dev`` and ``libsasl2-dev`` are required, and the Python modules ``python-ldap`` and ``python-django-auth-ldap`` must be installed. These dependencies are all included in the ``requirements.*`` files so deploying with those will install these dependencies by default. However, they are not required unless LDAP support is explicitly enabled. See :doc:`../admin/ldap` for more details.
Installation structure
----------------------
All Funkwhale-related files will be located under ``/srv/funkwhale`` apart
from database files and a few configuration files. We will also have a
dedicated ``funkwhale`` user to launch the processes we need and own those files.
You are free to use different values here, just remember to adapt those in the
next steps.
.. _create-funkwhale-user:
Create the user and the directory:
.. code-block:: shell
sudo useradd -r -s /usr/sbin/nologin -d /srv/funkwhale -m funkwhale
cd /srv/funkwhale
Log in as the newly created user from now on:
.. code-block:: shell
sudo -u funkwhale -H bash
Now let's setup our directory layout. Here is how it will look like::
.
├── config # config / environment files
├── api # api code of your instance
├── data # persistent data, such as music files
├── front # frontend files for the web user interface
└── .venv # python dependencies for Funkwhale
Create the aforementioned directories:
.. code-block:: shell
mkdir -p config api data/static data/media data/music front
The ``virtualenv`` directory is a bit special and will be created separately.
Download the latest Funkwhale release
-------------------------------------
Funkwhale is splitted in two components:
1. The API, which will handle music storage and user accounts;
2. The frontend, that will simply connect to the API to interact with its data.
Those components are packaged in subsequent releases, such as 0.1, 0.2, etc.
You can browse the :doc:`changelog </changelog>` for a list of available releases
and pick the one you want to install, usually the latest one should be okay.
In this guide, we will assume you want to install the latest version of Funkwhale, which is |version|:
First, we will download the latest api release:
.. code-block:: shell
curl -L -o "api-|version|.zip" "https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/artifacts/|version|/download?job=build_api"
unzip "api-|version|.zip" -d extracted
mv extracted/api/* api/
rm -rf extracted
Then we will download the frontend files:
.. code-block:: shell
curl -L -o "front-|version|.zip" "https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/artifacts/|version|/download?job=build_front"
unzip "front-|version|.zip" -d extracted
mv extracted/front .
rm -rf extracted
.. note::
You can also choose to get the code directly from the git repo. In this
case, run::
cd /srv
rm -r funkwhale
git clone -b stable https://dev.funkwhale.audio/funkwhale/funkwhale funkwhale
cd funkwhale
The above clone command uses the stable branch instead of the default develop branch, as stable is stable and more suited for production setups.
You'll also need to re-create the folders we make earlier::
mkdir -p config data/static data/media data/music front
You will still need to get the frontend files as specified before, because
we're not going to build them.
You can leave the ZIP archives in the directory, this will help you know
which version you've installed next time you want to upgrade your installation.
Install Python dependencies
----------------------------
We use `poetry <https://python-poetry.org/>`_ to manage Python dependencies.
Poetry installs packages in a `virtualenv <https://docs.python.org/3/library/venv.html>`_.
This prevents collisions with other Python packages on your system. To install poetry,
check out `their documentation <https://python-poetry.org/docs/#installation>`_.
By default, poetry creates a virtualenv in `{cache-dir}/virtualenvs`.
We recommend creating your virtualenv inside your Funkwhale `api` directory.
To do this, navigate to the directory and run the :command:`poetry config virtualenvs.in-project`
command.
.. code-block:: shell
cd /srv/funkwhale/api // navigate to the Funkwhale api directory
poetry config virtualenvs.in-project true // create the virtualenv
Poetry creates a virtualenv in `/srv/funkwhale/api/.venv`.
.. note::
To run Funkwhale commands, you need to activate the virtualenv using poetry.
To make copying and pasting from this guide easier, we prefix all commands
with :command:`poetry run`. If you use :command:`poetry shell` to enter
your virtualenv, make sure you remove :command:`poetry run` from each
command.
Once you have set up your virtualenv, install the dependencies using
:command:`poetry install`.
.. code-block:: shell
poetry install
Environment file
----------------
You can now start to configure Funkwhale. The main way to achieve that is by
adding an environment file that will host settings that are relevant to your
installation.
Download the sample environment file:
.. parsed-literal::
curl -L -o config/.env "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/stable/deploy/env.prod.sample"
.. note::
if you used git to get the latest version of the code earlier, you can instead do::
cp /srv/funkwhale/deploy/env.prod.sample /srv/funkwhale/config/.env
Generate a secret key for Django::
openssl rand -base64 45
You can then edit the file: the file is heavily commented, and the most relevant
configuration options are mentioned at the top of the file.
.. code-block:: shell
chmod 600 /srv/funkwhale/config/.env # reduce permissions on the .env file since it contains sensitive data
nano /srv/funkwhale/config/.env
Paste the secret key you generated earlier at the entry
``DJANGO_SECRET_KEY`` and populate the ``DATABASE_URL``
and ``CACHE_URL`` values based on how you configured
your PostgreSQL and Redis servers in.
Database setup
--------------
Funkwhale requires a PostgreSQL database to work properly. Please refer
to the `PostgreSQL documentation <https://www.postgresql.org/download/>`_
for installation instructions specific to your os.
On Debian-like systems, you would install the database server like this:
.. code-block:: shell
sudo apt-get install postgresql postgresql-contrib
On Arch Linux and its derivatives:
.. code-block:: shell
sudo pacman -S postgresql
On Arch Linux, you'll also need to initialize the database. See `the Arch Linux wiki <https://wiki.archlinux.org/index.php/Postgresql#Initial_configuration>`_.
The remaining steps are heavily inspired from `this Digital Ocean guide <https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04>`_.
Open a database shell:
.. code-block:: shell
sudo -u postgres psql
Create the project database and user:
.. code-block:: shell
CREATE DATABASE funkwhale WITH ENCODING 'utf8';
CREATE USER funkwhale;
GRANT ALL PRIVILEGES ON DATABASE funkwhale TO funkwhale;
.. warning::
It's important that you use utf-8 encoding for your database,
otherwise you'll end up with errors and crashes later on when dealing
with music metadata that contains non-ascii chars.
Assuming you already have :ref:`created your funkwhale user <create-funkwhale-user>`,
you should now be able to open a postgresql shell:
.. code-block:: shell
sudo -u funkwhale -H psql
Unless you give a superuser access to the database user, you should also
enable some extensions on your database server, as those are required
for Funkwhale to work properly:
.. code-block:: shell
sudo -u postgres psql funkwhale -c 'CREATE EXTENSION "unaccent";'
sudo -u postgres psql funkwhale -c 'CREATE EXTENSION "citext";'
Now that the database has been created, import the initial database structure using the virtualenv created before:
.. code-block:: shell
poetry run python api/manage.py migrate
This creates the required tables and rows.
.. note::
You can safely execute this command any time you want, this will only
run unapplied migrations.
.. warning::
You may sometimes get the following warning while applying migrations::
"Your models have changes that are not yet reflected in a migration, and so won't be applied."
This is a warning, not an error, and it can be safely ignored.
Never run the ``makemigrations`` command yourself.
Create an admin account
-----------------------
Using the virtualenv created before, create your first user account:
.. code-block:: shell
poetry run python api/manage.py createsuperuser
If you ever want to change a user's password from the command line, just run:
.. code-block:: shell
poetry run python api/manage.py changepassword <user>
Collect static files
--------------------
Static files are the static assets used by the API server (icon PNGs, CSS, etc.).
We need to collect them explicitly, so they can be served by the webserver:
.. code-block:: shell
poetry run python api/manage.py collectstatic
This should populate the directory you choose for the ``STATIC_ROOT`` variable
in your ``.env`` file.
Systemd unit file
------------------
.. note::
All the command lines below should be executed as root.
Systemd offers a convenient way to manage your Funkwhale instance if you're
not using docker. We'll see how to setup systemd to properly start a Funkwhale instance.
First, download the sample unitfiles:
.. parsed-literal::
sudo curl -L -o "/etc/systemd/system/funkwhale.target" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale.target"
sudo curl -L -o "/etc/systemd/system/funkwhale-server.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale-server.service"
sudo curl -L -o "/etc/systemd/system/funkwhale-worker.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale-worker.service"
sudo curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale-beat.service"
This will download three unitfiles:
- ``funkwhale-server.service`` to launch the Funkwhale web server;
- ``funkwhale-worker.service`` to launch the Funkwhale task worker;
- ``funkwhale-beat.service`` to launch the Funkwhale task beat (this is for recurring tasks);
- ``funkwhale.target`` to easily stop and start all of the services at once.
You can of course review and edit them to suit your deployment scenario
if needed, but the defaults should be fine.
Once the files are downloaded, reload systemd:
.. code-block:: shell
sudo systemctl daemon-reload
And start the services:
.. code-block:: shell
sudo systemctl start funkwhale.target
To ensure all Funkwhale processes are started automatically after a reboot, run:
.. code-block:: shell
sudo systemctl enable funkwhale-server
sudo systemctl enable funkwhale-worker
sudo systemctl enable funkwhale-beat
You can check the statuses of all processes like this:
.. code-block:: shell
sudo systemctl status funkwhale-\*
Reverse proxy setup
--------------------
See :ref:`Reverse proxy <reverse-proxy-setup>`.

Wyświetl plik

@ -1,223 +0,0 @@
Docker installation
===================
Docker is the easiest way to get a Funkwhale instance up and running.
We support two types of Docker deployments:
- :ref:`Mono-container <docker-mono-container>`: all processes live in the same container (database, nginx, redis, etc.). It's easier to deploy and to integrate with container management systems like Portainer. However, it's not possible to scale this type of deployment on multiple servers.
- :ref:`Multi-container <docker-multi-container>`: each process lives in a dedicated container. This setup is more involved but also more flexible and scalable.
.. warning::
The All-In-One-Container or Mono-Container installation is deprecated, don't use it for new installations.
For more information, visit our blog: https://blog.funkwhale.audio/deprecation-all-in-one-container.html
.. _docker-mono-container:
Mono-container installation
---------------------------
.. warning::
The All-In-One-Container or Mono-Container installation is deprecated, don't use it for new installations.
For more information, visit our blog: https://blog.funkwhale.audio/deprecation-all-in-one-container.html
.. note::
This installation method was originally contributed by `@thetarkus <https://github.com/thetarkus>`_
These are the installation steps:
1. Install docker
2. Create ``funkwhale`` user
3. Create ``.env`` file
4. Create ``docker-compose.yml`` file
5. Start Funkwhale service
Install docker
~~~~~~~~~~~~~~
Ensure you have `Docker <https://docs.docker.com/engine/installation/>`_ and `docker-compose <https://docs.docker.com/compose/install/>`_ installed.
Create ``funkwhale`` user
~~~~~~~~~~~~~~~~~~~~~~~~~
Create the user and the directory:
.. code-block:: shell
sudo useradd -r -s /usr/bin/nologin -m -d /srv/funkwhale -U -G docker funkwhale
cd /srv/funkwhale
Log in as the newly created user from now on:
.. code-block:: shell
sudo -u funkwhale -H bash
Create ``.env`` file
~~~~~~~~~~~~~~~~~~~~
Create a ``.env`` file to store a few important configuration options:
.. code-block:: shell
touch .env
chmod 600 .env # reduce permissions on the .env file since it contains sensitive data
cat > .env << EOF
# Replace 'your.funkwhale.example' with your actual domain
FUNKWHALE_HOSTNAME=your.funkwhale.example
# Protocol may also be: http
FUNKWHALE_PROTOCOL=https
# This limits the upload size
NGINX_MAX_BODY_SIZE=100M
# Bind to localhost
FUNKWHALE_API_IP=127.0.0.1
# Container port you want to expose on the host
FUNKWHALE_API_PORT=5000
# Generate and store a secure secret key for your instance
DJANGO_SECRET_KEY=$(openssl rand -hex 45)
# Remove this if you expose the container directly on ports 80/443
NESTED_PROXY=1
EOF
Create ``docker-compose.yml`` file
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Create a ``docker-compose.yml`` file to set up the containers:
.. parsed-literal::
version: "3"
services:
funkwhale:
container_name: funkwhale
restart: unless-stopped
# change version number here when you want to do an upgrade
image: funkwhale/all-in-one:|version|
env_file: .env
environment:
# adapt to the pid/gid that own /srv/funkwhale/data
- PUID=1000
- PGID=1000
volumes:
- /srv/funkwhale/data:/data
- /path/to/your/music/dir:/music:ro
ports:
- "5000:80"
.. note::
- The version can be changed (after ``funkwhale/all-in-one:``), `select the version <https://hub.docker.com/r/funkwhale/all-in-one/tags>`_ you want to deploy.
- ``PUID`` and ``PGID`` are optional but useful to prevent permission issues with docker volumes
- ``/path/to/your/music/dir`` should point to a path on your host where music you would like to import is located. You can safely remove the volume if you don't want to import music that way.
Start Funkwhale service
~~~~~~~~~~~~~~~~~~~~~~~
Start the container:
.. code-block:: shell
docker-compose up -d
Your container should start in the background, and your instance be available at ``yourip:5000`` shortly.
You will need an admin account to login and manage your account, create one using the following command: ``docker exec -it funkwhale manage createsuperuser``
Useful commands:
- You can start and stop your instance using ``docker-compose start`` and ``docker-compose stop``, respectively
- You can examine the logs by running ``docker logs -f --tail=50 funkwhale``
- To have a better idea of the resource usage of your instance (CPU, memory), run ``docker stats funkwhale``
Now, you just need to configure your :ref:`reverse-proxy <reverse-proxy-setup>`. Don't worry, it's quite easy.
.. _docker-multi-container:
Multi-container installation
----------------------------
First, ensure you have `Docker <https://docs.docker.com/engine/installation/>`_ and `docker-compose <https://docs.docker.com/compose/install/>`_ installed.
Export the `version you want <https://hub.docker.com/r/funkwhale/all-in-one/tags>`_ to deploy (e.g., ``0.21``):
.. parsed-literal::
export FUNKWHALE_VERSION="|version|"
Download the sample docker-compose file:
.. parsed-literal::
mkdir /srv/funkwhale
cd /srv/funkwhale
mkdir nginx
curl -L -o nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker.nginx.template"
curl -L -o nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker.funkwhale_proxy.conf"
curl -L -o docker-compose.yml "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker-compose.yml"
At this point, the architecture of ``/srv/funkwhale`` should look like that:
::
.
├── docker-compose.yml
└── nginx
├── funkwhale_proxy.conf
└── funkwhale.template
Create your env file:
.. parsed-literal::
curl -L -o .env "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/env.prod.sample"
sed -i "s/FUNKWHALE_VERSION=latest/FUNKWHALE_VERSION=$FUNKWHALE_VERSION/" .env
chmod 600 .env # reduce permissions on the .env file since it contains sensitive data
sudo nano .env
Ensure to edit it to match your needs (this file is heavily commented), in particular ``DJANGO_SECRET_KEY`` and ``FUNKWHALE_HOSTNAME``.
You should take a look at the `configuration reference <https://docs.funkwhale.audio/configuration.html#configuration-reference>`_ for more detailed information regarding each setting.
Then, you should be able to pull the required images:
.. code-block:: bash
docker-compose pull
Run the database container and the initial migrations:
.. code-block:: bash
docker-compose up -d postgres
docker-compose run --rm api python manage.py migrate
.. warning::
You may sometimes get the following warning while applying migrations::
"Your models have changes that are not yet reflected in a migration, and so won't be applied."
This is a warning, not an error, and it can be safely ignored.
Never run the ``makemigrations`` command yourself.
Create your admin user:
.. code-block:: bash
docker-compose run --rm api python manage.py createsuperuser
Then launch the whole thing:
.. code-block:: bash
docker-compose up -d
Now, you just need to configure your :ref:`reverse-proxy <reverse-proxy-setup>`. Don't worry, it's quite easy.
About music acquisition
-----------------------
If you want to :doc:`import music located on the server <../admin/importing-music>`, you can put it in the ``data/music`` directory and it will become readable by the importer.

Wyświetl plik

@ -1,389 +0,0 @@
Installation
============
Requirements
------------
Regardless of your chosen installation method,
the following is required to successfully deploy Funkwhale:
- **A dedicated domain or subdomain**: it is not possible to deploy Funkwhale on a subdirectory of an existing domain.
- **Access to ports 80 and/or 443**: if you cannot serve the Funkwhale web app and API on these ports, federation will not work
.. note::
Because of the federated nature of Funkwhale,
**it is strongly recommended not to change the Funkwhale domain after initial deployment**,
as it is likely to break your installation.
Project architecture
--------------------
The project relies on the following components and services to work:
- A web application server (Python/Django/Gunicorn)
- A PostgreSQL database to store application data
- A redis server to store cache and tasks data
- A celery worker to run asynchronous tasks (such as music import)
- A celery scheduler to run recurrent tasks
- A `ntp-synced clock <https://wiki.debian.org/NTP>`_ to ensure federation is working seamlessly
.. note::
The synced clock is needed for federation purpose, to assess
the validity of incoming requests.
Hardware requirements
---------------------
Funkwhale is not especially CPU hungry.
On a dockerized instance with 2 CPUs and a few active users,
the memory footprint is around 500Mb::
CONTAINER MEM USAGE
funkwhale_api_1 202 MiB
funkwhale_celerybeat_1 96 MiB
funkwhale_celeryworker_1 168 MiB
funkwhale_postgres_1 22 MiB
funkwhale_redis_1 1 MiB
Some users have reported running Funkwhale on Raspberry Pis with a memory
consumption of less than 350 MiB.
Thus, Funkwhale should run fine on commodity hardware, small hosting boxes and
Raspberry Pi. We lack real-world examples of such deployments, so don't hesitate
do give us your feedback (either positive or negative).
Check out :doc:`../admin/optimization` for advice on how to tune your instance on small
configurations.
Software requirements
---------------------
Software requirements will vary depending of your installation method. For
Docker-based installations, the only requirement will be an Nginx reverse-proxy
that will expose your instance to the outside world.
If you plan to install your Funkwhale instance without Docker, most of the
dependencies should be available in your distribution's repositories.
.. note::
Funkwhale works only with Python >= 3.5, as we need support for async/await.
Older versions of Python are not supported.
Available installation methods
-------------------------------
Funkwhale can be installed using one of the following method:
.. warning::
The All-In-One-Container or Mono-Container installation is deprecated, don't use it for new installations.
For more information, visit our blog: https://blog.funkwhale.audio/deprecation-all-in-one-container.html
- Quick install, the most straight forward way to get Funkwhale;
- Mono-container Docker installation;
- Multi-container Docker installation;
- Manual Debian and Arch Linux installation;
- `Ansible role <https://dev.funkwhale.audio/funkwhale/ansible/>`_.
Further, Funkwhale packages are available for the following platforms:
- `YunoHost 3 <https://yunohost.org/>`_: https://github.com/YunoHost-Apps/funkwhale_ynh (kindly maintained by `@Jibec <https://github.com/Jibec>`_)
- ArchLinux (as an AUR package): if you'd rather use a package, check out this alternative installation method on ArchLinux: https://wiki.archlinux.org/index.php/Funkwhale (package and wiki kindly maintained by getzee)
- `NixOS <https://github.com/mmai/funkwhale-nixos>`_ (kindly maintained by @mmai)
- `Helm chart <https://gitlab.com/ananace/charts/>`_ to install Funkwhale on Kubernetes (kindly maintained by `@ananace <https://gitlab.com/ananace>`_)
- `HomelabOS <https://homelabos.com/docs/software/funkwhale/>`_
Quick install
^^^^^^^^^^^^^
To install the latest version of Funkwhale on a recent Debian or Ubuntu server, run::
sudo apt-get update
sudo apt-get install curl
sudo sh -c "$(curl -sSL https://get.funkwhale.audio/)"
This installation script will ask you a few questions, install the required dependencies
and set up your instance.
Additional info:
- This script is based on our `Ansible role <https://dev.funkwhale.audio/funkwhale/ansible/>`_.
- By default, the script installs Nginx, PostgreSQL, Redis and Funkwhale itself but you can customize the installation procedure if you already have some of these services available on your machine
- Edit your pod configuration in ``/srv/funkwhale/ansible/playbook.yml`` and apply new configuration with ``sudo /srv/funkwhale/ansible/reconfigure``
- Upgrade is done using ``sh -c "$(curl -sSL https://get.funkwhale.audio/upgrade.sh)"``.
Alternative installation methods
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. toctree::
:maxdepth: 1
debian
docker
non_amd64_architectures
Running Funkwhale on the develop branch
---------------------------------------
Traditional deployments are done using tagged releases. However, you
may want to benefit from the latest changes available, or to help detect
bugs before they are included in actual releases.
To do that, you'll need to run your instance on the develop branch,
which contains all the unreleased changes and features of the next version.
Please take into account that the develop branch
may be unstable and will contain bugs that may affect the well-being of your
instance. If you are comfortable with that, you need to backup at least your database
before pulling the latest changes from the develop branch.
Otherwise, the deployment process is similar to deploying with releases.
You simply need to use ``export FUNKWHALE_VERSION=develop``
in the installation and upgrade process instead of a real version number,
as we build artifacts on the development branch the same way we do for releases.
It's also recommended to check out the `develop release notes <https://dev.funkwhale.audio/funkwhale/funkwhale/blob/develop/changes/notes.rst>`_ before upgrading,
since you may have to apply manual actions for your instance to continue to work. Such actions are labelled with ``[manual action required]`` in the releases notes.
.. _frontend-setup:
Serving only the frontend
-------------------------
.. note::
You do not need to do this if you are deploying using Docker,
as frontend files are already included in the docker image.
You also do not need to do this if you are deploying manually on Debian or Arch,
as this is covered by the corresponding documentation already.
Files for the web frontend are purely static and can simply be downloaded, unzipped and served from any webserver:
.. code-block:: shell
cd /srv/funkwhale
curl -L -o front.zip "https://dev.funkwhale.audio/funkwhale/funkwhale/builds/artifacts/|version|/download?job=build_front"
unzip front.zip
.. _reverse-proxy-setup:
Reverse proxy configuration
---------------------------
In order to make Funkwhale accessible from outside your server
and to play nicely with other applications on your machine,
you should configure a reverse proxy.
We offer sample configurations for Nginx, Apache2 and Caddy.
.. note::
You can freely adapt the proposed configuration to your own needs,
as we cannot cover every use case with a single template,
especially when it's related to SSL configuration.
Nginx
^^^^^
Ensure you have a recent version of nginx on your server.
On a Debian-based system use apt:
.. code-block:: shell
sudo apt-get update
sudo apt-get install nginx
On Arch Linux and its derivatives:
.. code-block:: shell
sudo pacman -S nginx
To avoid configuration errors at this level,
we will generate an nginx configuration using your .env file.
This will ensure your reverse-proxy configuration
always matches the application configuration
and makes upgrade/maintenance easier.
.. note::
The following commands need to be run as superuser.
On docker deployments, run the following commands:
.. code-block:: shell
export FUNKWHALE_VERSION="|version|"
# download the needed files
curl -L -o /etc/nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale_proxy.conf"
curl -L -o /etc/nginx/sites-available/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/docker.proxy.template"
.. code-block:: shell
# create a final nginx configuration using the template based on your environment
set -a && source /srv/funkwhale/.env && set +a
envsubst "`env | awk -F = '{printf \" $%s\", $$1}'`" \
< /etc/nginx/sites-available/funkwhale.template \
> /etc/nginx/sites-available/funkwhale.conf
ln -s /etc/nginx/sites-available/funkwhale.conf /etc/nginx/sites-enabled/
On non-docker deployments, run the following commands:
.. parsed-literal::
export FUNKWHALE_VERSION="|version|"
# download the needed files
curl -L -o /etc/nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale_proxy.conf"
curl -L -o /etc/nginx/sites-available/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/nginx.template"
.. code-block:: shell
# create a final nginx configuration using the template based on your environment
set -a && source /srv/funkwhale/config/.env && set +a
envsubst "`env | awk -F = '{printf \" $%s\", $$1}'`" \
< /etc/nginx/sites-available/funkwhale.template \
> /etc/nginx/sites-available/funkwhale.conf
ln -s /etc/nginx/sites-available/funkwhale.conf /etc/nginx/sites-enabled/
.. note::
The resulting file should not contain any variables such as ``${FUNKWHALE_HOSTNAME}``.
You can check that using this command::
grep '${' /etc/nginx/sites-available/funkwhale.conf
Finally, enable the resulting configuration:
.. code-block:: bash
ln -s /etc/nginx/sites-available/funkwhale.conf /etc/nginx/sites-enabled/
.. warning::
If you plan to use in-place import, ensure the alias value
in the ``_protected/music`` location matches your MUSIC_DIRECTORY_SERVE_PATH
env var.
Finally, check that the configuration is valid with ``nginx -t`` then reload your nginx server with ``sudo systemctl reload nginx``.
.. note::
Music (and other static) files are never served by the app itself, but by the reverse
proxy. This is needed because a webserver is way more efficient at serving
files than a Python process.
However, we do want to ensure users have the right to access music files, and
it can't be done at the proxy's level. To tackle this issue, `we use
nginx's internal directive <http://nginx.org/en/docs/http/ngx_http_core_module.html#internal>`_.
When the API receives a request on its music serving endpoint, it will check
that the user making the request can access the file. Then, it will return an empty
response with a ``X-Accel-Redirect`` header. This header will contain the path
to the file to serve to the user, and will be picked by nginx, but never sent
back to the client.
Using this technique, we can ensure music files are covered by the authentication
and permission policy of your instance, while remaining as performant
as possible.
Apache2
^^^^^^^
.. note::
These instructions are for Debian only.
For Arch Linux please refer to the `Arch Linux wiki <https://wiki.archlinux.org/index.php/Apache>`_.
Ensure you have a recent version of Apache2 installed on your server.
You'll also need the following dependencies::
sudo apt-get install libapache2-mod-xsendfile
Add the following to your ``.env`` file::
REVERSE_PROXY_TYPE=apache2
Then restart Funkwhale.
This is needed to ensure Funkwhale provides proper headers for media file serving.
Then, download our sample virtualhost file:
.. parsed-literal::
curl -L -o /etc/apache2/sites-available/funkwhale.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/apache.conf"
ln -s /etc/apache2/sites-available/funkwhale.conf /etc/apache2/sites-enabled/
Tweak the configuration file according to your setup,
especially the TLS configuration.
Otherwise, defaults should work if you followed the installation guide.
Check the configuration with ``apache2ctl configtest``
and once you're done,
load the new configuration with ``service apache2 restart``.
Caddy
^^^^^
We currently do not support a Caddy-only setup, but you can
`help develop it <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/1384>`_!
To employ Caddy as a reverse proxy in front of your docker containers
(either mono- or multi-container setup),
use the following Caddyfile configuration:
Caddy v2::
yourdomain.funkwhale
reverse_proxy 127.0.0.1:5000
Caddy v1::
yourdomain.funkwhale {
proxy / 127.0.0.1:5000 {
transparent
websocket
header_upstream X-Forwarded-Host {host}:{server_port}
}
}
HTTPS configuration
^^^^^^^^^^^^^^^^^^^
After configuring the reverse proxy,
you need a SSL certificate to enable HTTPS on your server
(unless you use Caddy, which handles them automatically).
The default reverse proxy configuration assumes you have those available at ``/etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/``, which
is the path used by `certbot <https://certbot.eff.org/docs/>`_ when generating certificates with Let's Encrypt.
If you already have a certificate you would like to use, simply update the reverse proxy configuration
and replace the following values with the proper paths:
- For nginx: ``ssl_certificate`` and ``ssl_certificate_key``;
- For Apache2: ``SSLCertificateFile`` and ``SSLCertificateKeyFile``.
If you don't have one, comment or remove the lines starting with ``ssl_certificate`` and ``ssl_certificate_key`` for nginx, and ``SSLCertificateFile`` and ``SSLCertificateKeyFile`` for Apache2. You can then proceed to generate
a certificate, as shown below. These instructions are provided by `certbot <https://certbot.eff.org/instructions>`:
.. code-block:: shell
# install certbot
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
# if you are using nginx: generate the certificate
sudo certbot --nginx -d yourfunkwhale.domain
# if you are using Apache2: generate the certificate
sudo certbot --apache -d yourfunkwhale.domain
This creates a valid certificate and edit the nginx or Apache2 configuration to use the new certificate. The certificate will be automatically renewed when they expire.

Wyświetl plik

@ -1,75 +0,0 @@
Running Funkwhale on non amd64 architectures
============================================
Funkwhale should be runnable on any architecture assuming Funkwhale installation dependencies are satisfied.
On non-docker deployments (e.g. when deploying on debian), this should be completely transparent.
On docker deployments, you will need to build Funkwhale's image yourself, because we don't provide
pre-built multi-arch images on the Docker Hub yet. The build process itself only requires git,
Docker and is described below.
Building the mono-process Docker image (funkwhale/funkwhale)
-------------------------------------------------------------
This image is intended to be used in conjunction with our :ref:`Multi-container installation guide <docker-multi-container>`.
.. parsed-literal::
export FUNKWHALE_VERSION="|version|"
.. note::
Replace by develop for building a development branch image.
.. code-block:: shell
cd /tmp
git clone https://dev.funkwhale.audio/funkwhale/funkwhale.git
cd funkwhale
git checkout $FUNKWHALE_VERSION
cd api
# download the pre-built front-end files
frontend_artifacts="https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/artifacts/$FUNKWHALE_VERSION/download?job=build_front"
curl -L -o front.zip $frontend_artifacts
unzip front.zip
cp -r front/dist frontend
docker build -t funkwhale/funkwhale:$FUNKWHALE_VERSION .
Building the mono-container Docker image (funkwhale/all-in-one)
---------------------------------------------------------------
.. warning::
The All-In-One-Container or Mono-Container installation is deprecated, don't use it for new installations.
For more information, visit our blog: https://blog.funkwhale.audio/deprecation-all-in-one-container.html
This image is intended to be used in conjunction with our :ref:`Mono-container installation guide <docker-mono-container>`.
guide.
.. parsed-literal::
export FUNKWHALE_VERSION="|version|"
.. note::
Replace by develop for building a development branch image.
.. code-block:: shell
cd /tmp
git clone https://github.com/thetarkus/docker-funkwhale.git
cd docker-funkwhale
# download the pre-built front-end files
# download Funkwhale front and api artifacts and nginx configuration
./scripts/download-artifact.sh src/ $FUNKWHALE_VERSION build_front
./scripts/download-artifact.sh src/ $FUNKWHALE_VERSION build_api
./scripts/download-nginx-template.sh src/ $FUNKWHALE_VERSION
docker build --build-arg=arch=$(uname -m) -t funkwhale/all-in-one:$FUNKWHALE_VERSION .

Wyświetl plik

@ -1,390 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/0.17.rst:2
msgid "About Funkwhale 0.17"
msgstr ""
#: ../../admin/0.17.rst:4
msgid "Funkwhale 0.17 is a special version, which contains a lot of breaking changes."
msgstr ""
#: ../../admin/0.17.rst:6
msgid "Before doing the upgrade, please read this document carefully."
msgstr ""
#: ../../admin/0.17.rst:10
msgid "Overview of the changes"
msgstr ""
#: ../../admin/0.17.rst:15
msgid "The what and why are described more thoroughly in this page: https://dev.funkwhale.audio/funkwhale/funkwhale/merge_requests/368"
msgstr ""
#: ../../admin/0.17.rst:17
msgid "To sum it up, this release big completely changes the way audio content is managed in Funkwhale. As you may guess, this has a huge impact on the whole project, because audio is at the core of Funkwhale."
msgstr ""
#: ../../admin/0.17.rst:21
msgid "Here is a side by side comparison of earlier versions and this release to help you understand the scale of the changes:"
msgstr ""
#: ../../admin/0.17.rst:25
msgid "Before"
msgstr ""
#: ../../admin/0.17.rst:25
msgid "After"
msgstr ""
#: ../../admin/0.17.rst:25
msgid "Reason"
msgstr ""
#: ../../admin/0.17.rst:27
msgid "There is one big audio library, managed at the instance level"
msgstr ""
#: ../../admin/0.17.rst:27
msgid "Each user can have their own libraries (either public, private or shared at the instance level)"
msgstr ""
#: ../../admin/0.17.rst:27
msgid "Managing the library at instance was cumbersome and dangerous: sharing an instance library over federation would quickly pose copyright issues, as well as opening public instances. It also made it impossible to only share a subset of the music."
msgstr ""
#: ../../admin/0.17.rst:29
msgid "Users needed a specific permissions from instance owners to upload audio content"
msgstr ""
#: ../../admin/0.17.rst:29
msgid "Users can upload music to their own libraries without any specific permissions"
msgstr ""
#: ../../admin/0.17.rst:29
msgid "This change makes it easier for new users to start using Funkwhale, and for creators to share their content on the network."
msgstr ""
#: ../../admin/0.17.rst:31
msgid "Users with permissions can upload as much content as they want in the instance library"
msgstr ""
#: ../../admin/0.17.rst:31
msgid "Users have a storage quota and cannot exceed that storage"
msgstr ""
#: ../../admin/0.17.rst:31
msgid "This change gives visibiliy to instance owners about their resource usage. If you host 100 users with a 1Gb quota, you know that your Funkwhale instance will not store more than 100Gb of music files."
msgstr ""
#: ../../admin/0.17.rst:33
msgid "N/A"
msgstr ""
#: ../../admin/0.17.rst:33
msgid "Users can upload private content or share content with only specific users"
msgstr ""
#: ../../admin/0.17.rst:33
msgid "This is a new feature, and we think it will enable users to upload their own music libraries to their instance, without breaking the law or putting their admins in trouble, since their media will remain private."
msgstr ""
#: ../../admin/0.17.rst:35
msgid "Youtube Import"
msgstr ""
#: ../../admin/0.17.rst:35
#: ../../admin/0.17.rst:37
msgid "This feature is removed"
msgstr ""
#: ../../admin/0.17.rst:35
msgid "This feature posed copyright issues and impacted the credibility of the project, so we removed it."
msgstr ""
#: ../../admin/0.17.rst:37
msgid "Music requests"
msgstr ""
#: ../../admin/0.17.rst:37
msgid "Since all users can now upload content without specific permissions, we think this feature is less-likely to be useful in its current state."
msgstr ""
#: ../../admin/0.17.rst:41
msgid "From a shared, instance-wide library to users libraries"
msgstr ""
#: ../../admin/0.17.rst:43
msgid "As you can see, there is a big switch: in earlier versions, each instance had one big library, that was available to all its users. This model don't scale well (especially if you put federation on top of that), because it's an all-or-nothing choice if you want to share it."
msgstr ""
#: ../../admin/0.17.rst:47
msgid "Starting from version 0.17, each user will be able to create personal libraries and upload content in those, up to a configurable quota."
msgstr ""
#: ../../admin/0.17.rst:50
msgid "Those libraries can have one of the following visibility level:"
msgstr ""
#: ../../admin/0.17.rst:52
msgid "**Private**: only the owner of the library can access its content"
msgstr ""
#: ../../admin/0.17.rst:53
msgid "**Instance**: users from the same instance can access the library content"
msgstr ""
#: ../../admin/0.17.rst:54
msgid "**Public**: everyone (including other instances) can access the library content"
msgstr ""
#: ../../admin/0.17.rst:56
msgid "Regardless of this visibility level, library owners can also share them manually with other users, both from the same instance or from the federation."
msgstr ""
#: ../../admin/0.17.rst:59
msgid "We think this change will have a really positive impact:"
msgstr ""
#: ../../admin/0.17.rst:61
msgid "Admins should be more inclined to open their instance to strangers, because copyrighted media can be upload and shared privately"
msgstr ""
#: ../../admin/0.17.rst:63
msgid "Creators should have a better experience when joining the network, because they can now upload their own content and share it over the federation without any admin intervention"
msgstr ""
#: ../../admin/0.17.rst:65
msgid "The federation should grow faster, because user libraries can contain copyrighted content and be shared, without putting the admins at risk"
msgstr ""
#: ../../admin/0.17.rst:69
msgid "Accessing music"
msgstr ""
#: ../../admin/0.17.rst:71
msgid "From an end-user perspective, you will be able to browse any artist or album or track that is known by your instance, but you'll only be able to listen to content that match one of those criteria:"
msgstr ""
#: ../../admin/0.17.rst:75
msgid "The content is available is one of your libraries"
msgstr ""
#: ../../admin/0.17.rst:76
msgid "The content is available in a public library"
msgstr ""
#: ../../admin/0.17.rst:77
msgid "The content is available in one library from your instance that has a visibility level set to \"instance\""
msgstr ""
#: ../../admin/0.17.rst:78
msgid "The content is available in one of the libraries you follow"
msgstr ""
#: ../../admin/0.17.rst:80
msgid "Following someone else's library is a four step process:"
msgstr ""
#: ../../admin/0.17.rst:82
msgid "Get the library link from its owner"
msgstr ""
#: ../../admin/0.17.rst:83
msgid "Use this link on your instance to follow the library"
msgstr ""
#: ../../admin/0.17.rst:84
msgid "Wait until your follow request is approved by the library owner"
msgstr ""
#: ../../admin/0.17.rst:85
msgid "If this library is unknown on your instance, it will be scanned to import its content, which may take a few minutes"
msgstr ""
#: ../../admin/0.17.rst:87
msgid "Libraries owner can revoke follows at any time, which will effectively prevent the ancient follower from accessing the library content."
msgstr ""
#: ../../admin/0.17.rst:91
msgid "A brand new federation"
msgstr ""
#: ../../admin/0.17.rst:93
msgid "This is more \"under the hood\" work, but the whole federation/ActivityPub logic was rewritten for this release. This new implementation is more spec compliant and should scale better."
msgstr ""
#: ../../admin/0.17.rst:97
msgid "The following activities are propagated over federation:"
msgstr ""
#: ../../admin/0.17.rst:99
msgid "Library follow creation, accept and reject"
msgstr ""
#: ../../admin/0.17.rst:100
msgid "Audio creation and deletion"
msgstr ""
#: ../../admin/0.17.rst:101
msgid "Library deletion"
msgstr ""
#: ../../admin/0.17.rst:104
msgid "A better import UI"
msgstr ""
#: ../../admin/0.17.rst:106
msgid "This version includes a completely new import UI which should make file uploading less annoying. In particular, the UI updates in real-time and has a better error reporting."
msgstr ""
#: ../../admin/0.17.rst:111
msgid "A better import engine"
msgstr ""
#: ../../admin/0.17.rst:113
msgid "Funkwhale is known for its quircks during music import. Missing covers, split albums, bad management of tracks with multiple artists, missing data for files imported over federation, bad performance, discrepancies between the user-provided tags and what is actually stored in the database..."
msgstr ""
#: ../../admin/0.17.rst:118
msgid "This should be greatly improved now, as the whole import logic was rewritten from scratch."
msgstr ""
#: ../../admin/0.17.rst:121
msgid "Import is done completely offline and no longer calls the MusicBrainz API, except to retrieve covers if those are not embedded in the imported files. MusicBrainz references are still stored in the database, but we rely solely on the tags from the audio file now."
msgstr ""
#: ../../admin/0.17.rst:126
msgid "This has two positive consequences:"
msgstr ""
#: ../../admin/0.17.rst:128
msgid "Improved performance for both small and big imports (possibly by a factor of 10)"
msgstr ""
#: ../../admin/0.17.rst:129
msgid "More reliable import result: if your file is tagged in a specific way, we will only use tags for the import."
msgstr ""
#: ../../admin/0.17.rst:132
msgid "Imports from federation, command-line and UI/API all use the same code, which should greatly reduce the bugs/discrepencies."
msgstr ""
#: ../../admin/0.17.rst:135
msgid "Finally, the import engine now understands the difference between a track artist and an album artist, which should put an end to the album splitting issues for tracks that had a different artist than the album artist."
msgstr ""
#: ../../admin/0.17.rst:140
msgid "What will break"
msgstr ""
#: ../../admin/0.17.rst:142
msgid "If you've read until here, you can probably understand that all of these changes comes at a cost: version 0.17 contains breaking changes, removed features and other changes."
msgstr ""
#: ../../admin/0.17.rst:146
msgid "The following features were removed:"
msgstr ""
#: ../../admin/0.17.rst:148
msgid "YouTube imports: for copyright reasons, keeping this in the core was not possible"
msgstr ""
#: ../../admin/0.17.rst:149
msgid "Music requests: those are now less useful since anyone can upload content"
msgstr ""
#: ../../admin/0.17.rst:151
msgid "Also, the current federation will break, as it's absolutely not compatible with what we've built in version 0.17, and maintaining compatibility was simply not possible."
msgstr ""
#: ../../admin/0.17.rst:154
msgid "Apart from that, other features should work the same way as they did before."
msgstr ""
#: ../../admin/0.17.rst:157
msgid "Migration path"
msgstr ""
#: ../../admin/0.17.rst:161
msgid "This migration is huge. Do a backup. Please. The database, and the music files. Please."
msgstr ""
#: ../../admin/0.17.rst:164
msgid "I'm not kidding."
msgstr ""
#: ../../admin/0.17.rst:167
msgid "Migration will be similar to previous ones, with an additional script to run that will take care of updating existing rows in the database. Especially, this script will be responsible to create a library for each registered user, and to bind content imported by each one to this library."
msgstr ""
#: ../../admin/0.17.rst:172
msgid "Libraries created this way will have a different visibility level depending of your instance configuration:"
msgstr ""
#: ../../admin/0.17.rst:174
msgid "If your instance requires authentication to access the API / listen to music, libraries will be marked with \"instance\" visibility. As a result, all users from the instance will still be able to listen to all the music of the instance after the migration"
msgstr ""
#: ../../admin/0.17.rst:177
msgid "If your instance does not require authentication to access the API / listen to music, libraries will be completely public, allowing anyone to access the content (including federation)"
msgstr ""
#: ../../admin/0.17.rst:180
msgid "This script will also contain other database-related operations, but the impact will remain invisible."
msgstr ""
#: ../../admin/0.17.rst:185
msgid "Upgrade instructions"
msgstr ""
#: ../../admin/0.17.rst:187
msgid "Follow instructions from https://docs.funkwhale.audio/upgrading/index.html, then run the migrations script."
msgstr ""
#: ../../admin/0.17.rst:190
msgid "On docker-setups::"
msgstr ""
#: ../../admin/0.17.rst:196
msgid "On non docker-setups::"
msgstr ""
#: ../../admin/0.17.rst:202
msgid "If the scripts complete without errors, your instance should be updated and ready to use :)"
msgstr ""
#: ../../admin/0.17.rst:206
msgid "If you use nginx, ensure your funkwhale_proxy.conf file does not contain this:"
msgstr ""
#: ../../admin/0.17.rst:208
msgid "proxy_set_header X-Forwarded-Host $host:$server_port;"
msgstr ""
#: ../../admin/0.17.rst:210
msgid "If you have this line present, replace it with:"
msgstr ""
#: ../../admin/0.17.rst:212
msgid "proxy_set_header X-Forwarded-Host $host;"
msgstr ""
#: ../../admin/0.17.rst:214
msgid "And reload your nginx server."
msgstr ""

Wyświetl plik

@ -1,84 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/backup.rst:2
msgid "Backup your Funkwhale instance"
msgstr ""
#: ../../admin/backup.rst:6
msgid "Before upgrading your instance, we strongly advise you to make at least a database backup. Ideally, you should make a full backup, including the database and the media files."
msgstr ""
#: ../../admin/backup.rst:10
msgid "Docker setup"
msgstr ""
#: ../../admin/backup.rst:12
msgid "If you've followed the setup instructions in :doc:`../installation/docker`, here is the backup path:"
msgstr ""
#: ../../admin/backup.rst:15
msgid "Multi-container installation"
msgstr ""
#: ../../admin/backup.rst:18
#: ../../admin/backup.rst:51
msgid "Backup the database"
msgstr ""
#: ../../admin/backup.rst:20
msgid "On docker setups, you have to ``pg_dumpall`` in container ``funkwhale_postgres_1``:"
msgstr ""
#: ../../admin/backup.rst:27
#: ../../admin/backup.rst:60
msgid "Backup the media files"
msgstr ""
#: ../../admin/backup.rst:29
msgid "To backup docker data volumes, as the volumes are bound mounted to the host, the ``rsync`` way would go like this:"
msgstr ""
#: ../../admin/backup.rst:38
#: ../../admin/backup.rst:70
msgid "Backup the configuration files"
msgstr ""
#: ../../admin/backup.rst:40
msgid "On docker setups, the configuration file is located at the root level:"
msgstr ""
#: ../../admin/backup.rst:48
msgid "Non-docker setup"
msgstr ""
#: ../../admin/backup.rst:53
msgid "On non-docker setups, you have to ``pg_dump`` as user ``postgres``:"
msgstr ""
#: ../../admin/backup.rst:62
msgid "A simple way to backup your media files is to use ``rsync``:"
msgstr ""
#: ../../admin/backup.rst:77
msgid "You may also want to backup your proxy configuration file."
msgstr ""
#: ../../admin/backup.rst:79
msgid "For frequent backups, you may want to use deduplication and compression to keep the backup size low. In this case, a tool like ``borg`` will be more appropriate."
msgstr ""

Wyświetl plik

@ -1,150 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/commands.rst:2
msgid "Management commands"
msgstr ""
#: ../../admin/commands.rst:5
msgid "User management"
msgstr ""
#: ../../admin/commands.rst:7
msgid "It's possible to create, remove and update users directly from the command line."
msgstr ""
#: ../../admin/commands.rst:9
msgid "This feature is useful if you want to experiment, automate or perform batch actions that would be too repetitive through the web UI."
msgstr ""
#: ../../admin/commands.rst:12
msgid "All users-related commands are available under the ``python manage.py fw users`` namespace:"
msgstr ""
#: ../../admin/commands.rst:21
msgid "Creation"
msgstr ""
#: ../../admin/commands.rst:38
msgid "Additional options are available to further configure the user during creation, such as setting permissions or user quota. Please refer to the command help."
msgstr ""
#: ../../admin/commands.rst:43
msgid "Update"
msgstr ""
#: ../../admin/commands.rst:73
msgid "Deletion"
msgstr ""
#: ../../admin/commands.rst:93
msgid "Pruning library"
msgstr ""
#: ../../admin/commands.rst:95
msgid "Because Funkwhale is a multi-user and federated audio server, we don't delete any artist, album and track objects in the database when you delete the corresponding files."
msgstr ""
#: ../../admin/commands.rst:98
msgid "This is on purpose, because those objects may be referenced in user playlists, favorites, listening history or on other instances, or other users could have upload files matching linked to those entities in their own private libraries."
msgstr ""
#: ../../admin/commands.rst:102
msgid "Therefore, Funkwhale has a really conservative approach and doesn't delete metadata when audio files are deleted."
msgstr ""
#: ../../admin/commands.rst:105
msgid "This behaviour can be problematic in some situations though, e.g. if you imported a lot of wrongly tagged files, then deleted the files to reimport them later."
msgstr ""
#: ../../admin/commands.rst:108
msgid "To help with that, we provide a management you can run on the server and that will effectively prune you library from track, album and artist metadata that is not tied to any file:"
msgstr ""
#: ../../admin/commands.rst:128
msgid "The ``prune_library`` command will not delete anything by default, and only gives you an estimate of how many database objects would be affected by the pruning."
msgstr ""
#: ../../admin/commands.rst:131
msgid "Once you have reviewed the output and are comfortable with the changes, you should rerun the command with the ``--no-dry-run`` flag to disable dry run mode and actually apply the changes on the database."
msgstr ""
#: ../../admin/commands.rst:137
#: ../../admin/commands.rst:169
msgid "Running this command with ``--no-dry-run`` is irreversible. Unless you have a backup, there will be no way to retrieve the deleted data."
msgstr ""
#: ../../admin/commands.rst:142
msgid "The command will exclude tracks that are favorited, included in playlists or listening history by default. If you want to include those in the pruning process as well, add the corresponding ``--ignore-favorites``, ``--ignore-playlists`` and ``--ignore-listenings`` flags."
msgstr ""
#: ../../admin/commands.rst:148
msgid "Remove obsolete files from database"
msgstr ""
#: ../../admin/commands.rst:150
msgid "When importing using the :ref:`in-place method <in-place-import>`, if you move or remove in-place imported files on disk, Funkwhale will still have a reference to those files and won't be able to serve them properly."
msgstr ""
#: ../../admin/commands.rst:154
msgid "To help with that, whenever you remove or move files that were previously imported with the ``--in-place`` flag, you can run the following command::"
msgstr ""
#: ../../admin/commands.rst:159
msgid "This command will loop through all the database objects that reference an in-place imported file, check that the file is accessible on disk, or delete the database object if it's not."
msgstr ""
#: ../../admin/commands.rst:163
msgid "Once you have reviewed the output and are comfortable with the changes, you should rerun the command with the ``--no-dry-run`` flag to disable dry run mode and actually delete the database objects."
msgstr ""
#: ../../admin/commands.rst:173
msgid "Adding tags from tracks"
msgstr ""
#: ../../admin/commands.rst:175
msgid "By default, genre tags found imported files are associated with the corresponding track."
msgstr ""
#: ../../admin/commands.rst:177
msgid "While you can always associate genre information with an artist or album through the web UI, it may be tedious to do so by hand for a large number of objects."
msgstr ""
#: ../../admin/commands.rst:180
msgid "We offer a command you can run after an import to do this for you. It will:"
msgstr ""
#: ../../admin/commands.rst:182
msgid "Find all local artists or albums with no tags"
msgstr ""
#: ../../admin/commands.rst:183
msgid "Get all the tags associated with the corresponding tracks"
msgstr ""
#: ../../admin/commands.rst:184
msgid "Associate tags that are found on all tracks to the corresponding artist or album"
msgstr ""
#: ../../admin/commands.rst:186
msgid "..note::"
msgstr ""
#: ../../admin/commands.rst:190
msgid "Usage:"
msgstr ""

Wyświetl plik

@ -1,706 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/configuration.rst:2
msgid "Instance configuration"
msgstr ""
#: ../../admin/configuration.rst:4
msgid "General configuration is achieved using two type of settings:"
msgstr ""
#: ../../admin/configuration.rst:6
msgid ":ref:`environment variables <environment-variables>` and"
msgstr ""
#: ../../admin/configuration.rst:7
msgid ":ref:`instance settings <instance-settings>`."
msgstr ""
#: ../../admin/configuration.rst:12
msgid "Environment variables"
msgstr ""
#: ../../admin/configuration.rst:14
msgid "Those are located in your ``.env`` file, which you should have created during installation. A full list of available variables is given :ref:`below <environment-variables>`."
msgstr ""
#: ../../admin/configuration.rst:17
msgid "Options from this file are heavily commented, and usually target lower level and technical aspects of your instance, such as database credentials."
msgstr ""
#: ../../admin/configuration.rst:22
msgid "You should restart all Funkwhale processes when you change the values on environment variables::"
msgstr ""
#: ../../admin/configuration.rst:30
msgid "Some characters are unsafe to use in configuration variables that are URLs, such as the user and password in the database and SMTP sections. If those variables contain such characters, they must be urlencoded, for instance using the following command::"
msgstr ""
#: ../../admin/configuration.rst:37
msgid "See as well https://github.com/joke2k/django-environ#using-unsafe-characters-in-urls"
msgstr ""
#: ../../admin/configuration.rst:42
msgid "Instance settings"
msgstr ""
#: ../../admin/configuration.rst:44
msgid "These settings are stored in the database and do not require a restart of your instance after modification. They typically relate to higher level configuration, such your instance description, signup policy and so on."
msgstr ""
#: ../../admin/configuration.rst:48
msgid "You can edit those settings directly from the web application, assuming you have the required permissions. The URL is ``/manage/settings``, and you will also find a link to this page in the sidebar."
msgstr ""
#: ../../admin/configuration.rst:52
msgid "If you plan to use acoustid and external imports (e.g. with the YouTube backends), you should edit the corresponding settings in this interface."
msgstr ""
#: ../../admin/configuration.rst:58
msgid "If you have any issue with the web application, a management interface is also available for those settings from :doc:`Django's administration interface <django>`. It's less user friendly, though, and we recommend you use the web app interface whenever possible."
msgstr ""
#: ../../admin/configuration.rst:63
msgid "The URL should be ``/api/admin/dynamic_preferences/globalpreferencemodel/`` (prepend your domain in front of it, of course)."
msgstr ""
#: ../../admin/configuration.rst:67
msgid "Configuration reference"
msgstr ""
#: ../../admin/configuration.rst:70
msgid "Pod"
msgstr ""
#: ../../docstring of config.settings.common.FUNKWHALE_HOSTNAME:1
msgid "Hostname of your Funkwhale pod, e.g. ``mypod.audio``"
msgstr ""
#: ../../docstring of config.settings.common.FUNKWHALE_PROTOCOL:1
msgid "Protocol end users will use to access your pod, either ``http`` or ``https``."
msgstr ""
#: ../../admin/configuration.rst:77
msgid "Database and redis"
msgstr ""
#: ../../docstring of config.settings.common.DATABASE_URL:1
msgid "URL to connect to the PostgreSQL database. Examples:"
msgstr ""
#: ../../docstring of config.settings.common.DATABASE_URL:3
msgid "``postgresql://funkwhale@:5432/funkwhale``"
msgstr ""
#: ../../docstring of config.settings.common.DATABASE_URL:4
msgid "``postgresql://<user>:<password>@<host>:<port>/<database>``"
msgstr ""
#: ../../docstring of config.settings.common.DATABASE_URL:5
msgid "``postgresql://funkwhale:passw0rd@localhost:5432/funkwhale_database``"
msgstr ""
#: ../../docstring of config.settings.common.DB_CONN_MAX_AGE:1
msgid "Max time, in seconds, before database connections are closed."
msgstr ""
#: ../../docstring of config.settings.common.CACHE_URL:1
msgid "URL to your redis server. Examples:"
msgstr ""
#: ../../docstring of config.settings.common.CACHE_URL:3
msgid "``redis://<host>:<port>/<database>``"
msgstr ""
#: ../../docstring of config.settings.common.CACHE_URL:4
#: ../../docstring of config.settings.common.CELERY_BROKER_URL:7
msgid "``redis://127.0.0.1:6379/0``"
msgstr ""
#: ../../docstring of config.settings.common.CACHE_URL:5
msgid "``redis://:password@localhost:6379/0``"
msgstr ""
#: ../../docstring of config.settings.common.CACHE_URL:6
msgid "for password auth (the extra semicolon is important) - ``redis:///run/redis/redis.sock?db=0`` over unix sockets"
msgstr ""
#: ../../docstring of config.settings.common.CACHE_URL:11
msgid "If you want to use Redis over unix sockets, you'll also need to update :attr:`CELERY_BROKER_URL`"
msgstr ""
#: ../../docstring of config.settings.common.CELERY_BROKER_URL:1
msgid "URL to celery's task broker. Defaults to :attr:`CACHE_URL`, so you shouldn't have to tweak this, unless you want to use a different one, or use Redis sockets to connect."
msgstr ""
#: ../../docstring of config.settings.common.CELERY_BROKER_URL:5
msgid "Exemple:"
msgstr ""
#: ../../docstring of config.settings.common.CELERY_BROKER_URL:8
msgid "``redis+socket:///run/redis/redis.sock?virtual_host=0``"
msgstr ""
#: ../../admin/configuration.rst:88
msgid "Accounts and registration"
msgstr ""
#: ../../docstring of config.settings.common.ACCOUNT_EMAIL_VERIFICATION_ENFORCE:1
msgid "Determine wether users need to verify their e-mail address before using the service. Enabling this can be useful to reduce spam or bots accounts, however, you'll need to configure a mail server so that your users can receive the verification e-mails, using :attr:`EMAIL_CONFIG`."
msgstr ""
#: ../../docstring of config.settings.common.ACCOUNT_EMAIL_VERIFICATION_ENFORCE:5
#: ../../docstring of config.settings.common.ACCOUNT_EMAIL_VERIFICATION_ENFORCE:7
msgid "Note that regardless of the setting value, superusers created through the command line will never require verification."
msgstr ""
#: ../../docstring of config.settings.common.USERS_INVITATION_EXPIRATION_DAYS:1
msgid "Expiration delay, in days, for user invitations."
msgstr ""
#: ../../docstring of config.settings.common.DISABLE_PASSWORD_VALIDATORS:1
msgid "Wether to disable password validators (length, common words, similarity with username…) used during regitration."
msgstr ""
#: ../../docstring of config.settings.common.ACCOUNT_USERNAME_BLACKLIST:1
msgid "List of usernames that will be unavailable during registration, given as a list of strings."
msgstr ""
#: ../../docstring of config.settings.common.AUTH_LDAP_ENABLED:1
msgid "Wether to enable LDAP authentication."
msgstr ""
#: ../../docstring of config.settings.common.AUTH_LDAP_ENABLED:3
msgid "See :doc:`/installation/ldap` for more information."
msgstr ""
#: ../../admin/configuration.rst:102
msgid "Media storage and serving"
msgstr ""
#: ../../docstring of config.settings.common.MEDIA_URL:1
msgid "URL where media files are served. The default value should work fine on most configurations, but could can tweak this if you are hosting media files on a separate domain, or if you host Funkwhale on a non-standard port."
msgstr ""
#: ../../docstring of config.settings.common.MEDIA_ROOT:1
msgid "Path where media files (such as album covers or audio tracks) are stored on your system. Ensure this directory actually exists."
msgstr ""
#: ../../docstring of config.settings.common.PROXY_MEDIA:1
msgid "Wether to proxy audio files through your reverse proxy. It's recommended to keep this on, as a way to enforce access control, however, if you're using S3 storage with :attr:`AWS_QUERYSTRING_AUTH`, it's safe to disable it."
msgstr ""
#: ../../docstring of config.settings.common.EXTERNAL_MEDIA_PROXY_ENABLED:1
msgid "Wether to proxy attachment files hosted on third party pods and and servers. Keeping this to true is recommended, to reduce leaking browsing information of your users, and reduce the bandwidth used on remote pods."
msgstr ""
#: ../../docstring of config.settings.common.ATTACHMENTS_UNATTACHED_PRUNE_DELAY:1
msgid "Delay in seconds before uploaded but unattached attachements are pruned from the system."
msgstr ""
#: ../../docstring of config.settings.common.REVERSE_PROXY_TYPE:1
msgid "Depending on the reverse proxy used in front of your funkwhale instance, the API will use different kind of headers to serve audio files"
msgstr ""
#: ../../docstring of config.settings.common.REVERSE_PROXY_TYPE:4
msgid "Allowed values: ``nginx``, ``apache2``"
msgstr ""
#: ../../docstring of config.settings.common.PROTECT_FILES_PATH:1
msgid "Which path will be used to process the internal redirection to the reverse proxy **DO NOT** put a slash at the end."
msgstr ""
#: ../../docstring of config.settings.common.PROTECT_FILES_PATH:4
msgid "You shouldn't have to tweak this."
msgstr ""
#: ../../admin/configuration.rst:117
msgid "Audio acquisition"
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_PATH:1
msgid "The path on your server where Funkwhale can import files using :ref:`in-place import <in-place-import>`. It must be readable by the webserver and Funkwhale api and worker processes."
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_PATH:5
msgid "On docker installations, we recommend you use the default of ``/music`` for this value. For non-docker installation, you can use any absolute path. ``/srv/funkwhale/data/music`` is a safe choice if you don't know what to use."
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_PATH:9
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_SERVE_PATH:16
msgid "This path should not include any trailing slash."
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_PATH:13
msgid "You need to adapt your :ref:`reverse proxy configuration <reverse-proxy-setup>` to serve the directory pointed by ``MUSIC_DIRECTORY_PATH`` on ``/_protected/music`` URL."
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_SERVE_PATH:1
msgid "Default: :attr:`MUSIC_DIRECTORY_PATH`"
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_SERVE_PATH:3
msgid "When using Docker, the value of :attr:`MUSIC_DIRECTORY_PATH` in your containers may differ from the real path on your host. Assuming you have the following directive in your :file:`docker-compose.yml` file::"
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_SERVE_PATH:11
msgid "Then, the value of :attr:`MUSIC_DIRECTORY_SERVE_PATH` should be ``/srv/funkwhale/data/music``. This must be readable by the webserver."
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_SERVE_PATH:14
msgid "On non-docker setup, you don't need to configure this setting."
msgstr ""
#: ../../admin/configuration.rst:123
msgid "S3 Storage"
msgstr ""
#: ../../docstring of config.settings.common.AWS_QUERYSTRING_AUTH:1
msgid "Whether to include signatures in S3 urls, as a way to enforce access-control."
msgstr ""
#: ../../docstring of config.settings.common.AWS_QUERYSTRING_AUTH:3
msgid "Defaults to the inverse of :attr:`PROXY_MEDIA`."
msgstr ""
#: ../../docstring of config.settings.common.AWS_QUERYSTRING_EXPIRE:1
msgid "Expiration delay, in seconds, of signatures generated when :attr:`AWS_QUERYSTRING_AUTH` is enabled."
msgstr ""
#: ../../docstring of config.settings.common.AWS_ACCESS_KEY_ID:1
msgid "Access-key ID for your S3 storage."
msgstr ""
#: ../../docstring of config.settings.common.AWS_SECRET_ACCESS_KEY:1
msgid "Secret access key for your S3 storage."
msgstr ""
#: ../../docstring of config.settings.common.AWS_STORAGE_BUCKET_NAME:1
msgid "Bucket name of your S3 storage."
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_CUSTOM_DOMAIN:1
msgid "Custom domain to use for your S3 storage."
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_ENDPOINT_URL:1
msgid "If you use a S3-compatible storage such as minio, set the following variable to the full URL to the storage server. Example:"
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_ENDPOINT_URL:4
msgid "``https://minio.mydomain.com``"
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_ENDPOINT_URL:5
msgid "``https://s3.wasabisys.com``"
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_REGION_NAME:1
msgid "If you are using Amazon S3 to serve media directly, you will need to specify your region name in order to access files."
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_REGION_NAME:4
#: ../../docstring of config.settings.common.THROTTLING_RATES:5
#: ../../docstring of config.settings.common.MUSICBRAINZ_HOSTNAME:4
msgid "Example:"
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_REGION_NAME:6
msgid "``eu-west-2``"
msgstr ""
#: ../../docstring of config.settings.common.AWS_LOCATION:1
msgid "An optional bucket subdirectory were you want to store the files. This is especially useful if you plan to use share the bucket with other services."
msgstr ""
#: ../../admin/configuration.rst:136
msgid "API configuration"
msgstr ""
#: ../../docstring of config.settings.common.THROTTLING_ENABLED:1
msgid "Wether to enable throttling (also known as rate-limiting). Leaving this enabled is recommended especially on public pods, to improve the quality of service."
msgstr ""
#: ../../docstring of config.settings.common.THROTTLING_RATES:1
msgid "Throttling rates for specific endpoints and features of the app. You can tweak this if you are encountering to severe rate limiting issues or, on the contrary, if you want to reduce the consumption on some endpoints."
msgstr ""
#: ../../docstring of config.settings.common.THROTTLING_RATES:7
msgid "``signup=5/d,password-reset=2/d,anonymous-reports=5/d``"
msgstr ""
#: ../../docstring of config.settings.common.ADMIN_URL:1
msgid "Path to the Django admin area."
msgstr ""
#: ../../docstring of config.settings.common.ADMIN_URL:3
msgid "Examples:"
msgstr ""
#: ../../docstring of config.settings.common.ADMIN_URL:5
msgid "``^api/admin/``"
msgstr ""
#: ../../docstring of config.settings.common.ADMIN_URL:6
msgid "``^api/mycustompath/``"
msgstr ""
#: ../../docstring of config.settings.common.EXTERNAL_REQUESTS_VERIFY_SSL:1
msgid "Wether to enforce HTTPS certificates verification when doing outgoing HTTP requests (typically with federation). Disabling this is not recommended."
msgstr ""
#: ../../docstring of config.settings.common.EXTERNAL_REQUESTS_TIMEOUT:1
msgid "Default timeout for external requests."
msgstr ""
#: ../../admin/configuration.rst:145
msgid "Federation"
msgstr ""
#: ../../docstring of config.settings.common.FEDERATION_OBJECT_FETCH_DELAY:1
msgid "Delay, in minutes, before a remote object will be automatically refetched when accessed in the UI."
msgstr ""
#: ../../docstring of config.settings.common.FEDERATION_DUPLICATE_FETCH_DELAY:1
msgid "Delay, in seconds, between two manual fetch of the same remote object."
msgstr ""
#: ../../admin/configuration.rst:151
msgid "Metadata"
msgstr ""
#: ../../docstring of config.settings.common.TAGS_MAX_BY_OBJ:1
msgid "Maximum number of tags that can be associated with an object. Extra tags will be ignored."
msgstr ""
#: ../../docstring of config.settings.common.MUSICBRAINZ_HOSTNAME:1
msgid "Use this setting to change the MusicBrainz hostname, for instance to use a mirror. The hostname can also contain a port number."
msgstr ""
#: ../../docstring of config.settings.common.MUSICBRAINZ_HOSTNAME:6
msgid "``mymusicbrainz.mirror``"
msgstr ""
#: ../../docstring of config.settings.common.MUSICBRAINZ_HOSTNAME:7
msgid "``localhost:5000``"
msgstr ""
#: ../../docstring of config.settings.common.MUSICBRAINZ_CACHE_DURATION:1
msgid "How long to cache MusicBrainz results, in seconds."
msgstr ""
#: ../../admin/configuration.rst:158
msgid "Channels and podcasts"
msgstr ""
#: ../../docstring of config.settings.common.PODCASTS_RSS_FEED_REFRESH_DELAY:1
msgid "Delay, in seconds, between two fetch of RSS feeds."
msgstr ""
#: ../../docstring of config.settings.common.PODCASTS_RSS_FEED_REFRESH_DELAY:3
msgid "Reducing this mean you'll receive new episodes faster, but will require more resources."
msgstr ""
#: ../../docstring of config.settings.common.PODCASTS_RSS_FEED_MAX_ITEMS:1
msgid "Maximum number of RSS items to load in each podcast feed."
msgstr ""
#: ../../docstring of config.settings.common.PODCASTS_THIRD_PARTY_VISIBILITY:1
msgid "By default, only people who subscribe to a podcast RSS will have access to their episodes."
msgstr ""
#: ../../docstring of config.settings.common.PODCASTS_THIRD_PARTY_VISIBILITY:4
msgid "Switch to \"instance\" or \"everyone\" to change that."
msgstr ""
#: ../../docstring of config.settings.common.PODCASTS_THIRD_PARTY_VISIBILITY:6
msgid "Changing it only affect new podcasts."
msgstr ""
#: ../../admin/configuration.rst:165
msgid "Subsonic"
msgstr ""
#: ../../docstring of config.settings.common.SUBSONIC_DEFAULT_TRANSCODING_FORMAT:1
msgid "Default format for transcoding when using Subsonic API."
msgstr ""
#: ../../admin/configuration.rst:170
msgid "Email configuration"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:1
msgid "SMTP configuration for sending e-mails. Possible values:"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:3
msgid "``EMAIL_CONFIG=consolemail://``: output e-mails to console (the default)"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:4
msgid "``EMAIL_CONFIG=dummymail://``: disable e-mail sending completely"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:6
msgid "On a production instance, you'll usually want to use an external SMTP server:"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:8
msgid "``EMAIL_CONFIG=smtp://user@:password@youremail.host:25``"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:9
msgid "``EMAIL_CONFIG=smtp+ssl://user@:password@youremail.host:465``"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:10
msgid "``EMAIL_CONFIG=smtp+tls://user@:password@youremail.host:587``"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:14
msgid "If ``user`` or ``password`` contain special characters (eg. ``noreply@youremail.host`` as ``user``), be sure to urlencode them, using for example the command: ``python3 -c 'import urllib.parse; print(urllib.parse.quote_plus (\"noreply@youremail.host\"))'`` (returns ``noreply%40youremail.host``)"
msgstr ""
#: ../../docstring of config.settings.common.DEFAULT_FROM_EMAIL:1
msgid "Name and e-mail address used to send system e-mails."
msgstr ""
#: ../../docstring of config.settings.common.DEFAULT_FROM_EMAIL:3
msgid "Default: ``Funkwhale <noreply@yourdomain>``"
msgstr ""
#: ../../docstring of config.settings.common.DEFAULT_FROM_EMAIL:7
msgid "Both the forms ``Funkwhale <noreply@yourdomain>`` and ``noreply@yourdomain`` work."
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_SUBJECT_PREFIX:1
msgid "Subject prefix for system e-mails."
msgstr ""
#: ../../admin/configuration.rst:179
msgid "Other settings"
msgstr ""
#: ../../docstring of config.settings.common.INSTANCE_SUPPORT_MESSAGE_DELAY:1
msgid "Delay after signup, in days, before the \"support your pod\" message is shown."
msgstr ""
#: ../../docstring of config.settings.common.FUNKWHALE_SUPPORT_MESSAGE_DELAY:1
msgid "Delay after signup, in days, before the \"support Funkwhale\" message is shown."
msgstr ""
#: ../../docstring of config.settings.common.MIN_DELAY_BETWEEN_DOWNLOADS_COUNT:1
msgid "Minimum required period, in seconds, for two downloads of the same track by the same IP or user to be recorded in statistics."
msgstr ""
#: ../../docstring of config.settings.common.MARKDOWN_EXTENSIONS:1
msgid "List of markdown extensions to enable."
msgstr ""
#: ../../docstring of config.settings.common.MARKDOWN_EXTENSIONS:3
msgid "See `<https://python-markdown.github.io/extensions/>`_."
msgstr ""
#: ../../docstring of config.settings.common.LINKIFIER_SUPPORTED_TLDS:1
msgid "Additional TLDs to support with our markdown linkifier."
msgstr ""
#: ../../admin/configuration.rst:188
msgid "User permissions"
msgstr ""
#: ../../admin/configuration.rst:190
msgid "Funkwhale's permission model works as follows:"
msgstr ""
#: ../../admin/configuration.rst:192
msgid "Anonymous users cannot do anything unless configured specifically;"
msgstr ""
#: ../../admin/configuration.rst:193
msgid "Logged-in users can use the application, but cannot do things that affect the whole instance;"
msgstr ""
#: ../../admin/configuration.rst:194
msgid "Superusers can do anything."
msgstr ""
#: ../../admin/configuration.rst:196
msgid "To make things more granular and allow some delegation of responsibility, superusers can grant specific permissions to specific users. Available permissions are:"
msgstr ""
#: ../../admin/configuration.rst:200
msgid "**Manage instance-level settings**: users with this permission can edit instance settings as described in :ref:`instance-settings`;"
msgstr ""
#: ../../admin/configuration.rst:202
msgid "**Manage library**: users with this permission can import new music in the instance;"
msgstr ""
#: ../../admin/configuration.rst:204
msgid "**Manage library federation**: users with this permission can ask to federate with other instances, and accept/deny federation requests from other instances."
msgstr ""
#: ../../admin/configuration.rst:207
msgid "There is no dedicated interface to manage users permissions, but superusers can login on the :doc:`Django's admin <django>` at ``/api/admin/`` and grant permissions to users at ``/api/admin/users/user/``."
msgstr ""
#: ../../admin/configuration.rst:212
msgid "Front-end settings"
msgstr ""
#: ../../admin/configuration.rst:214
msgid "We offer a basic mechanism to customize the behavior and look and feel of Funkwhale's Web UI. To use any of the options below, you will need to create a custom JSON configuration file and serve it on ``https://yourinstanceurl/settings.json``."
msgstr ""
#: ../../admin/configuration.rst:218
msgid "On typical deployments, this url returns a 404 error, which is simply ignored."
msgstr ""
#: ../../admin/configuration.rst:221
msgid "Set-up"
msgstr ""
#: ../../admin/configuration.rst:223
msgid "First, create the settings file:"
msgstr ""
#: ../../admin/configuration.rst:241
msgid "Once the ``settings.json`` file is created, you will need to serve it from your reverse proxy."
msgstr ""
#: ../../admin/configuration.rst:243
msgid "If you are using nginx, add the following snippet to your vhost configuration::"
msgstr ""
#: ../../admin/configuration.rst:249
msgid "On Apache, add the following to your vhost configuration::"
msgstr ""
#: ../../admin/configuration.rst:253
msgid "Then, reload your reverse proxy."
msgstr ""
#: ../../admin/configuration.rst:255
msgid "At this point, visiting ``https://yourinstanceurl/settings.json`` should serve the content of the settings.json file."
msgstr ""
#: ../../admin/configuration.rst:260
msgid "The settings.json file must be a valid JSON file. If you have any issue, try linting the file with a tool such as `<https://github.com/zaach/jsonlint>`_ to detect potential syntax issues."
msgstr ""
#: ../../admin/configuration.rst:265
msgid "Available configuration options"
msgstr ""
#: ../../admin/configuration.rst:267
msgid "Your :file:`settings.json` can contain the following options:"
msgstr ""
#: ../../admin/configuration.rst:270
msgid "Name"
msgstr ""
#: ../../admin/configuration.rst:270
msgid "Type"
msgstr ""
#: ../../admin/configuration.rst:270
msgid "Example value"
msgstr ""
#: ../../admin/configuration.rst:270
msgid "Description"
msgstr ""
#: ../../admin/configuration.rst:272
msgid "``additionalStylesheets``"
msgstr ""
#: ../../admin/configuration.rst:272
msgid "Array of URLs"
msgstr ""
#: ../../admin/configuration.rst:272
msgid "``[\"https://test/theme.css\"]`` (default: ``[]``)"
msgstr ""
#: ../../admin/configuration.rst:272
msgid "A list of stylesheets URL (absolute or relative) that the web UI should load. see the \"Theming\" section below for a detailed explanation"
msgstr ""
#: ../../admin/configuration.rst:277
msgid "``defaultServerUrl``"
msgstr ""
#: ../../admin/configuration.rst:277
msgid "URL"
msgstr ""
#: ../../admin/configuration.rst:277
msgid "``\"https://api.yourdomain.com\"`` (default: ``null``)"
msgstr ""
#: ../../admin/configuration.rst:277
msgid "The URL of the API server this front-end should connect with. If null, the UI will use the value of VUE_APP_INSTANCE_URL (specified during build) or fallback to the current domain"
msgstr ""
#: ../../admin/configuration.rst:283
msgid "Missing options or options with a ``null`` value in the ``settings.json`` file are ignored."
msgstr ""
#: ../../admin/configuration.rst:286
msgid "Theming"
msgstr ""
#: ../../admin/configuration.rst:288
msgid "To theme your Funkwhale instance, you need:"
msgstr ""
#: ../../admin/configuration.rst:290
msgid "A CSS file for your theme, that can be loaded by the front-end;"
msgstr ""
#: ../../admin/configuration.rst:291
msgid "To update the value of ``additionalStylesheets`` in your settings.json file to point to your CSS file URL."
msgstr ""
#: ../../admin/configuration.rst:308
msgid "The last step to make this work is to ensure your CSS file is served by the reverse proxy."
msgstr ""
#: ../../admin/configuration.rst:310
msgid "On nginx, add the following snippet to your vhost config::"
msgstr ""
#: ../../admin/configuration.rst:316
msgid "On Apache, use the following::"
msgstr ""
#: ../../admin/configuration.rst:326
msgid "Once done, reload your reverse proxy, refresh Funkwhale in your web browser, and you should see a red background."
msgstr ""
#: ../../admin/configuration.rst:331
msgid "You can reference external urls as well in ``additionalStylesheets``, simply use the full urls. Be especially careful with external urls as they may affect your users privacy."
msgstr ""
#: ../../admin/configuration.rst:337
msgid "Loading additional stylesheets and CSS rules can affect the performance and usability of your instance. If you encounter issues with the interfaces and use custom stylesheets, try to disable those to ensure the issue is not caused by your customizations."
msgstr ""

Wyświetl plik

@ -1,81 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/debugging.rst:2
msgid "Debugging Funkwhale"
msgstr ""
#: ../../admin/debugging.rst:4
msgid "In order to track down errors its useful to provide as many information as possible. Usually pasting the logs should be sufficient, but there are some tools for some deeper debugging."
msgstr ""
#: ../../admin/debugging.rst:8
msgid "Frontend Logs"
msgstr ""
#: ../../admin/debugging.rst:10
msgid "Logs and errors written by the Frontend can be accessed with Firefox. When opening the website of your Funkwhale instance, simply hit ``Ctlr + Shift + J``. Alternatively open the Firefox Menu and open the Browser Console in the developers menu."
msgstr ""
#: ../../admin/debugging.rst:14
msgid "In the opening window you can see all the output. You can copy what you want to share or repeat the failing operation to see what error occurs."
msgstr ""
#: ../../admin/debugging.rst:18
msgid "Backend Logs"
msgstr ""
#: ../../admin/debugging.rst:20
msgid "Depending on your setup you can see the logs from our API server in different ways."
msgstr ""
#: ../../admin/debugging.rst:23
msgid "Docker"
msgstr ""
#: ../../admin/debugging.rst:25
msgid "Simply run ``docker-compose logs --tail=100 api`` If you want continuous logs, add the ``f`` flag."
msgstr ""
#: ../../admin/debugging.rst:28
msgid "Quick install"
msgstr ""
#: ../../admin/debugging.rst:30
msgid "To get the logs, run ``journalctl -xn -u funkwhale-server``"
msgstr ""
#: ../../admin/debugging.rst:33
msgid "Profiling"
msgstr ""
#: ../../admin/debugging.rst:35
msgid "In order to find performance issues, its possible to run API requests with activated profiling. In order to do this, add ``funkwhale_api.common.middleware.ProfilerMiddleware`` to the environment variable ``ADDITIONAL_MIDDLEWARES_BEFORE``"
msgstr ""
#: ../../admin/debugging.rst:39
msgid "If enabled, simply add ``?prof`` to the request URL you want to profile. You should get an HTML-Report of the running request."
msgstr ""
#: ../../admin/debugging.rst:43
msgid "Memory Tracing"
msgstr ""
#: ../../admin/debugging.rst:45
msgid "Its possible to print memory traces for each API request to the API logs. In order to do this, add ``funkwhale_api.common.middleware.PymallocMiddleware`` to the environment variable ``ADDITIONAL_MODDLEWARES_BEFORE`` This adds a middleware which should not do anything by default. Tracing can be activated by setting ``PYTHONTRACEMALLOC=1`` This might has some inpact on the performance, please report how it goes. The Middleware now prints the top 25 memory allocations to the API logs."
msgstr ""

Wyświetl plik

@ -1,165 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/django.rst:2
msgid "Using the Django Administration Backend"
msgstr ""
#: ../../admin/django.rst:4
msgid "Funkwhale is being actively developed, and new features are being added to the frontend all the time. However, there are some administrative tasks that can only be undertaken in the Django Administration backend."
msgstr ""
#: ../../admin/django.rst:7
msgid "Deleting items on the backend is **not** recommended. Deletions performed on the backend are permanent. If you remove something in the backend, you will need to re-add it from scratch."
msgstr ""
#: ../../admin/django.rst:10
msgid "Accessing the Django Backend"
msgstr ""
#: ../../admin/django.rst:12
msgid "To access your instance's backend, navigate to ``https://yourdomain/api/admin``. You will be prompted to log in. By default, the login details will be those of the priviliged user created during the setup process."
msgstr ""
#: ../../admin/django.rst:15
msgid "Deleting Items"
msgstr ""
#: ../../admin/django.rst:17
msgid "By default, deleting items in the front end removes the file from the server but **does not** delete associated entities such as artists, albums, and track data, meaning that they will still be viewable but no longer playable. Items deleted in this way will also still count on the instance statistics. To remove them completely, it is necessary to remove them from the database entirely using the Django Administration backend."
msgstr ""
#: ../../admin/django.rst:20
msgid "Deleting tracks, albums, or artists will also remove them completely from any associated playlists, radios, or favorites lists. Before continuing, make sure other users on the instance are aware of the deletion(s)."
msgstr ""
#: ../../admin/django.rst:23
msgid "Deleting a Track"
msgstr ""
#: ../../admin/django.rst:25
msgid "Navigate to ``https://yourdomain/api/admin/music/track``"
msgstr ""
#: ../../admin/django.rst:26
msgid "Select the track(s) you wish to delete"
msgstr ""
#: ../../admin/django.rst:27
#: ../../admin/django.rst:35
#: ../../admin/django.rst:47
#: ../../admin/django.rst:61
msgid "In the ``Action`` dropdown menu, select \"Delete Selected Items\""
msgstr ""
#: ../../admin/django.rst:28
msgid "Click on \"Go\". You will be prompted to confirm the track's deletion"
msgstr ""
#: ../../admin/django.rst:31
msgid "Deleting an Album"
msgstr ""
#: ../../admin/django.rst:33
#: ../../admin/django.rst:69
msgid "Navigate to ``https://yourdomain/api/admin/music/album``"
msgstr ""
#: ../../admin/django.rst:34
msgid "Select the album(s) you wish to delete"
msgstr ""
#: ../../admin/django.rst:36
msgid "Click on \"Go\". You will be prompted to confirm the album's deletion"
msgstr ""
#: ../../admin/django.rst:40
msgid "Deleting an album will remove all tracks associated with the album"
msgstr ""
#: ../../admin/django.rst:43
msgid "Deleting an Artist"
msgstr ""
#: ../../admin/django.rst:45
msgid "Navigate to ``https://yourdomain/api/admin/music/artist``"
msgstr ""
#: ../../admin/django.rst:46
msgid "Select the artist(s) you wish to delete"
msgstr ""
#: ../../admin/django.rst:48
msgid "Click on \"Go\". You will be prompted to confirm the artist's deletion"
msgstr ""
#: ../../admin/django.rst:52
msgid "Deleting an artist will remove all tracks and albums associated with the artist"
msgstr ""
#: ../../admin/django.rst:55
msgid "Removing a Followed Library"
msgstr ""
#: ../../admin/django.rst:57
msgid "In Funkwhale, unfollowing a library will leave the items in place but inaccessible. To completely remove them:"
msgstr ""
#: ../../admin/django.rst:59
msgid "Navigate to ``https://yourdomain/api/admin/music/library/``"
msgstr ""
#: ../../admin/django.rst:60
msgid "Tick the box next to the library you wish to remove"
msgstr ""
#: ../../admin/django.rst:62
msgid "Click on \"Go\". You will be prompted to confirm the library's deletion"
msgstr ""
#: ../../admin/django.rst:65
msgid "Adding Missing Album Art"
msgstr ""
#: ../../admin/django.rst:67
msgid "Sometimes album art can fail to appear despite music being properly tagged. When this happens, it is possible to replace the missing art."
msgstr ""
#: ../../admin/django.rst:70
msgid "Search for and select the album in question"
msgstr ""
#: ../../admin/django.rst:71
msgid "Find the item marked \"Cover\""
msgstr ""
#: ../../admin/django.rst:72
msgid "Click \"Browse\" and select the file from your computer"
msgstr ""
#: ../../admin/django.rst:73
msgid "Click \"Save\" to confirm the changes"
msgstr ""
#: ../../admin/django.rst:75
msgid "The album art will now be present on the frontend."
msgstr ""
#: ../../admin/django.rst:79
msgid "You can also clear currently loaded album art by checking the checkbox next to the current item and selecting \"Clear\""
msgstr ""

Wyświetl plik

@ -1,161 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/external-storages.rst:2
msgid "Using external storages to store Funkwhale content"
msgstr ""
#: ../../admin/external-storages.rst:4
msgid "By default, Funkwhale will store user-uploaded and related media such as audio files, transcoded files, avatars and album covers on a server directory."
msgstr ""
#: ../../admin/external-storages.rst:7
msgid "However, for bigger instances or more complex deployment scenarios, you may want to use distributed or external storages."
msgstr ""
#: ../../admin/external-storages.rst:11
msgid "S3 and S3-compatible servers"
msgstr ""
#: ../../admin/external-storages.rst:15
msgid "This feature was released in Funkwhale 0.19 and is still considered experimental. Please let us know if you see anything unusual while using it."
msgstr ""
#: ../../admin/external-storages.rst:18
msgid "Funkwhale supports storing media files Amazon S3 and compatible implementations such as Minio or Wasabi."
msgstr ""
#: ../../admin/external-storages.rst:20
msgid "In this scenario, the content itself is stored in the S3 bucket. Non-sensitive media such as album covers or user avatars are served directly from the bucket. However, audio files are still served by the reverse proxy, to enforce proper authentication."
msgstr ""
#: ../../admin/external-storages.rst:24
msgid "To enable S3 on Funkwhale, add the following environment variables::"
msgstr ""
#: ../../admin/external-storages.rst:38
msgid "Then, edit your nginx configuration. On docker setups, the file is located at ``/srv/funkwhale/nginx/funkwhale.template``, and at ``/etc/nginx/sites-available/funkwhale.template`` on non-docker setups."
msgstr ""
#: ../../admin/external-storages.rst:41
msgid "Replace the ``location /_protected/media`` block with the following::"
msgstr ""
#: ../../admin/external-storages.rst:50
msgid "Add your S3 store URL to the ``img-src`` and ``media-src`` headers"
msgstr ""
#: ../../admin/external-storages.rst:56
msgid "Then restart Funkwhale and nginx."
msgstr ""
#: ../../admin/external-storages.rst:58
msgid "From now on, media files will be stored on the S3 bucket you configured. If you already had media files before configuring the S3 bucket, you also have to move those on the bucket by hand (which is outside the scope of this guide)."
msgstr ""
#: ../../admin/external-storages.rst:64
msgid "At the moment, we do not support S3 when using Apache as a reverse proxy."
msgstr ""
#: ../../admin/external-storages.rst:68
msgid "If you are attempting to integrate your docker deployment with an existing nginx webserver, such as the one provided by `linuxserver/swag <https://docs.linuxserver.io/images/docker-swag>`_ (formerly `linuxserver/letsencrypt <https://docs.linuxserver.io/images/docker-swag#migrating-from-the-old-linuxserver-letsencrypt-image>`_), you may run into an issue where an additional ``Content-Security-Policy`` header appears in responses from the server, without the newly included S3 URL values."
msgstr ""
#: ../../admin/external-storages.rst:74
msgid "In this case, you can suppress the extraneous ``Content-Security-Policy`` header by specifying it in a ``proxy_hide_header`` `directive <http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_hide_header>`_ in the ``location /`` block."
msgstr ""
#: ../../admin/external-storages.rst:89
msgid "Serving audio files directly from the bucket"
msgstr ""
#: ../../admin/external-storages.rst:91
msgid "Depending on your setup, you may want to serve audio files directly from the S3 bucket instead of proxying them through Funkwhale, e.g to reduce the bandwidth consumption on your server, or get better performance."
msgstr ""
#: ../../admin/external-storages.rst:95
msgid "You can achieve that by adding ``PROXY_MEDIA=false`` to your ``.env`` file."
msgstr ""
#: ../../admin/external-storages.rst:97
msgid "When receiving a request on the stream endpoint, Funkwhale will check for authentication and permissions, then issue a 302 redirect to the file URL in the bucket."
msgstr ""
#: ../../admin/external-storages.rst:100
msgid "This URL is actually be visible by the client, but contains a signature valid only for one hour, to ensure no one can reuse this URL or share it publicly to distribute unauthorized content."
msgstr ""
#: ../../admin/external-storages.rst:105
msgid "If you are using Amazon S3, you will need to set your ``AWS_S3_REGION_NAME`` in the ``.env`` file to use this feature."
msgstr ""
#: ../../admin/external-storages.rst:110
msgid "Since some Subsonic clients don't support 302 redirections, Funkwhale will ignore the ``PROXY_MEDIA`` setting and always proxy file when accessed through the Subsonic API."
msgstr ""
#: ../../admin/external-storages.rst:115
msgid "Securing your S3 bucket"
msgstr ""
#: ../../admin/external-storages.rst:117
msgid "It's important to ensure your the root of your bucket doesn't list its content, which is the default on many S3 servers. Otherwise, anyone could find out the true URLs of your audio files and bypass authentication."
msgstr ""
#: ../../admin/external-storages.rst:121
msgid "To avoid that, you can set the following policy on your bucket::"
msgstr ""
#: ../../admin/external-storages.rst:144
msgid "If you are using ``awscli``, you can store this policy in a ``/tmp/policy`` file, and apply it using the following command::"
msgstr ""
#: ../../admin/external-storages.rst:150
msgid "Troubleshooting"
msgstr ""
#: ../../admin/external-storages.rst:153
msgid "No Resolver Found"
msgstr ""
#: ../../admin/external-storages.rst:155
msgid "Depending on your setup, you may experience the following issue when trying to stream music directly from your S3-compatible store."
msgstr ""
#: ../../admin/external-storages.rst:162
msgid "This happpens when the nginx config is unable to use your server's DNS resolver. This issue is still under investigation, but in the meantime can be worked around by specifying a resolver in your ``funkwhale.template`` under the ``location ~/_protected/media/(.+)`` section."
msgstr ""
#: ../../admin/external-storages.rst:176
msgid "No Images or Media Loading"
msgstr ""
#: ../../admin/external-storages.rst:178
msgid "If you are serving media from an S3-compatible store, you may experience an issue where nothing loads in the front end. The error logs in your browser may show something like the following:"
msgstr ""
#: ../../admin/external-storages.rst:187
msgid "This happens when your S3 store isn't defined in the ``Content-Security-Policy`` headers in your Nginx files. To resolve the issue, add the base URL of your S3 store to the ``img-src`` and ``media-src`` headers and reload nginx."
msgstr ""
#: ../../admin/external-storages.rst:196
msgid "Broken Images in Audio Player On Page Reload"
msgstr ""
#: ../../admin/external-storages.rst:198
msgid "If you are serving media directly from an S3-compatible store, you may find that images in the queue and the player won't load after the page is refreshed. This happens if the generated URL has expired and the authorization is no longer valid. You can extend the expiry time using the following setting in your ``.env`` file:"
msgstr ""

Wyświetl plik

@ -1,273 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/importing-music.rst:2
msgid "Importing music from the server"
msgstr ""
#: ../../admin/importing-music.rst:4
msgid "Funkwhale can import music files saved on the server assuming they are readable by the Funkwhale application. Your music files should contain at least ``artist``, ``album`` and ``title`` tags, but we recommend you tag extensively using a proper tool, such as Beets or Musicbrainz Picard."
msgstr ""
#: ../../admin/importing-music.rst:11
msgid "Funkwhale supports two different import modes:"
msgstr ""
#: ../../admin/importing-music.rst:13
msgid "copy(default): files are copied into Funkwhale's internal storage. This means importing a 1GB library will result in the same amount of space being used by Funkwhale."
msgstr ""
#: ../../admin/importing-music.rst:14
msgid ":ref:`in-place <in-place-import>` (with ``--in-place`` flag): files are referenced in Funkwhale's DB but not copied or touched in anyway. This is useful if you have a huge library, or one that is updated by an external tool such as Beets."
msgstr ""
#: ../../admin/importing-music.rst:16
msgid "Regardless of the mode you choose, follow the below steps to import music, assuming your files are located in ``/srv/funkwhale/data/music``:"
msgstr ""
#: ../../admin/importing-music.rst:27
msgid "You have to create a library in the Web UI to get your library ID. Simply visit https://yourdomain/content/libraries/ to create one."
msgstr ""
#: ../../admin/importing-music.rst:30
msgid "Library IDs are part of the library url or sharing link. For example, the library ID of https://funkwhale.instance/content/libraries/769a2ae3-eb3d-4aff-9f94-2c4d80d5c2d1, is 769a2bc3-eb1d-4aff-9f84-2c4d80d5c2d1"
msgstr ""
#: ../../admin/importing-music.rst:35
msgid "You can use only the first characters of the ID when calling the command, like that: ``export LIBRARY_ID=\"769a2bc3\"``"
msgstr ""
#: ../../admin/importing-music.rst:38
msgid "When you use docker, ``/srv/funkwhale/data/music`` is mounted from the host to the ``/music`` directory on the container:"
msgstr ""
#: ../../admin/importing-music.rst:46
msgid "When you installed Funkwhale via ansible, you need to call a script instead of Python, and the folder path must be adapted accordingly:"
msgstr ""
#: ../../admin/importing-music.rst:54
msgid "The import command supports several options, check the help for details::"
msgstr ""
#: ../../admin/importing-music.rst:61
msgid "We recommend tagging your music collection using `Picard <http://picard.musicbrainz.org/>`_ to have the best quality metadata."
msgstr ""
#: ../../admin/importing-music.rst:65
msgid "This command is idempotent, meaning you can run it multiple times on the same files and already imported files are simply skipped."
msgstr ""
#: ../../admin/importing-music.rst:71
msgid "At the moment, only Flac, OGG/Vorbis and MP3 or AIFF files with ID3 tags are supported."
msgstr ""
#: ../../admin/importing-music.rst:77
msgid "In-place import"
msgstr ""
#: ../../admin/importing-music.rst:79
msgid "By default, the CLI-importer will copy imported files to Funkwhale's internal storage. This means importing a 1GB library will result in the same amount of space being used by Funkwhale."
msgstr ""
#: ../../admin/importing-music.rst:83
msgid "While this behaviour has some benefits (easier backups and configuration), it is not always the best choice, especially if you have a huge library to import and don't want to double your disk usage."
msgstr ""
#: ../../admin/importing-music.rst:88
msgid "The CLI importer supports an additional ``--in-place`` option through which Funkwhale will store file paths rather than file content."
msgstr ""
#: ../../admin/importing-music.rst:92
msgid "Structure"
msgstr ""
#: ../../admin/importing-music.rst:94
msgid "Because imported files are not managed by Funkwhale, we offer additional configuration options to ensure the webserver can serve them properly:"
msgstr ""
#: ../../admin/importing-music.rst:98
msgid ":data:`MUSIC_DIRECTORY_PATH <config.settings.common.MUSIC_DIRECTORY_PATH>`"
msgstr ""
#: ../../admin/importing-music.rst:99
msgid ":data:`MUSIC_DIRECTORY_SERVING_PATH <config.settings.common.MUSIC_DIRECTORY_SERVE_PATH>`"
msgstr ""
#: ../../admin/importing-music.rst:101
msgid "We recommend you symlink all your music directories into ``/srv/funkwhale/data/music`` and run the `import_files` command from that directory. This will make it possible to use multiple music directories without any additional configuration on the webserver side."
msgstr ""
#: ../../admin/importing-music.rst:106
msgid "For instance, if you have an NFS share with your music mounted at ``/media/mynfsshare``, you can create a symlink like this::"
msgstr ""
#: ../../admin/importing-music.rst:112
msgid "And import music from the share::"
msgstr ""
#: ../../admin/importing-music.rst:118
msgid "Docker"
msgstr ""
#: ../../admin/importing-music.rst:120
msgid "Docker setups require a bit more work, because while the ``/srv/funkwhale/data/music`` is mounted in containers, symlinked directories are not."
msgstr ""
#: ../../admin/importing-music.rst:124
msgid "To fix that, you can use bind mounts instead of symbolic links, as they replicate the source directory tree. With the previous NFS share, use this command::"
msgstr ""
#: ../../admin/importing-music.rst:130
msgid "If you want to go with symlinks, ensure each symlinked directory is mounted as a volume as well as in your ``docker-compose.yml`` file::"
msgstr ""
#: ../../admin/importing-music.rst:149
msgid "Metadata updates"
msgstr ""
#: ../../admin/importing-music.rst:151
msgid "When doing an import with in ``in-place`` mode, the importer will also check and update existing entries found in the database. For instance, if the ID3 Title tag of an existing song was updated since the last scan, Funkwhale picks up the new title. The following fields can be updated this way:"
msgstr ""
#: ../../admin/importing-music.rst:156
msgid "Track mbid"
msgstr ""
#: ../../admin/importing-music.rst:157
msgid "Track title"
msgstr ""
#: ../../admin/importing-music.rst:158
msgid "Track position and disc number"
msgstr ""
#: ../../admin/importing-music.rst:159
msgid "Track license and copyright"
msgstr ""
#: ../../admin/importing-music.rst:160
msgid "Track genre (`from version 1.2 <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/1225>`_)"
msgstr ""
#: ../../admin/importing-music.rst:161
msgid "Album cover"
msgstr ""
#: ../../admin/importing-music.rst:162
msgid "Album title"
msgstr ""
#: ../../admin/importing-music.rst:163
msgid "Album mbid"
msgstr ""
#: ../../admin/importing-music.rst:164
msgid "Album release date"
msgstr ""
#: ../../admin/importing-music.rst:165
msgid "Artist name"
msgstr ""
#: ../../admin/importing-music.rst:166
msgid "Artist mbid"
msgstr ""
#: ../../admin/importing-music.rst:167
msgid "Album artist name"
msgstr ""
#: ../../admin/importing-music.rst:168
msgid "Album artist mbid"
msgstr ""
#: ../../admin/importing-music.rst:170
msgid "Changes in artist name can lead to multiple artists with the same name in the database, `this is a known issue <https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1318>`_ and can be remedied by adding mbids."
msgstr ""
#: ../../admin/importing-music.rst:175
msgid "React to filesystem events with ``--watch``"
msgstr ""
#: ../../admin/importing-music.rst:177
msgid "If you have a really big library or update it regularly, running the ``import_files`` command by hand may not be practical. For this use case, the ``import_files`` command supports a ``--watch`` flag through which it observes filesystem events instead of performing a full import."
msgstr ""
#: ../../admin/importing-music.rst:183
msgid "File creation, move, update and removal are handled when ``--watch`` is provided:"
msgstr ""
#: ../../admin/importing-music.rst:186
msgid "Files created in the watched directory are imported immediately"
msgstr ""
#: ../../admin/importing-music.rst:187
msgid "If using ``in-place`` mode, files updates trigger a metadata update on the corresponding entries"
msgstr ""
#: ../../admin/importing-music.rst:188
msgid "If using ``in-place`` mode, files that are moved and known by Funkwhale will see their path updated in Funkwhale's DB"
msgstr ""
#: ../../admin/importing-music.rst:189
msgid "If using ``in-place`` mode, files that are removed and known by Funkwhale will be removed from Funkwhale's DB"
msgstr ""
#: ../../admin/importing-music.rst:192
msgid "Pruning dangling metadata with ``--prune``"
msgstr ""
#: ../../admin/importing-music.rst:194
msgid "Funkwhale is, by design, conservative with music metadata in its database. If you remove a file from Funkwhale's DB, the corresponding artist, album and track object won't be deleted by default."
msgstr ""
#: ../../admin/importing-music.rst:198
msgid "If you want to prune dangling metadata from the database once the ``import_files`` command is over, simply add the ``--prune`` flag. This also works in with ``--watch``."
msgstr ""
#: ../../admin/importing-music.rst:202
msgid "Album covers"
msgstr ""
#: ../../admin/importing-music.rst:204
msgid "Whenever possible, Funkwhale obtains album covers for tracks, with the following precedence:"
msgstr ""
#: ../../admin/importing-music.rst:207
msgid "The cover embedded in the audio files themeselves, if any (Flac/MP3 only)"
msgstr ""
#: ../../admin/importing-music.rst:208
msgid "Use a cover.jpg or a cover.png file from the imported track directory, if any"
msgstr ""
#: ../../admin/importing-music.rst:209
msgid "Fetch cover art from musicbrainz, assuming the file is tagged correctly"
msgstr ""
#: ../../admin/importing-music.rst:212
msgid "Getting demo tracks"
msgstr ""
#: ../../admin/importing-music.rst:214
msgid "If you do not have any music on your server but want to test the import process, you can call the following methods to download a few albums licenced under creative commons (courtesy of Jamendo):"
msgstr ""
#: ../../admin/importing-music.rst:226
msgid "This will download a bunch of zip archives (one per album) under the ``data/music`` directory and unzip their content."
msgstr ""

Wyświetl plik

@ -1,37 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/index.rst:2
msgid "Administrator Documentation"
msgstr ""
#: ../../admin/index.rst:4
msgid "This documentation is targeted at administrators of instances. This typically refers to the person(s) responsible for running the server and managing the software on a technical level."
msgstr ""
#: ../../admin/index.rst:9
msgid "Setup Guides"
msgstr ""
#: ../../admin/index.rst:25
msgid "Administration"
msgstr ""
#: ../../admin/index.rst:37
msgid "Troubleshooting"
msgstr ""

Wyświetl plik

@ -1,113 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/ldap.rst:2
msgid "LDAP configuration"
msgstr ""
#: ../../admin/ldap.rst:4
msgid "LDAP is a protocol for providing directory services, in practice allowing a central authority for user login information."
msgstr ""
#: ../../admin/ldap.rst:6
msgid "Funkwhale supports LDAP through the Django LDAP authentication module and by setting several configuration options."
msgstr ""
#: ../../admin/ldap.rst:10
msgid "Note that LDAP-based users cannot change their password inside the app."
msgstr ""
#: ../../admin/ldap.rst:13
msgid "Dependencies"
msgstr ""
#: ../../admin/ldap.rst:15
msgid "LDAP support requires some additional dependencies to enable. On the OS level both ``libldap2-dev`` and ``libsasl2-dev`` are required, and the Python modules ``python-ldap`` and ``python-django-auth-ldap`` must be installed. These dependencies are all included in the ``requirements.*`` files so deploying with those will install these dependencies by default. However, they are not required unless LDAP support is explicitly enabled."
msgstr ""
#: ../../admin/ldap.rst:18
msgid "Environment variables"
msgstr ""
#: ../../admin/ldap.rst:20
msgid "LDAP authentication is configured entirely through the environment variables. The following options enable the LDAP features:"
msgstr ""
#: ../../admin/ldap.rst:23
msgid "Basic features"
msgstr ""
#: ../../admin/ldap.rst:25
msgid "``LDAP_ENABLED``: Set to ``True`` to enable LDAP support. Default: ``False``."
msgstr ""
#: ../../admin/ldap.rst:26
msgid "``LDAP_SERVER_URI``: LDAP URI to the authentication server, e.g. ``ldap://my.host:389``."
msgstr ""
#: ../../admin/ldap.rst:27
msgid "``LDAP_BIND_DN``: LDAP user DN to bind as to perform searches."
msgstr ""
#: ../../admin/ldap.rst:28
msgid "``LDAP_BIND_PASSWORD``: LDAP user password for bind DN."
msgstr ""
#: ../../admin/ldap.rst:29
msgid "``LDAP_SEARCH_FILTER``: The LDAP user filter, using ``{0}`` as the username placeholder, e.g. ``(|(cn={0})(mail={0}))``; uses standard LDAP search syntax. Default: ``(uid={0})``."
msgstr ""
#: ../../admin/ldap.rst:30
msgid "``LDAP_START_TLS``: Set to ``True`` to enable LDAP StartTLS support. Default: ``False``."
msgstr ""
#: ../../admin/ldap.rst:31
msgid "``LDAP_ROOT_DN``: The LDAP search root DN, e.g. ``dc=my,dc=domain,dc=com``; supports multiple entries in a space-delimited list, e.g. ``dc=users,dc=domain,dc=com dc=admins,dc=domain,dc=com``."
msgstr ""
#: ../../admin/ldap.rst:32
msgid "``LDAP_USER_ATTR_MAP``: A mapping of Django user attributes to LDAP values, e.g. ``first_name:givenName, last_name:sn, username:cn, email:mail``. Default: ``first_name:givenName, last_name:sn, username:cn, email:mail``."
msgstr ""
#: ../../admin/ldap.rst:33
msgid "``AUTH_LDAP_BIND_AS_AUTHENTICATING_USER``: Controls whether direct binding is used. Default: ``False``."
msgstr ""
#: ../../admin/ldap.rst:36
msgid "Group features"
msgstr ""
#: ../../admin/ldap.rst:38
msgid "For details on these options, see the `Django documentation <https://django-auth-ldap.readthedocs.io/en/latest/groups.html>`_. Group configuration is disabled unless an ``LDAP_GROUP_DN`` is set. This is an advanced LDAP feature and most users should not need to configure these settings."
msgstr ""
#: ../../admin/ldap.rst:40
msgid "``LDAP_GROUP_DN``: The LDAP group search root DN, e.g. ``ou=groups,dc=domain,dc=com``."
msgstr ""
#: ../../admin/ldap.rst:41
msgid "``LDAP_GROUP_FILTER``: The LDAP group filter, e.g. ``(objectClass=groupOfNames)``."
msgstr ""
#: ../../admin/ldap.rst:42
msgid "``LDAP_REQUIRE_GROUP``: A group users must be a part of to authenticate, e.g. ``cn=enabled,ou=groups,dc=domain,dc=com``."
msgstr ""
#: ../../admin/ldap.rst:43
msgid "``LDAP_DENY_GROUP``: A group users must not be a part of to authenticate, e.g. ``cn=disabled,ou=groups,dc=domain,dc=com``."
msgstr ""

Wyświetl plik

@ -1,122 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/migration.rst:2
msgid "Migrating to a New Server"
msgstr ""
#: ../../admin/migration.rst:4
msgid "Sometimes, it may be necessary or desirable to migrate your existing Funkwhale setup to a new server. This can be helpful if you need to boost resources or if you wish to use a different hosting platform."
msgstr ""
#: ../../admin/migration.rst:9
msgid "In this guide, the existing Funkwhale setup is called the origin server, and the new setup the destination server."
msgstr ""
#: ../../admin/migration.rst:12
msgid "Requirements"
msgstr ""
#: ../../admin/migration.rst:14
msgid "To get started with your new setup, you will need to have the following:"
msgstr ""
#: ../../admin/migration.rst:17
msgid "`rsync <https://linux.die.net/man/1/rsync>`_ installed on the **destination** server"
msgstr ""
#: ../../admin/migration.rst:18
msgid "SSH access set up between the two servers"
msgstr ""
#: ../../admin/migration.rst:21
msgid "Non-Docker"
msgstr ""
#: ../../admin/migration.rst:23
msgid "On the destination server, run through the :doc:`installation steps<../installation/debian>` with the exception of the following points:"
msgstr ""
#: ../../admin/migration.rst:25
msgid "Do not enable the extensions ``unaccent`` and ``citext`` when setting up the database;"
msgstr ""
#: ../../admin/migration.rst:26
msgid "Do not initialize the database by applying the migrate command;"
msgstr ""
#: ../../admin/migration.rst:27
msgid "Do not create an admin account."
msgstr ""
#: ../../admin/migration.rst:29
msgid "Stop all funkwhale related services on the destination server:"
msgstr ""
#: ../../admin/migration.rst:35
#: ../../admin/migration.rst:75
msgid "On the origin server, create a database backup:"
msgstr ""
#: ../../admin/migration.rst:41
msgid "On the destination server, use rsync to fetch the contents of ``/srv/funwkhale/data/media/music/`` and ``/srv/funkwhale/data/media/`` from the origin server, as well as the database dump and the ``.env`` file:"
msgstr ""
#: ../../admin/migration.rst:54
msgid "On the destination server, restore the database dump:"
msgstr ""
#: ../../admin/migration.rst:60
msgid "Once the database has been restored, follow the database migration steps from the non-docker installation guide to complete the installation on the destination server."
msgstr ""
#: ../../admin/migration.rst:62
msgid "Ensure that all DNS changes have been made and start the services:"
msgstr ""
#: ../../admin/migration.rst:69
msgid "Docker"
msgstr ""
#: ../../admin/migration.rst:71
msgid "On the destination server, run through the :doc:`installation steps<../installation/docker>` but skip the ``docker-compose run --rm api python manage.py migrate`` step."
msgstr ""
#: ../../admin/migration.rst:73
msgid "Stop all funkwhale related containers on the destination server."
msgstr ""
#: ../../admin/migration.rst:81
msgid "On the destination server, use rsync to fetch the contents of ``/srv/funwkhale/data/media/music`` and ``/srv/funkwhale/data/media`` from the origin server, as well as the database dump nd the ``.env`` file:"
msgstr ""
#: ../../admin/migration.rst:94
msgid "Initialize the Postgres container with the funkwhale database and its user. For easier, we create a db init dump file than we import in the postgres container:"
msgstr ""
#: ../../admin/migration.rst:105
msgid "After that, we can restore the database dump:"
msgstr ""
#: ../../admin/migration.rst:111
msgid "Once the database has been restored, run the migrations following the docker installation guide."
msgstr ""
#: ../../admin/migration.rst:113
msgid "Ensure that all DNS changes have been made and start the services."
msgstr ""

Wyświetl plik

@ -1,89 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/mrf.rst:2
msgid "Message Rewrite Facility (MRF)"
msgstr ""
#: ../../admin/mrf.rst:4
msgid "Funkwhale includes a feature that mimics `Pleroma's Message Rewrite Facility <https://docs-develop.pleroma.social/backend/configuration/mrf/>`_. Using the MRF, instance admins can write and configure custom and automated moderation rules that couldn't be implemented otherwise using :doc:`our other built-in moderation tools <../moderator/index>`."
msgstr ""
#: ../../admin/mrf.rst:9
msgid "Architecture"
msgstr ""
#: ../../admin/mrf.rst:11
msgid "The MRF is a pluggable system that will process messages and forward those to the list of registered policies, in turn. Each policy can mutate the message, leave it as is, or discard it entirely."
msgstr ""
#: ../../admin/mrf.rst:14
msgid "Some of our built-in moderation tools are actually implemented as a MRF policy, e.g:"
msgstr ""
#: ../../admin/mrf.rst:16
msgid "Allow-list, when checking incoming messages (`code <https://dev.funkwhale.audio/funkwhale/funkwhale/blob/develop/api/funkwhale_api/moderation/mrf_policies.py>`__)"
msgstr ""
#: ../../admin/mrf.rst:17
msgid "Domain and user blocking, when checking incoming messages (`code <https://dev.funkwhale.audio/funkwhale/funkwhale/blob/develop/api/funkwhale_api/federation/mrf_policies.py>`__)"
msgstr ""
#: ../../admin/mrf.rst:21
msgid "While Pleroma MRF policies can also affect outgoing messages, this is not supported yet in Funkwhale."
msgstr ""
#: ../../admin/mrf.rst:25
msgid "Disclaimer"
msgstr ""
#: ../../admin/mrf.rst:27
msgid "Writing custom MRF can impact negatively the performance and stability of your pod, as well as message delivery. Your policy will be called everytime a message is delivered, so ensure you don't execute any slow operation here."
msgstr ""
#: ../../admin/mrf.rst:31
msgid "Please note that the Funkwhale developers consider custom MRF policy modules to fall under the purview of the AGPL. As such, you are obligated to release the sources to your custom MRF policy modules upon request."
msgstr ""
#: ../../admin/mrf.rst:34
msgid "Writing your first MRF policy"
msgstr ""
#: ../../admin/mrf.rst:36
msgid "MRF Policies are written as Python 3 functions that take at least one ``payload`` parameter. This payload is the raw ActivityPub message, received via HTTP, after the HTTP signature check."
msgstr ""
#: ../../admin/mrf.rst:39
msgid "In the example below we write a policy that discards all Follow requests from listed domains:"
msgstr ""
#: ../../admin/mrf.rst:66
msgid "This code must be stored in a Funkwhale plugin. To create one, just execute the following:"
msgstr ""
#: ../../admin/mrf.rst:89
msgid "Once you have a Funkwhale plugin, simply put your MRF policy code inside a ``mrf_policies.py`` file whithin the plugin directory. Then enable the plugin in your ``.env`` by adding its name to the coma-separated list of ``FUNKWHALE_PLUGINS`` (add the variable if it's not there)."
msgstr ""
#: ../../admin/mrf.rst:95
msgid "Testing a MRF policy"
msgstr ""
#: ../../admin/mrf.rst:97
msgid "To make the job of writing and debugging MRF policies easier, we provide a management command:"
msgstr ""

Wyświetl plik

@ -1,61 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/optimization.rst:2
msgid "Optimizing your Funkwhale instance"
msgstr ""
#: ../../admin/optimization.rst:4
msgid "Depending on your requirements, you may want to reduce as much as possible Funkwhale's memory footprint."
msgstr ""
#: ../../admin/optimization.rst:8
msgid "Reduce workers concurrency"
msgstr ""
#: ../../admin/optimization.rst:10
msgid "Asynchronous tasks are handled by a celery worker, which will by default spawn a worker process per CPU available. This can lead to a higher memory usage."
msgstr ""
#: ../../admin/optimization.rst:14
msgid "You can control this behavior using the ``--concurrency`` flag. For instance, setting ``--concurrency=1`` will spawn only one worker."
msgstr ""
#: ../../admin/optimization.rst:17
msgid "This flag should be appended after the ``celery -A funkwhale_api.taskapp worker`` command in your :file:`docker-compose.yml` file if your using Docker, or in your :file:`/etc/systemd/system/funkwhale-worker.service` otherwise."
msgstr ""
#: ../../admin/optimization.rst:23
msgid "Reducing concurrency comes at a cost: asynchronous tasks will be processed more slowly. However, on small instances, this should not be an issue."
msgstr ""
#: ../../admin/optimization.rst:28
msgid "Switch from prefork to solo pool"
msgstr ""
#: ../../admin/optimization.rst:30
msgid "Using a different pool implementation for Celery tasks may also help."
msgstr ""
#: ../../admin/optimization.rst:32
msgid "Using the ``solo`` pool type should reduce your memory consumption. You can control this behavior using the ``--pool=solo`` flag."
msgstr ""
#: ../../admin/optimization.rst:35
msgid "This flag should be appended after the ``celery -A funkwhale_api.taskapp worker`` command in your :file:`docker-compose.yml` file if you're using Docker, or in your :file:`/etc/systemd/system/funkwhale-worker.service` otherwise."
msgstr ""

Wyświetl plik

@ -1,290 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/troubleshooting.rst:2
msgid "Troubleshooting"
msgstr ""
#: ../../admin/troubleshooting.rst:4
msgid "Various errors and issues can arise on your Funkwhale instance, caused by configuration errors, deployment/environment specific issues, or bugs in the software itself."
msgstr ""
#: ../../admin/troubleshooting.rst:7
msgid "On this document, you'll find:"
msgstr ""
#: ../../admin/troubleshooting.rst:9
msgid "Tools and commands you can use to better understand the issues"
msgstr ""
#: ../../admin/troubleshooting.rst:10
msgid "A list of common pitfalls and errors and how to solve them"
msgstr ""
#: ../../admin/troubleshooting.rst:11
msgid "A collection of links and advice to get help from the community and report new issues"
msgstr ""
#: ../../admin/troubleshooting.rst:14
msgid "Diagnose problems"
msgstr ""
#: ../../admin/troubleshooting.rst:16
msgid "Funkwhale is made of several components, each one being a potential cause for failure. Having an even basic overview of Funkwhale's technical architecture can help you understand what is going on. You can refer to :doc:`the technical architecture <../developers/architecture>` for that."
msgstr ""
#: ../../admin/troubleshooting.rst:19
msgid "Problems usually fall into one of those categories:"
msgstr ""
#: ../../admin/troubleshooting.rst:21
msgid "**Frontend**: Funkwhale's interface is not loading, not behaving as expected, music is not playing"
msgstr ""
#: ../../admin/troubleshooting.rst:22
msgid "**API**: the interface do not display any data or show errors"
msgstr ""
#: ../../admin/troubleshooting.rst:23
msgid "**Import**: uploaded/imported tracks are not imported correctly or at all"
msgstr ""
#: ../../admin/troubleshooting.rst:24
msgid "**Federation**: you cannot contact other Funkwhale servers, access their library, play federated tracks"
msgstr ""
#: ../../admin/troubleshooting.rst:25
msgid "**Everything else**"
msgstr ""
#: ../../admin/troubleshooting.rst:27
msgid "Each category comes with its own set of diagnose tools and/or commands we will detail below. We'll also give you simple steps for each type of problem. Please try those to see if it fix your issues. If none of those works, please report your issue on our issue tracker."
msgstr ""
#: ../../admin/troubleshooting.rst:33
msgid "To get detailed log messages, set the environment variable ``LOGLEVEL=debug``. If you are using the docker setup you can configure this in the ``.env`` file."
msgstr ""
#: ../../admin/troubleshooting.rst:37
msgid "Backend issues"
msgstr ""
#: ../../admin/troubleshooting.rst:39
#: ../../admin/troubleshooting.rst:98
#: ../../admin/troubleshooting.rst:109
msgid "Diagnostic tools:"
msgstr ""
#: ../../admin/troubleshooting.rst:42
msgid "Reverse proxy logs:"
msgstr ""
#: ../../admin/troubleshooting.rst:42
msgid "Apache logs should be available at :file:`/var/log/apache/access.log` and :file:`/var/log/apache/error.log`"
msgstr ""
#: ../../admin/troubleshooting.rst:43
msgid "Nginx logs should be available at :file:`/var/log/nginx/access.log` and :file:`/var/log/nginx/error.log`"
msgstr ""
#: ../../admin/troubleshooting.rst:46
#: ../../admin/troubleshooting.rst:112
msgid "API logs:"
msgstr ""
#: ../../admin/troubleshooting.rst:45
#: ../../admin/troubleshooting.rst:112
msgid "Docker setup: ``docker-compose logs -f --tail=50 api`` (remove the ``--tail`` flag to get the full logs)"
msgstr ""
#: ../../admin/troubleshooting.rst:46
#: ../../admin/troubleshooting.rst:113
msgid "Non-docker setup: ``journalctl -xn -u funkwhale-server``"
msgstr ""
#: ../../admin/troubleshooting.rst:50
msgid "If you edit your .env file to test a new configuration, you have to restart your services to pick up the changes:"
msgstr ""
#: ../../admin/troubleshooting.rst:52
msgid "Docker setup: ``docker-compose up -d``"
msgstr ""
#: ../../admin/troubleshooting.rst:53
msgid "Non-docker setup: ``systemctl restart funkwhale.target``"
msgstr ""
#: ../../admin/troubleshooting.rst:56
#: ../../admin/troubleshooting.rst:119
msgid "Common problems"
msgstr ""
#: ../../admin/troubleshooting.rst:59
msgid "Instance works properly, but audio files are not served (404 error)"
msgstr ""
#: ../../admin/troubleshooting.rst:61
msgid "If you're using docker, ensure the ``MEDIA_ROOT`` variable is commented in your env file"
msgstr ""
#: ../../admin/troubleshooting.rst:62
msgid "Ensure the ``_protected/media`` block points toward the path where media files are stored (``/srv/funkwhale/data/media``, by default)"
msgstr ""
#: ../../admin/troubleshooting.rst:63
msgid "If you're using in-place import, ensure :data:`MUSIC_DIRECTORY_PATH <config.settings.common.MUSIC_DIRECTORY_PATH>`, :data:`MUSIC_DIRECTORY_SERVE_PATH <config.settings.common.MUSIC_DIRECTORY_SERVE_PATH>` and :data:`REVERSE_PROXY_TYPE <config.settings.common.REVERSE_PROXY_TYPE>` are configured properly, and that the files are readable by the webserver"
msgstr ""
#: ../../admin/troubleshooting.rst:66
msgid "Weakref error when running ``python manage.py <command>``"
msgstr ""
#: ../../admin/troubleshooting.rst:68
msgid "On Python <3.6, you may see this kind of errors when running commands like ``python manage.py migrate``::"
msgstr ""
#: ../../admin/troubleshooting.rst:75
msgid "This is caused by a bug in Python (cf https://github.com/celery/celery/issues/3818), and is not affecting in any way the command you execute. You can safely ignore this error."
msgstr ""
#: ../../admin/troubleshooting.rst:79
msgid "``Your models have changes that are not yet reflected in a migration`` warning"
msgstr ""
#: ../../admin/troubleshooting.rst:81
msgid "When running ``python manage.py migrate`` (both in docker or non-docker), you may end-up with this::"
msgstr ""
#: ../../admin/troubleshooting.rst:91
msgid "This warning can be safely ignored. You should not run the suggested ``manage.py makemigrations`` command."
msgstr ""
#: ../../admin/troubleshooting.rst:94
msgid "File import issues"
msgstr ""
#: ../../admin/troubleshooting.rst:96
msgid "Unless you are using the CLI to import files, imports are send as tasks in a queue to a celery worker that will process them."
msgstr ""
#: ../../admin/troubleshooting.rst:102
#: ../../admin/troubleshooting.rst:116
msgid "Celery worker logs:"
msgstr ""
#: ../../admin/troubleshooting.rst:101
#: ../../admin/troubleshooting.rst:115
msgid "Docker setup: ``docker-compose logs -f --tail=50 celeryworker`` (remove the ``--tail`` flag to get the full logs)"
msgstr ""
#: ../../admin/troubleshooting.rst:102
#: ../../admin/troubleshooting.rst:116
msgid "Non-docker setup: ``journalctl -xn -u funkwhale-worker``"
msgstr ""
#: ../../admin/troubleshooting.rst:105
msgid "Federation issues"
msgstr ""
#: ../../admin/troubleshooting.rst:107
msgid "Received federations messages are sent to a dedicated task queue and processed asynchronously by a celery worker."
msgstr ""
#: ../../admin/troubleshooting.rst:122
msgid "I have no access to another instance library"
msgstr ""
#: ../../admin/troubleshooting.rst:124
msgid "Check if it works with the demo library (library@demo.funkwhale.audio)"
msgstr ""
#: ../../admin/troubleshooting.rst:125
msgid "Check if the remote library received your follow request and approved it"
msgstr ""
#: ../../admin/troubleshooting.rst:126
msgid "Trigger a scan via the interface"
msgstr ""
#: ../../admin/troubleshooting.rst:127
msgid "Have a look in the celery logs for potential errors during the scan"
msgstr ""
#: ../../admin/troubleshooting.rst:130
msgid "Other problems"
msgstr ""
#: ../../admin/troubleshooting.rst:132
msgid "It's a bit hard to give targeted advice about problems that do not fit in the previous categories. However, we can recommend to:"
msgstr ""
#: ../../admin/troubleshooting.rst:134
msgid "Try to identify the scope of the issue and reproduce it reliably"
msgstr ""
#: ../../admin/troubleshooting.rst:135
msgid "Ensure your instance is configured as detailed in the installation documentation, and if you did not use the default values, to check what you changed"
msgstr ""
#: ../../admin/troubleshooting.rst:137
msgid "To read the .env file carefully, as most of the options are described in the comments"
msgstr ""
#: ../../admin/troubleshooting.rst:141
msgid "Report an issue or get help"
msgstr ""
#: ../../admin/troubleshooting.rst:143
msgid "Well be more than happy to help you to debug installation and configuration issues. The main channel for receiving support about your Funkwhale installation is the `#funkwhale-troubleshooting:matrix.org <https://matrix.to/#/#funkwhale-troubleshooting:matrix.org>`_ Matrix channel."
msgstr ""
#: ../../admin/troubleshooting.rst:146
msgid "Before asking for help, we'd really appreciate if you took the time to go through this document and try to diagnose the problem yourself. But if you don't find anything relevant or don't have the time, we'll be there for you!"
msgstr ""
#: ../../admin/troubleshooting.rst:149
msgid "Here are a few recommendations on how to structure and what to include in your help requests:"
msgstr ""
#: ../../admin/troubleshooting.rst:151
msgid "Give us as much context as possible about your installation (OS, version, Docker/non-docker, reverse-proxy type, relevant logs and errors, etc.)"
msgstr ""
#: ../../admin/troubleshooting.rst:152
msgid "Including screenshots or small gifs or videos can help us considerably when debugging front-end issues"
msgstr ""
#: ../../admin/troubleshooting.rst:154
msgid "You can also open issues on our `issue tracker <https://dev.funkwhale.audio/funkwhale/funkwhale/issues>`_. Please have a quick look for similar issues before doing that, and use the issue tracker only to report bugs, suggest enhancements (both in the software and the documentation) or new features."
msgstr ""
#: ../../admin/troubleshooting.rst:159
msgid "If you ever need to share screenshots or urls with someone else, ensure those do not include your personal token. This token is binded to your account and can be used to connect and use your account."
msgstr ""
#: ../../admin/troubleshooting.rst:162
msgid "Urls that includes your token looks like: ``https://your.instance/api/v1/uploads/42/serve/?jwt=yoursecrettoken``"
msgstr ""
#: ../../admin/troubleshooting.rst:165
msgid "Improving this documentation"
msgstr ""
#: ../../admin/troubleshooting.rst:167
msgid "If you feel like something should be improved in this document (and in the documentation in general), feel free to :doc:`contribute to the documentation <../documentation/creating>`. If you're not comfortable contributing or would like to ask somebody else to do it, feel free to :doc:`request a change in documentation <../documentation/identifying>`."
msgstr ""

Wyświetl plik

@ -1,98 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/uninstall.rst:2
msgid "Uninstall Funkwhale"
msgstr ""
#: ../../admin/uninstall.rst:4
msgid "The following instructions helps you remove Funkwhale from your server, for instance after migrating to another server, or if you do not want to use Funkwhale anymore."
msgstr ""
#: ../../admin/uninstall.rst:8
msgid "The following instructions cannot be undone and might result in loss of data. If necessary, please make a backup of your server following the :doc:`backup instructions<backup>`."
msgstr ""
#: ../../admin/uninstall.rst:10
msgid "Especially, it must be noted that:"
msgstr ""
#: ../../admin/uninstall.rst:12
#: ../../admin/uninstall.rst:81
msgid "Remote content hosted on an S3 or S3-compatible server will not be removed."
msgstr ""
#: ../../admin/uninstall.rst:13
msgid "In place imports will not be removed, provided they are located outside ``/srv/funkwhale/``"
msgstr ""
#: ../../admin/uninstall.rst:17
msgid "These instructions apply only for the manual installation on Debian or Arch Linux. It matches the default setup."
msgstr ""
#: ../../admin/uninstall.rst:19
msgid "First, stop the all funkwhale related services:"
msgstr ""
#: ../../admin/uninstall.rst:25
msgid "Remove the reverse proxy configuration data and reload the reverse proxy."
msgstr ""
#: ../../admin/uninstall.rst:27
msgid "If you are using nginx:"
msgstr ""
#: ../../admin/uninstall.rst:37
msgid "If you are using Apache2:"
msgstr ""
#: ../../admin/uninstall.rst:46
msgid "Remove the systemd services:"
msgstr ""
#: ../../admin/uninstall.rst:62
msgid "Then, remove the database:"
msgstr ""
#: ../../admin/uninstall.rst:69
msgid "Finally, remove the user ``funkwhale`` and all funkwhale related data, including the server and the data:"
msgstr ""
#: ../../admin/uninstall.rst:77
msgid "The last command will remove ``/srv/funkwhale/``. On the default setup, this directory contains all user data. Please proceed cautiously!"
msgstr ""
#: ../../admin/uninstall.rst:79
msgid "However, it must be noted that:"
msgstr ""
#: ../../admin/uninstall.rst:82
msgid "In place imports will not be removed, provided they are not located in the directory ``/srv/funkwhale/``"
msgstr ""
#: ../../admin/uninstall.rst:86
msgid "If relevant, you might also want to:"
msgstr ""
#: ../../admin/uninstall.rst:88
msgid "remove the SSL certificates;"
msgstr ""
#: ../../admin/uninstall.rst:89
msgid "remove the corresponding DNS entries."
msgstr ""

Wyświetl plik

@ -1,135 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/upgrading.rst:2
msgid "Upgrading your Funkwhale instance to a newer version"
msgstr ""
#: ../../admin/upgrading.rst:6
msgid "Before upgrading your instance, we strongly advise you to make at least a database backup. Ideally, you should make a full backup, including the database and the media files."
msgstr ""
#: ../../admin/upgrading.rst:9
msgid "We're commited to make upgrade as easy and straightforward as possible, however, Funkwhale is still in development and you'll be safer with a backup."
msgstr ""
#: ../../admin/upgrading.rst:14
msgid "Reading the release notes"
msgstr ""
#: ../../admin/upgrading.rst:16
msgid "Please take a few minutes to read the :doc:`../changelog`: updates should work similarly from version to version, but some of them may require additional steps. Those steps would be described in the version release notes."
msgstr ""
#: ../../admin/upgrading.rst:22
msgid "Insights about new versions"
msgstr ""
#: ../../admin/upgrading.rst:24
msgid "Some versions may be bigger than usual, and we'll try to detail the changes when possible."
msgstr ""
#: ../../admin/upgrading.rst:34
msgid "Docker setup"
msgstr ""
#: ../../admin/upgrading.rst:36
msgid "If you've followed the setup instructions in :doc:`../installation/docker`, upgrade path is easy:"
msgstr ""
#: ../../admin/upgrading.rst:40
msgid "Mono-container installation"
msgstr ""
#: ../../admin/upgrading.rst:42
msgid "Basically, you need to pull the new container image, stop and delete your existing container, and relaunch a new one:"
msgstr ""
#: ../../admin/upgrading.rst:45
msgid "To upgrade your service, change the version number of the image in ``docker-compose.yml`` with the latest release (i.e. |version|)."
msgstr ""
#: ../../admin/upgrading.rst:47
msgid "Pull the new images:"
msgstr ""
#: ../../admin/upgrading.rst:53
msgid "Restart the service:"
msgstr ""
#: ../../admin/upgrading.rst:60
msgid "Multi-container installation"
msgstr ""
#: ../../admin/upgrading.rst:86
#: ../../admin/upgrading.rst:194
msgid "You may sometimes get the following warning while applying migrations::"
msgstr ""
#: ../../admin/upgrading.rst:90
#: ../../admin/upgrading.rst:198
msgid "This is a warning, not an error, and it can be safely ignored. Never run the ``makemigrations`` command yourself."
msgstr ""
#: ../../admin/upgrading.rst:94
msgid "Upgrading the Postgres container"
msgstr ""
#: ../../admin/upgrading.rst:96
msgid "With some Funkwhale releases, it is recommended to upgrade the version of the Postgres database server container. For example, Funkwhale 0.17 recommended Postgres 9.4, but Funkwhale 0.18 recommends Postgres 11. When upgrading Postgres, it is not sufficient to change the container referenced in ``docker-compose.yml``. New major versions of Postgres cannot read the databases created by older major versions. The data has to be exported from a running instance of the old version and imported by the new version."
msgstr ""
#: ../../admin/upgrading.rst:104
msgid "Thankfully, there is a Docker container available to automate this process. You can use the following snippet to upgrade your database in ``./postgres``, keeping a backup of the old version in ``./postgres-old``:"
msgstr ""
#: ../../admin/upgrading.rst:126
msgid "Non-docker setup"
msgstr ""
#: ../../admin/upgrading.rst:128
msgid "If you installed Funkwhale using the install script, upgrading is done using ``sh -c \"$(curl -sSL https://get.funkwhale.audio/upgrade.sh)\"``. Make sure to run this command with root permissions."
msgstr ""
#: ../../admin/upgrading.rst:130
msgid "If you manually installed Funkwhale, please use the following instructions."
msgstr ""
#: ../../admin/upgrading.rst:133
msgid "Upgrade the static files"
msgstr ""
#: ../../admin/upgrading.rst:135
msgid "On non-docker setups, the front-end app is updated separately from the API. This is as simple as downloading the zip with the static files and extracting it in the correct place."
msgstr ""
#: ../../admin/upgrading.rst:139
msgid "The following example assume your setup match :ref:`frontend-setup`."
msgstr ""
#: ../../admin/upgrading.rst:151
msgid "Upgrading the API"
msgstr ""
#: ../../admin/upgrading.rst:153
msgid "On non-docker, upgrade involves a few more commands. We assume your setup match what is described in :doc:`/installation/debian`:"
msgstr ""
#: ../../admin/upgrading.rst:187
msgid "If you see a PermissionError when running the ``migrate`` command, try running the following commands by hand, and relaunch the migrations::"
msgstr ""

Wyświetl plik

@ -1,85 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../admin/url.rst:2
msgid "Changing Your Instance URL"
msgstr ""
#: ../../admin/url.rst:6
msgid "We highly recommend not to change your instance URL. Members of the community tried to do this and documented their steps here. This guide might be incomplete or fail for your instance. There is no support for this procedure and likely no way back."
msgstr ""
#: ../../admin/url.rst:9
msgid "At some point, you may wish to change your instance URL. In order to do this, you will need to change the following:"
msgstr ""
#: ../../admin/url.rst:12
msgid "The instance URL in your .env file"
msgstr ""
#: ../../admin/url.rst:13
msgid "The instance URL in your ``/etc/nginx/sites-enabled/funkwhale.conf`` or ``/etc/apache2/sites-enabled/funkwhale.conf`` depending on your web server setup"
msgstr ""
#: ../../admin/url.rst:14
msgid "Any references to the old URL in your database"
msgstr ""
#: ../../admin/url.rst:16
msgid "The changes to the database can be achieved with the ``fix_federation_ids`` script in the ``manage.py`` file."
msgstr ""
#: ../../admin/url.rst:19
msgid "Example output:"
msgstr ""
#: ../../admin/url.rst:53
msgid "On Docker Installations"
msgstr ""
#: ../../admin/url.rst:55
msgid "If you have followed the :doc:`Docker installation instructions <../installation/docker>`, you will need to do the following:"
msgstr ""
#: ../../admin/url.rst:58
#: ../../admin/url.rst:81
msgid "Edit your .env file to change the ``FUNKWHALE_HOSTNAME`` and ``DJANGO_ALLOWED_HOSTS`` value to your new URL"
msgstr ""
#: ../../admin/url.rst:59
#: ../../admin/url.rst:82
msgid "Edit your ``/etc/nginx/sites-enabled/funkwhale.conf`` file to change the ``server_name`` values to your new URL"
msgstr ""
#: ../../admin/url.rst:60
#: ../../admin/url.rst:83
msgid "Run the following command to change all mentions of your old instance URL in the database:"
msgstr ""
#: ../../admin/url.rst:66
#: ../../admin/url.rst:89
msgid "Restart Nginx or Apache to pick up the new changes"
msgstr ""
#: ../../admin/url.rst:77
msgid "On Non-Docker Installations"
msgstr ""
#: ../../admin/url.rst:79
msgid "If you have followed the :doc:`non-docker setup <../installation/debian>`, you will need to do the following:"
msgstr ""

Wyświetl plik

@ -0,0 +1,89 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../administrator_documentation/configuration_docs/change_url.md:1
msgid "Change your instance URL"
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:4
msgid "We recommend you don't change your instance URL. Changing it __will__ cause instability and problems with federation. If you change your URL, the Funkwhale project can't offer support for problems that arise."
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:7
msgid "Your instance URL is your pod's unique identifier in the {term}`fediverse`. If you want to change it, you need to update a lot of information"
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:9
msgid "The instance URL in your {file}`.env` file."
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:10
msgid "The instance URL in your vhost."
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:11
msgid "Any references to the old URL in your database."
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:13
msgid "To clean the database, the {file}`manage.py` script contains a `fix_federation_ids` command."
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:16
msgid "Running `fix_federation_ids` with the `--no-dry-run` flag is irreversible. Make sure you [back up your data](../upgrade_docs/backup.md)."
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:19
msgid "Update your instance URL"
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:21
msgid "Change the `FUNKWHALE_HOSTNAME` and `DJANGO_ALLOWED_HOSTS` value in your {file}`.env` file."
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:22
msgid "Change the `server_name` values in your {file}`/etc/nginx/sites-enabled/funkwhale.conf` file."
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:23
msgid "Run the `fix_federation_ids` command to clean up your database."
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:0
msgid "Debian"
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:0
msgid "Docker"
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:41
msgid "Example output:"
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:67
msgid "Restart your webserver to pick up the changes."
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:0
msgid "Nginx"
msgstr ""
#: ../../administrator_documentation/configuration_docs/change_url.md:0
msgid "Apache"
msgstr ""

Wyświetl plik

@ -0,0 +1,491 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../administrator_documentation/configuration_docs/env_file.md:1
msgid "Customize your environment file"
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:3
msgid "Your `.env` (environment) file contains variables you can change to customize your pod. You can change these variables at any time to alter how your pod runs."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:5
msgid "You need to restart your Funkwhale services after changing your `.env` file."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:0
msgid "Debian"
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:0
msgid "Docker"
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:23
msgid "Variables"
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:27
msgid "Some environment variables accept a URL as a value. To encode URLs and avoid problems with special characters, use `urllib.parse` on your URL value."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:34
msgid "The [django-environ documentation](https://github.com/joke2k/django-environ/blob/main/docs/tips.rst#using-unsafe-characters-in-urls)."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:39
msgid "Pod configuration"
msgstr ""
#: ../../docstring of config.settings.common.FUNKWHALE_HOSTNAME:1
msgid "Hostname of your Funkwhale pod, e.g. ``mypod.audio``."
msgstr ""
#: ../../docstring of config.settings.common.FUNKWHALE_PROTOCOL:1
msgid "Protocol end users will use to access your pod, either ``http`` or ``https``."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:48
msgid "Database and redis configuration"
msgstr ""
#: ../../docstring of config.settings.common.DATABASE_URL:1
msgid "The URL used to connect to the PostgreSQL database. Examples:"
msgstr ""
#: ../../docstring of config.settings.common.DATABASE_URL:3
msgid "``postgresql://funkwhale@:5432/funkwhale``"
msgstr ""
#: ../../docstring of config.settings.common.DATABASE_URL:4
msgid "``postgresql://<user>:<password>@<host>:<port>/<database>``"
msgstr ""
#: ../../docstring of config.settings.common.DATABASE_URL:5
msgid "``postgresql://funkwhale:passw0rd@localhost:5432/funkwhale_database``"
msgstr ""
#: ../../docstring of config.settings.common.DB_CONN_MAX_AGE:1
msgid "The maximum time in seconds before database connections close."
msgstr ""
#: ../../docstring of config.settings.common.CACHE_URL:1
msgid "The URL of your redis server. For example:"
msgstr ""
#: ../../docstring of config.settings.common.CACHE_URL:3
msgid "``redis://<host>:<port>/<database>``"
msgstr ""
#: ../../docstring of config.settings.common.CACHE_URL:4
#: ../../docstring of config.settings.common.CELERY_BROKER_URL:7
msgid "``redis://127.0.0.1:6379/0``"
msgstr ""
#: ../../docstring of config.settings.common.CACHE_URL:5
msgid "``redis://:password@localhost:6379/0``"
msgstr ""
#: ../../docstring of config.settings.common.CACHE_URL:7
msgid "If you're using password auth (the extra slash is important) - ``redis:///run/redis/redis.sock?db=0`` over unix sockets"
msgstr ""
#: ../../docstring of config.settings.common.CACHE_URL:12
msgid "If you want to use Redis over unix sockets, you also need to update :attr:`CELERY_BROKER_URL`"
msgstr ""
#: ../../docstring of config.settings.common.CELERY_BROKER_URL:1
msgid "The celery task broker URL. Defaults to :attr:`CACHE_URL`. You don't need to tweak this unless you want to use a different server or use Redis sockets to connect."
msgstr ""
#: ../../docstring of config.settings.common.CELERY_BROKER_URL:5
#: ../../docstring of config.settings.common.AWS_S3_REGION_NAME:4
#: ../../docstring of config.settings.common.THROTTLING_RATES:6
msgid "Example:"
msgstr ""
#: ../../docstring of config.settings.common.CELERY_BROKER_URL:8
msgid "``redis+socket:///run/redis/redis.sock?virtual_host=0``"
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:60
msgid "Accounts and registration"
msgstr ""
#: ../../docstring of config.settings.common.ACCOUNT_EMAIL_VERIFICATION_ENFORCE:1
msgid "Set whether users need to verify their email address before using your pod. Enabling this setting is useful for reducing spam and bot accounts. To use this setting you need to configure a mail server to send verification emails. See :attr:`EMAIL_CONFIG`."
msgstr ""
#: ../../docstring of config.settings.common.ACCOUNT_EMAIL_VERIFICATION_ENFORCE:6
msgid "Superusers created through the command line never need to verify their email address."
msgstr ""
#: ../../docstring of config.settings.common.USERS_INVITATION_EXPIRATION_DAYS:1
msgid "The number of days before a user invite expires."
msgstr ""
#: ../../docstring of config.settings.common.DISABLE_PASSWORD_VALIDATORS:1
msgid "Whether to disable password validation rules during registration. Validators include password length, common words, similarity with username."
msgstr ""
#: ../../docstring of config.settings.common.ACCOUNT_USERNAME_BLACKLIST:1
msgid "List of usernames that can't be used for registration. Given as a list of strings."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:80
msgid "Whether to enable LDAP authentication."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:82
msgid "See {doc}`/administrator_documentation/configuration_docs/ldap` for more information."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:85
msgid "Media storage and serving configuration"
msgstr ""
#: ../../docstring of config.settings.common.MEDIA_URL:1
msgid "The URL from which your pod serves media files. Change this if you're hosting media files on a separate domain, or if you host Funkwhale on a non-standard port."
msgstr ""
#: ../../docstring of config.settings.common.MEDIA_ROOT:1
msgid "The path where you store media files (such as album covers or audio tracks) on your system. Make sure this directory actually exists."
msgstr ""
#: ../../docstring of config.settings.common.PROXY_MEDIA:1
msgid "Whether to proxy audio files through your reverse proxy. We recommend you leave this enabled to enforce access control."
msgstr ""
#: ../../docstring of config.settings.common.PROXY_MEDIA:4
msgid "If you're using S3 storage with :attr:`AWS_QUERYSTRING_AUTH` enabled, it's safe to disable this setting."
msgstr ""
#: ../../docstring of config.settings.common.EXTERNAL_MEDIA_PROXY_ENABLED:1
msgid "Whether to proxy attachment files hosted on third party pods and and servers. Leaving this set to ``true`` is recommended. This reduces the risk of leaking user browsing information and reduces the bandwidth used on remote pods."
msgstr ""
#: ../../docstring of config.settings.common.ATTACHMENTS_UNATTACHED_PRUNE_DELAY:1
msgid "The delay in seconds before Funkwhale prunes uploaded but detached attachments from the system."
msgstr ""
#: ../../docstring of config.settings.common.REVERSE_PROXY_TYPE:1
msgid "Set your reverse proxy type. This changes the headers the API uses to serve audio files. Allowed values:"
msgstr ""
#: ../../docstring of config.settings.common.REVERSE_PROXY_TYPE:4
msgid "``nginx``"
msgstr ""
#: ../../docstring of config.settings.common.REVERSE_PROXY_TYPE:5
msgid "``apache2``"
msgstr ""
#: ../../docstring of config.settings.common.PROTECT_FILES_PATH:1
msgid "The path used to process internal redirection to the reverse proxy."
msgstr ""
#: ../../docstring of config.settings.common.PROTECT_FILES_PATH:6
msgid "Don't insert a slash at the end of this path."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:106
msgid "S3 storage configuration"
msgstr ""
#: ../../docstring of config.settings.common.AWS_QUERYSTRING_AUTH:1
msgid "Whether to include signatures in S3 URLs. Signatures are used to enforce access control."
msgstr ""
#: ../../docstring of config.settings.common.AWS_QUERYSTRING_AUTH:4
msgid "Defaults to the opposite of :attr:`PROXY_MEDIA`."
msgstr ""
#: ../../docstring of config.settings.common.AWS_QUERYSTRING_EXPIRE:1
msgid "The time in seconds before AWS signatures expire. Only takes effect you enable :attr:`AWS_QUERYSTRING_AUTH`"
msgstr ""
#: ../../docstring of config.settings.common.AWS_ACCESS_KEY_ID:1
msgid "Access-key ID for your S3 storage."
msgstr ""
#: ../../docstring of config.settings.common.AWS_SECRET_ACCESS_KEY:1
msgid "Secret access key for your S3 storage."
msgstr ""
#: ../../docstring of config.settings.common.AWS_STORAGE_BUCKET_NAME:1
msgid "Your S3 bucket name."
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_CUSTOM_DOMAIN:1
msgid "Custom domain to use for your S3 storage."
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_ENDPOINT_URL:1
msgid "If you use a S3-compatible storage such as minio, set the following variable to the full URL to the storage server."
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_ENDPOINT_URL:4
#: ../../docstring of config.settings.common.ADMIN_URL:3
#: ../../docstring of config.settings.common.MUSICBRAINZ_HOSTNAME:5
msgid "Examples:"
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_ENDPOINT_URL:6
msgid "``https://minio.mydomain.com``"
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_ENDPOINT_URL:7
msgid "``https://s3.wasabisys.com``"
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_REGION_NAME:1
msgid "If you're using Amazon S3 to serve media without a proxy, you need to specify your region name to access files."
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_REGION_NAME:6
msgid "``eu-west-2``"
msgstr ""
#: ../../docstring of config.settings.common.AWS_LOCATION:1
msgid "A directory in your S3 bucket where you store files. Use this if you plan to share the bucket between services."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:125
msgid "In-place import configuration"
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_PATH:1
msgid "The path on your server where Funkwhale places files from in-place imports. This path needs to be readable by the webserver and ``api`` and ``worker`` processes."
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_PATH:8
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_SERVE_PATH:14
msgid "Dont insert a slash at the end of this path."
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_PATH:10
msgid "On Docker installations, we recommend you use the default ``/music`` path. On Debian installations you can use any absolute path. Defaults to ``/srv/funkwhale/data/music``."
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_PATH:16
msgid "You need to add this path to your reverse proxy configuration. Add the directory to your ``/_protected/music`` server block."
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_SERVE_PATH:1
msgid "On Docker setups the value of :attr:`MUSIC_DIRECTORY_PATH` may be different from the actual path on your server. You can specify this path in your :file:`docker-compose.yml` file::"
msgstr ""
#: ../../docstring of config.settings.common.MUSIC_DIRECTORY_SERVE_PATH:8
msgid "In this case, you need to set :attr:`MUSIC_DIRECTORY_SERVE_PATH` to ``/srv/funkwhale/data/music``. The webserver needs to be able to read this directory."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:136
msgid "API configuration"
msgstr ""
#: ../../docstring of config.settings.common.THROTTLING_ENABLED:1
msgid "Whether to enable throttling (also known as rate-limiting). We recommend you leave this enabled to improve the quality of the service, especially on public pods ."
msgstr ""
#: ../../docstring of config.settings.common.THROTTLING_RATES:1
msgid "Throttling rates for specific endpoints and app features. Tweak this if you're hitting rate limit issues or if you want to reduce the consumption of specific endpoints. Takes the format ``<endpoint name>=<number>/<interval>``."
msgstr ""
#: ../../docstring of config.settings.common.THROTTLING_RATES:8
msgid "``signup=5/d,password-reset=2/d,anonymous-reports=5/d``"
msgstr ""
#: ../../docstring of config.settings.common.ADMIN_URL:1
msgid "Path to the Django admin dashboard."
msgstr ""
#: ../../docstring of config.settings.common.ADMIN_URL:5
msgid "``^api/admin/``"
msgstr ""
#: ../../docstring of config.settings.common.ADMIN_URL:6
msgid "``^api/mycustompath/``"
msgstr ""
#: ../../docstring of config.settings.common.EXTERNAL_REQUESTS_VERIFY_SSL:1
msgid "Whether to enforce TLS certificate verification when performing outgoing HTTP requests."
msgstr ""
#: ../../docstring of config.settings.common.EXTERNAL_REQUESTS_VERIFY_SSL:4
msgid "Disabling this feature is not recommended."
msgstr ""
#: ../../docstring of config.settings.common.EXTERNAL_REQUESTS_TIMEOUT:1
msgid "Default timeout for external requests."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:202
msgid "Federation configuration"
msgstr ""
#: ../../docstring of config.settings.common.FEDERATION_OBJECT_FETCH_DELAY:1
msgid "The delay in minutes before a remote object is automatically refetched when accessed in the UI."
msgstr ""
#: ../../docstring of config.settings.common.FEDERATION_DUPLICATE_FETCH_DELAY:1
msgid "The delay in seconds between two manual fetches of the same remote object."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:211
msgid "Metadata configuration"
msgstr ""
#: ../../docstring of config.settings.common.TAGS_MAX_BY_OBJ:1
msgid "Maximum number of tags that can be associated with an object. Extra tags are ignored."
msgstr ""
#: ../../docstring of config.settings.common.MUSICBRAINZ_HOSTNAME:1
msgid "The hostname of your MusicBrainz instance. Change this setting if you run your own server or use a mirror. You can include a port number in the hostname."
msgstr ""
#: ../../docstring of config.settings.common.MUSICBRAINZ_HOSTNAME:7
msgid "``mymusicbrainz.mirror``"
msgstr ""
#: ../../docstring of config.settings.common.MUSICBRAINZ_HOSTNAME:8
msgid "``localhost:5000``"
msgstr ""
#: ../../docstring of config.settings.common.MUSICBRAINZ_CACHE_DURATION:1
msgid "Length of time in seconds to cache MusicBrainz results."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:221
msgid "Channels and podcast configuration"
msgstr ""
#: ../../docstring of config.settings.common.PODCASTS_RSS_FEED_REFRESH_DELAY:1
msgid "The delay in seconds between two fetch of RSS feeds."
msgstr ""
#: ../../docstring of config.settings.common.PODCASTS_RSS_FEED_REFRESH_DELAY:3
msgid "A lower rate means new episodes are fetched sooner, but requires more resources."
msgstr ""
#: ../../docstring of config.settings.common.PODCASTS_RSS_FEED_MAX_ITEMS:1
msgid "Maximum number of RSS items to load in each podcast feed."
msgstr ""
#: ../../docstring of config.settings.common.PODCASTS_THIRD_PARTY_VISIBILITY:1
msgid "By default, only people who subscribe to a podcast RSS have access to its episodes. Switch to \"instance\" or \"everyone\" to change the default visibility."
msgstr ""
#: ../../docstring of config.settings.common.PODCASTS_THIRD_PARTY_VISIBILITY:7
msgid "Changing this value only affect new podcasts."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:231
msgid "Subsonic configuration"
msgstr ""
#: ../../docstring of config.settings.common.SUBSONIC_DEFAULT_TRANSCODING_FORMAT:1
msgid "The default format files are transcoded into when using the Subsonic API."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:239
msgid "Email configuration"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:1
msgid "SMTP configuration for sending emails. Possible values:"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:3
msgid "``EMAIL_CONFIG=consolemail://``: output emails to console (the default)"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:4
msgid "``EMAIL_CONFIG=dummymail://``: disable email sending completely"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:6
msgid "On a production instance, you'll usually want to use an external SMTP server:"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:8
msgid "``EMAIL_CONFIG=smtp://user:password@youremail.host:25``"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:9
msgid "``EMAIL_CONFIG=smtp+ssl://user:password@youremail.host:465``"
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_CONFIG:10
msgid "``EMAIL_CONFIG=smtp+tls://user:password@youremail.host:587``"
msgstr ""
#: ../../docstring of config.settings.common.DEFAULT_FROM_EMAIL:1
msgid "Name and email address used to send system emails."
msgstr ""
#: ../../docstring of config.settings.common.DEFAULT_FROM_EMAIL:3
msgid "Default: ``Funkwhale <noreply@yourdomain>``"
msgstr ""
#: ../../docstring of config.settings.common.DEFAULT_FROM_EMAIL:7
msgid "Both the forms ``Funkwhale <noreply@yourdomain>`` and ``noreply@yourdomain`` work."
msgstr ""
#: ../../docstring of config.settings.common.EMAIL_SUBJECT_PREFIX:1
msgid "Subject prefix for system emails."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:251
msgid "Plugin configuration"
msgstr ""
#: ../../docstring of config.settings.common.FUNKWHALE_PLUGINS_PATH:1
msgid "Path to a directory containing Funkwhale plugins. These will be imported at runtime."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:264
msgid "List of Funkwhale plugins to load."
msgstr ""
#: ../../administrator_documentation/configuration_docs/env_file.md:267
msgid "Other settings"
msgstr ""
#: ../../docstring of config.settings.common.INSTANCE_SUPPORT_MESSAGE_DELAY:1
msgid "The number of days after signup before the \"support your pod\" message is shown."
msgstr ""
#: ../../docstring of config.settings.common.FUNKWHALE_SUPPORT_MESSAGE_DELAY:1
msgid "The number of days after signup before the \"support Funkwhale\" message is shown."
msgstr ""
#: ../../docstring of config.settings.common.MIN_DELAY_BETWEEN_DOWNLOADS_COUNT:1
msgid "The required number of seconds between downloads of a track by the same IP or user to be counted separately in listen statistics."
msgstr ""
#: ../../docstring of config.settings.common.MARKDOWN_EXTENSIONS:1
msgid "A list of markdown extensions to enable."
msgstr ""
#: ../../docstring of config.settings.common.MARKDOWN_EXTENSIONS:3
msgid "See `<https://python-markdown.github.io/extensions/>`_."
msgstr ""
#: ../../docstring of config.settings.common.LINKIFIER_SUPPORTED_TLDS:1
msgid "Additional TLDs to support with our markdown linkifier."
msgstr ""

Wyświetl plik

@ -0,0 +1,123 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../administrator_documentation/configuration_docs/frontend.md:1
msgid "Customize the Funkwhale frontend"
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:3
msgid "You can customize the look and behavior of the Funkwhale UI using a JSON configuration file. This file enables you to make very basic changes to the Funkwhale web app."
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:5
msgid "Set up your custom configuration"
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:7
msgid "Create your configuration file"
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:9
msgid "To customize your Funkwhale pod, you need to serve a {file}`settings.json` file at `https://yourinstanceurl/settings.json`. Follow these steps to set up your configuration file:"
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:11
msgid "SSH into your Funkwhale server."
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:12
msgid "Navigate to your `/srv/funkwhale` folder"
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:18
msgid "Create a new `custom` directory for your file."
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:24
msgid "Create a new config file and populate it with placeholder settings."
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:44
msgid "Configure your reverse proxy"
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:46
msgid "Once you've created your {file}`settings.json` file you need to configure your reverse proxy to serve it."
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:0
#: ../../administrator_documentation/configuration_docs/frontend.md:0
msgid "Nginx"
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:50
msgid "Add the following snippet to your {file}`/etc/nginx/sites-available/funkwhale.conf` config file:"
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:0
#: ../../administrator_documentation/configuration_docs/frontend.md:0
msgid "Apache"
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:62
msgid "Add the following snippet to your vhost configuration:"
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:70
msgid "Reload your webserver. You should be able to see the contents of your configuration file at `https://yourinstanceurl/settings.json`."
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:72
msgid "Add a custom theme"
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:74
msgid "You can use a custom stylesheet to theme your Funkwhale pod. To do this:"
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:76
msgid "Navigate to your {file}`/srv/funkwhale/custom` directory."
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:82
msgid "Copy your CSS file to this directory, or create a new one."
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:94
msgid "Add the location of your CSS file to the `additionalStylesheets` parameter in your {file}`settings.json` file."
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:107
msgid "Add the whole {file}`custom` dir to your vhost configuration."
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:111
msgid "Add the following to your {file}`/etc/nginx/sites-available/funkwhale.conf` file:"
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:122
msgid "Add the following to your vhost file."
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:135
msgid "Restart your webserver."
msgstr ""
#: ../../administrator_documentation/configuration_docs/frontend.md:137
msgid "Refresh your Funkwhale app. The background should now be red."
msgstr ""

Wyświetl plik

@ -0,0 +1,42 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../administrator_documentation/configuration_docs/index.md:5
msgid "Environment file"
msgstr ""
#: ../../administrator_documentation/configuration_docs/index.md:5
msgid "Instance settings"
msgstr ""
#: ../../administrator_documentation/configuration_docs/index.md:5
msgid "Frontend customization"
msgstr ""
#: ../../administrator_documentation/configuration_docs/index.md:5
#: ../../administrator_documentation/configuration_docs/index.md:5
msgid "Configuration options"
msgstr ""
#: ../../administrator_documentation/configuration_docs/index.md:1
msgid "Configure your Funkwhale pod"
msgstr ""
#: ../../administrator_documentation/configuration_docs/index.md:3
msgid "You can customize a lot of settings relating to your Funkwhale pod. These range from server-level settings to user-specific settings. Check out the guides in this section to get started."
msgstr ""

Wyświetl plik

@ -0,0 +1,367 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../administrator_documentation/configuration_docs/instance_settings.md:1
msgid "Instance settings"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:3
msgid "You can find instance settings on your pod's web interface. These settings control high level pod configuration. You don't need to restart the pod after changing these settings."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:5
msgid "To find your instance settings:"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:0
msgid "Desktop"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:9
#: ../../administrator_documentation/configuration_docs/instance_settings.md:16
msgid "Log in to your {term}`pod`."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:10
msgid "Select the wrench icon ({fa}`wrench`) at the top of the sidebar to open the {guilabel}`Administration` menu."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:11
#: ../../administrator_documentation/configuration_docs/instance_settings.md:18
msgid "Select {guilabel}`Settings`. The {guilabel}`Instance settings` page opens."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:0
msgid "Mobile"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:17
msgid "Select the wrench icon ({fa}`wrench`) at the top of the page to open the {guilabel}`Administration` menu."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:22
msgid "Available settings"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:24
msgid "Instance information"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:0
msgid "Pod name"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:28
msgid "The public name of your Funkwhale pod. This is displayed on the \"Home\" and \"About\" pages."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:3
msgid "Short description"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:31
msgid "A short description of your pod. Users see this on the pod's \"Home\" page."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:6
msgid "Long description"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:34
msgid "A longer description of your pod. Users see this on the pod's \"About\" page. Supports markdown formatting."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:9
msgid "Contact email"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:37
msgid "A contact email address that users and visitors can use to contact the pod administrator."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:12
msgid "Rules"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:40
msgid "A free text field for you to add your pod's rules and code of conduct. This is seen on the pod's \"About\" page. Supports markdown formatting"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:15
msgid "Terms of service"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:43
msgid "A free text field for you to add your pod's terms of service and privacy policy. This is seen on the pod's \"About\" page. Supports markdown formatting."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:18
msgid "Banner image"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:46
msgid "A large image seen on the pod's \"Home\" and \"About\" pages. The image should be at least 600x100px."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:21
msgid "Support message"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:49
msgid "A short message you can display to your pod's users to ask for support or just send a periodic message. Supports markdown."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:56
msgid "Sign-ups"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:0
msgid "Open registration to new users"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:60
msgid "Enable this setting to allow new users to create an account on your pod."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:3
msgid "Enable manual sign-up validation"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:63
msgid "Enable this setting to require all new registrations to be validated by a moderator."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:6
msgid "Sign-up form customization"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:66
msgid "Use this tool to create a custom sign-up form. New users see this form when creating a new account. Supports markdown"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:73
msgid "Security"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:0
msgid "API Requires authentication"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:77
msgid "Controls whether {term}`unauthenticated users <Anonymous>` can access content on your pod. If __enabled__, users need to have an account on your pod to access content. If __disabled__, users without an account can listen to content stored in public libraries."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:80
msgid "{doc}`../../moderator_documentation/content/library_visibility`."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:7
msgid "Default permissions"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:84
msgid "A list of {term}`permissions` that are added to users by default. If your pod is publicly accessible, you should leave this empty."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:10
msgid "Upload quota"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:87
msgid "The default upload quota for users in MB. You can override this on a per-user basis."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:90
msgid "{doc}`../../moderator_documentation/reports/handle_users`"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:98
msgid "Music"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:0
msgid "Transcoding enabled"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:102
msgid "Enable this setting to let your server transcode files into a different format if the client requests it. This is useful if a device doesn't support formats like Ogg or FLAC."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:3
msgid "Transcoding cache duration"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:105
msgid "The number of minutes you want to store transcoded files on your server. Funkwhale removes transcoded tracks that haven't been downloaded within this duration to save space."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:110
msgid "Channels"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:0
msgid "Enable channels"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:114
msgid "Whether user channels can be created and followed on your pod."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:3
msgid "Max channels allowed per user"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:117
msgid "The maximum number of channels each user can create."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:124
msgid "Playlists"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:0
msgid "Max tracks per playlist"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:128
msgid "The maximum number of tracks a user can add to a playlist."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:135
msgid "Moderation"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:0
msgid "Enable allow-listing"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:139
msgid "Enable this setting to ensure your pod only communicates with pods you have added to your allow list. When this setting is disabled, your pod will communicate with all other servers not included in your deny list."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:3
msgid "Publish your allowed-domains list"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:142
msgid "Whether to make your list of allowed domains public. Enable this if you want users to check who you are federating with."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:6
msgid "Accountless report categories"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:145
msgid "A list of {term}`categories <Report categories>` that {term}`anonymous` users can submit."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:152
msgid "Federation"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:0
msgid "Federation enabled"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:156
msgid "Whether to enable federation features on your pod."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:3
msgid "Enable public index"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:159
msgid "Whether to allow other pods and bots to index public content on your pod."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:6
msgid "Federation collection page size"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:162
msgid "The number of items to display in ActivityPub collections."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:9
msgid "Music cache duration"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:165
msgid "The number of minutes you want to store local copies of federated tracks on your server. Funkwhale removes federated tracks that haven't been downloaded within this duration to save space."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:12
msgid "Federation actor fetch delay"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:168
msgid "The number of minutes the server waits before refetching actors on request authentication."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:175
msgid "Subsonic"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:0
msgid "Enabled Subsonic API"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:179
msgid "Whether to enable the Subsonic API. This controls whether users are able to connect to your pod using Subsonic apps."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:186
msgid "User Interface"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:0
msgid "Custom CSS code"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:190
msgid "Add CSS rules to control the look and feel of your pod. These rules are added to a `<style>` tag on each page."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:3
msgid "Funkwhale Support message"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:193
msgid "Whether to show a notification to your pod's users to support the Funkwhale project."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:200
msgid "Statistics"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:0
msgid "Enable usage and library stats in nodeinfo endpoint"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:204
msgid "Whether to share anonymized usage and library statistics in your pod's nodeinfo endpoint."
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:3
msgid "Private mode in nodeinfo"
msgstr ""
#: ../../administrator_documentation/configuration_docs/instance_settings.md:208
msgid "Enable this setting to indicate you don't want your instance to be tracked by third-party services."
msgstr ""

Wyświetl plik

@ -0,0 +1,129 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../administrator_documentation/configuration_docs/ldap.md:1
msgid "Configure LDAP"
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:3
msgid "{abbr}`LDAP (Lightweight Directory Access Protocol)` is a protocol for providing directory services. It acts as a central authority for user login information. Funkwhale supports LDAP through the [Django LDAP authentication module](https://django-auth-ldap.readthedocs.io/)."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:6
msgid "LDAP users can't change their password in the app."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:9
msgid "Dependencies"
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:11
msgid "LDAP support requires extra dependencies. We include these in our requirements files to make it easier to set up. If you aren't using LDAP, you can safely remove these."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:15
msgid "`libldap2-dev`"
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:16
msgid "`libsasl2-dev`"
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:22
msgid "`python-ldap`"
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:23
msgid "`python-django-auth-ldap`"
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:27
msgid "Environment variables"
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:29
msgid "You can configure LDAP authentication using environment variables in your `.env` file."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:31
msgid "Basic features"
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:39
msgid "Set this to `True` to enable LDAP support"
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:48
msgid "The LDAP {abbr}`URI (Uniform Resource Identifier)` of your authentication server."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:57
msgid "LDAP user {abbr}`DN (Distinguised Name)` to bind on so you can perform searches."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:66
msgid "LDAP user password for bind {abbr}`DN (Distinguised Name)`."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:75
msgid "The LDAP user filter, using `{0}` as the username placeholder. Uses standard [LDAP search syntax](https://social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters.aspx)."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:84
msgid "Set to `True` to enable LDAP StartTLS support."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:93
msgid "The LDAP search root {abbr}`DN (Distinguised Name)`. Supports several entries in a comma-delimited list."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:102
msgid "A mapping of Django user attributes to LDAP values."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:111
msgid "Controls whether to use direct binding."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:114
msgid "Group features"
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:116
msgid "LDAP provides extra features for working with groups. Group configuration is an advanced feature. Most users don't need to configure these settings."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:119
msgid "[Django's LDAP documentation](https://django-auth-ldap.readthedocs.io/en/latest/groups.html) for groups."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:128
msgid "The LDAP group search root {abbr}`DN (Distinguised Name)`. This needs to be set to `True` to enable group features."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:137
msgid "The LDAP group filter."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:146
msgid "The group that users need to be a member of to authenticate."
msgstr ""
#: ../../administrator_documentation/configuration_docs/ldap.md:155
msgid "A group whose members can't authenticate."
msgstr ""

Wyświetl plik

@ -0,0 +1,125 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../administrator_documentation/configuration_docs/mrf.md:1
msgid "Message Rewrite Facility (MRF)"
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:3
msgid "Funkwhale includes a feature that mimics [Pleromas Message Rewrite Facility (MRF)](https://docs-develop.pleroma.social/backend/configuration/mrf/). The MRF enables instance admins to create custom moderation rules. You can use these rules to complement Funkwhale's [built-in moderation tools](../../moderator_documentation/index.md)."
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:5
msgid "Architecture"
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:7
msgid "The MRF is a pluggable system that processes messages and forwards them to a list of registered policies. Each policy can mutate the message, leave it as is, or discard it."
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:9
msgid "We implement some of Funkwhale's built-in moderation tools as a MRF policy. For example:"
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:11
msgid "Allow-list, when checking incoming messages ([code](https://dev.funkwhale.audio/funkwhale/funkwhale/blob/stable/api/funkwhale_api/moderation/mrf_policies.py))."
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:12
msgid "Domain and user blocking, when checking incoming messages ([code](https://dev.funkwhale.audio/funkwhale/funkwhale/blob/stable/api/funkwhale_api/federation/mrf_policies.py))"
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:15
msgid "Pleroma MRF policies can also affect outgoing messages. This is not currently supported in Funkwhale."
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:18
msgid "Disclaimer"
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:20
msgid "Writing custom MRF rules can impact the performance and stability of your pod. It can also affect message delivery. Every time your pod receives a message it calls your policy."
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:22
msgid "The Funkwhale project consider all custom MRF policies to fall under the purview of the AGPL. This means you're required to release the source of your custom MRF policy modules publicly."
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:24
msgid "Write your first MRF policy"
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:26
msgid "MRF policies are written as Python 3 functions that take at least one `payload` parameter. This payload is the raw ActivityPub message, received via HTTP, following the HTTP signature check."
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:28
msgid "In the example below we write a policy that discards all Follow requests from listed domains:"
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:55
msgid "You need to store this code in a Funkwhale plugin. To create one, execute the following:"
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:79
msgid "Once you've created the plugin, put your code in an `mrf_policies.py` file. Place this file inside the plugin directory. Next, enable the plugin in your {file}`.env` file by adding its name to the {attr}`FUNKWHALE_PLUGINS` list. Add this variable if it's not there."
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:81
msgid "Test your MRF policy"
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:83
msgid "To make the job of writing and debugging MRF policies easier, we provide a management command."
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:85
msgid "List registered MRF policies."
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:0
#: ../../administrator_documentation/configuration_docs/mrf.md:0
#: ../../administrator_documentation/configuration_docs/mrf.md:0
#: ../../administrator_documentation/configuration_docs/mrf.md:0
#: ../../administrator_documentation/configuration_docs/mrf.md:0
msgid "Debian"
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:0
#: ../../administrator_documentation/configuration_docs/mrf.md:0
#: ../../administrator_documentation/configuration_docs/mrf.md:0
#: ../../administrator_documentation/configuration_docs/mrf.md:0
#: ../../administrator_documentation/configuration_docs/mrf.md:0
msgid "Docker"
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:103
msgid "Check how your MRF policy handles a follow."
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:123
msgid "Check how your MRF handles a problematic follow."
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:143
msgid "Check a payload against activity already present in the database. You can find the UUID of an activity by visiting `/api/admin/federation/activity`."
msgstr ""
#: ../../administrator_documentation/configuration_docs/mrf.md:166
msgid "There are extra options for testing MRF policies. Check the command help for more options."
msgstr ""

Wyświetl plik

@ -0,0 +1,179 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../administrator_documentation/configuration_docs/object_storage.md:1
msgid "Store media in an object store"
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:3
msgid "By default, Funkwhale stores all media data in the `/srv/funkwhale/data/media` directory. If you prefer to use an S3-compatible object store, follow the instructions in this guide."
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:10
msgid "Secure your object store"
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:12
msgid "Before you begin, you need to secure your object store. Many S3-compatible stores list contents in the root by default. This exposes the URLs of your audio files and means that users can bypass authentication."
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:14
msgid "To prevent listing content, add the following policy to your S3-compatible object store."
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:39
msgid "If you're using `awscli`, you can store this policy in a `/tmp/policy` file and apply it using the following command:"
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:45
msgid "Update your environment file"
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:47
msgid "To set up S3-compatible storage, fill out the relevant details in the `.env` file. If you want to serve audio files from the bucket, set `PROXY_MEDIA` to `false`."
msgstr ""
#: ../../docstring of config.settings.common.AWS_QUERYSTRING_AUTH:1
msgid "Whether to include signatures in S3 URLs. Signatures are used to enforce access control."
msgstr ""
#: ../../docstring of config.settings.common.AWS_QUERYSTRING_AUTH:4
msgid "Defaults to the opposite of :attr:`PROXY_MEDIA`."
msgstr ""
#: ../../docstring of config.settings.common.AWS_QUERYSTRING_EXPIRE:1
msgid "The time in seconds before AWS signatures expire. Only takes effect you enable :attr:`AWS_QUERYSTRING_AUTH`"
msgstr ""
#: ../../docstring of config.settings.common.AWS_ACCESS_KEY_ID:1
msgid "Access-key ID for your S3 storage."
msgstr ""
#: ../../docstring of config.settings.common.AWS_SECRET_ACCESS_KEY:1
msgid "Secret access key for your S3 storage."
msgstr ""
#: ../../docstring of config.settings.common.AWS_STORAGE_BUCKET_NAME:1
msgid "Your S3 bucket name."
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_CUSTOM_DOMAIN:1
msgid "Custom domain to use for your S3 storage."
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_ENDPOINT_URL:1
msgid "If you use a S3-compatible storage such as minio, set the following variable to the full URL to the storage server."
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_ENDPOINT_URL:4
msgid "Examples:"
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_ENDPOINT_URL:6
msgid "``https://minio.mydomain.com``"
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_ENDPOINT_URL:7
msgid "``https://s3.wasabisys.com``"
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_REGION_NAME:1
msgid "If you're using Amazon S3 to serve media without a proxy, you need to specify your region name to access files."
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_REGION_NAME:4
msgid "Example:"
msgstr ""
#: ../../docstring of config.settings.common.AWS_S3_REGION_NAME:6
msgid "``eu-west-2``"
msgstr ""
#: ../../docstring of config.settings.common.AWS_LOCATION:1
msgid "A directory in your S3 bucket where you store files. Use this if you plan to share the bucket between services."
msgstr ""
#: ../../docstring of config.settings.common.PROXY_MEDIA:1
msgid "Whether to proxy audio files through your reverse proxy. We recommend you leave this enabled to enforce access control."
msgstr ""
#: ../../docstring of config.settings.common.PROXY_MEDIA:4
msgid "If you're using S3 storage with :attr:`AWS_QUERYSTRING_AUTH` enabled, it's safe to disable this setting."
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:71
msgid "Set up your reverse proxy"
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:74
msgid "Serving files from object storage is not currently supported on Apache deployments."
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:77
msgid "Serving files from an object store requires some changes to the reverse proxy."
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:79
msgid "Open your Nginx configuration file in an editor."
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:0
#: ../../administrator_documentation/configuration_docs/object_storage.md:0
msgid "Debian"
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:0
#: ../../administrator_documentation/configuration_docs/object_storage.md:0
msgid "Docker"
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:97
msgid "Comment out the `location /_protected/media/` block by adding a `#` to the start of each line."
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:106
msgid "Uncomment the `location ~ /_protected/media/(.+)` block by removing the `#` from the start of each line."
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:116
msgid "Add your S3 store URL to the `img-src` and `media-src` headers."
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:122
msgid "Test your Nginx configuration."
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:128
msgid "Restart Funkwhale and Nginx to pick up the changes."
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:148
msgid "That's it! Files are now uploaded to and stored from your S3 bucket."
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:150
msgid "Troubleshooting"
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:154
msgid "You may see the following error when streaming music from your S3-compatible store:"
msgstr ""
#: ../../administrator_documentation/configuration_docs/object_storage.md:160
msgid "This happens when the Nginx config is unable to use your servers DNS resolver. We're still looking into this issue. You can work around this by adding a resolver to the `location ~/_protected/media/(.+)` block."
msgstr ""

Wyświetl plik

@ -0,0 +1,77 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../administrator_documentation/configuration_docs/optimize.md:1
msgid "Optimize memory usage"
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:3
msgid "Funkwhale has a reasonable memory footprint. If you're running Funkwhale on a limited device, you can use these tweaks to reduce the footprint."
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:5
msgid "Reduce workers concurrency"
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:7
msgid "Funkwhale uses Celery to handle asynchronous tasks. By default, Celery spawns a worker per CPU core. This can lead to higher memory usage."
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:9
msgid "You can set the number of workers using the `CELERYD_CONCURRENCY` variable in your `.env` file. For example, a value of `CELERYD_CONCURRENCY=1` spawns a single worker."
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:12
msgid "Reducing the number of celery workers slows down the handling of asynchronous tasks. On larger instances, this can cause performance problems."
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:15
msgid "Switch to solo pool execution"
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:17
msgid "Celery uses a `prefork` pool by default. This enables the server to process many tasks at the same time. You can switch to a `solo` pool which handles tasks one at a time. This reduces memory overhead but removes the ability to process tasks concurrently."
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:0
msgid "Debian"
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:21
msgid "Open your `funkwhale-worker` unit file in an editor."
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:27
msgid "Add the `--pool=solo` flag to the `ExecStart` line of your unit file."
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:33
msgid "Restart the Celery service."
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:0
msgid "Docker"
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:43
msgid "Add the `--pool=solo` flag to the `celerybeat` command in `docker-compose.yml`."
msgstr ""
#: ../../administrator_documentation/configuration_docs/optimize.md:51
msgid "Restart Celery."
msgstr ""

Wyświetl plik

@ -0,0 +1,150 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../administrator_documentation/django/delete_content.md:1
msgid "Delete content in the Django dashboard"
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:4
msgid "Deleting content using the Django dashboard isn't recommended. Use an object's [moderation page](../../moderator_documentation/content/delete_content.md) where possible."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:7
msgid "You can delete content from your pod in the Django dashboard. The dashboard gives you access to all data associated with the content."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:10
msgid "Deleting content removes it from associated playlists, channels, libraries, and favorites lists."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:13
msgid "Delete tracks"
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:15
msgid "To delete tracks in the Django dashboard:"
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:17
#: ../../administrator_documentation/django/delete_content.md:29
#: ../../administrator_documentation/django/delete_content.md:41
#: ../../administrator_documentation/django/delete_content.md:53
msgid "Open the Django dashboard."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:18
msgid "Select {guilabel}`Tracks` in the {guilabel}`MUSIC` table."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:19
msgid "Search for the track(s) you want to delete."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:20
msgid "Check ({fa}`check-square`) the checkbox next to the track(s) you want to delete."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:21
msgid "Select {guilabel}`Delete selected tracks` in the {guilabel}`Action` dropdown."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:22
#: ../../administrator_documentation/django/delete_content.md:34
#: ../../administrator_documentation/django/delete_content.md:46
#: ../../administrator_documentation/django/delete_content.md:58
msgid "Select {guilabel}`Go`. A confirmation page opens showing you the items that are affected by the action."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:23
#: ../../administrator_documentation/django/delete_content.md:35
#: ../../administrator_documentation/django/delete_content.md:47
#: ../../administrator_documentation/django/delete_content.md:59
msgid "Review the information and select {guilabel}`Yes, I'm sure` to delete the item(s)."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:25
msgid "Delete albums"
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:27
msgid "To delete albums in the Django dashboard:"
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:30
msgid "Select {guilabel}`Albums` in the {guilabel}`MUSIC` table."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:31
msgid "Search for the album(s) you want to delete."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:32
msgid "Check ({fa}`check-square`) the checkbox next to the album(s) you want to delete."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:33
msgid "Select {guilabel}`Delete selected albums` in the {guilabel}`Action` dropdown."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:37
msgid "Delete artists"
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:39
msgid "To delete artists in the Django dashboard:"
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:42
msgid "Select {guilabel}`Artists` in the {guilabel}`MUSIC` table."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:43
msgid "Search for the artist(s) you want to delete."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:44
msgid "Check ({fa}`check-square`) the checkbox next to the artist(s) you want to delete."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:45
msgid "Select {guilabel}`Delete selected artists` in the {guilabel}`Action` dropdown."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:49
msgid "Delete followed libraries"
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:51
msgid "In Funkwhale, unfollowing a library leaves the items in place but you can't access them. To completely remove them:"
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:54
msgid "Select {guilabel}`Librarys` in the {guilabel}`MUSIC` table."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:55
msgid "Search for the libraries you want to delete."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:56
msgid "Check ({fa}`check-square`) the checkbox next to the libraries you want to delete."
msgstr ""
#: ../../administrator_documentation/django/delete_content.md:57
msgid "Select {guilabel}`Delete selected libraries` in the {guilabel}`Action` dropdown."
msgstr ""

Wyświetl plik

@ -0,0 +1,42 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../administrator_documentation/django/index.md:10
#: ../../administrator_documentation/django/index.md:10
msgid "Administrative tasks"
msgstr ""
#: ../../administrator_documentation/django/index.md:1
msgid "Use the Django dashboard"
msgstr ""
#: ../../administrator_documentation/django/index.md:3
msgid "For some administration you need to access data that isn't available on the frontend. Funkwhale makes use of the [Django web framework](https://www.djangoproject.com/). This provides a dashboard that gives pod admins access to more tools and data than the frontend."
msgstr ""
#: ../../administrator_documentation/django/index.md:5
msgid "There are two ways to access the Django administration dashboard:"
msgstr ""
#: ../../administrator_documentation/django/index.md:7
msgid "Navigate to `https://<yourdomain>/api/admin` and log in with your pod admin credentials."
msgstr ""
#: ../../administrator_documentation/django/index.md:8
msgid "Navigate to an object's moderation page and select {guilabel}`View in Django's admin` from the dropdown menu."
msgstr ""

Wyświetl plik

@ -0,0 +1,312 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../administrator_documentation/import_docs/index.md:1
msgid "Import music from your server"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:3
msgid "You can import music files you have saved on your server. You need to make sure your files have the [required ID3 tags](../../user_documentation/libraries/tag_music.md). We recommend using [Musicbrainz Picard](https://picard.musicbrainz.org/) for tagging."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:5
msgid "Funkwhale supports the following import methods:"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:7
msgid "Copy (default) – Funkwhale copies files from your server into the media store."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:8
msgid "In-place import – Funkwhale adds the storage location of your files to the database. This uses less space than the copy method and ensures your collection is always up-to-date."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:10
msgid "To see a full list of options, run the command with the `--help` flag."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:0
#: ../../administrator_documentation/import_docs/index.md:0
#: ../../administrator_documentation/import_docs/index.md:0
#: ../../administrator_documentation/import_docs/index.md:0
#: ../../administrator_documentation/import_docs/index.md:0
msgid "Debian"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:0
#: ../../administrator_documentation/import_docs/index.md:0
#: ../../administrator_documentation/import_docs/index.md:0
#: ../../administrator_documentation/import_docs/index.md:0
#: ../../administrator_documentation/import_docs/index.md:0
msgid "Docker"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:32
msgid "Get demo music"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:34
msgid "If you don't have music on your server, you can download creative commons music to test imports with. The Funkwhale project provides a collection courtesy of [Jamendo](https://jamendo.com). To download these tracks:"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:36
msgid "Download the shell script."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:42
msgid "Download the music list."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:48
msgid "Run the shell script against the music list to download the tracks."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:54
msgid "This downloads a set compressed albums to your `data/music` directory and unzips them. You can then import these tracks using the methods in this article."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:56
msgid "Find your library ID"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:58
msgid "You need to create a library before you can import music. Follow the instructions in [Create a library](../../user_documentation/libraries/create_library.md) to get started."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:60
msgid "Once you've created your library, you can find its ID by following these steps:"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:62
msgid "Visit `https://<yourdomain>/content/libraries/` in your browser. This page contains a list of your libraries."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:63
msgid "Find the library you want to upload content into. Select {guilabel}`Library details` to open the library details page."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:64
msgid "Your library's ID is the long string of letters and numbers shown in the URL bar. Copy the content before the first hyphen (`-`)."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:66
msgid "For example, if your library ID is `769a2bc3-eb1d-4aff-9f84-2c4d80d5c2d1`, copy the `769a2bc3`. You can use this as a shorthand reference for your library."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:68
msgid "Import your music"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:70
msgid "Copy files from your server"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:72
msgid "Once you have your library ID, you can copy content from your server and import it into the library. To do this:"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:74
msgid "Log in to your server and navigate to your Funkwhale directory."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:80
msgid "Export your library ID to reference it later. In this example, the library ID is \"769a2bc3\". Replace this with your library ID."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:86
msgid "Run the `import_files` command to copy your files. In this example, the music is stored in `data/music`. Replace this with your music directory."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:92
msgid "Funkwhale copies your files to your media store."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:94
msgid "Access your files in-place"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:96
msgid "The in-place import method references your files in their current directory. This is useful if you have limited storage space."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:98
msgid "Link your file directory"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:100
msgid "We recommend you symbolically link your music directories to `/srv/funkwhale/data/music`. You can then run the `import_files` command from that directory. This means you can use many directories without needing to add to them to your webserver."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:104
msgid "To link your storage directory to the Funkwhale store, use the `ln -s` command. For example, if you have an NFS share at `/media/nfsshare`, you can link it to a folder like this:"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:110
#: ../../administrator_documentation/import_docs/index.md:138
msgid "You can then run the `import_files` command against `/srv/funkwhale/data/music/nfsshare`."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:116
msgid "On a Docker install you can use bind mounts to reference your storage directory. To do this, you need to add the directory to the `api` and `celeryworker` blocks in your `docker-compose.yml` file. For example, if you have an NFS share at `/media/nfsshare`, you can add the following to your `docker-compose.yml` file:"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:142
msgid "Import your files"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:144
msgid "To use the in-place import method, follow these steps:"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:148
msgid "Add your storage location to your `.env` file if you don't want to link it to the Funkwhale store. See the [in-place import configuration variables](../configuration_docs/env_file.md#in-place-import-configuration) for more information."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:149
#: ../../administrator_documentation/import_docs/index.md:162
msgid "Run your import command against your music storage directory:"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:155
#: ../../administrator_documentation/import_docs/index.md:168
msgid "Funkwhale imports the music in your storage directory into the specified library."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:161
msgid "Add your storage location to your `.env` file if you don't want to bind it to the Funkwhale store. See the [in-place import configuration variables](../configuration_docs/env_file.md#in-place-import-configuration) for more information."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:172
msgid "Album art"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:174
msgid "Funkwhale attempts to import album art for your music library. The import process checks for the following."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:176
msgid "The cover embedded in the audio files (works with FLAC and MP3 files)."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:177
msgid "A `cover.jpg` or `cover.png` in the the track's directory."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:178
msgid "An `mbid` in the file's tags. If there is an `mbid`, the import process tries to fetch cover art from Musicbrainz."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:180
msgid "Watch for filesystem changes"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:182
msgid "You can run the `import_files` command any time you add new files or update files. For larger collections, this may not be practical. To watch for changes, run the `import_files` command with the `--watch` flag. This instructs the `import_files` command to watch for filesystem events and update your database when something changes."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:184
msgid "The `--watch` flag performs the following actions when it detects a change:"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:186
msgid "File created – imports the track."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:187
msgid "File moved – updates the location of the track in the database."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:188
msgid "File metadata updated – updates the track metadata in the database."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:189
msgid "File deleted – removes the file from the database."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:193
msgid "The `import_files --watch` command watches for changes to the following metadata fields:"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:195
msgid "Track mbid"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:196
msgid "Track title"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:197
msgid "Track position and disc number"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:198
msgid "Track license and copyright"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:199
msgid "Track genre"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:200
msgid "Album cover"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:201
msgid "Album title"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:202
msgid "Album mbid"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:203
msgid "Album release date"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:204
msgid "Artist name"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:205
msgid "Artist mbid"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:206
msgid "Album artist name"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:207
msgid "Album artist mbid"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:227
msgid "Prune dangling metadata"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:229
msgid "Funkwhale doesn't delete track metadata when you delete a track. This is useful if you want to delete a file but keep a record of a track for created playlists or favorites."
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:231
msgid "If you want to remove the file's metadata when you delete the file, run `import_files` with the `--prune` flag. This flag removes the metadata of any"
msgstr ""
#: ../../administrator_documentation/import_docs/index.md:234
msgid "You can use the `--prune` flag with the `--watch` flag. This means Funkwhale removes the metadata of referenced files you delete from your storage."
msgstr ""

Wyświetl plik

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -31,3 +31,27 @@ msgstr ""
#: ../../administrator_documentation/index.md:11
msgid "Funkwhale is self-hosted, meaning you run it on your own server. To set up your own Funkwhale pod, check out [our installation guides](installation_docs/index.md). Choose the installation method that works for you!"
msgstr ""
#: ../../administrator_documentation/index.md:13
msgid "Configure your Funkwhale pod"
msgstr ""
#: ../../administrator_documentation/index.md:15
msgid "Once you've installed Funkwhale, you can use [the guides in this section](configuration_docs/index.md) to configure it."
msgstr ""
#: ../../administrator_documentation/index.md:17
msgid "Upgrade your Funkwhale pod"
msgstr ""
#: ../../administrator_documentation/index.md:19
msgid "Funkwhale releases new updates regularly. To keep up-to-date with these changes, check out our [upgrade guides](upgrade_docs/index.md). If you're moving from our deprecated mono-container Docker setup, check out our [migration guide](migration_guide/index.md)."
msgstr ""
#: ../../administrator_documentation/index.md:21
msgid "Manage your Funkwhale pod"
msgstr ""
#: ../../administrator_documentation/index.md:23
msgid "Funkwhale provides tools for managing content and users on your Funkwhale pod. In addition to the [frontend moderation tools](../moderator_documentation/index.md), pod admins can use some extra tools for more powerful administration. Check out our [guide to the Django dashboard](django/index.md) and our [management script](manage_script/index.md) to get started."
msgstr ""

Wyświetl plik

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

Wyświetl plik

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -61,153 +61,149 @@ msgid "Download the `docker-compose` template. This contains information about t
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:49
msgid "Download the nginx templates. You need these to set up your reverse proxy."
msgid "That's it! You've set up your project files."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:56
msgid "That's it! You've set up your project files. The directory structure looks like this:"
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:66
#: ../../administrator_documentation/installation_docs/docker.md:51
msgid "2. Set up your environment file"
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:68
#: ../../administrator_documentation/installation_docs/docker.md:53
msgid "The environment file contains options you can use to control your Funkwhale pod. Follow these steps to get a working environment up and running."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:70
#: ../../administrator_documentation/installation_docs/docker.md:55
msgid "Download the `.env` template to your `/srv/funkwhale` directory."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:76
#: ../../administrator_documentation/installation_docs/docker.md:61
msgid "Update `FUNKWHALE_VERSION` in the `.env` file to the `$FUNKWHALE_VERSION` variable you set earlier."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:82
#: ../../administrator_documentation/installation_docs/docker.md:67
msgid "Reduce the permissions on your `.env` file to `600`. This means that only your user can read and write this file."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:88
#: ../../administrator_documentation/installation_docs/docker.md:73
msgid "Generate a secret key for Django. This keeps your Funkwhale data secure. Do not share this key with anybody."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:94
#: ../../administrator_documentation/installation_docs/docker.md:79
msgid "Open the `.env` file in a text editor. For this example, we will use `nano`."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:100
#: ../../administrator_documentation/installation_docs/docker.md:85
msgid "Update the following settings:"
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:101
#: ../../administrator_documentation/installation_docs/docker.md:86
msgid "Paste the secret key in the `DJANGO_SECRET_KEY` field."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:102
#: ../../administrator_documentation/installation_docs/docker.md:87
msgid "Populate the `FUNKWHALE_HOSTNAME` field with the URL of your server."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:104
#: ../../administrator_documentation/installation_docs/docker.md:89
msgid "Hit {kbd}`ctrl + x` then {kbd}`y` to save the file and close `nano`."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:106
#: ../../administrator_documentation/installation_docs/docker.md:91
msgid "You're done! Your environment file is now ready to go. You can check out a full list of configuration options in our Environment file guide."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:108
#: ../../administrator_documentation/installation_docs/docker.md:93
msgid "3. Set up Funkwhale"
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:110
#: ../../administrator_documentation/installation_docs/docker.md:95
msgid "Once you've filled in your environment file, you can set up Funkwhale. Follow these steps to create your database and create a superuser."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:112
#: ../../administrator_documentation/installation_docs/docker.md:97
msgid "Pull the containers to download all the required services."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:119
#: ../../administrator_documentation/installation_docs/docker.md:104
msgid "Bring up the database container so you can run the database migrations."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:125
#: ../../administrator_documentation/installation_docs/docker.md:110
msgid "Run the database migrations."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:132
#: ../../administrator_documentation/installation_docs/docker.md:117
msgid "You may see the following warning when applying migrations:"
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:138
#: ../../administrator_documentation/installation_docs/docker.md:123
msgid "You can safely ignore this warning."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:141
#: ../../administrator_documentation/installation_docs/docker.md:126
msgid "Create your superuser."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:147
#: ../../administrator_documentation/installation_docs/docker.md:132
msgid "Launch all the containers to bring up your pod."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:153
#: ../../administrator_documentation/installation_docs/docker.md:138
msgid "That's it! Your Funkwhale pod is now up and running."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:155
#: ../../administrator_documentation/installation_docs/docker.md:140
msgid "4. Set up your reverse proxy"
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:157
#: ../../administrator_documentation/installation_docs/docker.md:142
msgid "Funkwhale uses a reverse proxy to serve content to users. We use [Nginx](https://nginx.com) to serve this proxy. Follow this guide to install an Nginx configuration using details from your `.env` file."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:159
#: ../../administrator_documentation/installation_docs/docker.md:144
msgid "Install Nginx."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:166
#: ../../administrator_documentation/installation_docs/docker.md:151
msgid "Download the Nginx templates from Funkwhale."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:173
#: ../../administrator_documentation/installation_docs/docker.md:158
msgid "Create an Nginx template with details from your `.env` file."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:196
#: ../../administrator_documentation/installation_docs/docker.md:181
msgid "That's it! You've created your Nginx file. Run the following command to check the `.env` details populated correctly."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:202
#: ../../administrator_documentation/installation_docs/docker.md:187
msgid "5. Set up TLS"
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:204
#: ../../administrator_documentation/installation_docs/docker.md:189
msgid "To enable your users to connect to your pod securely, you need to set up {abbr}`TLS (Transport Layer Security)`. To do this, we recommend using the <acme.sh> script."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:206
#: ../../administrator_documentation/installation_docs/docker.md:191
msgid "Log in as the superuser account to run these commands."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:212
#: ../../administrator_documentation/installation_docs/docker.md:197
msgid "Create the `/etc/certs` folder to store the certificates."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:218
#: ../../administrator_documentation/installation_docs/docker.md:203
msgid "Download and run `acme.sh`. Replace `my@example.com` with your email address."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:224
#: ../../administrator_documentation/installation_docs/docker.md:209
msgid "Generate a certificate. Replace `example.com` with your Funkwhale pod name. Use `/srv/funkwhale/front` as your web root folder."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:230
#: ../../administrator_documentation/installation_docs/docker.md:215
msgid "Install the certificate to your Nginx config. Replace `example.com` with your Funkwhale pod name."
msgstr ""
#: ../../administrator_documentation/installation_docs/docker.md:239
msgid "That's it! acme.sh renews your certificate every 60 days, so you don't need to about renewing it."
#: ../../administrator_documentation/installation_docs/docker.md:224
msgid "That's it! acme.sh renews your certificate every 60 days, so you don't need to worry about renewing it."
msgstr ""

Wyświetl plik

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -21,6 +21,11 @@ msgstr ""
msgid "Choose your installation method"
msgstr ""
#: ../../administrator_documentation/installation_docs/index.md:23
#: ../../administrator_documentation/installation_docs/index.md:23
msgid "Migrate your installation"
msgstr ""
#: ../../administrator_documentation/installation_docs/index.md:1
msgid "Install Funkwhale on your server"
msgstr ""

Wyświetl plik

@ -0,0 +1,211 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../../administrator_documentation/installation_docs/migrate.md:1
msgid "Migrate to a new server"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:3
msgid "You can migrate your Funkwhale installation if you are setting up a new server. This can be useful if you are moving to a different hosting provider or upgrading your server."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:5
msgid "In this guide we refer to your servers like this:"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:0
msgid "Original server"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:9
msgid "The server on which you are running Funkwhale."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:3
msgid "Destination server"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:12
msgid "The server to which you want to move your Funkwhale installation."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:17
msgid "Make sure you [back up your data](../upgrade_docs/backup.md) before proceeding. This ensures you don't lose anything during the migration."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:24
msgid "Requirements"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:26
msgid "To get started with your new setup, you need to do the following:"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:28
msgid "[Set up SSH access between both servers](https://kerneltalks.com/howto/establish-passwordless-ssh-between-two-servers/)."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:29
msgid "Install [rsync](https://linux.die.net/man/1/rsync) on the {term}`destination server`."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:31
msgid "1. Install Funkwhale on your destination server"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:33
msgid "Before you move your data, you need to install Funkwhale on your {term}`destination server`."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:0
#: ../../administrator_documentation/installation_docs/migrate.md:0
#: ../../administrator_documentation/installation_docs/migrate.md:0
#: ../../administrator_documentation/installation_docs/migrate.md:0
msgid "Debian"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:37
msgid "On your {term}`destination server`, follow the [installation guide](debian.md). Skip the following steps:"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:39
msgid "Don't enable the `unaccent` and `citext` extensions when you set up the database."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:40
#: ../../administrator_documentation/installation_docs/migrate.md:55
msgid "Don't run the `manage.py migrate` command to migrate the database."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:41
#: ../../administrator_documentation/installation_docs/migrate.md:56
msgid "Don't create a superuser."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:43
#: ../../administrator_documentation/installation_docs/migrate.md:58
msgid "Once you have finished the installation, stop the Funkwhale services. These shouldn't be running when you copy your existing data over."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:0
#: ../../administrator_documentation/installation_docs/migrate.md:0
#: ../../administrator_documentation/installation_docs/migrate.md:0
#: ../../administrator_documentation/installation_docs/migrate.md:0
msgid "Docker"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:53
msgid "On your {term}`destination server`, follow the [installation guide](docker.md). Skip the following steps:"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:66
msgid "2. Create a database backup"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:68
msgid "You need to create a database backup on your {term}`original server` so that you can migrate your database. To do this, run the following command:"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:86
msgid "3. Copy files to your destination server"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:88
msgid "Next, you can copy your files from your {term}`original server` to your {term}`destination server`. You need to copy the following data:"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:90
msgid "Your `.env` file."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:91
msgid "The database backup."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:92
msgid "The `/srv/funkwhale/data/media` directory."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:93
msgid "The `/srv/funkwhale/data/music` directory."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:95
msgid "To do this:"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:97
msgid "Log in to your {term}`destination server`."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:98
msgid "Export your server hostname or IP address and your user name on the server. In this example, the IP address is `123.123.123.123` and the username is `funkwhale`."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:105
msgid "Use `rsync` to copy the information to your {term}`destination server`."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:114
msgid "4. Restore your database backup"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:116
msgid "When you've copied everything to the {term}`destination server`, you need to import your database backup. To do this:"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:120
msgid "Run the following on your {term}`destination server`:"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:126
#: ../../administrator_documentation/installation_docs/migrate.md:155
msgid "When the import finishes, run the `manage.py migrate` command to set up the database."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:137
msgid "You need to initialize the postgres container on your {term}`destination server`. To do this:"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:139
msgid "Export the permissions and create an `init.sql` database dump."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:149
msgid "Import your database backup."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:163
msgid "5. Check your DNS settings"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:165
msgid "Before you start Funkwhale on your {term}`destination server`, check your DNS changes have propogated. Once your hostname is pointing to your {term}`destination server's <destination server>` IP address, proceed to the next step."
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:167
msgid "6. Start your new Funkwhale installation"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:169
msgid "Once you confirm DNS points to your {term}`destination server`, start the Funkwhale services:"
msgstr ""
#: ../../administrator_documentation/installation_docs/migrate.md:185
msgid "That's it! You've migrated your Funkwhale instance to a new server."
msgstr ""

Wyświetl plik

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.3\n"
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-04 09:00+0200\n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

Some files were not shown because too many files have changed in this diff Show More