Pleroma is a federated social networking platform, compatible with GNU social and other OStatus implementations. It is free software licensed under the AGPLv3.
It actually consists of two components: a backend, named simply Pleroma, and a user-facing frontend, named Pleroma-FE.
Its main advantages are its lightness and speed.
Pleromians trying to understand the memes
- Based on the elixir:alpine image
- Ran as an unprivileged user
- It works great
Sadly, this is not a reusable (e.g. I can't upload it to the Docker Hub), because for now Pleroma needs to compile the configuration. 😢 Thus you will need to build the image yourself, but I explain how to do it below.
PLEROMA_VER: Pleroma version (latest commit of the
developbranch by default)
GID: group id (default:
UID: user id (default:
Create a folder for your Pleroma instance. Inside, you should have
docker-compose.yml from this repo.
Here is the
docker-compose.yml. You should change the
version: "3.8" services: db: image: postgres:12.1-alpine container_name: pleroma_db restart: always environment: POSTGRES_USER: pleroma POSTGRES_PASSWORD: ChangeMe! POSTGRES_DB: pleroma volumes: - ./postgres:/var/lib/postgresql/data web: image: pleroma container_name: pleroma_web restart: always ports: - "4000:4000" build: context: . # Feel free to remove or override this section # See 'Build-time variables' in README.md args: - "UID=911" - "GID=911" - "PLEROMA_VER=develop" volumes: - ./uploads:/var/lib/pleroma/uploads - ./static:/var/lib/pleroma/static - ./config.exs:/etc/pleroma/config.exs:ro # optional, see 'Config Override' section in README.md # - ./config-override.exs:/var/lib/pleroma/config.exs:ro environment: DOMAIN: example.com INSTANCE_NAME: Pleroma ADMIN_EMAIL: email@example.com NOTIFY_EMAIL: firstname.lastname@example.org DB_USER: pleroma DB_PASS: ChangeMe! DB_NAME: pleroma depends_on: - db
Create the upload and config folder and give write permissions for the uploads:
mkdir uploads config chown -R 911:911 uploads
Pleroma needs the
citext PostgreSQL extension, here is how to add it:
docker-compose up -d db docker exec -i pleroma_db psql -U pleroma -c "CREATE EXTENSION IF NOT EXISTS citext;" docker-compose down
Optionally configure Pleroma, see Config Override. You can now build the image. 2 way of doing it:
docker-compose build # or docker build -t pleroma .
I prefer the latter because it's more verbose but this will ignore any build-time variables you have set in
You can now launch your instance:
docker-compose up -d
The initial creation of the database schema will be done automatically. Check if everything went well with:
docker logs -f pleroma_web
Make a new admin user using docker exec (replace fakeadmin with any username you'd like):
docker exec -it pleroma_web sh ./bin/pleroma_ctl user new fakeadmin email@example.com --admin
You can now setup a Nginx reverse proxy in a container or on your host by using the example Nginx config.
By default, the Dockerfile will be built from the latest commit of the
develop branch as Pleroma does not have releases for now.
Thus to update, just rebuild your image and recreate your containers:
docker-compose pull # update the PostgreSQL if needed docker-compose build . # or docker build -t pleroma . docker-compose run --rm web mix ecto.migrate # migrate the database if needed docker-compose up -d # recreate the containers if needed
If you want to run a specific commit, you can use the
docker build -t pleroma . --build-arg PLEROMA_VER=develop # a branch docker build -t pleroma . --build-arg PLEROMA_VER=a9203ab3 # a commit docker build -t pleroma . --build-arg PLEROMA_VER=v2.0.7 # a version
a9203ab3 being the hash of the commit. (They're here)
This value can also be set through
docker-compose.yml as seen in the example file provided in this repository.
By default the provided
docker-compose.yml file mounts
config.exs in the Pleroma container, this file is a dynamic configuration that sources some values from the environment variables provided to the container (variables like
For those that want to change configuration that is not exposed through environment variables there is the option to mount the
config-override.exs file which can than be modified to your satisfaction. Values set in this file will override anything set in
config.exs. The override file provided in this repository disables new registrations on your instance, as an example.
Other Docker images
Here are other Pleroma Docker images that helped me build mine: