Merge remote-tracking branch 'origin/develop' into instance_rules
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
commit
6051715a99
|
@ -83,6 +83,7 @@
|
||||||
# lanodan: I think PreferImplicitTry should be consistency, and the behaviour seems
|
# lanodan: I think PreferImplicitTry should be consistency, and the behaviour seems
|
||||||
# inconsistent, see: https://github.com/rrrene/credo/issues/224
|
# inconsistent, see: https://github.com/rrrene/credo/issues/224
|
||||||
{Credo.Check.Readability.PreferImplicitTry, false},
|
{Credo.Check.Readability.PreferImplicitTry, false},
|
||||||
|
{Credo.Check.Readability.PipeIntoAnonymousFunctions, exit_status: 0},
|
||||||
{Credo.Check.Readability.RedundantBlankLines},
|
{Credo.Check.Readability.RedundantBlankLines},
|
||||||
{Credo.Check.Readability.StringSigils},
|
{Credo.Check.Readability.StringSigils},
|
||||||
{Credo.Check.Readability.TrailingBlankLine},
|
{Credo.Check.Readability.TrailingBlankLine},
|
||||||
|
@ -90,6 +91,7 @@
|
||||||
{Credo.Check.Readability.VariableNames},
|
{Credo.Check.Readability.VariableNames},
|
||||||
{Credo.Check.Readability.Semicolons},
|
{Credo.Check.Readability.Semicolons},
|
||||||
{Credo.Check.Readability.SpaceAfterCommas},
|
{Credo.Check.Readability.SpaceAfterCommas},
|
||||||
|
{Credo.Check.Readability.WithSingleClause, exit_status: 0},
|
||||||
{Credo.Check.Refactor.DoubleBooleanNegation},
|
{Credo.Check.Refactor.DoubleBooleanNegation},
|
||||||
{Credo.Check.Refactor.CondStatements},
|
{Credo.Check.Refactor.CondStatements},
|
||||||
{Credo.Check.Refactor.CyclomaticComplexity},
|
{Credo.Check.Refactor.CyclomaticComplexity},
|
||||||
|
|
|
@ -48,6 +48,7 @@ docs/generated_config.md
|
||||||
# Code test coverage
|
# Code test coverage
|
||||||
/cover
|
/cover
|
||||||
/Elixir.*.coverdata
|
/Elixir.*.coverdata
|
||||||
|
/coverage.xml
|
||||||
|
|
||||||
.idea
|
.idea
|
||||||
pleroma.iml
|
pleroma.iml
|
||||||
|
|
408
.gitlab-ci.yml
408
.gitlab-ci.yml
|
@ -1,12 +1,22 @@
|
||||||
image: git.pleroma.social:5050/pleroma/pleroma/ci-base
|
image: git.pleroma.social:5050/pleroma/pleroma/ci-base
|
||||||
|
|
||||||
variables: &global_variables
|
variables: &global_variables
|
||||||
|
# Only used for the release
|
||||||
|
ELIXIR_VER: 1.12.3
|
||||||
POSTGRES_DB: pleroma_test
|
POSTGRES_DB: pleroma_test
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
DB_HOST: postgres
|
DB_HOST: postgres
|
||||||
|
DB_PORT: "5432"
|
||||||
MIX_ENV: test
|
MIX_ENV: test
|
||||||
|
|
||||||
|
workflow:
|
||||||
|
rules:
|
||||||
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||||
|
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
|
||||||
|
when: never
|
||||||
|
- if: $CI_COMMIT_BRANCH
|
||||||
|
|
||||||
cache: &global_cache_policy
|
cache: &global_cache_policy
|
||||||
key:
|
key:
|
||||||
files:
|
files:
|
||||||
|
@ -16,12 +26,14 @@ cache: &global_cache_policy
|
||||||
- _build
|
- _build
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
|
- check-changelog
|
||||||
- build
|
- build
|
||||||
- test
|
- test
|
||||||
- benchmark
|
- benchmark
|
||||||
- deploy
|
- deploy
|
||||||
- release
|
- release
|
||||||
- docker
|
- docker
|
||||||
|
- docker-combine
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- echo $MIX_ENV
|
- echo $MIX_ENV
|
||||||
|
@ -31,20 +43,49 @@ before_script:
|
||||||
after_script:
|
after_script:
|
||||||
- rm -rf _build/*/lib/pleroma
|
- rm -rf _build/*/lib/pleroma
|
||||||
|
|
||||||
build:
|
check-changelog:
|
||||||
stage: build
|
stage: check-changelog
|
||||||
only:
|
image: alpine
|
||||||
changes:
|
rules:
|
||||||
|
- if: $CI_MERGE_REQUEST_SOURCE_PROJECT_PATH == 'pleroma/pleroma' && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == 'weblate-extract'
|
||||||
|
when: never
|
||||||
|
- if: $CI_MERGE_REQUEST_SOURCE_PROJECT_PATH == 'pleroma/pleroma' && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == 'weblate'
|
||||||
|
when: never
|
||||||
|
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"
|
||||||
|
before_script: ''
|
||||||
|
after_script: ''
|
||||||
|
cache: {}
|
||||||
|
script:
|
||||||
|
- apk add git
|
||||||
|
- sh ./tools/check-changelog
|
||||||
|
|
||||||
|
.build_changes_policy:
|
||||||
|
rules:
|
||||||
|
- changes:
|
||||||
|
- ".gitlab-ci.yml"
|
||||||
- "**/*.ex"
|
- "**/*.ex"
|
||||||
- "**/*.exs"
|
- "**/*.exs"
|
||||||
- "mix.lock"
|
- "mix.lock"
|
||||||
|
|
||||||
|
.using-ci-base:
|
||||||
|
tags:
|
||||||
|
- amd64
|
||||||
|
|
||||||
|
build:
|
||||||
|
extends:
|
||||||
|
- .build_changes_policy
|
||||||
|
- .using-ci-base
|
||||||
|
stage: build
|
||||||
script:
|
script:
|
||||||
- mix compile --force
|
- mix compile --force
|
||||||
|
|
||||||
spec-build:
|
spec-build:
|
||||||
|
extends:
|
||||||
|
- .using-ci-base
|
||||||
stage: test
|
stage: test
|
||||||
only:
|
rules:
|
||||||
changes:
|
- changes:
|
||||||
|
- ".gitlab-ci.yml"
|
||||||
- "lib/pleroma/web/api_spec/**/*.ex"
|
- "lib/pleroma/web/api_spec/**/*.ex"
|
||||||
- "lib/pleroma/web/api_spec.ex"
|
- "lib/pleroma/web/api_spec.ex"
|
||||||
artifacts:
|
artifacts:
|
||||||
|
@ -54,12 +95,14 @@ spec-build:
|
||||||
- mix pleroma.openapi_spec spec.json
|
- mix pleroma.openapi_spec spec.json
|
||||||
|
|
||||||
benchmark:
|
benchmark:
|
||||||
|
extends:
|
||||||
|
- .using-ci-base
|
||||||
stage: benchmark
|
stage: benchmark
|
||||||
when: manual
|
when: manual
|
||||||
variables:
|
variables:
|
||||||
MIX_ENV: benchmark
|
MIX_ENV: benchmark
|
||||||
services:
|
services:
|
||||||
- name: postgres:9.6
|
- name: postgres:9.6-alpine
|
||||||
alias: postgres
|
alias: postgres
|
||||||
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
||||||
script:
|
script:
|
||||||
|
@ -68,40 +111,42 @@ benchmark:
|
||||||
- mix pleroma.load_testing
|
- mix pleroma.load_testing
|
||||||
|
|
||||||
unit-testing:
|
unit-testing:
|
||||||
|
extends:
|
||||||
|
- .build_changes_policy
|
||||||
|
- .using-ci-base
|
||||||
stage: test
|
stage: test
|
||||||
only:
|
|
||||||
changes:
|
|
||||||
- "**/*.ex"
|
|
||||||
- "**/*.exs"
|
|
||||||
- "mix.lock"
|
|
||||||
cache: &testing_cache_policy
|
cache: &testing_cache_policy
|
||||||
<<: *global_cache_policy
|
<<: *global_cache_policy
|
||||||
policy: pull
|
policy: pull
|
||||||
|
|
||||||
services:
|
services:
|
||||||
- name: postgres:13
|
- name: postgres:13-alpine
|
||||||
alias: postgres
|
alias: postgres
|
||||||
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
||||||
script:
|
script:
|
||||||
- mix ecto.create
|
- mix ecto.create
|
||||||
- mix ecto.migrate
|
- mix ecto.migrate
|
||||||
- mix coveralls --preload-modules
|
- mix test --cover --preload-modules
|
||||||
|
coverage: '/^Line total: ([^ ]*%)$/'
|
||||||
|
artifacts:
|
||||||
|
reports:
|
||||||
|
coverage_report:
|
||||||
|
coverage_format: cobertura
|
||||||
|
path: coverage.xml
|
||||||
|
|
||||||
unit-testing-erratic:
|
unit-testing-erratic:
|
||||||
|
extends:
|
||||||
|
- .build_changes_policy
|
||||||
|
- .using-ci-base
|
||||||
stage: test
|
stage: test
|
||||||
retry: 2
|
retry: 2
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
only:
|
|
||||||
changes:
|
|
||||||
- "**/*.ex"
|
|
||||||
- "**/*.exs"
|
|
||||||
- "mix.lock"
|
|
||||||
cache: &testing_cache_policy
|
cache: &testing_cache_policy
|
||||||
<<: *global_cache_policy
|
<<: *global_cache_policy
|
||||||
policy: pull
|
policy: pull
|
||||||
|
|
||||||
services:
|
services:
|
||||||
- name: postgres:13
|
- name: postgres:13-alpine
|
||||||
alias: postgres
|
alias: postgres
|
||||||
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
||||||
script:
|
script:
|
||||||
|
@ -109,32 +154,14 @@ unit-testing-erratic:
|
||||||
- mix ecto.migrate
|
- mix ecto.migrate
|
||||||
- mix test --only=erratic
|
- mix test --only=erratic
|
||||||
|
|
||||||
# Removed to fix CI issue. In this early state it wasn't adding much value anyway.
|
|
||||||
# TODO Fix and reinstate federated testing
|
|
||||||
# federated-testing:
|
|
||||||
# stage: test
|
|
||||||
# cache: *testing_cache_policy
|
|
||||||
# services:
|
|
||||||
# - name: minibikini/postgres-with-rum:12
|
|
||||||
# alias: postgres
|
|
||||||
# command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
|
||||||
# script:
|
|
||||||
# - mix deps.get
|
|
||||||
# - mix ecto.create
|
|
||||||
# - mix ecto.migrate
|
|
||||||
# - epmd -daemon
|
|
||||||
# - mix test --trace --only federated
|
|
||||||
|
|
||||||
unit-testing-rum:
|
unit-testing-rum:
|
||||||
|
extends:
|
||||||
|
- .build_changes_policy
|
||||||
|
- .using-ci-base
|
||||||
stage: test
|
stage: test
|
||||||
only:
|
|
||||||
changes:
|
|
||||||
- "**/*.ex"
|
|
||||||
- "**/*.exs"
|
|
||||||
- "mix.lock"
|
|
||||||
cache: *testing_cache_policy
|
cache: *testing_cache_policy
|
||||||
services:
|
services:
|
||||||
- name: minibikini/postgres-with-rum:12
|
- name: git.pleroma.social:5050/pleroma/pleroma/postgres-with-rum-13
|
||||||
alias: postgres
|
alias: postgres
|
||||||
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
||||||
variables:
|
variables:
|
||||||
|
@ -147,15 +174,13 @@ unit-testing-rum:
|
||||||
- mix test --preload-modules
|
- mix test --preload-modules
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
image: elixir:1.12
|
extends: .build_changes_policy
|
||||||
|
image: ¤t_elixir elixir:1.13-alpine
|
||||||
stage: test
|
stage: test
|
||||||
only:
|
|
||||||
changes:
|
|
||||||
- "**/*.ex"
|
|
||||||
- "**/*.exs"
|
|
||||||
- "mix.lock"
|
|
||||||
cache: *testing_cache_policy
|
cache: *testing_cache_policy
|
||||||
before_script:
|
before_script: ¤t_bfr_script
|
||||||
|
- apk update
|
||||||
|
- apk add build-base cmake file-dev git openssl
|
||||||
- mix local.hex --force
|
- mix local.hex --force
|
||||||
- mix local.rebar --force
|
- mix local.rebar --force
|
||||||
- mix deps.get
|
- mix deps.get
|
||||||
|
@ -163,31 +188,20 @@ lint:
|
||||||
- mix format --check-formatted
|
- mix format --check-formatted
|
||||||
|
|
||||||
analysis:
|
analysis:
|
||||||
|
extends:
|
||||||
|
- .build_changes_policy
|
||||||
|
- .using-ci-base
|
||||||
stage: test
|
stage: test
|
||||||
only:
|
|
||||||
changes:
|
|
||||||
- "**/*.ex"
|
|
||||||
- "**/*.exs"
|
|
||||||
- "mix.lock"
|
|
||||||
cache: *testing_cache_policy
|
cache: *testing_cache_policy
|
||||||
script:
|
script:
|
||||||
- mix credo --strict --only=warnings,todo,fixme,consistency,readability
|
- mix credo --strict --only=warnings,todo,fixme,consistency,readability
|
||||||
|
|
||||||
cycles:
|
cycles:
|
||||||
|
extends: .build_changes_policy
|
||||||
|
image: *current_elixir
|
||||||
stage: test
|
stage: test
|
||||||
image: elixir:1.11
|
|
||||||
only:
|
|
||||||
changes:
|
|
||||||
- "**/*.ex"
|
|
||||||
- "**/*.exs"
|
|
||||||
- "mix.lock"
|
|
||||||
cache: {}
|
cache: {}
|
||||||
before_script:
|
before_script: *current_bfr_script
|
||||||
- mix local.hex --force
|
|
||||||
- mix local.rebar --force
|
|
||||||
- mix deps.get
|
|
||||||
- apt-get update
|
|
||||||
- apt-get install cmake libmagic-dev -y
|
|
||||||
script:
|
script:
|
||||||
- mix compile
|
- mix compile
|
||||||
- mix xref graph --format cycles --label compile | awk '{print $0} END{exit ($0 != "No cycles found")}'
|
- mix xref graph --format cycles --label compile | awk '{print $0} END{exit ($0 != "No cycles found")}'
|
||||||
|
@ -202,7 +216,7 @@ docs-deploy:
|
||||||
before_script:
|
before_script:
|
||||||
- apk add curl
|
- apk add curl
|
||||||
script:
|
script:
|
||||||
- curl -X POST -F"token=$DOCS_PIPELINE_TRIGGER" -F'ref=master' -F"variables[BRANCH]=$CI_COMMIT_REF_NAME" https://git.pleroma.social/api/v4/projects/673/trigger/pipeline
|
- curl --fail-with-body -X POST -F"token=$CI_JOB_TOKEN" -F'ref=master' -F"variables[BRANCH]=$CI_COMMIT_REF_NAME" https://git.pleroma.social/api/v4/projects/673/trigger/pipeline
|
||||||
review_app:
|
review_app:
|
||||||
image: alpine:3.9
|
image: alpine:3.9
|
||||||
stage: deploy
|
stage: deploy
|
||||||
|
@ -243,7 +257,7 @@ spec-deploy:
|
||||||
before_script:
|
before_script:
|
||||||
- apk add curl
|
- apk add curl
|
||||||
script:
|
script:
|
||||||
- curl -X POST -F"token=$API_DOCS_PIPELINE_TRIGGER" -F'ref=master' -F"variables[BRANCH]=$CI_COMMIT_REF_NAME" -F"variables[JOB_REF]=$CI_JOB_ID" https://git.pleroma.social/api/v4/projects/1130/trigger/pipeline
|
- curl --fail-with-body -X POST -F"token=$CI_JOB_TOKEN" -F'ref=master' -F"variables[BRANCH]=$CI_COMMIT_REF_NAME" -F"variables[JOB_REF]=$CI_JOB_ID" https://git.pleroma.social/api/v4/projects/1130/trigger/pipeline
|
||||||
|
|
||||||
|
|
||||||
stop_review_app:
|
stop_review_app:
|
||||||
|
@ -266,12 +280,14 @@ stop_review_app:
|
||||||
|
|
||||||
amd64:
|
amd64:
|
||||||
stage: release
|
stage: release
|
||||||
image: elixir:1.10.4
|
image: elixir:$ELIXIR_VER
|
||||||
only: &release-only
|
only: &release-only
|
||||||
- stable@pleroma/pleroma
|
- stable@pleroma/pleroma
|
||||||
- develop@pleroma/pleroma
|
- develop@pleroma/pleroma
|
||||||
- /^maint/.*$/@pleroma/pleroma
|
- /^maint/.*$/@pleroma/pleroma
|
||||||
- /^release/.*$/@pleroma/pleroma
|
- /^release/.*$/@pleroma/pleroma
|
||||||
|
tags:
|
||||||
|
- amd64
|
||||||
artifacts: &release-artifacts
|
artifacts: &release-artifacts
|
||||||
name: "pleroma-$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA-$CI_JOB_NAME"
|
name: "pleroma-$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA-$CI_JOB_NAME"
|
||||||
paths:
|
paths:
|
||||||
|
@ -288,9 +304,10 @@ amd64:
|
||||||
- deps
|
- deps
|
||||||
variables: &release-variables
|
variables: &release-variables
|
||||||
MIX_ENV: prod
|
MIX_ENV: prod
|
||||||
|
VIX_COMPILATION_MODE: PLATFORM_PROVIDED_LIBVIPS
|
||||||
before_script: &before-release
|
before_script: &before-release
|
||||||
- apt-get update && apt-get install -y cmake libmagic-dev
|
- apt-get update && apt-get install -y cmake libmagic-dev libvips-dev erlang-dev
|
||||||
- echo "import Mix.Config" > config/prod.secret.exs
|
- echo "import Config" > config/prod.secret.exs
|
||||||
- mix local.hex --force
|
- mix local.hex --force
|
||||||
- mix local.rebar --force
|
- mix local.rebar --force
|
||||||
script: &release
|
script: &release
|
||||||
|
@ -304,12 +321,14 @@ amd64-musl:
|
||||||
stage: release
|
stage: release
|
||||||
artifacts: *release-artifacts
|
artifacts: *release-artifacts
|
||||||
only: *release-only
|
only: *release-only
|
||||||
image: elixir:1.10.4-alpine
|
image: elixir:$ELIXIR_VER-alpine
|
||||||
|
tags:
|
||||||
|
- amd64
|
||||||
cache: *release-cache
|
cache: *release-cache
|
||||||
variables: *release-variables
|
variables: *release-variables
|
||||||
before_script: &before-release-musl
|
before_script: &before-release-musl
|
||||||
- apk add git gcc g++ musl-dev make cmake file-dev
|
- apk add git build-base cmake file-dev openssl vips-dev
|
||||||
- echo "import Mix.Config" > config/prod.secret.exs
|
- echo "import Config" > config/prod.secret.exs
|
||||||
- mix local.hex --force
|
- mix local.hex --force
|
||||||
- mix local.rebar --force
|
- mix local.rebar --force
|
||||||
script: *release
|
script: *release
|
||||||
|
@ -320,7 +339,7 @@ arm:
|
||||||
only: *release-only
|
only: *release-only
|
||||||
tags:
|
tags:
|
||||||
- arm32-specified
|
- arm32-specified
|
||||||
image: arm32v7/elixir:1.10.4
|
image: arm32v7/elixir:$ELIXIR_VER
|
||||||
cache: *release-cache
|
cache: *release-cache
|
||||||
variables: *release-variables
|
variables: *release-variables
|
||||||
before_script: *before-release
|
before_script: *before-release
|
||||||
|
@ -332,7 +351,7 @@ arm-musl:
|
||||||
only: *release-only
|
only: *release-only
|
||||||
tags:
|
tags:
|
||||||
- arm32-specified
|
- arm32-specified
|
||||||
image: arm32v7/elixir:1.10.4-alpine
|
image: arm32v7/elixir:$ELIXIR_VER-alpine
|
||||||
cache: *release-cache
|
cache: *release-cache
|
||||||
variables: *release-variables
|
variables: *release-variables
|
||||||
before_script: *before-release-musl
|
before_script: *before-release-musl
|
||||||
|
@ -344,7 +363,7 @@ arm64:
|
||||||
only: *release-only
|
only: *release-only
|
||||||
tags:
|
tags:
|
||||||
- arm
|
- arm
|
||||||
image: arm64v8/elixir:1.10.4
|
image: arm64v8/elixir:$ELIXIR_VER
|
||||||
cache: *release-cache
|
cache: *release-cache
|
||||||
variables: *release-variables
|
variables: *release-variables
|
||||||
before_script: *before-release
|
before_script: *before-release
|
||||||
|
@ -356,110 +375,173 @@ arm64-musl:
|
||||||
only: *release-only
|
only: *release-only
|
||||||
tags:
|
tags:
|
||||||
- arm
|
- arm
|
||||||
image: arm64v8/elixir:1.10.4-alpine
|
image: arm64v8/elixir:$ELIXIR_VER-alpine
|
||||||
cache: *release-cache
|
cache: *release-cache
|
||||||
variables: *release-variables
|
variables: *release-variables
|
||||||
before_script: *before-release-musl
|
before_script: *before-release-musl
|
||||||
script: *release
|
script: *release
|
||||||
|
|
||||||
docker:
|
.kaniko:
|
||||||
stage: docker
|
stage: docker
|
||||||
image: docker:latest
|
image:
|
||||||
|
name: gcr.io/kaniko-project/executor:debug
|
||||||
|
entrypoint: [""]
|
||||||
cache: {}
|
cache: {}
|
||||||
dependencies: []
|
dependencies: []
|
||||||
variables: &docker-variables
|
before_script: &before-kaniko
|
||||||
DOCKER_DRIVER: overlay2
|
|
||||||
DOCKER_HOST: unix:///var/run/docker.sock
|
|
||||||
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
|
|
||||||
IMAGE_TAG_SLUG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
|
|
||||||
IMAGE_TAG_LATEST: $CI_REGISTRY_IMAGE:latest
|
|
||||||
IMAGE_TAG_LATEST_STABLE: $CI_REGISTRY_IMAGE:latest-stable
|
|
||||||
DOCKER_BUILDX_URL: https://github.com/docker/buildx/releases/download/v0.6.3/buildx-v0.6.3.linux-amd64
|
|
||||||
DOCKER_BUILDX_HASH: 980e6b9655f971991fbbb5fd6cd19f1672386195
|
|
||||||
before_script: &before-docker
|
|
||||||
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
|
||||||
- docker pull $IMAGE_TAG_SLUG || true
|
|
||||||
- export CI_JOB_TIMESTAMP=$(date --utc -Iseconds)
|
- export CI_JOB_TIMESTAMP=$(date --utc -Iseconds)
|
||||||
- export CI_VCS_REF=$CI_COMMIT_SHORT_SHA
|
- export CI_VCS_REF=$CI_COMMIT_SHORT_SHA
|
||||||
allow_failure: true
|
- export IMAGE_TAG=$CI_REGISTRY_IMAGE/$BUILD_ARCH_IMG_SUFFIX:$CI_COMMIT_SHORT_SHA
|
||||||
script:
|
- export IMAGE_TAG_SLUG=$CI_REGISTRY_IMAGE/$BUILD_ARCH_IMG_SUFFIX:$CI_COMMIT_REF_SLUG
|
||||||
- mkdir -p /root/.docker/cli-plugins
|
- export IMAGE_TAG_LATEST=$CI_REGISTRY_IMAGE/$BUILD_ARCH_IMG_SUFFIX:latest
|
||||||
- wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx
|
- export IMAGE_TAG_LATEST_STABLE=$CI_REGISTRY_IMAGE/$BUILD_ARCH_IMG_SUFFIX:latest-stable
|
||||||
- echo "${DOCKER_BUILDX_HASH} /root/.docker/cli-plugins/docker-buildx" | sha1sum -c
|
- mkdir -p /kaniko/.docker
|
||||||
- chmod +x ~/.docker/cli-plugins/docker-buildx
|
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
|
||||||
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
||||||
- docker buildx create --name mbuilder --driver docker-container --use
|
.kaniko-latest:
|
||||||
- docker buildx inspect --bootstrap
|
extends: .kaniko
|
||||||
- docker buildx build --platform linux/amd64,linux/arm/v7,linux/arm64/v8 --push --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST .
|
|
||||||
tags:
|
|
||||||
- dind
|
|
||||||
only:
|
only:
|
||||||
- develop@pleroma/pleroma
|
- develop@pleroma/pleroma
|
||||||
|
|
||||||
docker-stable:
|
|
||||||
stage: docker
|
|
||||||
image: docker:latest
|
|
||||||
cache: {}
|
|
||||||
dependencies: []
|
|
||||||
variables: *docker-variables
|
|
||||||
before_script: *before-docker
|
|
||||||
allow_failure: true
|
|
||||||
script:
|
script:
|
||||||
- mkdir -p /root/.docker/cli-plugins
|
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --custom-platform=$BUILD_ARCH --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP --build-arg ELIXIR_IMG=$ELIXIR_IMG --destination $IMAGE_TAG --destination $IMAGE_TAG_SLUG --destination $IMAGE_TAG_LATEST
|
||||||
- wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx
|
|
||||||
- echo "${DOCKER_BUILDX_HASH} /root/.docker/cli-plugins/docker-buildx" | sha1sum -c
|
.kaniko-stable:
|
||||||
- chmod +x ~/.docker/cli-plugins/docker-buildx
|
extends: .kaniko
|
||||||
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
||||||
- docker buildx create --name mbuilder --driver docker-container --use
|
|
||||||
- docker buildx inspect --bootstrap
|
|
||||||
- docker buildx build --platform linux/amd64,linux/arm/v7,linux/arm64/v8 --push --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST_STABLE .
|
|
||||||
tags:
|
|
||||||
- dind
|
|
||||||
only:
|
only:
|
||||||
- stable@pleroma/pleroma
|
- stable@pleroma/pleroma
|
||||||
|
script:
|
||||||
|
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --custom-platform=$BUILD_ARCH --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP --build-arg ELIXIR_IMG=$ELIXIR_IMG --destination $IMAGE_TAG --destination $IMAGE_TAG_SLUG --destination $IMAGE_TAG_LATEST_STABLE
|
||||||
|
|
||||||
docker-release:
|
.kaniko-release:
|
||||||
stage: docker
|
extends: .kaniko
|
||||||
image: docker:latest
|
|
||||||
cache: {}
|
|
||||||
dependencies: []
|
|
||||||
variables: *docker-variables
|
|
||||||
before_script: *before-docker
|
|
||||||
allow_failure: true
|
|
||||||
script:
|
|
||||||
script:
|
|
||||||
- mkdir -p /root/.docker/cli-plugins
|
|
||||||
- wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx
|
|
||||||
- echo "${DOCKER_BUILDX_HASH} /root/.docker/cli-plugins/docker-buildx" | sha1sum -c
|
|
||||||
- chmod +x ~/.docker/cli-plugins/docker-buildx
|
|
||||||
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
||||||
- docker buildx create --name mbuilder --driver docker-container --use
|
|
||||||
- docker buildx inspect --bootstrap
|
|
||||||
- docker buildx build --platform linux/amd64,linux/arm/v7,linux/arm64/v8 --push --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG .
|
|
||||||
tags:
|
|
||||||
- dind
|
|
||||||
only:
|
only:
|
||||||
- /^release/.*$/@pleroma/pleroma
|
- /^release/.*$/@pleroma/pleroma
|
||||||
|
script:
|
||||||
|
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --custom-platform=$BUILD_ARCH --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP --build-arg ELIXIR_IMG=$ELIXIR_IMG --destination $IMAGE_TAG --destination $IMAGE_TAG_SLUG
|
||||||
|
|
||||||
docker-adhoc:
|
.kaniko-adhoc:
|
||||||
stage: docker
|
extends: .kaniko
|
||||||
image: docker:latest
|
|
||||||
cache: {}
|
|
||||||
dependencies: []
|
|
||||||
variables: *docker-variables
|
|
||||||
before_script: *before-docker
|
|
||||||
allow_failure: true
|
|
||||||
script:
|
|
||||||
script:
|
|
||||||
- mkdir -p /root/.docker/cli-plugins
|
|
||||||
- wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx
|
|
||||||
- echo "${DOCKER_BUILDX_HASH} /root/.docker/cli-plugins/docker-buildx" | sha1sum -c
|
|
||||||
- chmod +x ~/.docker/cli-plugins/docker-buildx
|
|
||||||
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
||||||
- docker buildx create --name mbuilder --driver docker-container --use
|
|
||||||
- docker buildx inspect --bootstrap
|
|
||||||
- docker buildx build --platform linux/amd64,linux/arm/v7,linux/arm64/v8 --push --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG .
|
|
||||||
tags:
|
|
||||||
- dind
|
|
||||||
only:
|
only:
|
||||||
- /^build-docker/.*$/@pleroma/pleroma
|
- /^build-docker/.*$/@pleroma/pleroma
|
||||||
|
script:
|
||||||
|
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --custom-platform=$BUILD_ARCH --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP --build-arg ELIXIR_IMG=$ELIXIR_IMG --destination $IMAGE_TAG --destination $IMAGE_TAG_SLUG
|
||||||
|
|
||||||
|
.kaniko:linux/amd64:
|
||||||
|
variables:
|
||||||
|
BUILD_ARCH: linux/amd64
|
||||||
|
BUILD_ARCH_IMG_SUFFIX: linux-amd64
|
||||||
|
ELIXIR_IMG: hexpm/elixir
|
||||||
|
tags:
|
||||||
|
- amd64
|
||||||
|
|
||||||
|
.kaniko:linux/arm64:
|
||||||
|
variables:
|
||||||
|
BUILD_ARCH: linux/arm64/v8
|
||||||
|
BUILD_ARCH_IMG_SUFFIX: linux-arm64-v8
|
||||||
|
ELIXIR_IMG: hexpm/elixir
|
||||||
|
tags:
|
||||||
|
- arm
|
||||||
|
|
||||||
|
.kaniko:linux/arm:
|
||||||
|
variables:
|
||||||
|
BUILD_ARCH: linux/arm/v7
|
||||||
|
BUILD_ARCH_IMG_SUFFIX: linux-arm-v7
|
||||||
|
ELIXIR_IMG: git.pleroma.social:5050/pleroma/ci-image/elixir-linux-arm-v7
|
||||||
|
tags:
|
||||||
|
- arm32-specified
|
||||||
|
|
||||||
|
kaniko-latest:linux/amd64:
|
||||||
|
extends:
|
||||||
|
- .kaniko-latest
|
||||||
|
- .kaniko:linux/amd64
|
||||||
|
|
||||||
|
kaniko-latest:linux/arm64:
|
||||||
|
extends:
|
||||||
|
- .kaniko-latest
|
||||||
|
- .kaniko:linux/arm64
|
||||||
|
|
||||||
|
kaniko-latest:linux/arm:
|
||||||
|
extends:
|
||||||
|
- .kaniko-latest
|
||||||
|
- .kaniko:linux/arm
|
||||||
|
|
||||||
|
kaniko-stable:linux/amd64:
|
||||||
|
extends:
|
||||||
|
- .kaniko-stable
|
||||||
|
- .kaniko:linux/amd64
|
||||||
|
|
||||||
|
kaniko-stable:linux/arm64:
|
||||||
|
extends:
|
||||||
|
- .kaniko-stable
|
||||||
|
- .kaniko:linux/arm64
|
||||||
|
|
||||||
|
kaniko-stable:linux/arm:
|
||||||
|
extends:
|
||||||
|
- .kaniko-stable
|
||||||
|
- .kaniko:linux/arm
|
||||||
|
|
||||||
|
kaniko-release:linux/amd64:
|
||||||
|
extends:
|
||||||
|
- .kaniko-release
|
||||||
|
- .kaniko:linux/amd64
|
||||||
|
|
||||||
|
kaniko-release:linux/arm64:
|
||||||
|
extends:
|
||||||
|
- .kaniko-release
|
||||||
|
- .kaniko:linux/arm64
|
||||||
|
|
||||||
|
kaniko-release:linux/arm:
|
||||||
|
extends:
|
||||||
|
- .kaniko-release
|
||||||
|
- .kaniko:linux/arm
|
||||||
|
|
||||||
|
.docker-combine:
|
||||||
|
stage: docker-combine
|
||||||
|
image: docker:cli
|
||||||
|
cache: {}
|
||||||
|
before_script:
|
||||||
|
- 'BUILD_ARCHES="linux-amd64 linux-arm64-v8 linux-arm-v7"'
|
||||||
|
- export IMAGE_TAG=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
|
||||||
|
- export IMAGE_TAG_SLUG=$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
|
||||||
|
- export IMAGE_TAG_LATEST=$CI_REGISTRY_IMAGE:latest
|
||||||
|
- export IMAGE_TAG_LATEST_STABLE=$CI_REGISTRY_IMAGE:latest-stable
|
||||||
|
- 'IMAGES=; for arch in $BUILD_ARCHES; do IMAGES="$IMAGES $CI_REGISTRY_IMAGE/$arch:$CI_COMMIT_SHORT_SHA"; done'
|
||||||
|
- 'IMAGES_SLUG=; for arch in $BUILD_ARCHES; do IMAGES_SLUG="$IMAGES_SLUG $CI_REGISTRY_IMAGE/$arch:$CI_COMMIT_REF_SLUG"; done'
|
||||||
|
- 'IMAGES_LATEST=; for arch in $BUILD_ARCHES; do IMAGES_LATEST="$IMAGES_LATEST $CI_REGISTRY_IMAGE/$arch:latest"; done'
|
||||||
|
- 'IMAGES_LATEST_STABLE=; for arch in $BUILD_ARCHES; do IMAGES_LATEST_STABLE="$IMAGES_LATEST_STABLE $CI_REGISTRY_IMAGE/$arch:latest"; done'
|
||||||
|
- mkdir -p ~/.docker
|
||||||
|
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > ~/.docker/config.json
|
||||||
|
|
||||||
|
docker-combine:latest:
|
||||||
|
extends: .docker-combine
|
||||||
|
only:
|
||||||
|
- develop@pleroma/pleroma
|
||||||
|
script:
|
||||||
|
- 'docker manifest create $IMAGE_TAG $IMAGES'
|
||||||
|
- 'docker manifest push $IMAGE_TAG'
|
||||||
|
- 'docker manifest create $IMAGE_TAG_SLUG $IMAGES_SLUG'
|
||||||
|
- 'docker manifest push $IMAGE_TAG_SLUG'
|
||||||
|
- 'docker manifest create $IMAGE_TAG_LATEST $IMAGES_LATEST'
|
||||||
|
- 'docker manifest push $IMAGE_TAG_LATEST'
|
||||||
|
|
||||||
|
docker-combine:stable:
|
||||||
|
extends: .docker-combine
|
||||||
|
only:
|
||||||
|
- stable@pleroma/pleroma
|
||||||
|
script:
|
||||||
|
- 'docker manifest create $IMAGE_TAG $IMAGES'
|
||||||
|
- 'docker manifest push $IMAGE_TAG'
|
||||||
|
- 'docker manifest create $IMAGE_TAG_SLUG $IMAGES_SLUG'
|
||||||
|
- 'docker manifest push $IMAGE_TAG_SLUG'
|
||||||
|
- 'docker manifest create $IMAGE_TAG_LATEST_STABLE $IMAGES_LATEST_STABLE'
|
||||||
|
- 'docker manifest push $IMAGE_TAG_LATEST_STABLE'
|
||||||
|
|
||||||
|
docker-combine:release:
|
||||||
|
extends: .docker-combine
|
||||||
|
only:
|
||||||
|
- /^release/.*$/@pleroma/pleroma
|
||||||
|
script:
|
||||||
|
- 'docker manifest create $IMAGE_TAG $IMAGES'
|
||||||
|
- 'docker manifest push $IMAGE_TAG'
|
||||||
|
- 'docker manifest create $IMAGE_TAG_SLUG $IMAGES_SLUG'
|
||||||
|
- 'docker manifest push $IMAGE_TAG_SLUG'
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
### Checklist
|
||||||
|
- [ ] Adding a changelog: In the `changelog.d` directory, create a file named `<code>.<type>`.
|
||||||
|
|
||||||
|
`<code>` can be anything, but we recommend using a more or less unique identifier to avoid collisions, such as the branch name.
|
||||||
|
|
||||||
|
`<type>` can be `add`, `change`, `remove`, `fix`, `security` or `skip`. `skip` is only used if there is no user-visible change in the MR (for example, only editing comments in the code). Otherwise, choose a type that corresponds to your change.
|
||||||
|
|
||||||
|
In the file, write the changelog entry. For example, if an MR adds group functionality, we can create a file named `group.add` and write `Add group functionality` in it.
|
||||||
|
|
||||||
|
If one changelog entry is not enough, you may add more. But that might mean you can split it into two MRs. Only use more than one changelog entry if you really need to (for example, when one change in the code fix two different bugs, or when refactoring).
|
|
@ -1,6 +1,8 @@
|
||||||
### Release checklist
|
### Release checklist
|
||||||
* [ ] Bump version in `mix.exs`
|
* [ ] Bump version in `mix.exs`
|
||||||
* [ ] Compile a changelog
|
* [ ] Compile a changelog with the `tools/collect-changelog` script
|
||||||
* [ ] Create an MR with an announcement to pleroma.social
|
* [ ] Create an MR with an announcement to pleroma.social
|
||||||
* [ ] Tag the release
|
#### post-merge
|
||||||
|
* [ ] Tag the release on the merge commit
|
||||||
|
* [ ] Make the tag into a Gitlab Release™
|
||||||
* [ ] Merge `stable` into `develop` (in case the fixes are already in develop, use `git merge -s ours --no-commit` and manually merge the changelogs)
|
* [ ] Merge `stable` into `develop` (in case the fixes are already in develop, use `git merge -s ours --no-commit` and manually merge the changelogs)
|
||||||
|
|
161
CHANGELOG.md
161
CHANGELOG.md
|
@ -4,21 +4,147 @@ All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
|
|
||||||
## Unreleased
|
## 2.6.1
|
||||||
|
### Changed
|
||||||
|
- - Document maximum supported version of Erlang & Elixir
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- [docs] add frontends management documentation
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- TwitterAPI: Return proper error when healthcheck is disabled
|
||||||
|
- Fix eblurhash and elixir-captcha not using system cflags
|
||||||
|
|
||||||
|
## 2.6.0
|
||||||
|
### Security
|
||||||
|
- Preload: Make generated JSON html-safe. It already was html safe because it only consists of config data that is base64 encoded, but this will keep it safe it that ever changes.
|
||||||
|
- CommonAPI: Prevent users from accessing media of other users by creating a status with reused attachment ID
|
||||||
|
- Disable XML entity resolution completely to fix a dos vulnerability
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Support for Image activities, namely from Hubzilla
|
||||||
|
- Add OAuth scope descriptions
|
||||||
|
- Allow lang attribute in status text
|
||||||
|
- OnlyMedia Upload Filter
|
||||||
|
- Implement MRF policy to reject or delist according to emojis
|
||||||
|
- (hardening) Add no_new_privs=yes to OpenRC service files
|
||||||
|
- Implement quotes
|
||||||
|
- Add unified streaming endpoint
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- rel="me" was missing its cache
|
||||||
|
- MediaProxy responses now return a sandbox CSP header
|
||||||
|
- Filter context activities using Visibility.visible_for_user?
|
||||||
|
- UploadedMedia: Add missing disposition_type to Content-Disposition
|
||||||
|
- fix not being able to fetch flash file from remote instance
|
||||||
|
- Fix abnormal behaviour when refetching a poll
|
||||||
|
- Allow non-HTTP(s) URIs in "url" fields for compatibility with "FEP-fffd: Proxy Objects"
|
||||||
|
- Fix opengraph and twitter card meta tags
|
||||||
|
- ForceMentionsInContent: fix double mentions for Mastodon/Misskey posts
|
||||||
|
- OEmbed HTML tags are now filtered
|
||||||
|
- Restrict attachments to only uploaded files only
|
||||||
|
- Fix error 404 when deleting status of a banned user
|
||||||
|
- Fix config ownership in dockerfile to pass restriction test
|
||||||
|
- Fix user fetch completely broken if featured collection is not in a supported form
|
||||||
|
- Correctly handle the situation when a poll has both "anyOf" and "oneOf" but one of them being empty
|
||||||
|
- Fix handling report from a deactivated user
|
||||||
|
- Prevent using the .json format to bypass authorized fetch mode
|
||||||
|
- Fix mentioning punycode domains when using Markdown
|
||||||
|
- Show more informative errors when profile exceeds char limits
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- BREAKING: Support for passwords generated with `crypt(3)` (Gnu Social migration artifact)
|
||||||
|
- remove BBS/SSH feature, replaced by an external bridge.
|
||||||
|
- Remove a few unused indexes.
|
||||||
|
- Cleanup OStatus-era user upgrades and ap_enabled indicator
|
||||||
|
- Deprecate Pleroma's audio scrobbling
|
||||||
|
|
||||||
|
## 2.5.4
|
||||||
|
|
||||||
|
## Security
|
||||||
|
- Fix XML External Entity (XXE) loading vulnerability allowing to fetch arbitary files from the server's filesystem
|
||||||
|
|
||||||
|
## 2.5.3
|
||||||
|
|
||||||
|
### Security
|
||||||
|
- Emoji pack loader sanitizes pack names
|
||||||
|
- Reduced permissions of config files and directories, distros requiring greater permissions like group-read need to pre-create the directories
|
||||||
|
|
||||||
|
## 2.5.5
|
||||||
|
|
||||||
|
## Security
|
||||||
|
- Prevent users from accessing media of other users by creating a status with reused attachment ID
|
||||||
|
|
||||||
|
## 2.5.4
|
||||||
|
|
||||||
|
## Security
|
||||||
|
- Fix XML External Entity (XXE) loading vulnerability allowing to fetch arbitary files from the server's filesystem
|
||||||
|
|
||||||
|
## 2.5.3
|
||||||
|
|
||||||
|
### Security
|
||||||
|
- Emoji pack loader sanitizes pack names
|
||||||
|
- Reduced permissions of config files and directories, distros requiring greater permissions like group-read need to pre-create the directories
|
||||||
|
|
||||||
|
## 2.5.2
|
||||||
|
|
||||||
|
### Security
|
||||||
|
- `/proxy` endpoint now sets a Content-Security-Policy (sandbox)
|
||||||
|
- WebSocket endpoint now respects unauthenticated restrictions for streams of public posts
|
||||||
|
- OEmbed HTML tags are now filtered
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- docs: Be more explicit about the level of compatibility of OTP releases
|
||||||
|
- Set default background worker timeout to 15 minutes
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Atom/RSS formatting (HTML truncation, published, missing summary)
|
||||||
|
- Remove `static_fe` pipeline for `/users/:nickname/feed`
|
||||||
|
- Stop oban from retrying if validating errors occur when processing incoming data
|
||||||
|
- Make sure object refetching as used by already received polls follows MRF rules
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- BREAKING: Support for passwords generated with `crypt(3)` (Gnu Social migration artifact)
|
||||||
|
|
||||||
|
## 2.5.1
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Allow customizing instance languages
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Security: uploading HTTP endpoint can no longer create directories in the upload dir (internal APIs, like backup, still can do it.)
|
||||||
|
- ~ character in urls in Markdown posts are handled properly
|
||||||
|
- Exiftool upload filter will now ignore SVG files
|
||||||
|
- Fix `block_from_stranger` setting
|
||||||
|
- Fix rel="me"
|
||||||
|
- Docker images will now run properly
|
||||||
|
- Fix inproper content being cached in report content
|
||||||
|
- Notification filter on object content will not operate on the ones that inherently have no content
|
||||||
|
- ZWNJ and double dots in links are parsed properly for Plain-text posts
|
||||||
|
- OTP releases will work on systems with a newer libcrypt
|
||||||
|
- Errors when running Exiftool.ReadDescription filter will not be filled into the image description
|
||||||
|
|
||||||
|
## 2.5.0 - 2022-12-23
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
|
|
||||||
- MastoFE
|
- MastoFE
|
||||||
|
- Quack, the logging backend that pushes to Slack channels
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
- **Breaking:** Elixir >=1.11 is now required (was >= 1.9)
|
||||||
- Allow users to remove their emails if instance does not need email to register
|
- Allow users to remove their emails if instance does not need email to register
|
||||||
|
- Uploadfilter `Pleroma.Upload.Filter.Exiftool` has been renamed to `Pleroma.Upload.Filter.Exiftool.StripLocation`
|
||||||
|
- **Breaking**: `/api/v1/pleroma/backups` endpoints now requires `read:backups` scope instead of `read:accounts`
|
||||||
|
- Updated the recommended pleroma.vcl configuration for Varnish to target Varnish 7.0+
|
||||||
|
- Set timeout values for Oban queues. The default is infinity and some operations may not time out on their own.
|
||||||
|
- Delete activities are federated at lowest priority
|
||||||
|
- CSP now includes wasm-unsafe-eval
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- `activeMonth` and `activeHalfyear` fields in NodeInfo usage.users object
|
- `activeMonth` and `activeHalfyear` fields in NodeInfo usage.users object
|
||||||
- Experimental support for Finch. Put `config :tesla, :adapter, {Tesla.Adapter.Finch, name: MyFinch}` in your secrets file to use it. Reverse Proxy will still use Hackney.
|
- Experimental support for Finch. Put `config :tesla, :adapter, {Tesla.Adapter.Finch, name: MyFinch}` in your secrets file to use it. Reverse Proxy will still use Hackney.
|
||||||
- `ForceMentionsInPostContent` MRF policy
|
- `ForceMentionsInPostContent` MRF policy
|
||||||
- AdminAPI: allow moderators to manage reports, users, invites, and custom emojis
|
|
||||||
- AdminAPI: restrict moderators to access sensitive data: change user credentials, get password reset token, read private statuses and chats, etc
|
|
||||||
- PleromaAPI: Add remote follow API endpoint at `POST /api/v1/pleroma/remote_interaction`
|
- PleromaAPI: Add remote follow API endpoint at `POST /api/v1/pleroma/remote_interaction`
|
||||||
- MastoAPI: Add `GET /api/v1/accounts/lookup`
|
- MastoAPI: Add `GET /api/v1/accounts/lookup`
|
||||||
- MastoAPI: Profile Directory support
|
- MastoAPI: Profile Directory support
|
||||||
|
@ -30,6 +156,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Configuration: Add `birthday_required` and `birthday_min_age` settings to provide a way to require users to enter their birth date.
|
- Configuration: Add `birthday_required` and `birthday_min_age` settings to provide a way to require users to enter their birth date.
|
||||||
- PleromaAPI: Add `GET /api/v1/pleroma/birthdays` API endpoint
|
- PleromaAPI: Add `GET /api/v1/pleroma/birthdays` API endpoint
|
||||||
- Make backend-rendered pages translatable. This includes emails. Pages returned as a HTTP response are translated using the language specified in the `userLanguage` cookie, or the `Accept-Language` header. Emails are translated using the `language` field when registering. This language can be changed by `PATCH /api/v1/accounts/update_credentials` with the `language` field.
|
- Make backend-rendered pages translatable. This includes emails. Pages returned as a HTTP response are translated using the language specified in the `userLanguage` cookie, or the `Accept-Language` header. Emails are translated using the `language` field when registering. This language can be changed by `PATCH /api/v1/accounts/update_credentials` with the `language` field.
|
||||||
|
- Add fine grained options to provide privileges to moderators and admins (e.g. delete messages, manage reports...)
|
||||||
|
- Uploadfilter `Pleroma.Upload.Filter.Exiftool.ReadDescription` returns description values to the FE so they can pre fill the image description field
|
||||||
|
- Added move account API
|
||||||
|
- Enable remote users to interact with posts
|
||||||
|
- Possibility to discover users like `user@example.org`, while Pleroma is working on `pleroma.example.org`. Additional configuration required.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- Subscription(Bell) Notifications: Don't create from Pipeline Ingested replies
|
- Subscription(Bell) Notifications: Don't create from Pipeline Ingested replies
|
||||||
|
@ -45,8 +176,30 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Fixed crash when pinned_objects is nil
|
- Fixed crash when pinned_objects is nil
|
||||||
- Fixed slow timelines when there are a lot of deactivated users
|
- Fixed slow timelines when there are a lot of deactivated users
|
||||||
- Fixed account deletion API
|
- Fixed account deletion API
|
||||||
|
- Fixed lowercase HTTP HEAD method in the Media Proxy Preview code
|
||||||
|
- Removed useless notification call on Delete activities
|
||||||
|
- Improved performance for filtering out deactivated and invisible users
|
||||||
|
- RSS and Atom feeds for users work again
|
||||||
|
- TwitterCard meta tags conformance
|
||||||
|
|
||||||
### Removed
|
## 2.4.5 - 2022-11-27
|
||||||
|
|
||||||
|
## Fixed
|
||||||
|
- Image `class` attributes not being scrubbed, allowing to exploit frontend special classes [!3792](https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3792)
|
||||||
|
- Delete report notifs when demoting from superuser [!3642](https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3642)
|
||||||
|
- Validate `mediaType` only by it's format rather than using a list [!3597](https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3597)
|
||||||
|
- Pagination: Make mutes and blocks lists behave the same as other lists [!3693](https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3693)
|
||||||
|
- Compatibility with Elixir 1.14 [!3740](https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3740)
|
||||||
|
- Frontend installer: FediFE build URL [!3736](https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3736)
|
||||||
|
- Streaming: Don't stream ChatMessage into the home timeline [!3738](https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3738)
|
||||||
|
- Streaming: Stream local-only posts in the local timeline [!3738](https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3738)
|
||||||
|
- Signatures: Fix `keyId` lookup for GoToSocial [!3725](https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3725)
|
||||||
|
- Validator: Fix `replies` handling for GoToSocial [!3725](https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3725)
|
||||||
|
|
||||||
|
## 2.4.4 - 2022-08-19
|
||||||
|
|
||||||
|
### Security
|
||||||
|
- Streaming API sessions will now properly disconnect if the corresponding token is revoked
|
||||||
|
|
||||||
## 2.4.3 - 2022-05-06
|
## 2.4.3 - 2022-05-06
|
||||||
|
|
||||||
|
|
18
Dockerfile
18
Dockerfile
|
@ -1,18 +1,24 @@
|
||||||
FROM elixir:1.9-alpine as build
|
ARG ELIXIR_IMG=hexpm/elixir
|
||||||
|
ARG ELIXIR_VER=1.12.3
|
||||||
|
ARG ERLANG_VER=24.2.1
|
||||||
|
ARG ALPINE_VER=3.17.0
|
||||||
|
|
||||||
|
FROM ${ELIXIR_IMG}:${ELIXIR_VER}-erlang-${ERLANG_VER}-alpine-${ALPINE_VER} as build
|
||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
ENV MIX_ENV=prod
|
ENV MIX_ENV=prod
|
||||||
|
ENV VIX_COMPILATION_MODE=PLATFORM_PROVIDED_LIBVIPS
|
||||||
|
|
||||||
RUN apk add git gcc g++ musl-dev make cmake file-dev &&\
|
RUN apk add git gcc g++ musl-dev make cmake file-dev vips-dev &&\
|
||||||
echo "import Mix.Config" > config/prod.secret.exs &&\
|
echo "import Config" > config/prod.secret.exs &&\
|
||||||
mix local.hex --force &&\
|
mix local.hex --force &&\
|
||||||
mix local.rebar --force &&\
|
mix local.rebar --force &&\
|
||||||
mix deps.get --only prod &&\
|
mix deps.get --only prod &&\
|
||||||
mkdir release &&\
|
mkdir release &&\
|
||||||
mix release --path release
|
mix release --path release
|
||||||
|
|
||||||
FROM alpine:3.14
|
FROM alpine:${ALPINE_VER}
|
||||||
|
|
||||||
ARG BUILD_DATE
|
ARG BUILD_DATE
|
||||||
ARG VCS_REF
|
ARG VCS_REF
|
||||||
|
@ -32,7 +38,7 @@ ARG HOME=/opt/pleroma
|
||||||
ARG DATA=/var/lib/pleroma
|
ARG DATA=/var/lib/pleroma
|
||||||
|
|
||||||
RUN apk update &&\
|
RUN apk update &&\
|
||||||
apk add exiftool ffmpeg imagemagick libmagic ncurses postgresql-client &&\
|
apk add exiftool ffmpeg vips libmagic ncurses postgresql-client &&\
|
||||||
adduser --system --shell /bin/false --home ${HOME} pleroma &&\
|
adduser --system --shell /bin/false --home ${HOME} pleroma &&\
|
||||||
mkdir -p ${DATA}/uploads &&\
|
mkdir -p ${DATA}/uploads &&\
|
||||||
mkdir -p ${DATA}/static &&\
|
mkdir -p ${DATA}/static &&\
|
||||||
|
@ -44,7 +50,7 @@ USER pleroma
|
||||||
|
|
||||||
COPY --from=build --chown=pleroma:0 /release ${HOME}
|
COPY --from=build --chown=pleroma:0 /release ${HOME}
|
||||||
|
|
||||||
COPY ./config/docker.exs /etc/pleroma/config.exs
|
COPY --chown=pleroma --chmod=640 ./config/docker.exs /etc/pleroma/config.exs
|
||||||
COPY ./docker-entrypoint.sh ${HOME}
|
COPY ./docker-entrypoint.sh ${HOME}
|
||||||
|
|
||||||
EXPOSE 4000
|
EXPOSE 4000
|
||||||
|
|
|
@ -30,7 +30,8 @@ If your platform is not supported, or you just want to be able to edit the sourc
|
||||||
- [OpenBSD (fi)](https://docs-develop.pleroma.social/backend/installation/openbsd_fi/)
|
- [OpenBSD (fi)](https://docs-develop.pleroma.social/backend/installation/openbsd_fi/)
|
||||||
|
|
||||||
### OS/Distro packages
|
### OS/Distro packages
|
||||||
Currently Pleroma is packaged for [YunoHost](https://yunohost.org). If you want to package Pleroma for any OS/Distros, we can guide you through the process on our [community channels](#community-channels). If you want to change default options in your Pleroma package, please **discuss it with us first**.
|
Currently Pleroma is packaged for [YunoHost](https://yunohost.org), [NixOS](https://nixos.org), [Gentoo through GURU](https://gentoo.org/) and [Archlinux through AUR](https://aur.archlinux.org/packages/pleroma). You may find more at <https://repology.org/project/pleroma/versions>.
|
||||||
|
If you want to package Pleroma for any OS/Distros, we can guide you through the process on our [community channels](#community-channels). If you want to change default options in your Pleroma package, please **discuss it with us first**.
|
||||||
|
|
||||||
### Docker
|
### Docker
|
||||||
While we don’t provide docker files, other people have written very good ones. Take a look at <https://github.com/angristan/docker-pleroma> or <https://glitch.sh/sn0w/pleroma-docker>.
|
While we don’t provide docker files, other people have written very good ones. Take a look at <https://github.com/angristan/docker-pleroma> or <https://glitch.sh/sn0w/pleroma-docker>.
|
||||||
|
|
|
@ -3,8 +3,20 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
defmodule Mix.Tasks.Pleroma.Benchmark do
|
defmodule Mix.Tasks.Pleroma.Benchmark do
|
||||||
import Mix.Pleroma
|
@shortdoc "Benchmarks"
|
||||||
|
@moduledoc """
|
||||||
|
Benchmark tasks available:
|
||||||
|
|
||||||
|
adapters
|
||||||
|
render_timeline
|
||||||
|
search
|
||||||
|
tag
|
||||||
|
|
||||||
|
MIX_ENV=benchmark mix pleroma.benchmark adapters
|
||||||
|
"""
|
||||||
|
|
||||||
use Mix.Task
|
use Mix.Task
|
||||||
|
import Mix.Pleroma
|
||||||
|
|
||||||
def run(["search"]) do
|
def run(["search"]) do
|
||||||
start_pleroma()
|
start_pleroma()
|
||||||
|
@ -63,7 +75,7 @@ def run(["render_timeline", nickname | _] = args) do
|
||||||
|
|
||||||
Benchee.run(
|
Benchee.run(
|
||||||
%{
|
%{
|
||||||
"Standart rendering" => fn activities ->
|
"Standard rendering" => fn activities ->
|
||||||
Pleroma.Web.MastodonAPI.StatusView.render("index.json", %{
|
Pleroma.Web.MastodonAPI.StatusView.render("index.json", %{
|
||||||
activities: activities,
|
activities: activities,
|
||||||
for: user,
|
for: user,
|
|
@ -0,0 +1 @@
|
||||||
|
Update to Phoenix 1.7
|
|
@ -0,0 +1 @@
|
||||||
|
Remove checking ImageMagick's commands for Pleroma.Upload.Filter.AnalyzeMetadata
|
|
@ -0,0 +1 @@
|
||||||
|
ap userview: add outbox field.
|
|
@ -0,0 +1 @@
|
||||||
|
Fix #strip_report_status_data
|
|
@ -0,0 +1 @@
|
||||||
|
Support /authorize-interaction route used by Mastodon
|
|
@ -0,0 +1 @@
|
||||||
|
Invalid activities delivered to the inbox will be rejected with a 400 Bad Request
|
|
@ -0,0 +1 @@
|
||||||
|
Replace eblurhash with rinpatch_blurhash. This also removes a dependency on ImageMagick.
|
|
@ -0,0 +1 @@
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fix the processing of email digest jobs.
|
|
@ -0,0 +1 @@
|
||||||
|
- Document maximum supported version of Erlang & Elixir
|
|
@ -0,0 +1 @@
|
||||||
|
Add support for configuring favicon, embed favicon and PWA manifest in server-generated meta
|
|
@ -0,0 +1 @@
|
||||||
|
- Make `/api/v1/pleroma/federation_status` publicly available
|
|
@ -0,0 +1 @@
|
||||||
|
[docs] add frontends management documentation
|
|
@ -0,0 +1 @@
|
||||||
|
TwitterAPI: Return proper error when healthcheck is disabled
|
|
@ -0,0 +1 @@
|
||||||
|
Implement /api/v2/instance route
|
|
@ -0,0 +1 @@
|
||||||
|
- Change AccountView `last_status_at` from a datetime to a date (as done in Mastodon 3.1.0)
|
|
@ -0,0 +1 @@
|
||||||
|
Add meilisearch, make search engines pluggable
|
|
@ -0,0 +1 @@
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Add media proxy to opengraph rich media cards
|
|
@ -0,0 +1 @@
|
||||||
|
Optimistic Inbox reduces the processing overhead of incoming activities without instantly verifiable signatures.
|
|
@ -0,0 +1 @@
|
||||||
|
- Prioritize mentioned recipients (i.e., those that are not just followers) when federating.
|
|
@ -0,0 +1 @@
|
||||||
|
Change the prometheus library to PromEx.
|
|
@ -0,0 +1 @@
|
||||||
|
Reduce the reachability timestamp update to a single upsert query
|
|
@ -0,0 +1 @@
|
||||||
|
Adds the capability to add a URL to a scrobble (optional field)
|
|
@ -0,0 +1 @@
|
||||||
|
- scrubbers/default: Add more formatting elements from HTML4 / GoToSocial (acronym, bdo, big, cite, dfn, ins, kbd, q, samp, s, tt, var, wbr)
|
|
@ -0,0 +1 @@
|
||||||
|
- Fix eblurhash and elixir-captcha not using system cflags
|
|
@ -0,0 +1 @@
|
||||||
|
Change mediaproxy previews to use vips to generate thumbnails instead of ImageMagick
|
|
@ -0,0 +1 @@
|
||||||
|
Fix web push notifications not successfully delivering
|
|
@ -1,7 +1,8 @@
|
||||||
FROM elixir:1.9.4
|
FROM elixir:1.12.3
|
||||||
|
|
||||||
|
# Single RUN statement, otherwise intermediate images are created
|
||||||
|
# https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run
|
||||||
RUN apt-get update &&\
|
RUN apt-get update &&\
|
||||||
apt-get install -y libmagic-dev cmake libimage-exiftool-perl ffmpeg &&\
|
apt-get install -y libmagic-dev cmake libimage-exiftool-perl ffmpeg &&\
|
||||||
mix local.hex --force &&\
|
mix local.hex --force &&\
|
||||||
mix local.rebar --force
|
mix local.rebar --force
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
Assuming an AMD64 Alpine system, you're going to need the following packages
|
||||||
|
- `qemu qemu-openrc qemu-arm qemu-aarch64` for binfmt
|
||||||
|
- `docker-cli-buildx` for building the images
|
||||||
|
|
||||||
|
## Setting up
|
||||||
|
|
||||||
|
```
|
||||||
|
docker login git.pleroma.social:5050
|
||||||
|
doas rc-service qemu-binfmt start
|
||||||
|
```
|
|
@ -0,0 +1,3 @@
|
||||||
|
FROM postgres:13-bullseye
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y postgresql-13-rum/bullseye-pgdg
|
|
@ -0,0 +1 @@
|
||||||
|
docker buildx build --platform linux/amd64,linux/arm64 -t git.pleroma.social:5050/pleroma/pleroma/postgres-with-rum-13:latest --push .
|
|
@ -14,7 +14,7 @@
|
||||||
method: Pleroma.Captcha.Mock
|
method: Pleroma.Captcha.Mock
|
||||||
|
|
||||||
# Print only warnings and errors during test
|
# Print only warnings and errors during test
|
||||||
config :logger, level: :warn
|
config :logger, level: :warning
|
||||||
|
|
||||||
config :pleroma, :auth, oauth_consumer_strategies: []
|
config :pleroma, :auth, oauth_consumer_strategies: []
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@
|
||||||
password: "postgres",
|
password: "postgres",
|
||||||
database: "pleroma_benchmark",
|
database: "pleroma_benchmark",
|
||||||
hostname: System.get_env("DB_HOST") || "localhost",
|
hostname: System.get_env("DB_HOST") || "localhost",
|
||||||
|
port: System.get_env("DB_PORT") || "5432",
|
||||||
pool_size: 10
|
pool_size: 10
|
||||||
|
|
||||||
# Reduce hash rounds for testing
|
# Reduce hash rounds for testing
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
# FIGURATION! EDIT YOUR SECRET FILE (either prod.secret.exs, dev.secret.exs).
|
# FIGURATION! EDIT YOUR SECRET FILE (either prod.secret.exs, dev.secret.exs).
|
||||||
#
|
#
|
||||||
# This file is responsible for configuring your application
|
# This file is responsible for configuring your application
|
||||||
# and its dependencies with the aid of the Mix.Config module.
|
# and its dependencies with the aid of the Config module.
|
||||||
#
|
#
|
||||||
# This configuration file is loaded before any dependency and
|
# This configuration file is loaded before any dependency and
|
||||||
# is restricted to this project.
|
# is restricted to this project.
|
||||||
|
@ -110,17 +110,6 @@
|
||||||
"xmpp"
|
"xmpp"
|
||||||
]
|
]
|
||||||
|
|
||||||
websocket_config = [
|
|
||||||
path: "/websocket",
|
|
||||||
serializer: [
|
|
||||||
{Phoenix.Socket.V1.JSONSerializer, "~> 1.0.0"},
|
|
||||||
{Phoenix.Socket.V2.JSONSerializer, "~> 2.0.0"}
|
|
||||||
],
|
|
||||||
timeout: 60_000,
|
|
||||||
transport_log: false,
|
|
||||||
compress: false
|
|
||||||
]
|
|
||||||
|
|
||||||
# Configures the endpoint
|
# Configures the endpoint
|
||||||
config :pleroma, Pleroma.Web.Endpoint,
|
config :pleroma, Pleroma.Web.Endpoint,
|
||||||
url: [host: "localhost"],
|
url: [host: "localhost"],
|
||||||
|
@ -130,10 +119,7 @@
|
||||||
{:_,
|
{:_,
|
||||||
[
|
[
|
||||||
{"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
|
{"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
|
||||||
{"/websocket", Phoenix.Endpoint.CowboyWebSocket,
|
{:_, Plug.Cowboy.Handler, {Pleroma.Web.Endpoint, []}}
|
||||||
{Phoenix.Transports.WebSocket,
|
|
||||||
{Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, websocket_config}}},
|
|
||||||
{:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}
|
|
||||||
]}
|
]}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
@ -160,11 +146,6 @@
|
||||||
format: "$metadata[$level] $message",
|
format: "$metadata[$level] $message",
|
||||||
metadata: [:request_id]
|
metadata: [:request_id]
|
||||||
|
|
||||||
config :quack,
|
|
||||||
level: :warn,
|
|
||||||
meta: [:all],
|
|
||||||
webhook_url: "https://hooks.slack.com/services/YOUR-KEY-HERE"
|
|
||||||
|
|
||||||
config :mime, :types, %{
|
config :mime, :types, %{
|
||||||
"application/xml" => ["xml"],
|
"application/xml" => ["xml"],
|
||||||
"application/xrd+xml" => ["xrd+xml"],
|
"application/xrd+xml" => ["xrd+xml"],
|
||||||
|
@ -187,8 +168,10 @@
|
||||||
email: "example@example.com",
|
email: "example@example.com",
|
||||||
notify_email: "noreply@example.com",
|
notify_email: "noreply@example.com",
|
||||||
description: "Pleroma: An efficient and flexible fediverse server",
|
description: "Pleroma: An efficient and flexible fediverse server",
|
||||||
|
short_description: "",
|
||||||
background_image: "/images/city.jpg",
|
background_image: "/images/city.jpg",
|
||||||
instance_thumbnail: "/instance/thumbnail.jpeg",
|
instance_thumbnail: "/instance/thumbnail.jpeg",
|
||||||
|
favicon: "/favicon.png",
|
||||||
limit: 5_000,
|
limit: 5_000,
|
||||||
description_limit: 5_000,
|
description_limit: 5_000,
|
||||||
remote_limit: 100_000,
|
remote_limit: 100_000,
|
||||||
|
@ -227,6 +210,7 @@
|
||||||
max_pinned_statuses: 1,
|
max_pinned_statuses: 1,
|
||||||
attachment_links: false,
|
attachment_links: false,
|
||||||
max_report_comment_size: 1000,
|
max_report_comment_size: 1000,
|
||||||
|
report_strip_status: true,
|
||||||
safe_dm_mentions: false,
|
safe_dm_mentions: false,
|
||||||
healthcheck: false,
|
healthcheck: false,
|
||||||
remote_post_retention_days: 90,
|
remote_post_retention_days: 90,
|
||||||
|
@ -256,7 +240,23 @@
|
||||||
show_reactions: true,
|
show_reactions: true,
|
||||||
password_reset_token_validity: 60 * 60 * 24,
|
password_reset_token_validity: 60 * 60 * 24,
|
||||||
profile_directory: true,
|
profile_directory: true,
|
||||||
privileged_staff: false,
|
admin_privileges: [
|
||||||
|
:users_read,
|
||||||
|
:users_manage_invites,
|
||||||
|
:users_manage_activation_state,
|
||||||
|
:users_manage_tags,
|
||||||
|
:users_manage_credentials,
|
||||||
|
:users_delete,
|
||||||
|
:messages_read,
|
||||||
|
:messages_delete,
|
||||||
|
:instances_delete,
|
||||||
|
:reports_manage_reports,
|
||||||
|
:moderation_log_read,
|
||||||
|
:announcements_manage_announcements,
|
||||||
|
:emoji_manage_emoji,
|
||||||
|
:statistics_read
|
||||||
|
],
|
||||||
|
moderator_privileges: [:messages_delete, :reports_manage_reports],
|
||||||
max_endorsed_users: 20,
|
max_endorsed_users: 20,
|
||||||
birthday_required: false,
|
birthday_required: false,
|
||||||
birthday_min_age: 0,
|
birthday_min_age: 0,
|
||||||
|
@ -347,6 +347,8 @@
|
||||||
icons: [
|
icons: [
|
||||||
%{
|
%{
|
||||||
src: "/static/logo.svg",
|
src: "/static/logo.svg",
|
||||||
|
sizes: "144x144",
|
||||||
|
purpose: "any",
|
||||||
type: "image/svg+xml"
|
type: "image/svg+xml"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -395,6 +397,12 @@
|
||||||
federated_timeline_removal: [],
|
federated_timeline_removal: [],
|
||||||
replace: []
|
replace: []
|
||||||
|
|
||||||
|
config :pleroma, :mrf_emoji,
|
||||||
|
remove_url: [],
|
||||||
|
remove_shortcode: [],
|
||||||
|
federated_timeline_removal_url: [],
|
||||||
|
federated_timeline_removal_shortcode: []
|
||||||
|
|
||||||
config :pleroma, :mrf_hashtag,
|
config :pleroma, :mrf_hashtag,
|
||||||
sensitive: ["nsfw"],
|
sensitive: ["nsfw"],
|
||||||
reject: [],
|
reject: [],
|
||||||
|
@ -415,6 +423,8 @@
|
||||||
|
|
||||||
config :pleroma, :mrf_follow_bot, follower_nickname: nil
|
config :pleroma, :mrf_follow_bot, follower_nickname: nil
|
||||||
|
|
||||||
|
config :pleroma, :mrf_inline_quote, template: "<bdi>RT:</bdi> {url}"
|
||||||
|
|
||||||
config :pleroma, :rich_media,
|
config :pleroma, :rich_media,
|
||||||
enabled: true,
|
enabled: true,
|
||||||
ignore_hosts: [],
|
ignore_hosts: [],
|
||||||
|
@ -558,8 +568,8 @@
|
||||||
token_expiration: 5,
|
token_expiration: 5,
|
||||||
filter_expiration: 1,
|
filter_expiration: 1,
|
||||||
backup: 1,
|
backup: 1,
|
||||||
federator_incoming: 50,
|
federator_incoming: 5,
|
||||||
federator_outgoing: 50,
|
federator_outgoing: 5,
|
||||||
ingestion_queue: 50,
|
ingestion_queue: 50,
|
||||||
web_push: 50,
|
web_push: 50,
|
||||||
mailer: 10,
|
mailer: 10,
|
||||||
|
@ -570,7 +580,8 @@
|
||||||
remote_fetcher: 2,
|
remote_fetcher: 2,
|
||||||
attachments_cleanup: 1,
|
attachments_cleanup: 1,
|
||||||
new_users_digest: 1,
|
new_users_digest: 1,
|
||||||
mute_expire: 5
|
mute_expire: 5,
|
||||||
|
search_indexing: 10
|
||||||
],
|
],
|
||||||
plugins: [Oban.Plugins.Pruner],
|
plugins: [Oban.Plugins.Pruner],
|
||||||
crontab: [
|
crontab: [
|
||||||
|
@ -581,7 +592,8 @@
|
||||||
config :pleroma, :workers,
|
config :pleroma, :workers,
|
||||||
retries: [
|
retries: [
|
||||||
federator_incoming: 5,
|
federator_incoming: 5,
|
||||||
federator_outgoing: 5
|
federator_outgoing: 5,
|
||||||
|
search_indexing: 2
|
||||||
]
|
]
|
||||||
|
|
||||||
config :pleroma, Pleroma.Formatter,
|
config :pleroma, Pleroma.Formatter,
|
||||||
|
@ -604,9 +616,6 @@
|
||||||
base: System.get_env("LDAP_BASE") || "dc=example,dc=com",
|
base: System.get_env("LDAP_BASE") || "dc=example,dc=com",
|
||||||
uid: System.get_env("LDAP_UID") || "cn"
|
uid: System.get_env("LDAP_UID") || "cn"
|
||||||
|
|
||||||
config :esshd,
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
oauth_consumer_strategies =
|
oauth_consumer_strategies =
|
||||||
System.get_env("OAUTH_CONSUMER_STRATEGIES")
|
System.get_env("OAUTH_CONSUMER_STRATEGIES")
|
||||||
|> to_string()
|
|> to_string()
|
||||||
|
@ -642,12 +651,26 @@
|
||||||
|
|
||||||
config :pleroma, Pleroma.Emails.NewUsersDigestEmail, enabled: false
|
config :pleroma, Pleroma.Emails.NewUsersDigestEmail, enabled: false
|
||||||
|
|
||||||
config :prometheus, Pleroma.Web.Endpoint.MetricsExporter,
|
config :pleroma, Pleroma.PromEx,
|
||||||
enabled: false,
|
disabled: false,
|
||||||
auth: false,
|
manual_metrics_start_delay: :no_delay,
|
||||||
ip_whitelist: [],
|
drop_metrics_groups: [],
|
||||||
path: "/api/pleroma/app_metrics",
|
grafana: [
|
||||||
format: :text
|
host: System.get_env("GRAFANA_HOST", "http://localhost:3000"),
|
||||||
|
auth_token: System.get_env("GRAFANA_TOKEN"),
|
||||||
|
upload_dashboards_on_start: false,
|
||||||
|
folder_name: "BEAM",
|
||||||
|
annotate_app_lifecycle: true
|
||||||
|
],
|
||||||
|
metrics_server: [
|
||||||
|
port: 4021,
|
||||||
|
path: "/metrics",
|
||||||
|
protocol: :http,
|
||||||
|
pool_size: 5,
|
||||||
|
cowboy_opts: [],
|
||||||
|
auth_strategy: :none
|
||||||
|
],
|
||||||
|
datasource: "Prometheus"
|
||||||
|
|
||||||
config :pleroma, Pleroma.ScheduledActivity,
|
config :pleroma, Pleroma.ScheduledActivity,
|
||||||
daily_user_limit: 25,
|
daily_user_limit: 25,
|
||||||
|
@ -672,6 +695,8 @@
|
||||||
|
|
||||||
config :pleroma, :populate_hashtags_table, fault_rate_allowance: 0.01
|
config :pleroma, :populate_hashtags_table, fault_rate_allowance: 0.01
|
||||||
|
|
||||||
|
config :pleroma, :delete_context_objects, fault_rate_allowance: 0.01
|
||||||
|
|
||||||
config :pleroma, :env, Mix.env()
|
config :pleroma, :env, Mix.env()
|
||||||
|
|
||||||
config :http_signatures,
|
config :http_signatures,
|
||||||
|
@ -740,7 +765,7 @@
|
||||||
"name" => "fedi-fe",
|
"name" => "fedi-fe",
|
||||||
"git" => "https://git.pleroma.social/pleroma/fedi-fe",
|
"git" => "https://git.pleroma.social/pleroma/fedi-fe",
|
||||||
"build_url" =>
|
"build_url" =>
|
||||||
"https://git.pleroma.social/pleroma/fedi-fe/-/jobs/artifacts/${ref}/download?job=build",
|
"https://git.pleroma.social/pleroma/fedi-fe/-/jobs/artifacts/${ref}/download?job=build_release",
|
||||||
"ref" => "master",
|
"ref" => "master",
|
||||||
"custom-http-headers" => [
|
"custom-http-headers" => [
|
||||||
{"service-worker-allowed", "/"}
|
{"service-worker-allowed", "/"}
|
||||||
|
@ -753,13 +778,21 @@
|
||||||
"https://git.pleroma.social/pleroma/admin-fe/-/jobs/artifacts/${ref}/download?job=build",
|
"https://git.pleroma.social/pleroma/admin-fe/-/jobs/artifacts/${ref}/download?job=build",
|
||||||
"ref" => "develop"
|
"ref" => "develop"
|
||||||
},
|
},
|
||||||
"soapbox-fe" => %{
|
"soapbox" => %{
|
||||||
"name" => "soapbox-fe",
|
"name" => "soapbox",
|
||||||
"git" => "https://gitlab.com/soapbox-pub/soapbox-fe",
|
"git" => "https://gitlab.com/soapbox-pub/soapbox",
|
||||||
"build_url" =>
|
"build_url" =>
|
||||||
"https://gitlab.com/soapbox-pub/soapbox-fe/-/jobs/artifacts/${ref}/download?job=build-production",
|
"https://gitlab.com/soapbox-pub/soapbox/-/jobs/artifacts/${ref}/download?job=build-production",
|
||||||
"ref" => "v1.0.0",
|
"ref" => "v3.0.0-beta.1",
|
||||||
"build_dir" => "static"
|
"build_dir" => "static"
|
||||||
|
},
|
||||||
|
"glitch-lily" => %{
|
||||||
|
"name" => "glitch-lily",
|
||||||
|
"git" => "https://lily-is.land/infra/glitch-lily",
|
||||||
|
"build_url" =>
|
||||||
|
"https://lily-is.land/infra/glitch-lily/-/jobs/artifacts/${ref}/download?job=build",
|
||||||
|
"ref" => "servant",
|
||||||
|
"build_dir" => "public"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -832,7 +865,11 @@
|
||||||
config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: false
|
config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: false
|
||||||
|
|
||||||
config :pleroma, :mrf,
|
config :pleroma, :mrf,
|
||||||
policies: [Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy, Pleroma.Web.ActivityPub.MRF.TagPolicy],
|
policies: [
|
||||||
|
Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy,
|
||||||
|
Pleroma.Web.ActivityPub.MRF.TagPolicy,
|
||||||
|
Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy
|
||||||
|
],
|
||||||
transparency: true,
|
transparency: true,
|
||||||
transparency_exclusions: []
|
transparency_exclusions: []
|
||||||
|
|
||||||
|
@ -851,13 +888,25 @@
|
||||||
config :pleroma, Pleroma.User.Backup,
|
config :pleroma, Pleroma.User.Backup,
|
||||||
purge_after_days: 30,
|
purge_after_days: 30,
|
||||||
limit_days: 7,
|
limit_days: 7,
|
||||||
dir: nil
|
dir: nil,
|
||||||
|
process_wait_time: 30_000,
|
||||||
|
process_chunk_size: 100
|
||||||
|
|
||||||
config :pleroma, ConcurrentLimiter, [
|
config :pleroma, ConcurrentLimiter, [
|
||||||
{Pleroma.Web.RichMedia.Helpers, [max_running: 5, max_waiting: 5]},
|
{Pleroma.Web.RichMedia.Helpers, [max_running: 5, max_waiting: 5]},
|
||||||
{Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy, [max_running: 5, max_waiting: 5]}
|
{Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy, [max_running: 5, max_waiting: 5]},
|
||||||
|
{Pleroma.Search, [max_running: 30, max_waiting: 50]}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
config :pleroma, Pleroma.Web.WebFinger, domain: nil, update_nickname_on_user_fetch: true
|
||||||
|
|
||||||
|
config :pleroma, Pleroma.Search, module: Pleroma.Search.DatabaseSearch
|
||||||
|
|
||||||
|
config :pleroma, Pleroma.Search.Meilisearch,
|
||||||
|
url: "http://127.0.0.1:7700/",
|
||||||
|
private_key: nil,
|
||||||
|
initial_indexing_chunk_size: 100_000
|
||||||
|
|
||||||
# Import environment specific config. This must remain at the bottom
|
# Import environment specific config. This must remain at the bottom
|
||||||
# of this file so it overrides the configuration defined above.
|
# of this file so it overrides the configuration defined above.
|
||||||
import_config "#{Mix.env()}.exs"
|
import_config "#{Mix.env()}.exs"
|
||||||
|
|
|
@ -495,6 +495,27 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
%{
|
||||||
|
group: :pleroma,
|
||||||
|
key: :delete_context_objects,
|
||||||
|
type: :group,
|
||||||
|
description: "`delete_context_objects` background migration settings",
|
||||||
|
children: [
|
||||||
|
%{
|
||||||
|
key: :fault_rate_allowance,
|
||||||
|
type: :float,
|
||||||
|
description:
|
||||||
|
"Max accepted rate of objects that failed in the migration. Any value from 0.0 which tolerates no errors to 1.0 which will enable the feature even if context object deletion failed for all records.",
|
||||||
|
suggestions: [0.01]
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
key: :sleep_interval_ms,
|
||||||
|
type: :integer,
|
||||||
|
description:
|
||||||
|
"Sleep interval between each chunk of processed records in order to decrease the load on the system (defaults to 0 and should be keep default on most instances)."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
%{
|
%{
|
||||||
group: :pleroma,
|
group: :pleroma,
|
||||||
key: :instance,
|
key: :instance,
|
||||||
|
@ -536,6 +557,15 @@
|
||||||
"Very cool instance"
|
"Very cool instance"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
%{
|
||||||
|
key: :short_description,
|
||||||
|
type: :string,
|
||||||
|
description:
|
||||||
|
"Shorter version of instance description. It can be seen on `/api/v1/instance`",
|
||||||
|
suggestions: [
|
||||||
|
"Cool instance"
|
||||||
|
]
|
||||||
|
},
|
||||||
%{
|
%{
|
||||||
key: :limit,
|
key: :limit,
|
||||||
type: :integer,
|
type: :integer,
|
||||||
|
@ -785,6 +815,13 @@
|
||||||
1_000
|
1_000
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
%{
|
||||||
|
key: :report_strip_status,
|
||||||
|
label: "Report strip status",
|
||||||
|
type: :boolean,
|
||||||
|
description:
|
||||||
|
"Strip associated statuses in reports to ids when closed/resolved, otherwise keep a copy"
|
||||||
|
},
|
||||||
%{
|
%{
|
||||||
key: :safe_dm_mentions,
|
key: :safe_dm_mentions,
|
||||||
label: "Safe DM mentions",
|
label: "Safe DM mentions",
|
||||||
|
@ -950,6 +987,12 @@
|
||||||
"The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance.",
|
"The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance.",
|
||||||
suggestions: ["/instance/thumbnail.jpeg"]
|
suggestions: ["/instance/thumbnail.jpeg"]
|
||||||
},
|
},
|
||||||
|
%{
|
||||||
|
key: :favicon,
|
||||||
|
type: {:string, :image},
|
||||||
|
description: "Favicon of the instance",
|
||||||
|
suggestions: ["/favicon.png"]
|
||||||
|
},
|
||||||
%{
|
%{
|
||||||
key: :show_reactions,
|
key: :show_reactions,
|
||||||
type: :boolean,
|
type: :boolean,
|
||||||
|
@ -961,10 +1004,48 @@
|
||||||
description: "Enable profile directory."
|
description: "Enable profile directory."
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :privileged_staff,
|
key: :admin_privileges,
|
||||||
type: :boolean,
|
type: {:list, :atom},
|
||||||
|
suggestions: [
|
||||||
|
:users_read,
|
||||||
|
:users_manage_invites,
|
||||||
|
:users_manage_activation_state,
|
||||||
|
:users_manage_tags,
|
||||||
|
:users_manage_credentials,
|
||||||
|
:users_delete,
|
||||||
|
:messages_read,
|
||||||
|
:messages_delete,
|
||||||
|
:instances_delete,
|
||||||
|
:reports_manage_reports,
|
||||||
|
:moderation_log_read,
|
||||||
|
:announcements_manage_announcements,
|
||||||
|
:emoji_manage_emoji,
|
||||||
|
:statistics_read
|
||||||
|
],
|
||||||
description:
|
description:
|
||||||
"Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)"
|
"What extra privileges to allow admins (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)"
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
key: :moderator_privileges,
|
||||||
|
type: {:list, :atom},
|
||||||
|
suggestions: [
|
||||||
|
:users_read,
|
||||||
|
:users_manage_invites,
|
||||||
|
:users_manage_activation_state,
|
||||||
|
:users_manage_tags,
|
||||||
|
:users_manage_credentials,
|
||||||
|
:users_delete,
|
||||||
|
:messages_read,
|
||||||
|
:messages_delete,
|
||||||
|
:instances_delete,
|
||||||
|
:reports_manage_reports,
|
||||||
|
:moderation_log_read,
|
||||||
|
:announcements_manage_announcements,
|
||||||
|
:emoji_manage_emoji,
|
||||||
|
:statistics_read
|
||||||
|
],
|
||||||
|
description:
|
||||||
|
"What extra privileges to allow moderators (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)"
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :birthday_required,
|
key: :birthday_required,
|
||||||
|
@ -975,7 +1056,17 @@
|
||||||
key: :birthday_min_age,
|
key: :birthday_min_age,
|
||||||
type: :integer,
|
type: :integer,
|
||||||
description:
|
description:
|
||||||
"Minimum required age for users to create account. Only used if birthday is required."
|
"Minimum required age (in days) for users to create account. Only used if birthday is required.",
|
||||||
|
suggestions: [6570]
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
key: :languages,
|
||||||
|
type: {:list, :string},
|
||||||
|
description:
|
||||||
|
"Languages to be exposed in /api/v1/instance. Should be in the format of BCP47 language codes.",
|
||||||
|
suggestions: [
|
||||||
|
"en"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -1096,7 +1187,7 @@
|
||||||
type: [:atom, :tuple, :module],
|
type: [:atom, :tuple, :module],
|
||||||
description:
|
description:
|
||||||
"Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack.",
|
"Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack.",
|
||||||
suggestions: [:console, {ExSyslogger, :ex_syslogger}, Quack.Logger]
|
suggestions: [:console, {ExSyslogger, :ex_syslogger}]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -1111,7 +1202,7 @@
|
||||||
key: :level,
|
key: :level,
|
||||||
type: {:dropdown, :atom},
|
type: {:dropdown, :atom},
|
||||||
description: "Log level",
|
description: "Log level",
|
||||||
suggestions: [:debug, :info, :warn, :error]
|
suggestions: [:debug, :info, :warning, :error]
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :ident,
|
key: :ident,
|
||||||
|
@ -1144,7 +1235,7 @@
|
||||||
key: :level,
|
key: :level,
|
||||||
type: {:dropdown, :atom},
|
type: {:dropdown, :atom},
|
||||||
description: "Log level",
|
description: "Log level",
|
||||||
suggestions: [:debug, :info, :warn, :error]
|
suggestions: [:debug, :info, :warning, :error]
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :format,
|
key: :format,
|
||||||
|
@ -1159,45 +1250,6 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
%{
|
|
||||||
group: :quack,
|
|
||||||
type: :group,
|
|
||||||
label: "Quack Logger",
|
|
||||||
description: "Quack-related settings",
|
|
||||||
children: [
|
|
||||||
%{
|
|
||||||
key: :level,
|
|
||||||
type: {:dropdown, :atom},
|
|
||||||
description: "Log level",
|
|
||||||
suggestions: [:debug, :info, :warn, :error]
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
key: :meta,
|
|
||||||
type: {:list, :atom},
|
|
||||||
description: "Configure which metadata you want to report on",
|
|
||||||
suggestions: [
|
|
||||||
:application,
|
|
||||||
:module,
|
|
||||||
:file,
|
|
||||||
:function,
|
|
||||||
:line,
|
|
||||||
:pid,
|
|
||||||
:crash_reason,
|
|
||||||
:initial_call,
|
|
||||||
:registered_name,
|
|
||||||
:all,
|
|
||||||
:none
|
|
||||||
]
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
key: :webhook_url,
|
|
||||||
label: "Webhook URL",
|
|
||||||
type: :string,
|
|
||||||
description: "Configure the Slack incoming webhook",
|
|
||||||
suggestions: ["https://hooks.slack.com/services/YOUR-KEY-HERE"]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
%{
|
%{
|
||||||
group: :pleroma,
|
group: :pleroma,
|
||||||
key: :frontend_configurations,
|
key: :frontend_configurations,
|
||||||
|
@ -1720,6 +1772,11 @@
|
||||||
type: :boolean,
|
type: :boolean,
|
||||||
description: "Sign object fetches with HTTP signatures"
|
description: "Sign object fetches with HTTP signatures"
|
||||||
},
|
},
|
||||||
|
%{
|
||||||
|
key: :authorized_fetch_mode,
|
||||||
|
type: :boolean,
|
||||||
|
description: "Require HTTP signatures for AP fetches"
|
||||||
|
},
|
||||||
%{
|
%{
|
||||||
key: :note_replies_output_limit,
|
key: :note_replies_output_limit,
|
||||||
type: :integer,
|
type: :integer,
|
||||||
|
@ -1880,7 +1937,7 @@
|
||||||
key: :log,
|
key: :log,
|
||||||
type: {:dropdown, :atom},
|
type: {:dropdown, :atom},
|
||||||
description: "Logs verbose mode",
|
description: "Logs verbose mode",
|
||||||
suggestions: [false, :error, :warn, :info, :debug]
|
suggestions: [false, :error, :warning, :info, :debug]
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :queues,
|
key: :queues,
|
||||||
|
@ -2577,45 +2634,6 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
%{
|
|
||||||
group: :esshd,
|
|
||||||
label: "ESSHD",
|
|
||||||
type: :group,
|
|
||||||
description:
|
|
||||||
"Before enabling this you must add :esshd to mix.exs as one of the extra_applications " <>
|
|
||||||
"and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key",
|
|
||||||
children: [
|
|
||||||
%{
|
|
||||||
key: :enabled,
|
|
||||||
type: :boolean,
|
|
||||||
description: "Enables SSH"
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
key: :priv_dir,
|
|
||||||
type: :string,
|
|
||||||
description: "Dir with SSH keys",
|
|
||||||
suggestions: ["/some/path/ssh_keys"]
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
key: :handler,
|
|
||||||
type: :string,
|
|
||||||
description: "Handler module",
|
|
||||||
suggestions: ["Pleroma.BBS.Handler"]
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
key: :port,
|
|
||||||
type: :integer,
|
|
||||||
description: "Port to connect",
|
|
||||||
suggestions: [10_022]
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
key: :password_authenticator,
|
|
||||||
type: :string,
|
|
||||||
description: "Authenticator module",
|
|
||||||
suggestions: ["Pleroma.BBS.Authenticator"]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
%{
|
%{
|
||||||
group: :mime,
|
group: :mime,
|
||||||
label: "Mime Types",
|
label: "Mime Types",
|
||||||
|
@ -2726,7 +2744,7 @@
|
||||||
key: :versions,
|
key: :versions,
|
||||||
type: {:list, :atom},
|
type: {:list, :atom},
|
||||||
description: "List of TLS version to use",
|
description: "List of TLS version to use",
|
||||||
suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
|
suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2", ":tlsv1.3"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -3352,6 +3370,21 @@
|
||||||
type: :integer,
|
type: :integer,
|
||||||
description: "Limit user to export not more often than once per N days",
|
description: "Limit user to export not more often than once per N days",
|
||||||
suggestions: [7]
|
suggestions: [7]
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
key: :process_wait_time,
|
||||||
|
type: :integer,
|
||||||
|
label: "Process Wait Time",
|
||||||
|
description:
|
||||||
|
"The amount of time to wait for backup to report progress, in milliseconds. If no progress is received from the backup job for that much time, terminate it and deem it failed.",
|
||||||
|
suggestions: [30_000]
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
key: :process_chunk_size,
|
||||||
|
type: :integer,
|
||||||
|
label: "Process Chunk Size",
|
||||||
|
description: "The number of activities to fetch in the backup job for each chunk.",
|
||||||
|
suggestions: [100]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -3439,5 +3472,48 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
group: :pleroma,
|
||||||
|
key: Pleroma.Search,
|
||||||
|
type: :group,
|
||||||
|
description: "General search settings.",
|
||||||
|
children: [
|
||||||
|
%{
|
||||||
|
key: :module,
|
||||||
|
type: :keyword,
|
||||||
|
description: "Selected search module.",
|
||||||
|
suggestion: [Pleroma.Search.DatabaseSearch, Pleroma.Search.Meilisearch]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
group: :pleroma,
|
||||||
|
key: Pleroma.Search.Meilisearch,
|
||||||
|
type: :group,
|
||||||
|
description: "Meilisearch settings.",
|
||||||
|
children: [
|
||||||
|
%{
|
||||||
|
key: :url,
|
||||||
|
type: :string,
|
||||||
|
description: "Meilisearch URL.",
|
||||||
|
suggestion: ["http://127.0.0.1:7700/"]
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
key: :private_key,
|
||||||
|
type: :string,
|
||||||
|
description:
|
||||||
|
"Private key for meilisearch authentication, or `nil` to disable private key authentication.",
|
||||||
|
suggestion: [nil]
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
key: :initial_indexing_chunk_size,
|
||||||
|
type: :int,
|
||||||
|
description:
|
||||||
|
"Amount of posts in a batch when running the initial indexing operation. Should probably not be more than 100000" <>
|
||||||
|
" since there's a limit on maximum insert size",
|
||||||
|
suggestion: [100_000]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
password: System.fetch_env!("DB_PASS"),
|
password: System.fetch_env!("DB_PASS"),
|
||||||
database: System.get_env("DB_NAME", "pleroma"),
|
database: System.get_env("DB_NAME", "pleroma"),
|
||||||
hostname: System.get_env("DB_HOST", "db"),
|
hostname: System.get_env("DB_HOST", "db"),
|
||||||
|
port: System.get_env("DB_PORT", "5432"),
|
||||||
pool_size: 10
|
pool_size: 10
|
||||||
|
|
||||||
# Configure web push notifications
|
# Configure web push notifications
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
# Print only warnings and errors during test
|
# Print only warnings and errors during test
|
||||||
config :logger, :console,
|
config :logger, :console,
|
||||||
level: :warn,
|
level: :warning,
|
||||||
format: "\n[$level] $message\n"
|
format: "\n[$level] $message\n"
|
||||||
|
|
||||||
config :pleroma, :auth, oauth_consumer_strategies: []
|
config :pleroma, :auth, oauth_consumer_strategies: []
|
||||||
|
@ -47,6 +47,7 @@
|
||||||
password: "postgres",
|
password: "postgres",
|
||||||
database: "pleroma_test",
|
database: "pleroma_test",
|
||||||
hostname: System.get_env("DB_HOST") || "localhost",
|
hostname: System.get_env("DB_HOST") || "localhost",
|
||||||
|
port: System.get_env("DB_PORT") || "5432",
|
||||||
pool: Ecto.Adapters.SQL.Sandbox,
|
pool: Ecto.Adapters.SQL.Sandbox,
|
||||||
pool_size: 50
|
pool_size: 50
|
||||||
|
|
||||||
|
@ -81,10 +82,7 @@
|
||||||
"BLH1qVhJItRGCfxgTtONfsOKDc9VRAraXw-3NsmjMngWSh7NxOizN6bkuRA7iLTMPS82PjwJAr3UoK9EC1IFrz4",
|
"BLH1qVhJItRGCfxgTtONfsOKDc9VRAraXw-3NsmjMngWSh7NxOizN6bkuRA7iLTMPS82PjwJAr3UoK9EC1IFrz4",
|
||||||
private_key: "_-XZ0iebPrRfZ_o0-IatTdszYa8VCH1yLN-JauK7HHA"
|
private_key: "_-XZ0iebPrRfZ_o0-IatTdszYa8VCH1yLN-JauK7HHA"
|
||||||
|
|
||||||
config :pleroma, Oban,
|
config :pleroma, Oban, testing: :manual
|
||||||
queues: false,
|
|
||||||
crontab: false,
|
|
||||||
plugins: false
|
|
||||||
|
|
||||||
config :pleroma, Pleroma.ScheduledActivity,
|
config :pleroma, Pleroma.ScheduledActivity,
|
||||||
daily_user_limit: 2,
|
daily_user_limit: 2,
|
||||||
|
@ -129,14 +127,41 @@
|
||||||
|
|
||||||
config :pleroma, :cachex, provider: Pleroma.CachexMock
|
config :pleroma, :cachex, provider: Pleroma.CachexMock
|
||||||
|
|
||||||
|
config :pleroma, Pleroma.Web.WebFinger, update_nickname_on_user_fetch: false
|
||||||
|
|
||||||
config :pleroma, :side_effects,
|
config :pleroma, :side_effects,
|
||||||
ap_streamer: Pleroma.Web.ActivityPub.ActivityPubMock,
|
ap_streamer: Pleroma.Web.ActivityPub.ActivityPubMock,
|
||||||
logger: Pleroma.LoggerMock
|
logger: Pleroma.LoggerMock
|
||||||
|
|
||||||
|
config :pleroma, Pleroma.Search, module: Pleroma.Search.DatabaseSearch
|
||||||
|
|
||||||
|
config :pleroma, Pleroma.Search.Meilisearch, url: "http://127.0.0.1:7700/", private_key: nil
|
||||||
|
|
||||||
# Reduce recompilation time
|
# Reduce recompilation time
|
||||||
# https://dashbit.co/blog/speeding-up-re-compilation-of-elixir-projects
|
# https://dashbit.co/blog/speeding-up-re-compilation-of-elixir-projects
|
||||||
config :phoenix, :plug_init_mode, :runtime
|
config :phoenix, :plug_init_mode, :runtime
|
||||||
|
|
||||||
|
config :pleroma, :config_impl, Pleroma.UnstubbedConfigMock
|
||||||
|
|
||||||
|
config :pleroma, Pleroma.PromEx, disabled: true
|
||||||
|
|
||||||
|
# Mox definitions. Only read during compile time.
|
||||||
|
config :pleroma, Pleroma.User.Backup, config_impl: Pleroma.UnstubbedConfigMock
|
||||||
|
config :pleroma, Pleroma.Uploaders.S3, ex_aws_impl: Pleroma.Uploaders.S3.ExAwsMock
|
||||||
|
config :pleroma, Pleroma.Uploaders.S3, config_impl: Pleroma.UnstubbedConfigMock
|
||||||
|
config :pleroma, Pleroma.Upload, config_impl: Pleroma.UnstubbedConfigMock
|
||||||
|
config :pleroma, Pleroma.ScheduledActivity, config_impl: Pleroma.UnstubbedConfigMock
|
||||||
|
config :pleroma, Pleroma.Web.RichMedia.Helpers, config_impl: Pleroma.StaticStubbedConfigMock
|
||||||
|
|
||||||
|
peer_module =
|
||||||
|
if String.to_integer(System.otp_release()) >= 25 do
|
||||||
|
:peer
|
||||||
|
else
|
||||||
|
:slave
|
||||||
|
end
|
||||||
|
|
||||||
|
config :pleroma, Pleroma.Cluster, peer_module: peer_module
|
||||||
|
|
||||||
if File.exists?("./config/test.secret.exs") do
|
if File.exists?("./config/test.secret.exs") do
|
||||||
import_config "test.secret.exs"
|
import_config "test.secret.exs"
|
||||||
else
|
else
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
echo "-- Waiting for database..."
|
echo "-- Waiting for database..."
|
||||||
while ! pg_isready -U ${DB_USER:-pleroma} -d postgres://${DB_HOST:-db}:5432/${DB_NAME:-pleroma} -t 1; do
|
while ! pg_isready -U ${DB_USER:-pleroma} -d postgres://${DB_HOST:-db}:${DB_PORT:-5432}/${DB_NAME:-pleroma} -t 1; do
|
||||||
sleep 1s
|
sleep 1s
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ Currently, known `<frontend>` values are:
|
||||||
- [kenoma](http://git.pleroma.social/lambadalambda/kenoma)
|
- [kenoma](http://git.pleroma.social/lambadalambda/kenoma)
|
||||||
- [pleroma-fe](http://git.pleroma.social/pleroma/pleroma-fe)
|
- [pleroma-fe](http://git.pleroma.social/pleroma/pleroma-fe)
|
||||||
- [fedi-fe](https://git.pleroma.social/pleroma/fedi-fe)
|
- [fedi-fe](https://git.pleroma.social/pleroma/fedi-fe)
|
||||||
- [soapbox-fe](https://gitlab.com/soapbox-pub/soapbox-fe)
|
- [soapbox](https://gitlab.com/soapbox-pub/soapbox)
|
||||||
|
|
||||||
You can still install frontends that are not configured, see below.
|
You can still install frontends that are not configured, see below.
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,8 @@ If any of the options are left unspecified, you will be prompted interactively.
|
||||||
- `--static-dir <path>` - the directory custom public files should be read from (custom emojis, frontend bundle overrides, robots.txt, etc.)
|
- `--static-dir <path>` - the directory custom public files should be read from (custom emojis, frontend bundle overrides, robots.txt, etc.)
|
||||||
- `--listen-ip <ip>` - the ip the app should listen to, defaults to 127.0.0.1
|
- `--listen-ip <ip>` - the ip the app should listen to, defaults to 127.0.0.1
|
||||||
- `--listen-port <port>` - the port the app should listen to, defaults to 4000
|
- `--listen-port <port>` - the port the app should listen to, defaults to 4000
|
||||||
- `--strip-uploads <Y|N>` - use ExifTool to strip uploads of sensitive location data
|
- `--strip-uploads-location <Y|N>` - use ExifTool to strip uploads of sensitive location data
|
||||||
|
- `--read-uploads-description <Y|N>` - use ExifTool to read image descriptions from uploads
|
||||||
- `--anonymize-uploads <Y|N>` - randomize uploaded filenames
|
- `--anonymize-uploads <Y|N>` - randomize uploaded filenames
|
||||||
- `--dedupe-uploads <Y|N>` - store files based on their hash to reduce data storage requirements if duplicates are uploaded with different filenames
|
- `--dedupe-uploads <Y|N>` - store files based on their hash to reduce data storage requirements if duplicates are uploaded with different filenames
|
||||||
- `--skip-release-env` - skip generation the release environment file
|
- `--skip-release-env` - skip generation the release environment file
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
# Managing installed frontends
|
||||||
|
|
||||||
|
Pleroma lets you install multiple frontends including multiple versions of same frontend. Right now it's only possible to switch which frontend is the default, but in the future it would be possible for user to select which frontend they prefer to use.
|
||||||
|
|
||||||
|
As of 2.6.0 there are two ways of managing frontends - through PleromaFE's Admin Dashboard (preferred, easier method) or through AdminFE (clunky but also works on versions older than 2.6.0).
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
Managing frontends through UI requires [in-database configuration](../configuration/howto_database_config.md) to be enabled (default on newer instances but might be off on older ones).
|
||||||
|
|
||||||
|
## How it works
|
||||||
|
|
||||||
|
When installing frontends, it creates a folder in [static directory](../configuration/static_dir.md) that follows this pattern: `/frontends/${front-end name}/${front-end version}/`, puts contents of the built frontend in there. Then when accessing the server backend checks what front-end name and version are set to be default and serves index.html and assets from appropriate path.
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
|
||||||
|
If you've been putting your frontend build directly into static dir as an antiquated way of serving custom frontend, this system will not work and will still serve the custom index.html you put in there. You can still serve custom frontend builds if you put your build into `/frontends/$name/$version` instead and set the "default frontend" fields appropriately.
|
||||||
|
|
||||||
|
Currently, there is no backup system, i.e. when installing `master` version it _will_ overwrite installed `master` version, for now if you want to keep previous version you should back it up manually, i.e. running `cp -r ./frontends/pleroma-fe/master ./frontends/pleroma-fe/master_old` in your static dir.
|
||||||
|
|
||||||
|
## Managing front-ends through Admin Dashboard
|
||||||
|
|
||||||
|
Open up Admin Dashboard (gauge icon in top bar, same as where link to AdminFE was),__
|
||||||
|
![location of Admin Dashboard icon](../assets/admin_dash_location.png)
|
||||||
|
switch to "Front-ends" tab.
|
||||||
|
![screenshot of Front-ends tab](../assets/frontends_tab.png)
|
||||||
|
This page is designed to be self-explanatory and easy to use, while avoiding issues and pitfalls of AdminFE, but it's also early in development, everything is subject to change.
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
This goes without saying, but if you set default frontend to anything except >2.6.0 version of PleromaFE you'll lose the access to Admin Dashboard and will have to use AdminFE to get it back. See below on how to use AdminFE.
|
||||||
|
|
||||||
|
### Limitations
|
||||||
|
|
||||||
|
Currently the list of available for install frontends is essentially hard-coded in backend's configuration, each providing only one version, with exception for PleromaFE which overrides 'pleroma-fe' to also include `develop` version. There is no way to manually install build with a URL (coming soon) nor add more available frontends to the repository (it's broken).
|
||||||
|
|
||||||
|
There is also no way to tell if there is an update available or not, for now you should watch for [announcements](https://pleroma.social/announcements/) of new PleromaFE stable releases to see if there is new stable version. For `develop` version it's up to you whether you want to follow the development process or just reinstall it periodically hoping for new stuff.
|
||||||
|
|
||||||
|
## Using AdminFE to manage frontends
|
||||||
|
|
||||||
|
Access AdminFE either directly by going to `/pleroma/admin` of your instance or by opening Admin Dashboard and clicking the link at the bottom of the window
|
||||||
|
![link to open old AdminFE](../assets/old_adminfe_link.png)
|
||||||
|
|
||||||
|
|
||||||
|
Go to Settings -> Frontend.
|
||||||
|
|
||||||
|
### Installing front-ends
|
||||||
|
|
||||||
|
At the very top of the page there's a list of available frontends and button to install custom front-end
|
||||||
|
|
||||||
|
!!! tip
|
||||||
|
Remember to click "Submit" in bottom right corner to save your changes!
|
||||||
|
|
||||||
|
!!! bug
|
||||||
|
**Available Frontends** section lets you _install_ frontends but **NOT** update/reinstall them. It's only useful for installing a frontend once.
|
||||||
|
|
||||||
|
Due to aforementioned bug, preferred way of installing frontends in AdminFE is by clicking the "Install another frontend"
|
||||||
|
![screenshot of admin-fe with instructions on how to install a frontend](../assets/way_to_install_frontends.png)
|
||||||
|
and filling in the fields. Unfortunately AdminFE does not provide the raw data necessary for you to fill those fields, so your best bet is to see what backend returns in browser's devtools or refer to the [source code](https://git.pleroma.social/pleroma/pleroma/-/blob/develop/config/config.exs?ref_type=heads#L742-791). For the most part, only **Name**, **Ref** (i.e. version) and **Build URL** fields are required, although some frontends might also require **Build Directory** to work.
|
||||||
|
|
||||||
|
For pleroma-fe you can use either `master` or `develop` refs, or potentially any ref in GitLab that has artifacts for `build` job, but that's outside scope of this document.
|
||||||
|
|
||||||
|
### Selecting default frontend
|
||||||
|
|
||||||
|
Scroll page waaaaay down, search for "Frontends" section, subtitled "Installed frontends management", change the name and reference of the "Primary" frontend.
|
||||||
|
![screenshot of admin-fe with instructions on how to install a frontend](../assets/primary_frontend_section.png)
|
||||||
|
|
||||||
|
|
||||||
|
!!! danger
|
||||||
|
If you change "Admin" frontend name/reference you risk losing access to AdminFE as well.
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
Don't put anything into the "Available" section as it will break the list of available frontends completely, including the "add another frontend" button. If you accidentally put something in there, click the trashbin icon next to "Available" to reset it and restore the frontends list.
|
|
@ -17,11 +17,11 @@ su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"
|
||||||
## For from source installations (using git)
|
## For from source installations (using git)
|
||||||
|
|
||||||
1. Go to the working directory of Pleroma (default is `/opt/pleroma`)
|
1. Go to the working directory of Pleroma (default is `/opt/pleroma`)
|
||||||
2. Run `git pull`. This pulls the latest changes from upstream.
|
2. Run `git checkout <tagged release>` [^1]. e.g. `git checkout v2.4.5` This pulls the [tagged release](https://git.pleroma.social/pleroma/pleroma/-/releases) from upstream.
|
||||||
3. Run `mix deps.get` [^1]. This pulls in any new dependencies.
|
3. Run `mix deps.get` [^1]. This pulls in any new dependencies.
|
||||||
4. Stop the Pleroma service.
|
4. Stop the Pleroma service.
|
||||||
5. Run `mix ecto.migrate` [^1] [^2]. This task performs database migrations, if there were any.
|
5. Run `mix ecto.migrate` [^1] [^2]. This task performs database migrations, if there were any.
|
||||||
6. Start the Pleroma service.
|
6. Start the Pleroma service.
|
||||||
|
|
||||||
[^1]: Depending on which install guide you followed (for example on Debian/Ubuntu), you want to run `mix` tasks as `pleroma` user by adding `sudo -Hu pleroma` before the command.
|
[^1]: Depending on which install guide you followed (for example on Debian/Ubuntu), you want to run `git` and `mix` tasks as `pleroma` user by adding `sudo -Hu pleroma` before the command.
|
||||||
[^2]: Prefix with `MIX_ENV=prod` to run it using the production config file.
|
[^2]: Prefix with `MIX_ENV=prod` to run it using the production config file.
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 8.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 145 KiB |
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
Binary file not shown.
After Width: | Height: | Size: 127 KiB |
|
@ -3,12 +3,6 @@ Note: Additional clients may be working but theses are officially supporting Ple
|
||||||
Feel free to contact us to be added to this list!
|
Feel free to contact us to be added to this list!
|
||||||
|
|
||||||
## Desktop
|
## Desktop
|
||||||
### Roma for Desktop
|
|
||||||
- Homepage: <https://www.pleroma.com/#desktopApp>
|
|
||||||
- Source Code: <https://github.com/roma-apps/roma-desktop>
|
|
||||||
- Platforms: Windows, Mac, Linux
|
|
||||||
- Features: MastoAPI, Streaming Ready
|
|
||||||
|
|
||||||
### Social
|
### Social
|
||||||
- Source Code: <https://gitlab.gnome.org/World/Social>
|
- Source Code: <https://gitlab.gnome.org/World/Social>
|
||||||
- Contact: [@brainblasted@social.libre.fi](https://social.libre.fi/users/brainblasted)
|
- Contact: [@brainblasted@social.libre.fi](https://social.libre.fi/users/brainblasted)
|
||||||
|
@ -19,7 +13,14 @@ Feel free to contact us to be added to this list!
|
||||||
### Whalebird
|
### Whalebird
|
||||||
- Homepage: <https://whalebird.social/>
|
- Homepage: <https://whalebird.social/>
|
||||||
- Source Code: <https://github.com/h3poteto/whalebird-desktop>
|
- Source Code: <https://github.com/h3poteto/whalebird-desktop>
|
||||||
- Contact: [@h3poteto@pleroma.io](https://pleroma.io/users/h3poteto)
|
- Contact: [@whalebird@pleroma.io](https://pleroma.io/users/whalebird)
|
||||||
|
- Platforms: Windows, Mac, Linux
|
||||||
|
- Features: MastoAPI, Streaming Ready
|
||||||
|
|
||||||
|
### Fedistar
|
||||||
|
- Homepage: <https://fedistar.net>
|
||||||
|
- Source Code: <https://github.com/h3poteto/fedistar>
|
||||||
|
- Contact: [@fedistar@pleroma.io](https://pleroma.io/users/fedistar)
|
||||||
- Platforms: Windows, Mac, Linux
|
- Platforms: Windows, Mac, Linux
|
||||||
- Features: MastoAPI, Streaming Ready
|
- Features: MastoAPI, Streaming Ready
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ To add configuration to your config file, you can copy it from the base config.
|
||||||
* `email`: Email used to reach an Administrator/Moderator of the instance.
|
* `email`: Email used to reach an Administrator/Moderator of the instance.
|
||||||
* `notify_email`: Email used for notifications.
|
* `notify_email`: Email used for notifications.
|
||||||
* `description`: The instance’s description, can be seen in nodeinfo and ``/api/v1/instance``.
|
* `description`: The instance’s description, can be seen in nodeinfo and ``/api/v1/instance``.
|
||||||
|
* `short_description`: Shorter version of instance description, can be seen on ``/api/v1/instance``.
|
||||||
* `limit`: Posts character limit (CW/Subject included in the counter).
|
* `limit`: Posts character limit (CW/Subject included in the counter).
|
||||||
* `description_limit`: The character limit for image descriptions.
|
* `description_limit`: The character limit for image descriptions.
|
||||||
* `remote_limit`: Hard character limit beyond which remote posts will be dropped.
|
* `remote_limit`: Hard character limit beyond which remote posts will be dropped.
|
||||||
|
@ -48,6 +49,7 @@ To add configuration to your config file, you can copy it from the base config.
|
||||||
* `autofollowing_nicknames`: Set to nicknames of (local) users that automatically follows every newly registered user.
|
* `autofollowing_nicknames`: Set to nicknames of (local) users that automatically follows every newly registered user.
|
||||||
* `attachment_links`: Set to true to enable automatically adding attachment link text to statuses.
|
* `attachment_links`: Set to true to enable automatically adding attachment link text to statuses.
|
||||||
* `max_report_comment_size`: The maximum size of the report comment (Default: `1000`).
|
* `max_report_comment_size`: The maximum size of the report comment (Default: `1000`).
|
||||||
|
* `report_strip_status`: Strip associated statuses in reports to ids when closed/resolved, otherwise keep a copy.
|
||||||
* `safe_dm_mentions`: If set to true, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. "@friend hey i really don't like @enemy"). Default: `false`.
|
* `safe_dm_mentions`: If set to true, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. "@friend hey i really don't like @enemy"). Default: `false`.
|
||||||
* `healthcheck`: If set to true, system data will be shown on ``/api/v1/pleroma/healthcheck``.
|
* `healthcheck`: If set to true, system data will be shown on ``/api/v1/pleroma/healthcheck``.
|
||||||
* `remote_post_retention_days`: The default amount of days to retain remote posts when pruning the database.
|
* `remote_post_retention_days`: The default amount of days to retain remote posts when pruning the database.
|
||||||
|
@ -64,6 +66,36 @@ To add configuration to your config file, you can copy it from the base config.
|
||||||
* `cleanup_attachments`: Remove attachments along with statuses. Does not affect duplicate files and attachments without status. Enabling this will increase load to database when deleting statuses on larger instances.
|
* `cleanup_attachments`: Remove attachments along with statuses. Does not affect duplicate files and attachments without status. Enabling this will increase load to database when deleting statuses on larger instances.
|
||||||
* `show_reactions`: Let favourites and emoji reactions be viewed through the API (default: `true`).
|
* `show_reactions`: Let favourites and emoji reactions be viewed through the API (default: `true`).
|
||||||
* `password_reset_token_validity`: The time after which reset tokens aren't accepted anymore, in seconds (default: one day).
|
* `password_reset_token_validity`: The time after which reset tokens aren't accepted anymore, in seconds (default: one day).
|
||||||
|
* `admin_privileges`: A list of privileges an admin has (e.g. delete messages, manage reports...)
|
||||||
|
* Possible values are:
|
||||||
|
* `:users_read`
|
||||||
|
* Allows admins to fetch users through the admin API.
|
||||||
|
* `:users_manage_invites`
|
||||||
|
* Allows admins to manage invites. This includes sending, resending, revoking and approving invites.
|
||||||
|
* `:users_manage_activation_state`
|
||||||
|
* Allows admins to activate and deactivate accounts. This also allows them to see deactivated users through the Mastodon API.
|
||||||
|
* `:users_manage_tags`
|
||||||
|
* Allows admins to set and remove tags for users. This can be useful in combination with MRF policies, such as `Pleroma.Web.ActivityPub.MRF.TagPolicy`.
|
||||||
|
* `:users_manage_credentials`
|
||||||
|
* Allows admins to trigger a password reset and set new credentials for an user.
|
||||||
|
* `:users_delete`
|
||||||
|
* Allows admins to delete accounts. Note that deleting an account is actually deactivating it and removing all data like posts, profile information, etc.
|
||||||
|
* `:messages_read`
|
||||||
|
* Allows admins to read messages through the admin API, including non-public posts and chats.
|
||||||
|
* `:messages_delete`
|
||||||
|
* Allows admins to delete messages from other users.
|
||||||
|
* `:instances_delete,`
|
||||||
|
* Allows admins to remove a whole remote instance from your instance. This will delete all users and messages from that remote instance.
|
||||||
|
* `:reports_manage_reports`
|
||||||
|
* Allows admins to see and manage reports.
|
||||||
|
* `:moderation_log_read,`
|
||||||
|
* Allows admins to read the entries in the moderation log.
|
||||||
|
* `:emoji_manage_emoji`
|
||||||
|
* Allows admins to manage custom emoji on the instance.
|
||||||
|
* `:statistics_read,`
|
||||||
|
* Allows admins to see some simple statistics about the instance.
|
||||||
|
* `moderator_privileges`: A list of privileges a moderator has (e.g. delete messages, manage reports...)
|
||||||
|
* Possible values are the same as for `admin_privileges`
|
||||||
|
|
||||||
## :database
|
## :database
|
||||||
* `improved_hashtag_timeline`: Setting to force toggle / force disable improved hashtags timeline. `:enabled` forces hashtags to be fetched from `hashtags` table for hashtags timeline. `:disabled` forces object-embedded hashtags to be used (slower). Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [unless overridden] when HashtagsTableMigrator completes).
|
* `improved_hashtag_timeline`: Setting to force toggle / force disable improved hashtags timeline. `:enabled` forces hashtags to be fetched from `hashtags` table for hashtags timeline. `:disabled` forces object-embedded hashtags to be used (slower). Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [unless overridden] when HashtagsTableMigrator completes).
|
||||||
|
@ -128,6 +160,8 @@ To add configuration to your config file, you can copy it from the base config.
|
||||||
* `Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicy`: Drops follow requests from followbots. Users can still allow bots to follow them by first following the bot.
|
* `Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicy`: Drops follow requests from followbots. Users can still allow bots to follow them by first following the bot.
|
||||||
* `Pleroma.Web.ActivityPub.MRF.KeywordPolicy`: Rejects or removes from the federated timeline or replaces keywords. (See [`:mrf_keyword`](#mrf_keyword)).
|
* `Pleroma.Web.ActivityPub.MRF.KeywordPolicy`: Rejects or removes from the federated timeline or replaces keywords. (See [`:mrf_keyword`](#mrf_keyword)).
|
||||||
* `Pleroma.Web.ActivityPub.MRF.ForceMentionsInContent`: Forces every mentioned user to be reflected in the post content.
|
* `Pleroma.Web.ActivityPub.MRF.ForceMentionsInContent`: Forces every mentioned user to be reflected in the post content.
|
||||||
|
* `Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy`: Forces quote post URLs to be reflected in the message content inline.
|
||||||
|
* `Pleroma.Web.ActivityPub.MRF.QuoteToLinkTagPolicy`: Force a Link tag for posts quoting another post. (may break outgoing federation of quote posts with older Pleroma versions)
|
||||||
* `transparency`: Make the content of your Message Rewrite Facility settings public (via nodeinfo).
|
* `transparency`: Make the content of your Message Rewrite Facility settings public (via nodeinfo).
|
||||||
* `transparency_exclusions`: Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value.
|
* `transparency_exclusions`: Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value.
|
||||||
|
|
||||||
|
@ -203,7 +237,7 @@ config :pleroma, :mrf_user_allowlist, %{
|
||||||
e.g., A value of 900 results in any post with a timestamp older than 15 minutes will be acted upon.
|
e.g., A value of 900 results in any post with a timestamp older than 15 minutes will be acted upon.
|
||||||
* `actions`: A list of actions to apply to the post:
|
* `actions`: A list of actions to apply to the post:
|
||||||
* `:delist` removes the post from public timelines
|
* `:delist` removes the post from public timelines
|
||||||
* `:strip_followers` removes followers from the ActivityPub recipient list, ensuring they won't be delivered to home timelines
|
* `:strip_followers` removes followers from the ActivityPub recipient list, ensuring they won't be delivered to home timelines, additionally for followers-only it degrades to a direct message
|
||||||
* `:reject` rejects the message entirely
|
* `:reject` rejects the message entirely
|
||||||
|
|
||||||
#### :mrf_steal_emoji
|
#### :mrf_steal_emoji
|
||||||
|
@ -229,6 +263,14 @@ Notes:
|
||||||
|
|
||||||
* `follower_nickname`: The name of the bot account to use for following newly discovered users. Using `followbot` or similar is strongly suggested.
|
* `follower_nickname`: The name of the bot account to use for following newly discovered users. Using `followbot` or similar is strongly suggested.
|
||||||
|
|
||||||
|
#### :mrf_emoji
|
||||||
|
* `remove_url`: A list of patterns which result in emoji whose URL matches being removed from the message. This will apply to statuses, emoji reactions, and user profiles. Each pattern can be a string or a [regular expression](https://hexdocs.pm/elixir/Regex.html).
|
||||||
|
* `remove_shortcode`: A list of patterns which result in emoji whose shortcode matches being removed from the message. This will apply to statuses, emoji reactions, and user profiles. Each pattern can be a string or a [regular expression](https://hexdocs.pm/elixir/Regex.html).
|
||||||
|
* `federated_timeline_removal_url`: A list of patterns which result in message with emojis whose URLs match being removed from federated timelines (a.k.a unlisted). This will apply only to statuses. Each pattern can be a string or a [regular expression](https://hexdocs.pm/elixir/Regex.html).
|
||||||
|
* `federated_timeline_removal_shortcode`: A list of patterns which result in message with emojis whose shortcodes match being removed from federated timelines (a.k.a unlisted). This will apply only to statuses. Each pattern can be a string or a [regular expression](https://hexdocs.pm/elixir/Regex.html).
|
||||||
|
|
||||||
|
#### :mrf_inline_quote
|
||||||
|
* `template`: The template to append to the post. `{url}` will be replaced with the actual link to the quoted post. Default: `<bdi>RT:</bdi> {url}`
|
||||||
|
|
||||||
### :activitypub
|
### :activitypub
|
||||||
* `unfollow_blocked`: Whether blocks result in people getting unfollowed
|
* `unfollow_blocked`: Whether blocks result in people getting unfollowed
|
||||||
|
@ -627,12 +669,24 @@ This filter replaces the filename (not the path) of an upload. For complete obfu
|
||||||
|
|
||||||
No specific configuration.
|
No specific configuration.
|
||||||
|
|
||||||
#### Pleroma.Upload.Filter.Exiftool
|
#### Pleroma.Upload.Filter.Exiftool.StripLocation
|
||||||
|
|
||||||
This filter only strips the GPS and location metadata with Exiftool leaving color profiles and attributes intact.
|
This filter only strips the GPS and location metadata with Exiftool leaving color profiles and attributes intact.
|
||||||
|
|
||||||
No specific configuration.
|
No specific configuration.
|
||||||
|
|
||||||
|
#### Pleroma.Upload.Filter.Exiftool.ReadDescription
|
||||||
|
|
||||||
|
This filter reads the ImageDescription and iptc:Caption-Abstract fields with Exiftool so clients can prefill the media description field.
|
||||||
|
|
||||||
|
No specific configuration.
|
||||||
|
|
||||||
|
#### Pleroma.Upload.Filter.OnlyMedia
|
||||||
|
|
||||||
|
This filter rejects uploads that are not identified with Content-Type matching audio/\*, image/\*, or video/\*
|
||||||
|
|
||||||
|
No specific configuration.
|
||||||
|
|
||||||
#### Pleroma.Upload.Filter.Mogrify
|
#### Pleroma.Upload.Filter.Mogrify
|
||||||
|
|
||||||
* `args`: List of actions for the `mogrify` command like `"strip"` or `["strip", "auto-orient", {"implode", "1"}]`.
|
* `args`: List of actions for the `mogrify` command like `"strip"` or `["strip", "auto-orient", {"implode", "1"}]`.
|
||||||
|
@ -770,7 +824,7 @@ Web Push Notifications configuration. You can use the mix task `mix web_push.gen
|
||||||
* ``private_key``: VAPID private key
|
* ``private_key``: VAPID private key
|
||||||
|
|
||||||
## :logger
|
## :logger
|
||||||
* `backends`: `:console` is used to send logs to stdout, `{ExSyslogger, :ex_syslogger}` to log to syslog, and `Quack.Logger` to log to Slack
|
* `backends`: `:console` is used to send logs to stdout, `{ExSyslogger, :ex_syslogger}` to log to syslog
|
||||||
|
|
||||||
An example to enable ONLY ExSyslogger (f/ex in ``prod.secret.exs``) with info and debug suppressed:
|
An example to enable ONLY ExSyslogger (f/ex in ``prod.secret.exs``) with info and debug suppressed:
|
||||||
```elixir
|
```elixir
|
||||||
|
@ -793,10 +847,10 @@ config :logger, :ex_syslogger,
|
||||||
|
|
||||||
See: [logger’s documentation](https://hexdocs.pm/logger/Logger.html) and [ex_syslogger’s documentation](https://hexdocs.pm/ex_syslogger/)
|
See: [logger’s documentation](https://hexdocs.pm/logger/Logger.html) and [ex_syslogger’s documentation](https://hexdocs.pm/ex_syslogger/)
|
||||||
|
|
||||||
An example of logging info to local syslog, but warn to a Slack channel:
|
An example of logging info to local syslog, but debug to console:
|
||||||
```elixir
|
```elixir
|
||||||
config :logger,
|
config :logger,
|
||||||
backends: [ {ExSyslogger, :ex_syslogger}, Quack.Logger ],
|
backends: [ {ExSyslogger, :ex_syslogger}, :console ],
|
||||||
level: :info
|
level: :info
|
||||||
|
|
||||||
config :logger, :ex_syslogger,
|
config :logger, :ex_syslogger,
|
||||||
|
@ -804,14 +858,12 @@ config :logger, :ex_syslogger,
|
||||||
ident: "pleroma",
|
ident: "pleroma",
|
||||||
format: "$metadata[$level] $message"
|
format: "$metadata[$level] $message"
|
||||||
|
|
||||||
config :quack,
|
config :logger, :console,
|
||||||
level: :warn,
|
level: :debug,
|
||||||
meta: [:all],
|
format: "\n$time $metadata[$level] $message\n",
|
||||||
webhook_url: "https://hooks.slack.com/services/YOUR-API-KEY-HERE"
|
metadata: [:request_id]
|
||||||
```
|
```
|
||||||
|
|
||||||
See the [Quack Github](https://github.com/azohra/quack) for more details
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Database options
|
## Database options
|
||||||
|
@ -837,21 +889,8 @@ This will probably take a long time.
|
||||||
|
|
||||||
### BBS / SSH access
|
### BBS / SSH access
|
||||||
|
|
||||||
To enable simple command line interface accessible over ssh, add a setting like this to your configuration file:
|
This feature has been removed from Pleroma core.
|
||||||
|
However, a client has been made and is available at https://git.pleroma.social/Duponin/sshocial.
|
||||||
```exs
|
|
||||||
app_dir = File.cwd!
|
|
||||||
priv_dir = Path.join([app_dir, "priv/ssh_keys"])
|
|
||||||
|
|
||||||
config :esshd,
|
|
||||||
enabled: true,
|
|
||||||
priv_dir: priv_dir,
|
|
||||||
handler: "Pleroma.BBS.Handler",
|
|
||||||
port: 10_022,
|
|
||||||
password_authenticator: "Pleroma.BBS.Authenticator"
|
|
||||||
```
|
|
||||||
|
|
||||||
Feel free to adjust the priv_dir and port number. Then you will have to create the key for the keys (in the example `priv/ssh_keys`) and create the host keys with `ssh-keygen -m PEM -N "" -b 2048 -t rsa -f ssh_host_rsa_key`. After restarting, you should be able to connect to your Pleroma instance with `ssh username@server -p $PORT`
|
|
||||||
|
|
||||||
### :gopher
|
### :gopher
|
||||||
* `enabled`: Enables the gopher interface
|
* `enabled`: Enables the gopher interface
|
||||||
|
|
|
@ -62,6 +62,20 @@ An additional “Expect-CT” header will be sent with the configured `ct_max_ag
|
||||||
|
|
||||||
If you click on a link, your browser’s request to the other site will include from where it is coming from. The “Referrer policy” header tells the browser how and if it should send this information. (see [Referrer policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy))
|
If you click on a link, your browser’s request to the other site will include from where it is coming from. The “Referrer policy” header tells the browser how and if it should send this information. (see [Referrer policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy))
|
||||||
|
|
||||||
|
### Uploaded media and media proxy
|
||||||
|
|
||||||
|
It is STRONGLY RECOMMENDED to serve both the locally-uploaded media and the media proxy from another domain than the domain that Pleroma runs on, if applicable.
|
||||||
|
|
||||||
|
```elixir
|
||||||
|
config :pleroma, :media_proxy,
|
||||||
|
base_url: "https://some.other.domain"
|
||||||
|
|
||||||
|
config :pleroma, Pleroma.Upload,
|
||||||
|
base_url: "https://some.other.domain/media"
|
||||||
|
```
|
||||||
|
|
||||||
|
See `installation/pleroma-mediaproxy.nginx` for examples on how to configure your media proxy.
|
||||||
|
|
||||||
## systemd
|
## systemd
|
||||||
|
|
||||||
A systemd unit example is provided at `installation/pleroma.service`.
|
A systemd unit example is provided at `installation/pleroma.service`.
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
# How to use a different domain name for Pleroma and the users it serves
|
||||||
|
|
||||||
|
Pleroma users are primarily identified by a `user@example.org` handle, and you might want this identifier to be the same as your email or jabber account, for instance.
|
||||||
|
However, in this case, you are almost certainly serving some web content on `https://example.org` already, and you might want to use another domain (say `pleroma.example.org`) for Pleroma itself.
|
||||||
|
|
||||||
|
Pleroma supports that, but it might be tricky to set up, and any error might prevent you from federating with other instances.
|
||||||
|
|
||||||
|
*If you are already running Pleroma on `example.org`, it is no longer possible to move it to `pleroma.example.org`.*
|
||||||
|
|
||||||
|
## Account identifiers
|
||||||
|
|
||||||
|
It is important to understand that for federation purposes, a user in Pleroma has two unique identifiers associated:
|
||||||
|
|
||||||
|
- A webfinger `acct:` URI, used for discovery and as a verifiable global name for the user across Pleroma instances. In our example, our account's acct: URI is `acct:user@example.org`
|
||||||
|
- An author/actor URI, used in every other aspect of federation. This is the way in which users are identified in ActivityPub, the underlying protocol used for federation with other Pleroma instances.
|
||||||
|
In our case, it is `https://pleroma.example.org/users/user`.
|
||||||
|
|
||||||
|
Both account identifiers are unique and required for Pleroma. An important risk if you set up your Pleroma instance incorrectly is to create two users (with different acct: URIs) with conflicting author/actor URIs.
|
||||||
|
|
||||||
|
## WebFinger
|
||||||
|
|
||||||
|
As said earlier, each Pleroma user has an `acct`: URI, which is used for discovery and authentication. When you add @user@example.org, a webfinger query is performed. This is done in two steps:
|
||||||
|
|
||||||
|
1. Querying `https://example.org/.well-known/host-meta` (where the domain of the URL matches the domain part of the `acct`: URI) to get information on how to perform the query.
|
||||||
|
This file will indeed contain a URL template of the form `https://example.org/.well-known/webfinger?resource={uri}` that will be used in the second step.
|
||||||
|
2. Fill the returned template with the `acct`: URI to be queried and perform the query: `https://example.org/.well-known/webfinger?resource=acct:user@example.org`
|
||||||
|
|
||||||
|
## Configuring your Pleroma instance
|
||||||
|
|
||||||
|
**_DO NOT ATTEMPT TO CONFIGURE YOUR INSTANCE THIS WAY IF YOU DID NOT UNDERSTAND THE ABOVE_**
|
||||||
|
|
||||||
|
### Configuring Pleroma
|
||||||
|
|
||||||
|
Pleroma has a two configuration settings to enable using different domains for your users and Pleroma itself. `host` in `Pleroma.Web.Endpoint` and `domain` in `Pleroma.Web.WebFinger`. When the latter is not set, it defaults to the value of `host`.
|
||||||
|
|
||||||
|
*Be extra careful when configuring your Pleroma instance, as changing `host` may cause remote instances to register different accounts with the same author/actor URI, which will result in federation issues!*
|
||||||
|
|
||||||
|
```elixir
|
||||||
|
config :pleroma, Pleroma.Web.Endpoint,
|
||||||
|
url: [host: "pleroma.example.org"]
|
||||||
|
|
||||||
|
config :pleroma, Pleroma.Web.WebFinger, domain: "example.org"
|
||||||
|
```
|
||||||
|
|
||||||
|
- `domain` - is the domain for which your Pleroma instance has authority, it's the domain used in `acct:` URI. In our example, `domain` would be set to `example.org`. This is used in WebFinger account ids, which are the canonical account identifier in some other fediverse software like Mastodon. **If you change `domain`, the accounts on your server will be shown as different accounts in those software**.
|
||||||
|
- `host` - is the domain used for any URL generated for your instance, including the author/actor URL's. In our case, that would be `pleroma.example.org`. This is used in AP ids, which are the canonical account identifier in Pleroma and some other fediverse software. **You should not change this after you have set up the instance**.
|
||||||
|
|
||||||
|
### Configuring WebFinger domain
|
||||||
|
|
||||||
|
Now, you have Pleroma running at `https://pleroma.example.org` as well as a website at `https://example.org`. If you recall how webfinger queries work, the first step is to query `https://example.org/.well-known/host-meta`, which will contain an URL template.
|
||||||
|
|
||||||
|
Therefore, the easiest way to configure `example.org` is to redirect `/.well-known/host-meta` to `pleroma.example.org`.
|
||||||
|
|
||||||
|
With nginx, it would be as simple as adding:
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
location = /.well-known/host-meta {
|
||||||
|
return 301 https://pleroma.example.org$request_uri;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
in example.org's server block.
|
|
@ -59,7 +59,7 @@ The configuration of Pleroma has traditionally been managed with a config file,
|
||||||
Here is an example of a server config stripped down after migration:
|
Here is an example of a server config stripped down after migration:
|
||||||
|
|
||||||
```
|
```
|
||||||
use Mix.Config
|
import Config
|
||||||
|
|
||||||
config :pleroma, Pleroma.Web.Endpoint,
|
config :pleroma, Pleroma.Web.Endpoint,
|
||||||
url: [host: "cool.pleroma.site", scheme: "https", port: 443]
|
url: [host: "cool.pleroma.site", scheme: "https", port: 443]
|
||||||
|
|
|
@ -0,0 +1,123 @@
|
||||||
|
# Configuring search
|
||||||
|
|
||||||
|
{! backend/administration/CLI_tasks/general_cli_task_info.include !}
|
||||||
|
|
||||||
|
## Built-in search
|
||||||
|
|
||||||
|
To use built-in search that has no external dependencies, set the search module to `Pleroma.Activity`:
|
||||||
|
|
||||||
|
> config :pleroma, Pleroma.Search, module: Pleroma.Search.DatabaseSearch
|
||||||
|
|
||||||
|
While it has no external dependencies, it has problems with performance and relevancy.
|
||||||
|
|
||||||
|
## Meilisearch
|
||||||
|
|
||||||
|
Note that it's quite a bit more memory hungry than PostgreSQL (around 4-5G for ~1.2 million
|
||||||
|
posts while idle and up to 7G while indexing initially). The disk usage for this additional index is also
|
||||||
|
around 4 gigabytes. Like [RUM](./cheatsheet.md#rum-indexing-for-full-text-search) indexes, it offers considerably
|
||||||
|
higher performance and ordering by timestamp in a reasonable amount of time.
|
||||||
|
Additionally, the search results seem to be more accurate.
|
||||||
|
|
||||||
|
Due to high memory usage, it may be best to set it up on a different machine, if running pleroma on a low-resource
|
||||||
|
computer, and use private key authentication to secure the remote search instance.
|
||||||
|
|
||||||
|
To use [meilisearch](https://www.meilisearch.com/), set the search module to `Pleroma.Search.Meilisearch`:
|
||||||
|
|
||||||
|
> config :pleroma, Pleroma.Search, module: Pleroma.Search.Meilisearch
|
||||||
|
|
||||||
|
You then need to set the address of the meilisearch instance, and optionally the private key for authentication. You might
|
||||||
|
also want to change the `initial_indexing_chunk_size` to be smaller if you're server is not very powerful, but not higher than `100_000`,
|
||||||
|
because meilisearch will refuse to process it if it's too big. However, in general you want this to be as big as possible, because meilisearch
|
||||||
|
indexes faster when it can process many posts in a single batch.
|
||||||
|
|
||||||
|
> config :pleroma, Pleroma.Search.Meilisearch,
|
||||||
|
> url: "http://127.0.0.1:7700/",
|
||||||
|
> private_key: "private key",
|
||||||
|
> initial_indexing_chunk_size: 100_000
|
||||||
|
|
||||||
|
Information about setting up meilisearch can be found in the
|
||||||
|
[official documentation](https://docs.meilisearch.com/learn/getting_started/installation.html).
|
||||||
|
You probably want to start it with `MEILI_NO_ANALYTICS=true` environment variable to disable analytics.
|
||||||
|
At least version 0.25.0 is required, but you are strongly adviced to use at least 0.26.0, as it introduces
|
||||||
|
the `--enable-auto-batching` option which drastically improves performance. Without this option, the search
|
||||||
|
is hardly usable on a somewhat big instance.
|
||||||
|
|
||||||
|
### Private key authentication (optional)
|
||||||
|
|
||||||
|
To set the private key, use the `MEILI_MASTER_KEY` environment variable when starting. After setting the _master key_,
|
||||||
|
you have to get the _private key_, which is actually used for authentication.
|
||||||
|
|
||||||
|
=== "OTP"
|
||||||
|
```sh
|
||||||
|
./bin/pleroma_ctl search.meilisearch show-keys <your master key here>
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "From Source"
|
||||||
|
```sh
|
||||||
|
mix pleroma.search.meilisearch show-keys <your master key here>
|
||||||
|
```
|
||||||
|
|
||||||
|
You will see a "Default Admin API Key", this is the key you actually put into your configuration file.
|
||||||
|
|
||||||
|
### Initial indexing
|
||||||
|
|
||||||
|
After setting up the configuration, you'll want to index all of your already existsing posts. Only public posts are indexed. You'll only
|
||||||
|
have to do it one time, but it might take a while, depending on the amount of posts your instance has seen. This is also a fairly RAM
|
||||||
|
consuming process for `meilisearch`, and it will take a lot of RAM when running if you have a lot of posts (seems to be around 5G for ~1.2
|
||||||
|
million posts while idle and up to 7G while indexing initially, but your experience may be different).
|
||||||
|
|
||||||
|
The sequence of actions is as follows:
|
||||||
|
|
||||||
|
1. First, change the configuration to use `Pleroma.Search.Meilisearch` as the search backend
|
||||||
|
2. Restart your instance, at this point it can be used while the search indexing is running, though search won't return anything
|
||||||
|
3. Start the initial indexing process (as described below with `index`),
|
||||||
|
and wait until the task says it sent everything from the database to index
|
||||||
|
4. Wait until everything is actually indexed (by checking with `stats` as described below),
|
||||||
|
at this point you don't have to do anything, just wait a while.
|
||||||
|
|
||||||
|
To start the initial indexing, run the `index` command:
|
||||||
|
|
||||||
|
=== "OTP"
|
||||||
|
```sh
|
||||||
|
./bin/pleroma_ctl search.meilisearch index
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "From Source"
|
||||||
|
```sh
|
||||||
|
mix pleroma.search.meilisearch index
|
||||||
|
```
|
||||||
|
|
||||||
|
This will show you the total amount of posts to index, and then show you the amount of posts indexed currently, until the numbers eventually
|
||||||
|
become the same. The posts are indexed in big batches and meilisearch will take some time to actually index them, even after you have
|
||||||
|
inserted all the posts into it. Depending on the amount of posts, this may be as long as several hours. To get information about the status
|
||||||
|
of indexing and how many posts have actually been indexed, use the `stats` command:
|
||||||
|
|
||||||
|
=== "OTP"
|
||||||
|
```sh
|
||||||
|
./bin/pleroma_ctl search.meilisearch stats
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "From Source"
|
||||||
|
```sh
|
||||||
|
mix pleroma.search.meilisearch stats
|
||||||
|
```
|
||||||
|
|
||||||
|
### Clearing the index
|
||||||
|
|
||||||
|
In case you need to clear the index (for example, to re-index from scratch, if that needs to happen for some reason), you can
|
||||||
|
use the `clear` command:
|
||||||
|
|
||||||
|
=== "OTP"
|
||||||
|
```sh
|
||||||
|
./bin/pleroma_ctl search.meilisearch clear
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "From Source"
|
||||||
|
```sh
|
||||||
|
mix pleroma.search.meilisearch clear
|
||||||
|
```
|
||||||
|
|
||||||
|
This will clear **all** the posts from the search index. Note, that deleted posts are also removed from index by the instance itself, so
|
||||||
|
there is no need to actually clear the whole index, unless you want **all** of it gone. That said, the index does not hold any information
|
||||||
|
that cannot be re-created from the database, it should also generally be a lot smaller than the size of your database. Still, the size
|
||||||
|
depends on the amount of text in posts.
|
|
@ -1064,7 +1064,6 @@ List of settings which support only full update by key:
|
||||||
```elixir
|
```elixir
|
||||||
@full_key_update [
|
@full_key_update [
|
||||||
{:pleroma, :ecto_repos},
|
{:pleroma, :ecto_repos},
|
||||||
{:quack, :meta},
|
|
||||||
{:mime, :types},
|
{:mime, :types},
|
||||||
{:cors_plug, [:max_age, :methods, :expose, :headers]},
|
{:cors_plug, [:max_age, :methods, :expose, :headers]},
|
||||||
{:auto_linker, :opts},
|
{:auto_linker, :opts},
|
||||||
|
@ -1084,18 +1083,18 @@ List of settings which support only full update by subkey:
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
*Settings without explicit key must be sended in separate config object params.*
|
*Settings without explicit key must be sent in separate config object params.*
|
||||||
```elixir
|
```elixir
|
||||||
config :quack,
|
config :foo,
|
||||||
level: :debug,
|
bar: :baz,
|
||||||
meta: [:all],
|
meta: [:data],
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"configs": [
|
"configs": [
|
||||||
{"group": ":quack", "key": ":level", "value": ":debug"},
|
{"group": ":foo", "key": ":bar", "value": ":baz"},
|
||||||
{"group": ":quack", "key": ":meta", "value": [":all"]},
|
{"group": ":foo", "key": ":meta", "value": [":data"]},
|
||||||
...
|
...
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -1586,6 +1585,7 @@ Returns the content of the document
|
||||||
"build_url": "https://git.pleroma.social/pleroma/fedi-fe/-/jobs/artifacts/${ref}/download?job=build",
|
"build_url": "https://git.pleroma.social/pleroma/fedi-fe/-/jobs/artifacts/${ref}/download?job=build",
|
||||||
"git": "https://git.pleroma.social/pleroma/fedi-fe",
|
"git": "https://git.pleroma.social/pleroma/fedi-fe",
|
||||||
"installed": true,
|
"installed": true,
|
||||||
|
"installed_refs": ["master"],
|
||||||
"name": "fedi-fe",
|
"name": "fedi-fe",
|
||||||
"ref": "master"
|
"ref": "master"
|
||||||
},
|
},
|
||||||
|
@ -1593,6 +1593,7 @@ Returns the content of the document
|
||||||
"build_url": "https://git.pleroma.social/lambadalambda/kenoma/-/jobs/artifacts/${ref}/download?job=build",
|
"build_url": "https://git.pleroma.social/lambadalambda/kenoma/-/jobs/artifacts/${ref}/download?job=build",
|
||||||
"git": "https://git.pleroma.social/lambadalambda/kenoma",
|
"git": "https://git.pleroma.social/lambadalambda/kenoma",
|
||||||
"installed": false,
|
"installed": false,
|
||||||
|
"installed_refs": [],
|
||||||
"name": "kenoma",
|
"name": "kenoma",
|
||||||
"ref": "master"
|
"ref": "master"
|
||||||
}
|
}
|
||||||
|
@ -1636,3 +1637,117 @@ Returns the content of the document
|
||||||
"error": "Could not install frontend"
|
"error": "Could not install frontend"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## `GET /api/v1/pleroma/admin/announcements`
|
||||||
|
|
||||||
|
### List announcements
|
||||||
|
|
||||||
|
- Params: `offset`, `limit`
|
||||||
|
|
||||||
|
- Response: JSON, list of announcements
|
||||||
|
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "AHDp0GBdRn1EPN5HN2",
|
||||||
|
"content": "some content",
|
||||||
|
"starts_at": null,
|
||||||
|
"ends_at": null,
|
||||||
|
"all_day": false,
|
||||||
|
"published_at": "2022-03-09T02:13:05",
|
||||||
|
"reactions": [],
|
||||||
|
"statuses": [],
|
||||||
|
"tags": [],
|
||||||
|
"emojis": [],
|
||||||
|
"updated_at": "2022-03-09T02:13:05"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that this differs from the Mastodon API variant: Mastodon API only returns *active* announcements, while this returns all.
|
||||||
|
|
||||||
|
## `GET /api/v1/pleroma/admin/announcements/:id`
|
||||||
|
|
||||||
|
### Display one announcement
|
||||||
|
|
||||||
|
- Response: JSON, one announcement
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": "AHDp0GBdRn1EPN5HN2",
|
||||||
|
"content": "some content",
|
||||||
|
"starts_at": null,
|
||||||
|
"ends_at": null,
|
||||||
|
"all_day": false,
|
||||||
|
"published_at": "2022-03-09T02:13:05",
|
||||||
|
"reactions": [],
|
||||||
|
"statuses": [],
|
||||||
|
"tags": [],
|
||||||
|
"emojis": [],
|
||||||
|
"updated_at": "2022-03-09T02:13:05"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## `POST /api/v1/pleroma/admin/announcements`
|
||||||
|
|
||||||
|
### Create an announcement
|
||||||
|
|
||||||
|
- Params:
|
||||||
|
- `content`: string, required, announcement content
|
||||||
|
- `starts_at`: datetime, optional, default to null, the time when the announcement will become active (displayed to users); if it is null, the announcement will be active immediately
|
||||||
|
- `ends_at`: datetime, optional, default to null, the time when the announcement will become inactive (no longer displayed to users); if it is null, the announcement will be active until an admin deletes it
|
||||||
|
- `all_day`: boolean, optional, default to false, tells the client whether to only display dates for `starts_at` and `ends_at`
|
||||||
|
|
||||||
|
- Response: JSON, created announcement
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": "AHDp0GBdRn1EPN5HN2",
|
||||||
|
"content": "some content",
|
||||||
|
"starts_at": null,
|
||||||
|
"ends_at": null,
|
||||||
|
"all_day": false,
|
||||||
|
"published_at": "2022-03-09T02:13:05",
|
||||||
|
"reactions": [],
|
||||||
|
"statuses": [],
|
||||||
|
"tags": [],
|
||||||
|
"emojis": [],
|
||||||
|
"updated_at": "2022-03-09T02:13:05"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## `PATCH /api/v1/pleroma/admin/announcements/:id`
|
||||||
|
|
||||||
|
### Change an announcement
|
||||||
|
|
||||||
|
- Params: same as `POST /api/v1/pleroma/admin/announcements`, except no param is required.
|
||||||
|
|
||||||
|
- Updates the announcement according to params. Missing params are kept as-is.
|
||||||
|
|
||||||
|
- Response: JSON, updated announcement
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": "AHDp0GBdRn1EPN5HN2",
|
||||||
|
"content": "some content",
|
||||||
|
"starts_at": null,
|
||||||
|
"ends_at": null,
|
||||||
|
"all_day": false,
|
||||||
|
"published_at": "2022-03-09T02:13:05",
|
||||||
|
"reactions": [],
|
||||||
|
"statuses": [],
|
||||||
|
"tags": [],
|
||||||
|
"emojis": [],
|
||||||
|
"updated_at": "2022-03-09T02:13:05"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## `DELETE /api/v1/pleroma/admin/announcements/:id`
|
||||||
|
|
||||||
|
### Delete an announcement
|
||||||
|
|
||||||
|
- Response: JSON, empty object
|
||||||
|
|
||||||
|
```json
|
||||||
|
{}
|
||||||
|
```
|
||||||
|
|
|
@ -40,6 +40,10 @@ Has these additional fields under the `pleroma` object:
|
||||||
- `parent_visible`: If the parent of this post is visible to the user or not.
|
- `parent_visible`: If the parent of this post is visible to the user or not.
|
||||||
- `pinned_at`: a datetime (iso8601) when status was pinned, `null` otherwise.
|
- `pinned_at`: a datetime (iso8601) when status was pinned, `null` otherwise.
|
||||||
|
|
||||||
|
The `GET /api/v1/statuses/:id/source` endpoint additionally has the following attributes:
|
||||||
|
|
||||||
|
- `content_type`: The content type of the status source.
|
||||||
|
|
||||||
## Scheduled statuses
|
## Scheduled statuses
|
||||||
|
|
||||||
Has these additional fields in `params`:
|
Has these additional fields in `params`:
|
||||||
|
@ -353,6 +357,122 @@ The message payload consist of:
|
||||||
- `follower_count`: follower count
|
- `follower_count`: follower count
|
||||||
- `following_count`: following count
|
- `following_count`: following count
|
||||||
|
|
||||||
|
### Authenticating via `sec-websocket-protocol` header
|
||||||
|
|
||||||
|
Pleroma allows to authenticate via the `sec-websocket-protocol` header, for example, if your access token is `your-access-token`, you can authenticate using the following:
|
||||||
|
|
||||||
|
```
|
||||||
|
sec-websocket-protocol: your-access-token
|
||||||
|
```
|
||||||
|
|
||||||
|
### Authenticating after connection via `pleroma:authenticate` event
|
||||||
|
|
||||||
|
Pleroma allows to authenticate after connection is established, via the `pleroma:authenticate` event. For example, if your access token is `your-access-token`, you can send the following after the connection is established:
|
||||||
|
|
||||||
|
```
|
||||||
|
{"type": "pleroma:authenticate", "token": "your-access-token"}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Response to client-sent events
|
||||||
|
|
||||||
|
Pleroma will respond to client-sent events that it recognizes. Supported event types are:
|
||||||
|
|
||||||
|
- `subscribe`
|
||||||
|
- `unsubscribe`
|
||||||
|
- `pleroma:authenticate`
|
||||||
|
|
||||||
|
The reply will be in the following format:
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"event": "pleroma:respond",
|
||||||
|
"payload": "{\"type\": \"<type of the client-sent event>\", \"result\": \"<result of the action>\", \"error\": \"<error code>\"}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Result of the action can be either `success`, `ignored` or `error`. If it is `error`, the `error` property will contain the error code. Otherwise, the `error` property will not be present. Below are some examples:
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"event": "pleroma:respond",
|
||||||
|
"payload": "{\"type\": \"pleroma:authenticate\", \"result\": \"success\"}"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
"event": "pleroma:respond",
|
||||||
|
"payload": "{\"type\": \"subscribe\", \"result\": \"ignored\"}"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
"event": "pleroma:respond",
|
||||||
|
"payload": "{\"type\": \"unsubscribe\", \"result\": \"error\", \"error\": \"bad_topic\"}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
If the sent event is not of a type that Pleroma supports, it will not reply.
|
||||||
|
|
||||||
|
### The `stream` attribute of a server-sent event
|
||||||
|
|
||||||
|
Technically, this is in Mastodon, but its documentation does nothing to specify its format.
|
||||||
|
|
||||||
|
This attribute appears on every event type except `pleroma:respond` and `delete`. It helps clients determine where they should display the new statuses.
|
||||||
|
|
||||||
|
The value of the attribute is an array containing one or two elements. The first element is the type of the stream. The second is the identifier related to that specific stream, if applicable.
|
||||||
|
|
||||||
|
For the following stream types, there is a second element in the array:
|
||||||
|
|
||||||
|
- `list`: The second element is the id of the list, as a string.
|
||||||
|
- `hashtag`: The second element is the name of the hashtag.
|
||||||
|
- `public:remote:media` and `public:remote`: The second element is the domain of the corresponding instance.
|
||||||
|
|
||||||
|
For all other stream types, there is no second element.
|
||||||
|
|
||||||
|
Some examples of valid `stream` values:
|
||||||
|
|
||||||
|
- `["list", "1"]`: List of id 1.
|
||||||
|
- `["hashtag", "mew"]`: The hashtag #mew.
|
||||||
|
- `["user:notifications"]`: Notifications for the current user.
|
||||||
|
- `["user"]`: Home timeline.
|
||||||
|
- `["public:remote", "mew.moe"]`: Public posts from the instance mew.moe .
|
||||||
|
|
||||||
|
### The unified streaming endpoint
|
||||||
|
|
||||||
|
If you do not specify a stream to connect to when requesting `/api/v1/streaming`, you will enter a connection that subscribes to no streams. After the connection is established, you can authenticate and then subscribe to different streams.
|
||||||
|
|
||||||
|
### List of supported streams
|
||||||
|
|
||||||
|
Below is a list of supported streams by Pleroma. To make a single-stream WebSocket connection, append the string specified in "Query style" to the streaming endpoint url.
|
||||||
|
To subscribe to a stream after the connection is established, merge the JSON object specified in "Subscribe style" with `{"type": "subscribe"}`. To unsubscribe, merge it with `{"type": "unsubscribe"}`.
|
||||||
|
|
||||||
|
For example, to receive updates on the list 1, you can connect to `/api/v1/streaming/?stream=list&list=1`, or send
|
||||||
|
|
||||||
|
```
|
||||||
|
{"type": "subscribe", "stream": "list", "list": "1"}
|
||||||
|
```
|
||||||
|
|
||||||
|
upon establishing the websocket connection.
|
||||||
|
|
||||||
|
To unsubscribe to list 1, send
|
||||||
|
|
||||||
|
```
|
||||||
|
{"type": "unsubscribe", "stream": "list", "list": "1"}
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that if you specify a stream that requires a logged-in user in the query string (for example, `user` or `list`), you have to specify the access token when you are trying to establish the connection, i.e. in the query string or via the `sec-websocket-protocol` header.
|
||||||
|
|
||||||
|
- `list`
|
||||||
|
- Query style: `?stream=list&list=<id>`
|
||||||
|
- Subscribe style: `{"stream": "list", "list": "<id>"}`
|
||||||
|
- `public`, `public:local`, `public:media`, `public:local:media`, `user`, `user:pleroma_chat`, `user:notifications`, `direct`
|
||||||
|
- Query style: `?stream=<stream name>`
|
||||||
|
- Subscribe style: `{"stream": "<stream name>"}`
|
||||||
|
- `hashtag`
|
||||||
|
- Query style: `?stream=hashtag&tag=<name>`
|
||||||
|
- Subscribe style: `{"stream": "hashtag", "tag": "<name>"}`
|
||||||
|
- `public:remote`, `public:remote:media`
|
||||||
|
- Query style: `?stream=<stream name>&instance=<instance domain>`
|
||||||
|
- Subscribe style: `{"stream": "<stream name>", "instance": "<instance domain>"}`
|
||||||
|
|
||||||
## User muting and thread muting
|
## User muting and thread muting
|
||||||
|
|
||||||
Both user muting and thread muting can be done for only a certain time by adding an `expires_in` parameter to the API calls and giving the expiration time in seconds.
|
Both user muting and thread muting can be done for only a certain time by adding an `expires_in` parameter to the API calls and giving the expiration time in seconds.
|
||||||
|
|
|
@ -342,6 +342,36 @@ See [Admin-API](admin_api.md)
|
||||||
* Response: JSON. Returns `{"status": "success"}` if the change was successful, `{"error": "[error message]"}` otherwise
|
* Response: JSON. Returns `{"status": "success"}` if the change was successful, `{"error": "[error message]"}` otherwise
|
||||||
* Note: Currently, Mastodon has no API for changing email. If they add it in future it might be incompatible with Pleroma.
|
* Note: Currently, Mastodon has no API for changing email. If they add it in future it might be incompatible with Pleroma.
|
||||||
|
|
||||||
|
## `/api/pleroma/move_account`
|
||||||
|
### Move account
|
||||||
|
* Method `POST`
|
||||||
|
* Authentication: required
|
||||||
|
* Params:
|
||||||
|
* `password`: user's password
|
||||||
|
* `target_account`: the nickname of the target account (e.g. `foo@example.org`)
|
||||||
|
* Response: JSON. Returns `{"status": "success"}` if the change was successful, `{"error": "[error message]"}` otherwise
|
||||||
|
* Note: This endpoint emits a `Move` activity to all followers of the current account. Some remote servers will automatically unfollow the current account and follow the target account upon seeing this, but this depends on the remote server implementation and cannot be guaranteed. For local followers , they will automatically unfollow and follow if and only if they have set the `allow_following_move` preference ("Allow auto-follow when following account moves").
|
||||||
|
|
||||||
|
## `/api/pleroma/aliases`
|
||||||
|
### Get aliases of the current account
|
||||||
|
* Method `GET`
|
||||||
|
* Authentication: required
|
||||||
|
* Response: JSON. Returns `{"aliases": [alias, ...]}`, where `alias` is the nickname of an alias, e.g. `foo@example.org`.
|
||||||
|
|
||||||
|
### Add alias to the current account
|
||||||
|
* Method `PUT`
|
||||||
|
* Authentication: required
|
||||||
|
* Params:
|
||||||
|
* `alias`: the nickname of the alias to add, e.g. `foo@example.org`.
|
||||||
|
* Response: JSON. Returns `{"status": "success"}` if the change was successful, `{"error": "[error message]"}` otherwise
|
||||||
|
|
||||||
|
### Delete alias from the current account
|
||||||
|
* Method `DELETE`
|
||||||
|
* Authentication: required
|
||||||
|
* Params:
|
||||||
|
* `alias`: the nickname of the alias to delete, e.g. `foo@example.org`.
|
||||||
|
* Response: JSON. Returns `{"status": "success"}` if the change was successful, `{"error": "[error message]"}` otherwise
|
||||||
|
|
||||||
# Pleroma Conversations
|
# Pleroma Conversations
|
||||||
|
|
||||||
Pleroma Conversations have the same general structure that Mastodon Conversations have. The behavior differs in the following ways when using these endpoints:
|
Pleroma Conversations have the same general structure that Mastodon Conversations have. The behavior differs in the following ways when using these endpoints:
|
||||||
|
@ -547,6 +577,9 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa
|
||||||
404 if the pack does not exist
|
404 if the pack does not exist
|
||||||
|
|
||||||
## `GET /api/v1/pleroma/accounts/:id/scrobbles`
|
## `GET /api/v1/pleroma/accounts/:id/scrobbles`
|
||||||
|
|
||||||
|
Audio scrobbling in Pleroma is **deprecated**.
|
||||||
|
|
||||||
### Requests a list of current and recent Listen activities for an account
|
### Requests a list of current and recent Listen activities for an account
|
||||||
* Method `GET`
|
* Method `GET`
|
||||||
* Authentication: not required
|
* Authentication: not required
|
||||||
|
@ -568,6 +601,9 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa
|
||||||
```
|
```
|
||||||
|
|
||||||
## `POST /api/v1/pleroma/scrobble`
|
## `POST /api/v1/pleroma/scrobble`
|
||||||
|
|
||||||
|
Audio scrobbling in Pleroma is **deprecated**.
|
||||||
|
|
||||||
### Creates a new Listen activity for an account
|
### Creates a new Listen activity for an account
|
||||||
* Method `POST`
|
* Method `POST`
|
||||||
* Authentication: required
|
* Authentication: required
|
||||||
|
@ -695,3 +731,42 @@ Emoji reactions work a lot like favourites do. They make it possible to react to
|
||||||
* Authentication: required
|
* Authentication: required
|
||||||
* Params: none
|
* Params: none
|
||||||
* Response: HTTP 200 on success, 500 on error
|
* Response: HTTP 200 on success, 500 on error
|
||||||
|
|
||||||
|
## `/api/v1/pleroma/settings/:app`
|
||||||
|
### Gets settings for some application
|
||||||
|
* Method `GET`
|
||||||
|
* Authentication: `read:accounts`
|
||||||
|
|
||||||
|
* Response: JSON. The settings for that application, or empty object if there is none.
|
||||||
|
* Example response:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"some key": "some value"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Updates settings for some application
|
||||||
|
* Method `PATCH`
|
||||||
|
* Authentication: `write:accounts`
|
||||||
|
* Request body: JSON object. The object will be merged recursively with old settings. If some field is set to null, it is removed.
|
||||||
|
* Example request:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"some key": "some value",
|
||||||
|
"key to remove": null,
|
||||||
|
"nested field": {
|
||||||
|
"some key": "some value",
|
||||||
|
"key to remove": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
* Response: JSON. Updated (merged) settings for that application.
|
||||||
|
* Example response:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"some key": "some value",
|
||||||
|
"nested field": {
|
||||||
|
"some key": "some value",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Setting up a Gitlab-runner
|
||||||
|
|
||||||
|
When you push changes, a pipeline will start some automated jobs. These are done with so called [runners](https://docs.gitlab.com/runner/), services that run somewhere on a server and run these automated jobs. These jobs typically run tests and should pass. If not, you probably need to fix something.
|
||||||
|
|
||||||
|
Generally, Pleroma provides a runner, so you don't need to set up your own. However, if for whatever reason you want to set up your own, here's some high level instructions.
|
||||||
|
|
||||||
|
1. We use docker to run the jobs, so you should install that. For Debian, you need to allow non-free packages in the [source list](https://wiki.debian.org/SourcesList). Then you can install docker with `apt install docker-compose`.
|
||||||
|
2. You can [install](https://docs.gitlab.com/runner/install/index.html) and [configure](https://docs.gitlab.com/runner/register/index.html) a Gitlab-runner. It's probably easiest to install from the packages, but there are other options as well.
|
||||||
|
3. When registering the runner, you'll need some values. You can find them in the project under your own name. Choose "Settings", "CI/CD", and then expand "Runners". For executor you can choose "docker". For default image, you can use the image used in <https://git.pleroma.social/pleroma/pleroma/-/blob/develop/.gitlab-ci.yml#L1> (although it shouldn't matter much).
|
|
@ -38,7 +38,7 @@ config :logger, :console,
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
1. Create a `test.secret.exs` file with the content as shown below
|
1. Create a `config/test.secret.exs` file with the content as shown below
|
||||||
2. Create the database user and test database.
|
2. Create the database user and test database.
|
||||||
1. You can use the `config/setup_db.psql` as a template. Copy the file if you want and change the database name, user and password to the values for the test-database (e.g. 'pleroma_local_test' for database and user). Then run this file like you did during installation.
|
1. You can use the `config/setup_db.psql` as a template. Copy the file if you want and change the database name, user and password to the values for the test-database (e.g. 'pleroma_local_test' for database and user). Then run this file like you did during installation.
|
||||||
2. The tests will try to create the Database, so we'll have to allow our test-database user to create databases, `sudo -Hu postgres psql -c "ALTER USER pleroma_local_test WITH CREATEDB;"`
|
2. The tests will try to create the Database, so we'll have to allow our test-database user to create databases, `sudo -Hu postgres psql -c "ALTER USER pleroma_local_test WITH CREATEDB;"`
|
||||||
|
|
|
@ -183,6 +183,9 @@ server {
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
* (Strongly recommended) serve media on another domain
|
||||||
|
|
||||||
|
Refer to the [Hardening your instance](../configuration/hardening.md) document on how to serve media on another domain. We STRONGLY RECOMMEND you to do this to minimize attack vectors.
|
||||||
|
|
||||||
* Enable and start nginx:
|
* Enable and start nginx:
|
||||||
|
|
||||||
|
|
|
@ -173,6 +173,11 @@ sudo ln -s /etc/nginx/sites-available/pleroma.nginx /etc/nginx/sites-enabled/ple
|
||||||
```
|
```
|
||||||
|
|
||||||
* Before starting nginx edit the configuration and change it to your needs (e.g. change servername, change cert paths)
|
* Before starting nginx edit the configuration and change it to your needs (e.g. change servername, change cert paths)
|
||||||
|
|
||||||
|
* (Strongly recommended) serve media on another domain
|
||||||
|
|
||||||
|
Refer to the [Hardening your instance](../configuration/hardening.md) document on how to serve media on another domain. We STRONGLY RECOMMEND you to do this to minimize attack vectors.
|
||||||
|
|
||||||
* Enable and start nginx:
|
* Enable and start nginx:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
This guide will assume you are on Debian 11 (“bullseye”) or later. This guide should also work with Ubuntu 18.04 (“Bionic Beaver”) and later. It also assumes that you have administrative rights, either as root or a user with [sudo permissions](https://www.digitalocean.com/community/tutorials/how-to-add-delete-and-grant-sudo-privileges-to-users-on-a-debian-vps). If you want to run this guide with root, ignore the `sudo` at the beginning of the lines, unless it calls a user like `sudo -Hu pleroma`; in this case, use `su <username> -s $SHELL -c 'command'` instead.
|
This guide will assume you are on Debian 12 (“bookworm”) or later. This guide should also work with Ubuntu 22.04 (“jammy”) and later. It also assumes that you have administrative rights, either as root or a user with [sudo permissions](https://www.digitalocean.com/community/tutorials/how-to-add-delete-and-grant-sudo-privileges-to-users-on-a-debian-vps). If you want to run this guide with root, ignore the `sudo` at the beginning of the lines, unless it calls a user like `sudo -Hu pleroma`; in this case, use `su <username> -s $SHELL -c 'command'` instead.
|
||||||
|
|
||||||
{! backend/installation/generic_dependencies.include !}
|
{! backend/installation/generic_dependencies.include !}
|
||||||
|
|
||||||
|
@ -136,6 +136,11 @@ sudo ln -s /etc/nginx/sites-available/pleroma.nginx /etc/nginx/sites-enabled/ple
|
||||||
```
|
```
|
||||||
|
|
||||||
* Before starting nginx edit the configuration and change it to your needs (e.g. change servername, change cert paths)
|
* Before starting nginx edit the configuration and change it to your needs (e.g. change servername, change cert paths)
|
||||||
|
|
||||||
|
* (Strongly recommended) serve media on another domain
|
||||||
|
|
||||||
|
Refer to the [Hardening your instance](../configuration/hardening.md) document on how to serve media on another domain. We STRONGLY RECOMMEND you to do this to minimize attack vectors.
|
||||||
|
|
||||||
* Enable and start nginx:
|
* Enable and start nginx:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
# Pleromaの入れ方
|
# Pleromaの入れ方
|
||||||
|
|
||||||
|
Note: This article is potentially outdated because at this time we may not have people who can speak this language well enough to update it. To see the up-to-date version, which may have significant differences or important caveats of the installation process, look up the English version.
|
||||||
|
|
||||||
## 日本語訳について
|
## 日本語訳について
|
||||||
|
|
||||||
この記事は [Installing on Debian based distributions](Installing on Debian based distributions) の日本語訳です。何かがおかしいと思ったら、原文を見てください。
|
この記事は [Installing on Debian based distributions](Installing on Debian based distributions) の日本語訳です。何かがおかしいと思ったら、原文を見てください。
|
||||||
|
|
||||||
## インストール
|
## インストール
|
||||||
|
|
||||||
このガイドはDebian Stretchを利用することを想定しています。Ubuntu 16.04や18.04でもおそらく動作します。また、ユーザはrootもしくはsudoにより管理者権限を持っていることを前提とします。もし、以下の操作をrootユーザで行う場合は、 `sudo` を無視してください。ただし、`sudo -Hu pleroma` のようにユーザを指定している場合には `su <username> -s $SHELL -c 'command'` を代わりに使ってください。
|
このガイドはDebian Bookwormを利用することを想定しています。Ubuntu 22.04でもおそらく動作します。また、ユーザはrootもしくはsudoにより管理者権限を持っていることを前提とします。もし、以下の操作をrootユーザで行う場合は、 `sudo` を無視してください。ただし、`sudo -Hu pleroma` のようにユーザを指定している場合には `su <username> -s $SHELL -c 'command'` を代わりに使ってください。
|
||||||
|
|
||||||
### 必要なソフトウェア
|
### 必要なソフトウェア
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ This document was written for FreeBSD 12.1, but should be work on future release
|
||||||
This assumes the target system has `pkg(8)`.
|
This assumes the target system has `pkg(8)`.
|
||||||
|
|
||||||
```
|
```
|
||||||
# pkg install elixir postgresql12-server postgresql12-client postgresql12-contrib git-lite sudo nginx gmake acme.sh cmake
|
# pkg install elixir postgresql12-server postgresql12-client postgresql12-contrib git-lite sudo nginx gmake acme.sh cmake vips
|
||||||
```
|
```
|
||||||
|
|
||||||
Copy the rc.d scripts to the right directory:
|
Copy the rc.d scripts to the right directory:
|
||||||
|
@ -41,6 +41,7 @@ Create a user for Pleroma:
|
||||||
```
|
```
|
||||||
# pw add user pleroma -m
|
# pw add user pleroma -m
|
||||||
# echo 'export LC_ALL="en_US.UTF-8"' >> /home/pleroma/.profile
|
# echo 'export LC_ALL="en_US.UTF-8"' >> /home/pleroma/.profile
|
||||||
|
# echo 'export VIX_COMPILATION_MODE=PLATFORM_PROVIDED_LIBVIPS' >> /home/pleroma/.profile
|
||||||
# su -l pleroma
|
# su -l pleroma
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -173,6 +174,10 @@ Edit the defaults of `/usr/local/etc/nginx/sites-available/pleroma.nginx`:
|
||||||
* Change `ssl_certificate_key` to `/var/db/acme/certs/example.tld/example.tld.key`.
|
* Change `ssl_certificate_key` to `/var/db/acme/certs/example.tld/example.tld.key`.
|
||||||
* Change all references of `example.tld` to your instance's domain name.
|
* Change all references of `example.tld` to your instance's domain name.
|
||||||
|
|
||||||
|
#### (Strongly recommended) serve media on another domain
|
||||||
|
|
||||||
|
Refer to the [Hardening your instance](../configuration/hardening.md) document on how to serve media on another domain. We STRONGLY RECOMMEND you to do this to minimize attack vectors.
|
||||||
|
|
||||||
## Creating a startup script for Pleroma
|
## Creating a startup script for Pleroma
|
||||||
|
|
||||||
Pleroma will need to compile when it initially starts, which typically takes a longer
|
Pleroma will need to compile when it initially starts, which typically takes a longer
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
## Required dependencies
|
## Required dependencies
|
||||||
|
|
||||||
* PostgreSQL 9.6+
|
* PostgreSQL >=9.6
|
||||||
* Elixir 1.9+
|
* Elixir >=1.11.0 <1.15
|
||||||
* Erlang OTP 22.2+
|
* Erlang OTP >=22.2.0 <26
|
||||||
* git
|
* git
|
||||||
* file / libmagic
|
* file / libmagic
|
||||||
* gcc (clang might also work)
|
* gcc or clang
|
||||||
* GNU make
|
* GNU make
|
||||||
* CMake
|
* CMake
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# Installing on Gentoo GNU/Linux
|
# Manual install on Gentoo GNU/Linux
|
||||||
|
|
||||||
{! backend/installation/otp_vs_from_source_source.include !}
|
{! backend/installation/otp_vs_from_source.include !}
|
||||||
|
|
||||||
|
This guide covers a manual from-source installation. To use the gentoo package, please check the [packaged installation guide for gentoo](./gentoo_otp_en.md).
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
@ -227,6 +229,10 @@ Replace all instances of `example.tld` with your instance's public URL. If for w
|
||||||
|
|
||||||
Pay special attention to the line that begins with `ssl_ecdh_curve`. It is stongly advised to comment that line out so that OpenSSL will use its full capabilities, and it is also possible you are running OpenSSL 1.0.2 necessitating that you do this.
|
Pay special attention to the line that begins with `ssl_ecdh_curve`. It is stongly advised to comment that line out so that OpenSSL will use its full capabilities, and it is also possible you are running OpenSSL 1.0.2 necessitating that you do this.
|
||||||
|
|
||||||
|
* (Strongly recommended) serve media on another domain
|
||||||
|
|
||||||
|
Refer to the [Hardening your instance](../configuration/hardening.md) document on how to serve media on another domain. We STRONGLY RECOMMEND you to do this to minimize attack vectors.
|
||||||
|
|
||||||
* Enable and start nginx:
|
* Enable and start nginx:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
|
|
@ -0,0 +1,207 @@
|
||||||
|
# Packaged install on Gentoo Linux
|
||||||
|
|
||||||
|
{! backend/installation/otp_vs_from_source.include !}
|
||||||
|
|
||||||
|
This guide covers installation via Gentoo provided packaging. A [manual installation guide for gentoo](./gentoo_en.md) is also available.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
This guide will assume that you have administrative rights, either as root or a user with [sudo permissions](https://wiki.gentoo.org/wiki/Sudo). Lines that begin with `#` indicate that they should be run as the superuser. Lines using `$` should be run as the indicated user, e.g. `pleroma$` should be run as the `pleroma` user.
|
||||||
|
|
||||||
|
{! backend/installation/generic_dependencies.include !}
|
||||||
|
|
||||||
|
### Installing a cron daemon
|
||||||
|
|
||||||
|
Gentoo quite pointedly does not come with a cron daemon installed, and as such it is recommended you install one to automate certbot renewals and to allow other system administration tasks to be run automatically. Gentoo has [a whole wide world of cron options](https://wiki.gentoo.org/wiki/Cron) but if you just want A Cron That Works, `emerge --ask virtual/cron` will install the default cron implementation (probably cronie) which will work just fine. For the purpouses of this guide, we will be doing just that.
|
||||||
|
|
||||||
|
### Required ebuilds
|
||||||
|
|
||||||
|
* `www-apps/pleroma`
|
||||||
|
|
||||||
|
#### Optional ebuilds used in this guide
|
||||||
|
|
||||||
|
* `www-servers/nginx` (preferred, example configs for other reverse proxies can be found in the repo)
|
||||||
|
* `app-crypt/certbot` (or any other ACME client for Let’s Encrypt certificates)
|
||||||
|
* `app-crypt/certbot-nginx` (nginx certbot plugin that allows use of the all-powerful `--nginx` flag on certbot)
|
||||||
|
* `media-gfx/imagemagick`
|
||||||
|
* `media-video/ffmpeg`
|
||||||
|
* `media-libs/exiftool`
|
||||||
|
|
||||||
|
### Prepare the system
|
||||||
|
|
||||||
|
* If you haven't yet done so, add the [Gentoo User Repository (GURU)](https://wiki.gentoo.org/wiki/Project:GURU), where the `www-apps/pleroma` ebuild currently lives at:
|
||||||
|
```shell
|
||||||
|
# eselect repository enable guru
|
||||||
|
```
|
||||||
|
|
||||||
|
* Ensure that you have the latest copy of the Gentoo and GURU ebuilds if you have not synced them yet:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# emaint sync -a
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
* Emerge all required the required and suggested software in one go:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# emerge --ask www-apps/pleroma www-servers/nginx app-crypt/certbot app-crypt/certbot-nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
If you would not like to install the optional packages, remove them from this line.
|
||||||
|
|
||||||
|
If you're running this from a low-powered virtual machine, it should work though it will take some time. There were no issues on a VPS with a single core and 1GB of RAM; if you are using an even more limited device and run into issues, you can try creating a swapfile or use a more powerful machine running Gentoo to [cross build](https://wiki.gentoo.org/wiki/Cross_build_environment). If you have a wait ahead of you, now would be a good time to take a break, strech a bit, refresh your beverage of choice and/or get a snack, and reply to Arch users' posts with "I use Gentoo btw" as we do.
|
||||||
|
|
||||||
|
### Setup PostgreSQL
|
||||||
|
|
||||||
|
[Gentoo Wiki article](https://wiki.gentoo.org/wiki/PostgreSQL) as well as [PostgreSQL QuickStart](https://wiki.gentoo.org/wiki/PostgreSQL/QuickStart) might be worth a quick glance, as the way Gentoo handles postgres is slightly unusual, with built in capability to have two different databases running for testing and live or whatever other purpouse. While it is still straightforward to install, it does mean that the version numbers used in this guide might change for future updates, so keep an eye out for the output you get from `emerge` to ensure you are using the correct ones.
|
||||||
|
|
||||||
|
* Initialize the database cluster
|
||||||
|
|
||||||
|
The output from emerging postgresql should give you a command for initializing the postgres database. The default slot should be indicated in this command, ensure that it matches the command below.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# emerge --config dev-db/postgresql:11
|
||||||
|
```
|
||||||
|
|
||||||
|
### Install media / graphics packages (optional)
|
||||||
|
|
||||||
|
See [Optional software packages needed for specific functionality](optional/media_graphics_packages.md) for details.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# emerge --ask media-video/ffmpeg media-gfx/imagemagick media-libs/exiftool
|
||||||
|
```
|
||||||
|
|
||||||
|
### Setup PleromaBE
|
||||||
|
|
||||||
|
* Generate the configuration:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql"
|
||||||
|
```
|
||||||
|
|
||||||
|
* Create the PostgreSQL database
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# sudo -u postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql"
|
||||||
|
```
|
||||||
|
|
||||||
|
* Now run the database migration:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# pleroma_ctl migrate
|
||||||
|
```
|
||||||
|
|
||||||
|
* Optional: If you have installed RUM indexes (`dev-db/rum`) you also need to run:
|
||||||
|
```
|
||||||
|
# sudo -Hu pleroma "pleroma_ctl migrate --migrations-path priv/repo/optional_migrations/rum_indexing/"
|
||||||
|
```
|
||||||
|
|
||||||
|
* Now you can start Pleroma already and add it in the default runlevel
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# rc-service pleroma start
|
||||||
|
# rc-update add pleroma default
|
||||||
|
```
|
||||||
|
|
||||||
|
It probably won't work over the public internet quite yet, however, as we still need to set up a web server to proxy to the pleroma application, as well as configure SSL.
|
||||||
|
|
||||||
|
### Finalize installation
|
||||||
|
|
||||||
|
Assuming you want to open your newly installed federated social network to, well, the federation, you should run nginx or some other webserver/proxy in front of Pleroma. It is also a good idea to set up Pleroma to run as a system service.
|
||||||
|
|
||||||
|
#### Nginx
|
||||||
|
|
||||||
|
* Install nginx, if not already done:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# emerge --ask www-servers/nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
* Create directories for available and enabled sites:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# mkdir -p /etc/nginx/sites-{available,enabled}
|
||||||
|
```
|
||||||
|
|
||||||
|
* Append the following line at the end of the `http` block in `/etc/nginx/nginx.conf`:
|
||||||
|
|
||||||
|
```Nginx
|
||||||
|
include sites-enabled/*;
|
||||||
|
```
|
||||||
|
|
||||||
|
* Setup your SSL cert, using your method of choice or certbot. If using certbot, install it if you haven't already:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# emerge --ask app-crypt/certbot app-crypt/certbot-nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
and then set it up:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# mkdir -p /var/lib/letsencrypt/
|
||||||
|
# certbot certonly --email <your@emailaddress> -d <yourdomain> --standalone
|
||||||
|
```
|
||||||
|
|
||||||
|
If that doesn't work the first time, add `--dry-run` to further attempts to avoid being ratelimited as you identify the issue, and do not remove it until the dry run succeeds. If that doesn’t work, make sure, that nginx is not already running. If it still doesn’t work, try setting up nginx first (change ssl “on” to “off” and try again). Often the answer to issues with certbot is to use the `--nginx` flag once you have nginx up and running.
|
||||||
|
|
||||||
|
If you are using any additional subdomains, such as for a media proxy, you can re-run the same command with the subdomain in question. When it comes time to renew later, you will not need to run multiple times for each domain, one renew will handle it.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
* Copy the example nginx configuration and activate it:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/sites-available/
|
||||||
|
# ln -s /etc/nginx/sites-available/pleroma.nginx /etc/nginx/sites-enabled/pleroma.nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
* Take some time to ensure that your nginx config is correct
|
||||||
|
|
||||||
|
Replace all instances of `example.tld` with your instance's public URL. If for whatever reason you made changes to the port that your pleroma app runs on, be sure that is reflected in your configuration.
|
||||||
|
|
||||||
|
Pay special attention to the line that begins with `ssl_ecdh_curve`. It is stongly advised to comment that line out so that OpenSSL will use its full capabilities, and it is also possible you are running OpenSSL 1.0.2 necessitating that you do this.
|
||||||
|
|
||||||
|
* Enable and start nginx:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# rc-update add nginx default
|
||||||
|
# /etc/init.d/nginx start
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are using certbot, it is HIGHLY recommend you set up a cron job that renews your certificate, and that you install the suggested `certbot-nginx` plugin. If you don't do these things, you only have yourself to blame when your instance breaks suddenly because you forgot about it.
|
||||||
|
|
||||||
|
First, ensure that the command you will be installing into your crontab works.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# /usr/bin/certbot renew --nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
Assuming not much time has passed since you got certbot working a few steps ago, you should get a message for all domains you installed certificates for saying `Cert not yet due for renewal`.
|
||||||
|
|
||||||
|
Now, run crontab as a superuser with `crontab -e` or `sudo crontab -e` as appropriate, and add the following line to your cron:
|
||||||
|
|
||||||
|
```cron
|
||||||
|
0 0 1 * * /usr/bin/certbot renew --nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
This will run certbot on the first of the month at midnight. If you'd rather run more frequently, it's not a bad idea, feel free to go for it.
|
||||||
|
|
||||||
|
#### Other webserver/proxies
|
||||||
|
|
||||||
|
If you would like to use other webservers or proxies, there are example configurations for some popular alternatives in `/opt/pleroma/installation/`. You can, of course, check out [the Gentoo wiki](https://wiki.gentoo.org) for more information on installing and configuring said alternatives.
|
||||||
|
|
||||||
|
#### Create your first user
|
||||||
|
|
||||||
|
If your instance is up and running, you can create your first user with administrative rights with the following task:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
pleroma$ pleroma_ctl user new <username> <your@emailaddress> --admin
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Further reading
|
||||||
|
|
||||||
|
{! backend/installation/further_reading.include !}
|
||||||
|
|
||||||
|
## Questions
|
||||||
|
|
||||||
|
Questions about the installation or didn’t it work as it should be, ask in [#pleroma:libera.chat](https://matrix.to/#/#pleroma:libera.chat) via Matrix or **#pleroma** on **libera.chat** via IRC.
|
|
@ -5,7 +5,7 @@
|
||||||
In this guide we cover how you can migrate from a from source installation to one using OTP releases.
|
In this guide we cover how you can migrate from a from source installation to one using OTP releases.
|
||||||
|
|
||||||
## Pre-requisites
|
## Pre-requisites
|
||||||
You will be running commands as root. If you aren't root already, please elevate your priviledges by executing `sudo su`/`su`.
|
You will be running commands as root. If you aren't root already, please elevate your privileges by executing `sudo su`/`su`.
|
||||||
|
|
||||||
The system needs to have `curl` and `unzip` installed for downloading and unpacking release builds.
|
The system needs to have `curl` and `unzip` installed for downloading and unpacking release builds.
|
||||||
|
|
||||||
|
@ -86,26 +86,26 @@ export FLAVOUR="amd64-musl"
|
||||||
|
|
||||||
# Clone the release build into a temporary directory and unpack it
|
# Clone the release build into a temporary directory and unpack it
|
||||||
# Replace `stable` with `unstable` if you want to run the unstable branch
|
# Replace `stable` with `unstable` if you want to run the unstable branch
|
||||||
su pleroma -s $SHELL -lc "
|
sudo -Hu pleroma "
|
||||||
curl 'https://git.pleroma.social/api/v4/projects/2/jobs/artifacts/stable/download?job=$FLAVOUR' -o /tmp/pleroma.zip
|
curl 'https://git.pleroma.social/api/v4/projects/2/jobs/artifacts/stable/download?job=$FLAVOUR' -o /tmp/pleroma.zip
|
||||||
unzip /tmp/pleroma.zip -d /tmp/
|
unzip /tmp/pleroma.zip -d /tmp/
|
||||||
"
|
"
|
||||||
|
|
||||||
# Move the release to the home directory and delete temporary files
|
# Move the release to the home directory and delete temporary files
|
||||||
su pleroma -s $SHELL -lc "
|
sudo -Hu pleroma "
|
||||||
mv /tmp/release/* ~pleroma/
|
mv /tmp/release/* ~pleroma/
|
||||||
rmdir /tmp/release
|
rmdir /tmp/release
|
||||||
rm /tmp/pleroma.zip
|
rm /tmp/pleroma.zip
|
||||||
"
|
"
|
||||||
|
|
||||||
# Start the instance to verify that everything is working as expected
|
# Start the instance to verify that everything is working as expected
|
||||||
su pleroma -s $SHELL -lc "./bin/pleroma daemon"
|
sudo -Hu pleroma "./bin/pleroma daemon"
|
||||||
|
|
||||||
# Wait for about 20 seconds and query the instance endpoint, if it shows your uri, name and email correctly, you are configured correctly
|
# Wait for about 20 seconds and query the instance endpoint, if it shows your uri, name and email correctly, you are configured correctly
|
||||||
sleep 20 && curl http://localhost:4000/api/v1/instance
|
sleep 20 && curl http://localhost:4000/api/v1/instance
|
||||||
|
|
||||||
# Stop the instance
|
# Stop the instance
|
||||||
su pleroma -s $SHELL -lc "./bin/pleroma stop"
|
sudo -Hu pleroma "./bin/pleroma stop"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Setting up a system service
|
## Setting up a system service
|
||||||
|
|
|
@ -123,6 +123,10 @@ Edit the defaults:
|
||||||
* Change `ssl_certificate_key` to `/etc/nginx/tls/key`.
|
* Change `ssl_certificate_key` to `/etc/nginx/tls/key`.
|
||||||
* Change `example.tld` to your instance's domain name.
|
* Change `example.tld` to your instance's domain name.
|
||||||
|
|
||||||
|
### (Strongly recommended) serve media on another domain
|
||||||
|
|
||||||
|
Refer to the [Hardening your instance](../configuration/hardening.md) document on how to serve media on another domain. We STRONGLY RECOMMEND you to do this to minimize attack vectors.
|
||||||
|
|
||||||
## Configuring acme.sh
|
## Configuring acme.sh
|
||||||
|
|
||||||
We'll be using acme.sh in Stateless Mode for TLS certificate renewal.
|
We'll be using acme.sh in Stateless Mode for TLS certificate renewal.
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
# Installing on NixOS
|
||||||
|
|
||||||
|
NixOS contains a source build package of pleroma and a NixOS module to install it.
|
||||||
|
For installation add this to your configuration.nix and add a config.exs next to it:
|
||||||
|
```nix
|
||||||
|
services.pleroma = {
|
||||||
|
enable = true;
|
||||||
|
configs = [ (lib.fileContents ./config.exs) ];
|
||||||
|
secretConfigFile = "/var/lib/pleroma/secret.exs";
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## Questions
|
||||||
|
The nix community uses matrix for communication: [#nix:nixos.org](https://matrix.to/#/#nix:nixos.org)
|
||||||
|
|
|
@ -195,6 +195,10 @@ rcctl enable relayd
|
||||||
rcctl start relayd
|
rcctl start relayd
|
||||||
```
|
```
|
||||||
|
|
||||||
|
##### (Strongly recommended) serve media on another domain
|
||||||
|
|
||||||
|
Refer to the [Hardening your instance](../configuration/hardening.md) document on how to serve media on another domain. We STRONGLY RECOMMEND you to do this to minimize attack vectors.
|
||||||
|
|
||||||
#### pf
|
#### pf
|
||||||
Enabling and configuring pf is highly recommended.
|
Enabling and configuring pf is highly recommended.
|
||||||
In /etc/pf.conf, insert the following configuration:
|
In /etc/pf.conf, insert the following configuration:
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# Pleroman asennus OpenBSD:llä
|
# Pleroman asennus OpenBSD:llä
|
||||||
|
|
||||||
|
Note: This article is potentially outdated because at this time we may not have people who can speak this language well enough to update it. To see the up-to-date version, which may have significant differences or important caveats of the installation process, look up the English version.
|
||||||
|
|
||||||
Tarvitset:
|
Tarvitset:
|
||||||
* Oman domainin
|
* Oman domainin
|
||||||
* OpenBSD 6.3 -serverin
|
* OpenBSD 6.3 -serverin
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
# Optional software packages needed for specific functionality
|
# Optional software packages needed for specific functionality
|
||||||
|
|
||||||
For specific Pleroma functionality (which is disabled by default) some or all of the below packages are required:
|
For specific Pleroma functionality (which is disabled by default) some or all of the below packages are required:
|
||||||
* `ImageMagic`
|
|
||||||
* `ffmpeg`
|
* `ImageMagic`
|
||||||
* `exiftool`
|
* `ffmpeg`
|
||||||
|
* `exiftool`
|
||||||
|
|
||||||
Please refer to documentation in `docs/installation` on how to install them on specific OS.
|
Please refer to documentation in `docs/installation` on how to install them on specific OS.
|
||||||
|
|
||||||
|
@ -14,19 +15,23 @@ Note: the packages are not required with the current default settings of Pleroma
|
||||||
`ImageMagick` is a set of tools to create, edit, compose, or convert bitmap images.
|
`ImageMagick` is a set of tools to create, edit, compose, or convert bitmap images.
|
||||||
|
|
||||||
It is required for the following Pleroma features:
|
It is required for the following Pleroma features:
|
||||||
* `Pleroma.Upload.Filters.Mogrify`, `Pleroma.Upload.Filters.Mogrifun` upload filters (related config: `Plaroma.Upload/filters` in `config/config.exs`)
|
|
||||||
* Media preview proxy for still images (related config: `media_preview_proxy/enabled` in `config/config.exs`)
|
* `Pleroma.Upload.Filters.Mogrify`, `Pleroma.Upload.Filters.Mogrifun` upload filters (related config: `Plaroma.Upload/filters` in `config/config.exs`)
|
||||||
|
* Media preview proxy for still images (related config: `media_preview_proxy/enabled` in `config/config.exs`)
|
||||||
|
|
||||||
## `ffmpeg`
|
## `ffmpeg`
|
||||||
|
|
||||||
`ffmpeg` is software to record, convert and stream audio and video.
|
`ffmpeg` is software to record, convert and stream audio and video.
|
||||||
|
|
||||||
It is required for the following Pleroma features:
|
It is required for the following Pleroma features:
|
||||||
* Media preview proxy for videos (related config: `media_preview_proxy/enabled` in `config/config.exs`)
|
|
||||||
|
* Media preview proxy for videos (related config: `media_preview_proxy/enabled` in `config/config.exs`)
|
||||||
|
|
||||||
## `exiftool`
|
## `exiftool`
|
||||||
|
|
||||||
`exiftool` is media files metadata reader/writer.
|
`exiftool` is media files metadata reader/writer.
|
||||||
|
|
||||||
It is required for the following Pleroma features:
|
It is required for the following Pleroma features:
|
||||||
* `Pleroma.Upload.Filters.Exiftool` upload filter (related config: `Plaroma.Upload/filters` in `config/config.exs`)
|
|
||||||
|
* `Pleroma.Upload.Filters.Exiftool.StripLocation` upload filter (related config: `Plaroma.Upload/filters` in `config/config.exs`)
|
||||||
|
* `Pleroma.Upload.Filters.Exiftool.ReadDescription` upload filter (related config: `Plaroma.Upload/filters` in `config/config.exs`)
|
||||||
|
|
|
@ -2,15 +2,16 @@
|
||||||
|
|
||||||
{! backend/installation/otp_vs_from_source.include !}
|
{! backend/installation/otp_vs_from_source.include !}
|
||||||
|
|
||||||
This guide covers a installation using an OTP release. To install Pleroma from source, please check out the corresponding guide for your distro.
|
This guide covers a installation using OTP releases as built by the Pleroma project, it is meant as a fallback to distribution packages/recipes which are the preferred installation method.
|
||||||
|
To install Pleroma from source, please check out the corresponding guide for your distro.
|
||||||
|
|
||||||
## Pre-requisites
|
## Pre-requisites
|
||||||
* A machine running Linux with GNU (e.g. Debian, Ubuntu) or musl (e.g. Alpine) libc and `x86_64`, `aarch64` or `armv7l` CPU, you have root access to. If you are not sure if it's compatible see [Detecting flavour section](#detecting-flavour) below
|
* A machine you have root access to running Debian GNU/Linux or compatible (eg. Ubuntu), or Alpine on `x86_64`, `aarch64` or `armv7l` CPU. If you are not sure what you are running see [Detecting flavour section](#detecting-flavour) below
|
||||||
* A (sub)domain pointed to the machine
|
* A (sub)domain pointed to the machine
|
||||||
|
|
||||||
You will be running commands as root. If you aren't root already, please elevate your priviledges by executing `sudo su`/`su`.
|
You will be running commands as root. If you aren't root already, please elevate your privileges by executing `sudo -i`/`su`.
|
||||||
|
|
||||||
While in theory OTP releases are possbile to install on any compatible machine, for the sake of simplicity this guide focuses only on Debian/Ubuntu and Alpine.
|
Similarly to other binaries, OTP releases tend to be only compatible with the distro they are built on, as such this guide focuses only on Debian/Ubuntu and Alpine.
|
||||||
|
|
||||||
### Detecting flavour
|
### Detecting flavour
|
||||||
|
|
||||||
|
@ -19,7 +20,7 @@ Paste the following into the shell:
|
||||||
arch="$(uname -m)";if [ "$arch" = "x86_64" ];then arch="amd64";elif [ "$arch" = "armv7l" ];then arch="arm";elif [ "$arch" = "aarch64" ];then arch="arm64";else echo "Unsupported arch: $arch">&2;fi;if getconf GNU_LIBC_VERSION>/dev/null;then libc_postfix="";elif [ "$(ldd 2>&1|head -c 9)" = "musl libc" ];then libc_postfix="-musl";elif [ "$(find /lib/libc.musl*|wc -l)" ];then libc_postfix="-musl";else echo "Unsupported libc">&2;fi;echo "$arch$libc_postfix"
|
arch="$(uname -m)";if [ "$arch" = "x86_64" ];then arch="amd64";elif [ "$arch" = "armv7l" ];then arch="arm";elif [ "$arch" = "aarch64" ];then arch="arm64";else echo "Unsupported arch: $arch">&2;fi;if getconf GNU_LIBC_VERSION>/dev/null;then libc_postfix="";elif [ "$(ldd 2>&1|head -c 9)" = "musl libc" ];then libc_postfix="-musl";elif [ "$(find /lib/libc.musl*|wc -l)" ];then libc_postfix="-musl";else echo "Unsupported libc">&2;fi;echo "$arch$libc_postfix"
|
||||||
```
|
```
|
||||||
|
|
||||||
If your platform is supported the output will contain the flavour string, you will need it later. If not, this just means that we don't build releases for your platform, you can still try installing from source.
|
This should give your flavour string. If not this just means that we don't build releases for your platform, you can still try installing from source.
|
||||||
|
|
||||||
### Installing the required packages
|
### Installing the required packages
|
||||||
|
|
||||||
|
@ -114,13 +115,13 @@ adduser --system --shell /bin/false --home /opt/pleroma pleroma
|
||||||
export FLAVOUR="amd64-musl"
|
export FLAVOUR="amd64-musl"
|
||||||
|
|
||||||
# Clone the release build into a temporary directory and unpack it
|
# Clone the release build into a temporary directory and unpack it
|
||||||
su pleroma -s $SHELL -lc "
|
sudo -Hu pleroma "
|
||||||
curl 'https://git.pleroma.social/api/v4/projects/2/jobs/artifacts/stable/download?job=$FLAVOUR' -o /tmp/pleroma.zip
|
curl 'https://git.pleroma.social/api/v4/projects/2/jobs/artifacts/stable/download?job=$FLAVOUR' -o /tmp/pleroma.zip
|
||||||
unzip /tmp/pleroma.zip -d /tmp/
|
unzip /tmp/pleroma.zip -d /tmp/
|
||||||
"
|
"
|
||||||
|
|
||||||
# Move the release to the home directory and delete temporary files
|
# Move the release to the home directory and delete temporary files
|
||||||
su pleroma -s $SHELL -lc "
|
sudo -Hu pleroma "
|
||||||
mv /tmp/release/* /opt/pleroma
|
mv /tmp/release/* /opt/pleroma
|
||||||
rmdir /tmp/release
|
rmdir /tmp/release
|
||||||
rm /tmp/pleroma.zip
|
rm /tmp/pleroma.zip
|
||||||
|
@ -141,25 +142,25 @@ mkdir -p /etc/pleroma
|
||||||
chown -R pleroma /etc/pleroma
|
chown -R pleroma /etc/pleroma
|
||||||
|
|
||||||
# Run the config generator
|
# Run the config generator
|
||||||
su pleroma -s $SHELL -lc "./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql"
|
sudo -Hu pleroma "./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql"
|
||||||
|
|
||||||
# Create the postgres database
|
# Create the postgres database
|
||||||
su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql"
|
sudo -u postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql"
|
||||||
|
|
||||||
# Create the database schema
|
# Create the database schema
|
||||||
su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"
|
sudo -Hu pleroma "./bin/pleroma_ctl migrate"
|
||||||
|
|
||||||
# If you have installed RUM indexes uncommend and run
|
# If you have installed RUM indexes uncommend and run
|
||||||
# su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate --migrations-path priv/repo/optional_migrations/rum_indexing/"
|
# sudo -Hu pleroma "./bin/pleroma_ctl migrate --migrations-path priv/repo/optional_migrations/rum_indexing/"
|
||||||
|
|
||||||
# Start the instance to verify that everything is working as expected
|
# Start the instance to verify that everything is working as expected
|
||||||
su pleroma -s $SHELL -lc "./bin/pleroma daemon"
|
sudo -Hu pleroma "./bin/pleroma daemon"
|
||||||
|
|
||||||
# Wait for about 20 seconds and query the instance endpoint, if it shows your uri, name and email correctly, you are configured correctly
|
# Wait for about 20 seconds and query the instance endpoint, if it shows your uri, name and email correctly, you are configured correctly
|
||||||
sleep 20 && curl http://localhost:4000/api/v1/instance
|
sleep 20 && curl http://localhost:4000/api/v1/instance
|
||||||
|
|
||||||
# Stop the instance
|
# Stop the instance
|
||||||
su pleroma -s $SHELL -lc "./bin/pleroma stop"
|
sudo -Hu pleroma "./bin/pleroma stop"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Setting up nginx and getting Let's Encrypt SSL certificaties
|
### Setting up nginx and getting Let's Encrypt SSL certificaties
|
||||||
|
@ -197,6 +198,10 @@ $EDITOR path-to-nginx-config
|
||||||
# Verify that the config is valid
|
# Verify that the config is valid
|
||||||
nginx -t
|
nginx -t
|
||||||
```
|
```
|
||||||
|
#### (Strongly recommended) serve media on another domain
|
||||||
|
|
||||||
|
Refer to the [Hardening your instance](../configuration/hardening.md) document on how to serve media on another domain. We STRONGLY RECOMMEND you to do this to minimize attack vectors.
|
||||||
|
|
||||||
#### Start nginx
|
#### Start nginx
|
||||||
|
|
||||||
=== "Alpine"
|
=== "Alpine"
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
## OTP releases vs from-source installations
|
## Packaged (OTP) installation vs Manual (from-source) installations
|
||||||
|
|
||||||
There are two ways to install Pleroma. You can use OTP releases or do a from-source installation. OTP releases are as close as you can get to binary releases with Erlang/Elixir. The release is self-contained, and provides everything needed to boot it, it is easily administered via the provided shell script to open up a remote console, start/stop/restart the release, start in the background, send remote commands, and more. With from source installations you install Pleroma from source, meaning you have to install certain dependencies like Erlang+Elixir and compile Pleroma yourself.
|
There is multiple ways to install Pleroma.
|
||||||
|
<dl>
|
||||||
|
<dt>Distro-provided packages</dt><dd>This is the recommended method, where you can get the strongest compatibility guarantees and the best dependency-management</dd>
|
||||||
|
<dt>Pleroma-provided OTP binaries</dt><dd>Intended as fallback for Alpine/Debian-compatible systems lacking a proper Pleroma package, they are heavier than proper distro packages as they also contain Erlang/Elixir and can break after system updates</dd>
|
||||||
|
<dt>Manual from-source installation</dt><dd>Needs build-dependencies to be installed and manual updates+rebuilds. Allows for easier source-customisations.</dd>
|
||||||
|
</dl>
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
{! backend/installation/otp_vs_from_source.include !}
|
{! backend/installation/otp_vs_from_source.include !}
|
||||||
|
|
||||||
This guide covers a from-source installation. To install using OTP releases, please check out [the OTP guide](./otp_en.md).
|
This guide covers a manual from-source installation. To install using OTP releases, please check for the presence of a distro package, failing that you can use [Pleroma-provided OTP binaries](./otp_en.md).
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue