How to install pleroma on ubuntu vps
Learn how to install pleroma on ubuntu vps!

This article provides a guide demonstrating how to install Pleroma on Ubuntu VPS.

What is Pleroma?

Pleroma is a free, open-source, self-hostable microblogging server that speaks the ActivityPub federation protocol—so your users can interact with people on other Fediverse platforms (e.g., Mastodon) while you keep full control over your server and policies.

It’s built in Elixir (on the Erlang/OTP “BEAM” VM) with PostgreSQL for storage, and is designed to be efficient enough for modest VPSes while still scaling on stronger hardware.

Pleroma ships as a backend plus a default web UI called Pleroma-FE (you can swap in other front-ends if you prefer). Many Mastodon-targeted mobile/desktop clients also work because Pleroma exposes endpoints compatible with the Mastodon client API.

It’s part of the broader Fediverse—a network of independently run servers that interoperate—licensed under AGPLv3.

Here’s a clean, reproducible way to deploy Pleroma on an Ubuntu VPS (22.04/24.04). We’ll use the official OTP release (prebuilt Elixir/Erlang bundle), PostgreSQL, Nginx, and Let’s Encrypt.

What you’ll set up

  • Pleroma (backend + default Pleroma-FE)
  • PostgreSQL database
  • Nginx reverse proxy with HTTPS (Let’s Encrypt)
  • Systemd service for auto-start on boot
  • An admin account for first login

Prerequisites

The Pleroma team recommends using their OTP releases on Debian/Ubuntu and outlines the exact packages we’ll install, plus optional media tools.

Launch 100% ssd ubuntu vps from $2. 49/mo!

How to Install Pleroma on Ubuntu VPS

