Deployment guide

Meeds

Overview

Meeds is an open-source employee engagement platform. People collaborate inside spaces, which are dedicated areas for a team, a project or a topic, where they share posts, files, notes and tasks. A personal profile collects the activity, connections and contributions of a person.

A built-in quest and kudos system lets colleagues recognise each other's work, complete guided onboarding steps and earn points for genuine participation.

This image wires the whole stack together and generates every credential fresh on the VM you launch.

What you get:

  • Meeds 7.2.0, the official Tomcat standalone distribution
  • OpenJDK 21
  • PostgreSQL 16 as the application database
  • Elasticsearch 8.14.3 for full-text search across posts, spaces and profiles
  • nginx on port 80 as the only public surface
  • An Ubuntu 24.04 LTS base, fully patched at build time
  • 24/7 SecureAnyCloud support, 24h response SLA

Scope, stated plainly. This image ships no demonstration content and no pre-created spaces. It boots to the first-run Account Setup of the product. The administrator and their password are created on your VM through that setup and are not baked into the image.

Prerequisites

  • An active Azure subscription.
  • An SSH key pair.
  • A VNet and subnet to deploy into.
  • A network security group that you can edit, to restrict who reaches ports 22 and 80.

Recommended VM size: Standard_B2ms (2 vCPU / 8 GB). Meeds is a Java platform plus PostgreSQL plus Elasticsearch, and this size gives the stack real headroom rather than merely running.

The image sizes both the application heap and the Elasticsearch heap automatically from the memory it finds at first boot, so a smaller size works for evaluation. A Standard_B2s (2 vCPU / 4 GB) runs the full stack end to end, though with a tight memory margin under load. Treat B2ms as headroom for real teams and concurrent users, not as a hard floor.

1

Deploy from the Azure Portal

Search the Marketplace for Meeds, choose the plan and deploy it into your VNet.

In the network security group, allow TCP 22 (SSH) and TCP 80 (the workspace) from your own networks only. In production, put a TLS-terminating reverse proxy or an Azure Application Gateway in front of port 80.

2

Deploy from the Azure CLI

RG="meeds-prod"; LOCATION="eastus"; VM_NAME="meeds-01" IMAGE_URN="sac1647283583153:meeds:default:latest" SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" az group create --name "$RG" --location "$LOCATION" az network vnet create -g "$RG" --name meeds-vnet --address-prefix 10.106.0.0/16 --subnet-name meeds-subnet --subnet-prefix 10.106.1.0/24 az network nsg create -g "$RG" --name meeds-nsg az network nsg rule create -g "$RG" --nsg-name meeds-nsg --name allow-ssh --priority 100 \
  --source-address-prefixes "<your-mgmt-cidr>" --destination-port-ranges 22 --access Allow --protocol Tcp az network nsg rule create -g "$RG" --nsg-name meeds-nsg --name allow-web --priority 110 \
  --source-address-prefixes "<your-mgmt-cidr>" --destination-port-ranges 80 --access Allow --protocol Tcp
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:meeds:default:latest
az vm create -g "$RG" --name "$VM_NAME" --image "$IMAGE_URN" \
  --size Standard_B2ms --storage-sku StandardSSD_LRS \
  --admin-username azureuser --ssh-key-values "$SSH_KEY" \
  --vnet-name meeds-vnet --subnet meeds-subnet --nsg meeds-nsg --public-ip-sku Standard
3

Connect via SSH

ssh azureuser@<vm-ip>

The first boot detects the memory of the VM and sizes the application and search heaps accordingly. It creates the PostgreSQL role and database, starts the platform, and completes Account Setup with a password generated for this VM alone.

On a Standard_B2ms, the stack is ready within a few minutes of the VM reporting running.

4

Verify the Services

for u in postgresql elasticsearch meeds nginx; do printf '%-14s : %s\n' "$u" "$(systemctl is-active $u)"; done
sudo test -f /var/lib/sac/data/meeds-firstboot.done && echo "first boot : complete"
sudo ss -tln | grep -E ':8080|:9200|:5432|:80 '

Only nginx is bound to a public address. The platform (8080), Elasticsearch (9200) and PostgreSQL (5432) all listen on loopback, so nginx is the only way in from outside the VM.

5

