Install the binary on Debian
This is the reference deployment: Debian 13, the release binary, PostgreSQL 17 from Debian, Caddy, and systemd. Releases include AMD64 and ARM64 binaries. The static binaries can run on other Linux distributions of the same architecture; adapt the package names and service setup for your host.
The steps assume a fresh, dedicated server and an administrator with sudo.
Run the commands section by section, replacing the example values for your server.
Prepare the host
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
postgresql caddy ffmpeg ca-certificates curl openssl
sudo adduser --system --group --home /var/lib/plamenu \
--no-create-home plamenu
sudo -u postgres createuser plamenu
sudo -u postgres createdb --owner=plamenu plamenu
The operating-system user and PostgreSQL role have the same name. Debian’s default peer authentication therefore lets Plamenu use the local database socket without storing a database password or opening PostgreSQL to the network.
Install a release
These commands require published release assets (see
release status). Replace 0.6.0 with the selected version
in the version variable. The commands select the host architecture:
# Replace 0.6.0 with the release you want to install.
version=0.6.0
case "$(uname -m)" in
x86_64) arch=amd64 ;;
aarch64) arch=arm64 ;;
*) echo 'Supported architectures: AMD64 and ARM64' >&2; exit 1 ;;
esac
archive="plamenu-$version-linux-$arch.tar.gz"
mkdir "plamenu-$version"
cd "plamenu-$version"
curl -fLO "https://codefloe.com/plamenu/plamenu/releases/download/v$version/$archive"
tar -xzf "$archive"
sudo install -m 0755 plamenu /usr/local/bin/plamenu
sudo install -m 0644 plamenu.service /etc/systemd/system/plamenu.service
sudo install -d -m 0750 -o root -g plamenu /etc/plamenu
sudo install -m 0640 -o root -g plamenu \
plamenu.host.toml.example /etc/plamenu/plamenu.toml
sudo install -m 0644 Caddyfile.host.example /etc/caddy/Caddyfile
plamenu-VERSION-linux-ARCH.tar.gz contains one executable, the systemd unit,
example Plamenu and Caddy configurations, and the license.
Configure the server
openssl rand -hex 32
sudoedit /etc/plamenu/plamenu.toml
sudoedit /etc/caddy/Caddyfile
In /etc/plamenu/plamenu.toml, replace social.example.com and the encryption
secret. Keep the socket database URL and loopback bind for this single-host
layout. Configure SMTP before enabling a mail-dependent account flow.
In /etc/caddy/Caddyfile, replace every social.example.com. Point the social
domain, webxdc.<social-domain>, and *.webxdc.<social-domain> to the server.
The configuration guide explains split-domain
handles and why proxy trust must remain narrow.
Validate and start
# CLI commands initialize media storage before systemd creates StateDirectory.
sudo install -d -m 0750 -o plamenu -g plamenu \
/var/lib/plamenu /var/lib/plamenu/media
sudo -u plamenu /usr/local/bin/plamenu \
--config /etc/plamenu/plamenu.toml role list
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl daemon-reload
sudo systemctl enable --now postgresql plamenu caddy
# Debian may already have started Caddy with its packaged default config.
sudo systemctl reload caddy
curl -fsS http://127.0.0.1:8420/health
curl -fsS https://social.example.com/ready
/health checks that the process answers. /ready also checks PostgreSQL and
worker-supervisor health. If the public check fails, inspect
journalctl -u plamenu and use the
troubleshooting guide.