Rewrite admin documentation
This commit is contained in:
parent
f0857ae5fd
commit
17f1941b0b
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
Don’t 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
|
||||
|
||||
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.
|
||||
Don’t 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)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
All administrator documentation has been rewritten to improve clarity and update outdated information.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
|
@ -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.
|
|
@ -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.
|
|
@ -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"
|
|
@ -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
|
|
@ -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.
|
|
@ -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
|
|
@ -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``.
|
|
@ -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.
|
|
@ -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
|
|
@ -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.
|
|
@ -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>`.
|
||||
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
```
|
||||
|
||||
|
||||
````
|
|
@ -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
|
||||
|
||||
```
|
|
@ -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.
|
|
@ -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
|
||||
|
||||
```
|
|
@ -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.
|
||||
|
||||
```
|
|
@ -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.
|
||||
```
|
|
@ -0,0 +1,182 @@
|
|||
# Message Rewrite Facility (MRF)
|
||||
|
||||
Funkwhale includes a feature that mimics [Pleroma’s 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
|
||||
```
|
||||
|
||||
````
|
|
@ -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 server’s 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;
|
||||
}
|
||||
```
|
||||
|
||||
````
|
|
@ -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
|
||||
```
|
||||
|
||||
````
|
|
@ -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).
|
|
@ -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
|
||||
|
||||
```
|
|
@ -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
|
||||
```
|
||||
|
||||
````
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -19,3 +19,13 @@ debian
|
|||
third_party
|
||||
|
||||
```
|
||||
|
||||
```{toctree}
|
||||
---
|
||||
caption: Migrate your installation
|
||||
maxdepth: 1
|
||||
---
|
||||
|
||||
migrate
|
||||
|
||||
```
|
||||
|
|
|
@ -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.
|
|
@ -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
|
||||
```
|
||||
|
||||
````
|
|
@ -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
|
||||
```
|
||||
|
||||
````
|
|
@ -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
|
||||
|
||||
```
|
|
@ -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`
|
||||
```
|
|
@ -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
|
||||
```
|
||||
|
||||
```
|
|
@ -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.
|
|
@ -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
|
||||
```
|
||||
|
||||
````
|
|
@ -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 you’re 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 you’re 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.
|
|
@ -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.
|
|
@ -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
|
|
@ -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
|
||||
|
||||
```
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
||||
|
||||
```
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
||||
```
|
||||
|
||||
That’s it! You’ve 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.
|
|
@ -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>
|
||||
|
||||
```
|
|
@ -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.
|
61
docs/conf.py
61
docs/conf.py
|
@ -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)):
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
-------------------
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
```
|
||||
|
||||
|
|
|
@ -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>`.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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 .
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 "Don’t 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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 [Pleroma’s 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 ""
|
|
@ -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 server’s 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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
|
@ -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 ""
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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 ""
|
||||
|
|
|
@ -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 ""
|
||||
|
|
|
@ -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 ""
|
|
@ -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
Loading…
Reference in New Issue