Retrieve the Administrator Password

sudo cat /root/meeds-credentials.txt
sudo stat -c '%a %U:%G' /root/meeds-credentials.txt

The file is mode 0600 and only root can read it. It contains the workspace URL, the built-in super user root with a password unique to this VM, a companion personal account admin, and the PostgreSQL application password.

Meeds ships no baked-in demonstration login at all. Instead of creating a known account and rotating its password, this image drives the first-run Account Setup of the product on your VM and submits a password generated fresh for that boot. The historic community demonstration credential (root / gtn) is therefore never live, not even for a moment. You can confirm that it is refused:

/usr/local/sbin/meeds-roundtrip.sh
6

Sign In to the Workspace

Browse to http://<vm-ip>/ and sign in as root with the password from /root/meeds-credentials.txt.

The dashboard is the workspace home. Use it to post an update, see suggested onboarding quests and pick up tasks.

The Suggested Quests panel is the recognition system in action. Completing genuine actions earns real points, which are shown next to each quest. Examples are adding a profile picture, sending or receiving Kudos, and starting a space.

7

Browse Spaces

Spaces, in the left navigation, lists every collaboration space you can see. On a freshly launched VM the list is empty, with a prompt to create the first space:

Select Add to open the space creation panel. A name, description and visibility (open, private or hidden) define a new collaboration area for a team or a project.

8

View a Profile

Every account has a profile page that collects its identity, its activity and its connections:

The Your activity panel is a live count and not static text. Joining a space or making a connection changes the numbers shown here.

9

Server Components

java -version head -2 /opt/meeds/LICENSE.txt
sudo -u postgres psql -tAc 'select version()'

Component and path:

Meeds home /opt/meeds

Configuration /opt/meeds/conf/server.xml, /opt/meeds/gatein/conf/exo.properties

Application data /opt/meeds/gatein/data

Elasticsearch data /var/lib/elasticsearch

nginx site /etc/nginx/sites-available/meeds

Credentials /root/meeds-credentials.txt (mode 0600)

First-boot sentinel /var/lib/sac/data/meeds-firstboot.done

Port, bound address and purpose:

80 all interfaces nginx, the only public surface

8080 127.0.0.1 Tomcat: the Meeds platform

9200 127.0.0.1 Elasticsearch

5432 127.0.0.1 PostgreSQL

10

Managing the Service

sudo systemctl restart elasticsearch.service
sudo systemctl restart meeds.service
sudo journalctl -u meeds.service --no-pager -n 50

If you restart both services, restart Elasticsearch before Meeds. The platform expects the search index to be reachable during its own startup checks.

A fresh restart takes a couple of minutes to become fully ready, in line with the first-boot timing in Step 3. The command below waits for readiness instead of checking once:

for i in $(seq 1 30); do
CODE=$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1/portal/login) [ "$CODE" = "200" ] && { echo "login page: HTTP $CODE"; break; } sleep 5 done
11

Security Recommendations

  • Change the administrator password from the account menu once you are signed in, and store the new value in your own secret manager.
  • Restrict the network security group so that ports 22 and 80 only accept traffic from networks that you control.
  • Terminate TLS in front of nginx. The image serves plain HTTP on port 80 so that it makes no assumptions about your certificate authority. Put an Application Gateway, a load balancer or a TLS reverse proxy in front of it before real company data goes in.
  • Create named accounts for every person who signs in, rather than sharing the root login.
  • Back up PostgreSQL and the application data directory together. The database and /opt/meeds/gatein/data are a matched pair. A backup of one without the other does not restore cleanly.
  • Keep the OS patched with sudo apt-get update && sudo apt-get upgrade, and reboot for kernel updates.
12

Support and Licensing

Meeds is published under the LGPL-3.0 licence, read verbatim from the licence file inside the official distribution. SecureAnyCloud provides commercial support for the image itself, separately from the upstream project.

  • Email: sales@secureanycloud.com
  • Website: secureanycloud.com
  • Support hours: 24/7, 24h response SLA

Deploy on Azure

Launch Meeds on Ubuntu 24.04 with 24/7 support from SecureAnyCloud.

View on Marketplace

Need Help?

Our support team is available 24/7. sales@secureanycloud.com

Deploy on Azure

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