Deployment guide

OpenProject

Overview

OpenProject is an open source project management and team collaboration platform that covers the full delivery lifecycle. It includes work packages (tasks, features and bugs), Gantt timelines, agile boards for Scrum and Kanban, a project wiki, time and cost tracking, budgets and team status reporting.

The SecureAnyCloud image installs OpenProject 16 from the official all-in-one packager.io package and pairs it with PostgreSQL 16 and memcached. nginx fronts it on port 80, and the database and file attachments live on a dedicated Azure data disk. The image rotates the database password, the Rails secret and the administrator account on the first boot of every VM, and it is backed by 24/7 SecureAnyCloud support.

What you get:

  • OpenProject 16 served on port 80 by nginx, which reverse-proxies the bundled Puma application server on loopback
  • PostgreSQL 16 and memcached on loopback, with the database data directory on a dedicated Azure data disk
  • A dedicated Azure data disk at /var/lib/openproject for the PostgreSQL database and the OpenProject file attachments
  • A per-VM database password, a fresh Rails secret and a unique administrator account, all generated on first boot
  • openproject.service (the Rails web and worker processes) and nginx.service as systemd units, enabled and active
  • 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_B4ms (4 vCPU / 16 GiB RAM) is a good starting point, because OpenProject runs a Rails application, background workers and PostgreSQL together.

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

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for OpenProject 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).

Review the dedicated data disk on the Disks tab, then select Review + create and 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:openproject-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name openproject \
  --image sac1647283583153:openproject-ubuntu-24-04:default:latest \
  --size Standard_B4ms \
  --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 openproject --port 80 --priority 1010

Step 3 - Connect to your VM

ssh azureuser@<vm-public-ip>

Step 4 - Confirm OpenProject is running

On first boot, OpenProject rotates its database password and Rails secret, resets the administrator account to a fresh per-VM password, sets the host name to your VM's public IP and starts the stack. The Rails application takes a short while to warm up on the very first boot. The health check below waits for it.

Check that both services are active:

systemctl is-active openproject nginx

Both report active.

Then confirm that the OpenProject health endpoint answers through nginx on port 80:

for i in $(seq 1 30); do code=$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1/health_checks/default) [ "$code" = "200" ] && break sleep 5 done curl -s -o /dev/null -w 'health: HTTP %{http_code}\n' http://127.0.0.1/health_checks/default

The health endpoint returns HTTP 200.

Step 5 - Retrieve the administrator password

First boot generates an administrator account that is unique to your VM. Read the credentials file as root:

sudo cat /root/openproject-credentials.txt

The file contains the login (admin), the email (admin@sac.local) and a unique password. After your first sign-in, change the email and password in the account settings.

Step 6 - Verify the administrator can authenticate

Confirm that the per-VM administrator credentials authenticate by performing a real sign-in against the login form. The command below fetches the CSRF token, then posts the login. Take the password from the credentials file shown above:

JAR=$(mktemp)
TOKEN=$(curl -s -c "$JAR" http://127.0.0.1/login | grep -oE 'name="authenticity_token"[^>]*value="[^"]+"' | head -1 | sed -E 's/.*value="([^"]+)".*/\1/')
curl -s -b "$JAR" -c "$JAR" -o /dev/null -w 'login: HTTP %{http_code}\n' \
  -X POST http://127.0.0.1/login \
  --data-urlencode "authenticity_token=$TOKEN" \
  --data-urlencode "username=admin" \
  --data-urlencode "password=<OPENPROJECT_ADMIN_PASSWORD>" \
  -H 'Referer: http://127.0.0.1/login' rm -f "$JAR"

A correct password returns HTTP 302, a redirect into the application. A wrong password re-renders the form as HTTP 422.

To use the REST API at /api/v3 instead, create a personal API token in the web UI under My account, Access tokens, API. Then authenticate with HTTP basic auth as apikey:<your-token>.

Step 7 - Sign in to OpenProject

Browse to http://<vm-public-ip>/login. Sign in with admin and the password from the credentials file.

Step 8 - Work packages

OpenProject organizes work as work packages: tasks, features, bugs, milestones and more. Open a project and choose Work packages to see the list. From there you can filter and group it and create new items.

Each work package has a type, status, assignee, dates, priority and a full activity history.

Step 9 - Gantt timeline

Switch the work packages view to Gantt mode. On the timeline you can see and adjust the project schedule, set dependencies between work packages, and track milestones.

Step 10 - Work package detail

Open any work package to see and edit its full detail. The detail view shows status, assignee, dates, estimates and progress, priority, relations, watchers, and a complete activity log with inline comments.

Step 11 - The dedicated data disk

The PostgreSQL database and the OpenProject file attachments live on a dedicated Azure data disk mounted at /var/lib/openproject, separate from the OS disk. This keeps your project data independent of the OS image and lets you resize the disk as your installation grows. Confirm the mount:

df -h /var/lib/openproject findmnt /var/lib/openproject

Step 12 - Enabling HTTPS

For any public deployment, front OpenProject with TLS. Point a DNS A record at your VM's public IP, then install a certificate with Certbot and the nginx plugin. Run these steps on your VM, and replace the example domain and email with your own values:

  • Install Certbot: sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
  • Obtain and install a certificate for your-domain.example.com by running Certbot with the nginx plugin. Supply your contact email when prompted.
  • After issuance, tell OpenProject it is served over HTTPS by setting OPENPROJECT_HTTPS="true" and the host name to your domain. Runsudo openproject config:set OPENPROJECT_HTTPS="true", then sudo openproject config:set SERVER_PROTOCOL_FORCE_HTTPS="true".
  • Restart with sudo systemctl restart openproject so that generated links use https://.

Certbot installs a renewal timer automatically, so certificates renew without further action.

Step 13 - Maintenance

  • Updates: The OS continues to receive unattended security updates. Upgrade OpenProject itself with sudo apt-get update && sudo apt-get install --only-upgrade openproject, followed by sudo openproject configure.
  • Backups: OpenProject ships a backup helper, sudo openproject run backup, which dumps the PostgreSQL database and the attachments. Both live on the data disk under /var/lib/openproject.
  • Logs: Read application logs with sudo openproject logs. nginx logs are under /var/log/nginx/.

Support

This image is maintained by SecureAnyCloud with 24/7 support. For help with the image, contact sales@secureanycloud.com.

OpenProject is a trademark of its respective owners. SecureAnyCloud is not affiliated with or endorsed by the OpenProject project.

Deploy on Azure

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