Deployment guide

Raven

Overview

Raven is a self-hosted, open-source team-messaging application built on the Frappe framework. It is a private, Slack-style alternative that you fully control, with workspaces, public and private channels, direct messages, threaded conversations, reactions and @-mentions, file and image sharing, pinned messages and link previews. An AI-bot layer lets you build assistants inside channels.

This SecureAnyCloud image installs Raven v2.8.11 on Frappe framework version-15 as a full production deployment. The entire headless install runs at build time, so there is no command-line bootstrap on first use. The Frappe Administrator password, the site database password and the Frappe encryption key are rotated on the first boot of every VM.

What you get:

  • Raven v2.8.11 on Frappe framework version-15, served on port 80 by nginx in front of a gunicorn web worker
  • A node socket.io realtime process for live messaging, plus Frappe background workers and a scheduler managed by supervisor
  • MariaDB on loopback (Barracuda / utf8mb4 / large packets per Frappe), tuned for a small VM
  • Redis for cache, queue and socket.io
  • A unique Administrator password, site database password and Frappe encryption key generated on first boot, with no default login
  • nginx.service, supervisor.service, mariadb.service and redis-server.service as enabled and active systemd units
  • 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 the supported minimum. Choose a larger size, such as Standard_B2ms or Standard_D2s_v3, for larger teams or higher message volume.

Configure the network security group (NSG) to allow inbound 22/tcp from your management network and 80/tcp for the Raven web interface. For public exposure, front Raven with TLS as described in Enabling HTTPS.

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Raven by SecureAnyCloud, and select Create.

On the Basics tab, pick your subscription, resource group, region and size. 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:raven-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name raven \
  --image sac1647283583153:raven-ubuntu-24-04:default:latest \
  --size Standard_B2s \
  --admin-username azureuser \
  --ssh-key-values ~/.ssh/id_ed25519.pub \
  --vnet-name <your-vnet> --subnet <your-subnet> \
  --public-ip-sku Standard
az vm open-port --resource-group <your-rg> --name raven --port 80 --priority 1010

Step 3 - Connect to your VM

ssh azureuser@<vm-public-ip>

Step 4 - Confirm the Raven stack is running

On first boot, the image rotates the Frappe encryption key, the site database password and the Administrator password. It also points the site at this VM's public IP and starts the production stack. Confirm that all four systemd services are active:

systemctl is-active mariadb redis-server supervisor nginx

All four services report active, and supervisor runs the Frappe web, socket.io, worker and schedule processes.

Next, confirm that the Frappe web tier answers its health endpoint. Check the installed apps and versions, which are Frappe framework version-15 and Raven v2.8.11:

curl -s http://127.0.0.1/api/method/ping
sudo -u frappe -H bash -lc 'cd /opt/frappe/frappe-bench && bench --site raven.localhost list-apps'

Frappe returns {"message":"pong"}. MariaDB (3306) and Redis (6379) listen only on loopback, while nginx serves port 80.

Step 5 - Retrieve the Administrator password

The per-VM Administrator password is generated on first boot. It is written to a root-only credentials file, together with the site URL and login name:

sudo cat /root/raven-credentials.txt

These secrets are generated on first boot, so no two deployments share the same password. Verify that the vendor default logins are rejected while the per-VM password authenticates:

PASS=$(sudo grep '^raven.admin.pass=' /root/raven-credentials.txt | cut -d= -f2-)
curl -s -o /dev/null -w 'per-VM password: %{http_code}\n' http://127.0.0.1/api/method/login \
  --data-urlencode 'usr=Administrator' --data-urlencode "pwd=$PASS"
curl -s -o /dev/null -w 'default "admin": %{http_code}\n' http://127.0.0.1/api/method/login \
  --data-urlencode 'usr=Administrator' --data-urlencode 'pwd=admin'

The per-VM password returns 200, and the default returns 401.

Step 6 - Sign in to Raven

Browse to http://<vm-public-ip>/raven and sign in as Administrator with the password from Step 5. After your first sign-in, change this password from your Frappe user settings.

Step 7 - Choose your workspace

After you sign in, Raven opens on your workspaces. Select a workspace to open it and reveal the channel sidebar. From the sidebar you can browse channels, threads and saved messages, and use the + controls to create channels or invite members.

Create additional public or private workspaces to separate teams or projects.

Step 8 - Send messages in a channel

Open a channel from the sidebar to see its conversation. Messages show the author, timestamp and content in a threaded timeline. The composer at the bottom supports rich text, code blocks, emoji, mentions, file attachments and polls.

Type a message and press Enter to post it. Other members see it in real time over socket.io. Use the formatting toolbar and the emoji, mention and attachment controls to send formatted messages, react to posts, start threads and share files with your team.

From the settings menu, you can also manage workspace members and roles, control who can create channels, connect the AI-bot layer, and configure notifications.

Enabling HTTPS

For public exposure, front Raven with TLS. Point a DNS A record at the VM's public IP, then issue a certificate with Certbot and the nginx plugin. Run the command interactively:

sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.example.com

Certbot edits the Frappe nginx site in place and sets up automatic renewal. Allow 443/tcp in your NSG. Real-time messaging over socket.io works through the same nginx front end.

Maintenance

The OS keeps receiving security updates through unattended-upgrades. Raven and the framework can be updated with bench as the frappe user (sudo -u frappe -H bash -lc 'cd /opt/frappe/frappe-bench && bench update'). Review the Raven release notes before you apply a major version upgrade, and take a snapshot of the OS disk before any upgrade.

Support

This image is published and supported by SecureAnyCloud. For assistance, contact SecureAnyCloud support.

Frappe is a trademark of Frappe Technologies Pvt. Ltd. SecureAnyCloud is not affiliated with or endorsed by the Frappe project.

Deploy on Azure

Launch Raven 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

Deploy on Azure