Akkoma
Overview
Akkoma is a lightweight, highly customisable, open-source server for the fediverse. It is a self-hosted, federated microblogging platform that speaks ActivityPub, so your instance can interoperate with Mastodon, Pleroma and thousands of other servers. Akkoma is a community-maintained fork of Pleroma, written in Elixir on the Erlang/OTP runtime with PostgreSQL for storage. It ships the pleroma-fe (web UI) and admin-fe (administration) front ends.
The SecureAnyCloud image installs Akkoma from the official OTP release and binds the app to the loopback interface behind nginx. On the first boot of each VM, it generates every cryptographic secret and the initial administrator account uniquely for that VM. The image is backed by 24/7 SecureAnyCloud support.
What you get:
- Akkoma installed from the official OTP release (AGPL-3.0). The release bundles the Erlang/OTP runtime and Elixir, so there is no source compile
- The
akkomaservice (the Phoenix app) bound to127.0.0.1:4000and PostgreSQL 16 bound to loopback, both under systemd, fronted by nginx on port 80 with an unauthenticated/healthz - The pleroma-fe primary web UI and admin-fe administration dashboard installed into the static directory
- All per-VM secrets generated on first boot:
secret_key_base, the signing and LiveView salts, the joken JWT signer and the web-push VAPID keypair. None are baked into the image - A per-VM administrator account created on first boot and recorded in a root-only credentials file
- Open registration disabled by default, for a locked-down appliance, and the Mastodon-compatible client API
- 24/7 SecureAnyCloud support
Prerequisites
You need an active Azure subscription, an SSH key pair, and a VNet with a subnet in the target region.
Standard_B2s (2 vCPU / 4 GiB RAM) is a sensible starting size for evaluation. Choose a larger size for a busy instance, because Akkoma runs the BEAM VM plus PostgreSQL.
Configure the network security group (NSG) to allow inbound 22/tcp from your management network and 80/tcp for the web interface. The appliance serves the web UI over plain HTTP on port 80 on the VM's own IP for evaluation. Before you federate, set your own domain and a TLS certificate (see Step 9).
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Akkoma by SecureAnyCloud, and select Create.
On the Basics tab, pick your subscription, resource group, region and size (Standard_B2s). Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80).
Select Review + create, then Create.
Step 2 - Deploy from the Azure CLI
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:akkoma-ubuntu-24-04:default:latest
az vm create \
--resource-group <your-rg> \
--name akkoma \
--image sac1647283583153:akkoma-ubuntu-24-04:default:latest \
--size Standard_B2s \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-sku StandardOpen the web port on the VM's NSG:
az vm open-port --resource-group <your-rg> --name akkoma --port 80 --priority 900Step 3 - Connect to your VM
ssh azureuser@<vm-public-ip>Step 4 - Confirm the services are running
On first boot, the image generates the per-VM secrets, sets the instance domain to the VM public IP, creates the administrator account and starts the stack. Confirm that the services are active and that the app and database are bound to loopback only:
systemctl is-active postgresql nginx akkomasudo ss -tlnp | grep -E ':80 |:4000 |:5432 'Step 5 - Check the health endpoints
The unauthenticated :80/healthz endpoint returns 200 for load-balancer probes. The Mastodon-compatible /api/v1/instance endpoint returns your instance metadata:
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1/healthzcurl -s http://127.0.0.1/api/v1/instance | python3 -m json.tool | grep -E '"uri"|"title"|"version"|"registrations"'Step 6 - Retrieve the per-VM administrator credentials
First boot generates the administrator account and a strong password and writes them to a root-only file. The secrets in /etc/akkoma/config.exs are unique to this VM and never leave it. Read the credentials file:
sudo cat /root/akkoma-credentials.txtThe file records the web URL, the administrator username, email address and password.
Step 7 - Sign in to the web interface
Browse to http://<vm-public-ip>/. In the Log in panel on the left, enter the administrator username and password from the credentials file. After you sign in, your home timeline opens with the compose box on the left.
Step 8 - Post to your timeline
Type a message in the compose box and select Post. Your status appears immediately in the home timeline, which confirms that the full ActivityPub stack (Phoenix, PostgreSQL and the pleroma-fe front end) works end to end.
Step 9 - Set your own domain (do this BEFORE federating)
This is the most important step. Akkoma bakes its instance domain into accounts, posts and federation identifiers at setup and cannot cleanly change it later. The appliance boots with the domain set to the VM IP over plain HTTP, which is suitable only for evaluation. Before you create real accounts or federate, set your own domain:
- Point a DNS record (for example
social.example.com) at the VM public IP. - Edit
/etc/akkoma/config.exsand set the endpoint host, scheme, port and media base URL for your domain:
config :pleroma, Pleroma.Web.Endpoint, url: [host: "social.example.com", scheme: "https", port: 443] config :pleroma, Pleroma.Upload, base_url: "https://social.example.com/media"- Point the nginx
server_namein/etc/nginx/sites-available/akkomaat your domain, install a real TLS certificate (for example withcertbot --nginx), and reload nginx. - Restart Akkoma so the new configuration takes effect:
sudo systemctl restart akkoma nginxFederation with the wider fediverse requires a real domain and a valid TLS certificate. A bare IP over HTTP is suitable only for evaluating the software.
Step 10 - Administration dashboard
The admin-fe dashboard manages users, statuses, reports, moderation, relays and instance settings. Open http://<vm-public-ip>/pleroma/admin/ and choose Log in via PleromaFE to authenticate with your existing session. The appliance ships no default credentials. Every secret and the administrator account are generated uniquely per VM on first boot, and open registration is disabled by default.
Maintenance and production notes
pleroma_ctl: manage the instance with/opt/akkoma/bin/pleroma_ctl, run as theakkomauser. Use it for tasks such aspleroma_ctl user new,pleroma_ctl user set, database migrations and frontend updates.- Media and disk size: a real instance accumulates federated media under
/var/lib/akkoma/uploads. For production, attach a larger disk or configure object storage, and back up the PostgreSQLakkomadatabase regularly. - Updates: apply OS security updates with
sudo apt update && sudo apt upgrade. Akkoma version upgrades follow the upstream release notes (pleroma_ctl update). - Security: the appliance ships no default credentials. Every secret and the administrator account are generated uniquely per VM on first boot. Keep
/root/akkoma-credentials.txtprotected, and change the administrator password after your first sign-in.
Akkoma is free software licensed under the AGPL-3.0. This image is produced by SecureAnyCloud and is not affiliated with, sponsored by, or endorsed by the Akkoma project.
Deploy on Azure
Launch Akkoma on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View this image
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com