To install Pleroma on Ubuntu VPS, follow the steps below:

  1. Update, set hostname, and basic tools

    sudo apt update && sudo apt -y full-upgrade sudo apt -y install curl unzip postgresql postgresql-contrib nginx certbot libmagic-dev

    Those are the core dependencies required by the OTP release (curl, unzip, ncurses, PostgreSQL, Nginx, certbot, libmagic).

    (Recommended) Media/graphics helpers

    sudo apt -y install imagemagick ffmpeg libimage-exiftool-perl

    These enable image/video processing and EXIF handling.

  2. Create the Pleroma system user and data dirs

    sudo adduser --system --shell /bin/false --home /opt/pleroma pleroma sudo groupadd pleroma sudo usermod -aG pleroma pleroma # Uploads and static override directories sudo mkdir -p /var/lib/pleroma/{uploads,static} sudo chown -R pleroma:pleroma /var/lib/pleroma # Config directory sudo mkdir -p /etc/pleroma sudo chown -R pleroma:pleroma /etc/pleroma

    These paths match the official OTP layout.

  3. Download and install the OTP release

    Determine the correct build “flavour” (architecture/libc) and fetch the ZIP:

    # Detect flavour (outputs e.g., amd64) 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 export FLAVOUR="$arch" # Download + unpack as the pleroma user sudo -Hu pleroma bash -lc " 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/ mv /tmp/release/* /opt/pleroma rmdir /tmp/release rm /tmp/pleroma.zip "

    The official instructions use this artifact endpoint and directory layout.

  4. Generate configuration and initialize the database

    Use Pleroma’s CLI to generate a config and DB setup SQL—then create the DB and run migrations:

    # Create instance config + SQL (interactive prompts ask for your domain, email, etc.) sudo -Hu pleroma ./opt/pleroma/bin/pleroma_ctl instance gen \ --output /etc/pleroma/config.exs \ --output-psql /tmp/setup_db.psql # Create the PostgreSQL database and role from that SQL sudo -u postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql" # Run database migrations sudo -Hu pleroma ./opt/pleroma/bin/pleroma_ctl migrate

    Generation via pleroma_ctl instance gen and the subsequent psql + migrate flow are the officially documented OTP steps.

    Tip: If you plan to keep most settings in the DB, answer Yes when the generator asks to store configuration in the database.

  5. One-time verification (optional)

    Start Pleroma in the foreground just to confirm the instance answers locally, then stop it:

    sudo -Hu pleroma ./opt/pleroma/bin/pleroma daemon sleep 20 && curl -s http://localhost:4000/api/v1/instance | jq . sudo -Hu pleroma ./opt/pleroma/bin/pleroma stop

    Official docs suggest this quick check before wiring Nginx.

  6. Obtain a Let’s Encrypt certificate

    Use the standalone method once (we’ll switch to webroot auto-renew later):

    sudo systemctl stop nginx sudo certbot certonly --standalone --preferred-challenges http -d yourinstance.tld sudo systemctl start nginx

    (Replace yourinstance.tld with your domain.)

  7. Configure Nginx reverse proxy

    Copy the stock Pleroma Nginx template and enable it:

    sudo cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/sites-available/pleroma.conf sudo ln -s /etc/nginx/sites-available/pleroma.conf /etc/nginx/sites-enabled/pleroma.conf sudo nginx -t && sudo systemctl reload nginx

    The template targets Pleroma on localhost:4000 and includes ACME challenge location you can switch to webroot for renewals later.

  8. Install the systemd service and start Pleroma

    sudo cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service sudo systemctl daemon-reload sudo systemctl start pleroma sudo systemctl enable pleroma sudo systemctl status pleroma --no-pager

    Service installation and enable/start steps are exactly as documented for Debian/Ubuntu.

    At this point, visiting https://yourinstance.tld should load Pleroma-FE.

  9. Create your admin user

    cd /opt/pleroma sudo su -s $SHELL -l pleroma -c "./bin/pleroma_ctl user new --admin"

    You’ll be given a one-time login link to set the password. (You can manage users later with pleroma_ctl user ... commands.)

  10. Set up certificate auto-renew (webroot method)

    Create the webroot and cron job that reloads Nginx after renewals:

    sudo mkdir -p /var/lib/letsencrypt # Ensure your Nginx conf uses webroot for /.well-known/acme-challenge/ -> /var/lib/letsencrypt # Dry-run test: sudo certbot renew --cert-name yourinstance.tld \ --webroot -w /var/lib/letsencrypt/ \ --dry-run --post-hook 'systemctl reload nginx' # Daily cron echo '#!/bin/sh certbot renew --cert-name yourinstance.tld --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx" ' | sudo tee /etc/cron.daily/renew-pleroma-cert >/dev/null sudo chmod +x /etc/cron.daily/renew-pleroma-cert

    This mirrors the official post-install renewal approach.

  11. (Optional) Hardening & polish

    • Serve media from a separate domain to reduce attack surface (the docs strongly recommend this). ([Fossies][1])
    • Consider a firewall (ufw allow 80,443/tcp), system monitoring, and regular database/file backups.
  12. Common admin commands

    Run these as the pleroma user from /opt/pleroma:

    # Create a user (non-admin) ./bin/pleroma_ctl user new # Grant / revoke admin ./bin/pleroma_ctl user set --admin ./bin/pleroma_ctl user set --no-admin # Reset a user's password (generates a reset link) ./bin/pleroma_ctl user reset_password # Database migrations (when updating) ./bin/pleroma_ctl migrate

    Pleroma documents these user management and CLI tasks.

  13. Updating Pleroma (later)

    With OTP installs you generally:

    # As pleroma user ./bin/pleroma_ctl update sudo systemctl stop pleroma ./bin/pleroma_ctl migrate sudo systemctl start pleroma

    (Workflows like this are covered in various step-by-steps and mirror the official tool usage.)

Launch 100% ssd ubuntu vps from $2. 49/mo!

Conclusion

You now know how to install Pleroma on Ubuntu VPS. You now have a production-friendly Pleroma instance behind Nginx with automatic TLS renewal, a systemd service, and an admin account.

Avatar of editorial staff

Editorial Staff

Rad Web Hosting is a leading provider of web hosting, Cloud VPS, and Dedicated Servers in Dallas, TX.

One thought on “How to Install Pleroma on Ubuntu VPS (5 Minute Quick-Start Guide)

  1. […] Users can follow and interact with accounts from other federated services like Mastodon, Pleroma, and […]

Comments are closed.

lg