Skip to main content

Phederation implementation of ActivityPub. Can be used to setup a server in the fediverse, and can also be used as a library to build clients connecting to these (and other ActivityPub) servers.

Project description

A python/fastAPI implementation of the ActivityPub protocol.

Requirements

  • Linux environment (tested on Mint/Ubuntu)

  • Python (3.12+)

Installation

  1. As a pip package:

If you want to build ActivityPub clients, you can use the software as a library.

pip install phederation
  1. For development of the library, clone the repository from codeberg:

git clone https://codeberg.org/feldie/phederation.git phederation
  1. Navigate to the root folder of the “phederation” repository, then set up a python environment with uv, e.g.:

cd phederation
uv sync
  1. You can start a debug/development version using:

source .venv/bin/activate
gunicorn -c=settings/gunicorn.conf.dev.py

This will start a local server (localhost), you can try to access the fastapi doc at “<localhost:port>/docs”.

Testing and profiling

There are unit tests in the tests/ folder. They can be run using pytest:

pytest tests/unit_tests/

For coverage:

coverage run -m pytest tests/
coverage html

Profiling can be done with the pytest plugin pytest-profiling. For pretty svg plots of the runtimes, we use the additional graphviz tool.

pip install pytest-profiling
sudo apt install graphviz
pytest tests/unit_tests/ --profile-svg

Production environment

For a production environment, you should set up proper web hosting. Minimal safeguards should be in place, at least proxy+load balancing+ddos safe; nginx+fail2ban are a good combination:

You should also use a proper WSGI webserver (e.g. gunicorn), see below. Phederation is set up to accommodate all of this, and is tested to work in a production environment. Example settings files for production can be found in the “settings” folder. After setting up fail2ban and nginx, you can start a production mode version like this (including creating a logs folder if it does not exist yet):

source .venv/bin/activate
mkdir logs
gunicorn -c=settings/gunicorn.conf.prod.py

The command above starts gunicorn workers and serves content on “127.0.0.1:8082” (localhost, then use proxy to serve on the web). It uses the settings file “settings/instance_config-prod.yaml” for production mode.

Of course, it is useful to convert this into a proper service that runs continuously. This can be done by containerization of the phederation server itself, building a docker image and then hosting it. It is important to first set the proper variables in the file settings/.env (an example file with dummy values is located in settings/.env.noignore), then build the docker image, and then start all docker images. Note that the docker compose file settings/compose.yaml will start a keycloak server, its postgres database, a mongo database for the phederation image, and the phederation image itself. If you have another keycloak server running already, you should disable the former in the settings/compose.yaml file and instead link to yours in the settings/.env file.

docker build -t phederation-0.5 .
docker compose up -d

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

phederation-0.5.1.tar.gz (181.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

phederation-0.5.1-py3-none-any.whl (146.0 kB view details)

Uploaded Python 3

File details

Details for the file phederation-0.5.1.tar.gz.

File metadata

  • Download URL: phederation-0.5.1.tar.gz
  • Upload date:
  • Size: 181.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for phederation-0.5.1.tar.gz
Algorithm Hash digest
SHA256 d0176e61e5113396169a2189d633792baf35f01c9285f4302848ebb0869f4b99
MD5 9de8e9944f865a76791104ed53d1f5b7
BLAKE2b-256 af0fe3c5401fa2ec22a9eb6022e35ec79b730691105cbe6e21b1be77085007c1

See more details on using hashes here.

File details

Details for the file phederation-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: phederation-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 146.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for phederation-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 26030665329421c57ad4430d67d3c8cda351295325cce9152995a265a541e446
MD5 0d3bf6b661de2d22e32f7c8cdaac2ad3
BLAKE2b-256 4af5b49fa0b266ed95ed10f59cca786f43ce135c74f56e9df18428f7fe9bb9b5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page