Roundup Issue Tracker
Overview
Roundup is a mature, highly customisable open source issue and bug tracking system with web, command-line and optional email interfaces. Large projects have used it for many years, including the Python project itself. Issues are stored in a configurable schema of priorities, statuses, keywords and an issue class that you can extend. The web interface lets you raise, search, assign, discuss and resolve issues, with full history on every item and saved queries for the views you use most.
Roundup ships as a Python package rather than a finished server, so the SecureAnyCloud image supplies the production stack around it. Roundup 2.6.0 is installed at a pinned upstream release into a dedicated Python virtual environment. Its "classic" tracker is initialised on a local PostgreSQL 16 database and served by gunicorn behind an nginx reverse proxy. gunicorn is bound to loopback 127.0.0.1:8917 and is never exposed directly. nginx on port 80 is the only way in, plus an unauthenticated /healthz endpoint for load balancer probes.
The image is secure by default. No usable credential ships, and nothing listens on the public port in the image, so a freshly launched VM is never reachable with a known password. On the first boot of every VM, a fresh PostgreSQL password and a unique, randomly generated administrator password are created and written to a root-only file. Only then is the public site brought up. A few clearly marked example issues are seeded on first boot so the tracker is populated as soon as it starts. 24/7 SecureAnyCloud support is included.
What you get:
- Roundup 2.6.0 installed at a pinned upstream release in a dedicated Python virtual environment at
/opt/roundup/venv - The "classic" tracker initialised on a local PostgreSQL 16 database, served by the
roundupgunicorn systemd service on loopback127.0.0.1:8917 - nginx on port 80 as the reverse proxy, with an unauthenticated
/healthzendpoint for load balancer probes - A per-VM PostgreSQL password and a per-VM administrator password, generated on first boot and stored in
/root/roundup-credentials.txt - A few clearly marked example issues seeded on first boot so the interface is populated straight away
- An Ubuntu 24.04 LTS base, patched at build time, with unattended security updates enabled
Before you begin
You need an Azure subscription, permission to launch a VM, and an SSH key pair. Roundup runs comfortably on a Standard_B2s (2 vCPU, 4 GiB) instance.
The image opens TCP 22 (SSH), 80 (web) and 443 (optional TLS that you configure). Nothing else is exposed. PostgreSQL and gunicorn listen only on loopback.
Launch the image
You can launch the image from the Azure Portal or the Azure CLI.
Azure Portal: Find the offer on the Azure Marketplace and choose Create. Pick your resource group and region, select the Standard_B2s size, and provide your SSH public key for the azureuser admin account. Allow inbound ports 22, 80 and 443, create the VM, and note its public IP address.
Azure CLI: Replace the resource group, name and image reference with your own values.
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:roundup-ubuntu-24-04:default:latest
az vm create \
--resource-group my-rg \
--name roundup \
--image sac1647283583153:roundup-ubuntu-24-04:default:latest \
--size Standard_B2s \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-sku StandardThen open the web ports on the VM's network security group:
az vm open-port --resource-group my-rg --name roundup --port 80 --priority 900Retrieve the administrator password
Every instance generates its own administrator password on first boot and writes it, together with the tracker URL, to a root-only file. Connect to the VM over SSH and read the file:
ssh azureuser@<vm-ip>sudo cat /root/roundup-credentials.txtThe output shows the per-VM values. The password is unique to your instance:
ROUNDUP_URL=http://<vm-ip>/ ROUNDUP_ADMIN_USER=admin ROUNDUP_ADMIN_PASSWORD=<set-at-first-boot>The username is admin. After you first sign in, change the password from within Roundup.
Check that the services are healthy
Three systemd units serve the tracker: postgresql, roundup (gunicorn) and nginx. Confirm that all three are active and that only the web port is public:
sudo systemctl is-active postgresql roundup nginxcurl -s -o /dev/null -w 'GET /healthz -> HTTP %{http_code}\n' http://localhost/healthzcurl -s -o /dev/null -w 'GET / -> HTTP %{http_code}\n' http://localhost/Both requests return 200, and the service check prints active three times.
No default login ships. The administrator password is unique to your VM, and the built-in credential guesses are rejected. The image verifies the end-to-end sign-in and issue workflow on first boot.
Sign in and take a tour
Open http://<vm-ip>/ in your browser. The home page lists the current issues grouped by priority, with a sign-in form in the left menu. Enter admin and the password from the credentials file to sign in.
Choose Show All to see the full issue list. Each row shows the priority, id, activity, title and status. You can sort or group the view and export it as CSV.
The tracker includes a few clearly marked example issues so that the interface is not empty on first launch. Delete them when you are ready to use the tracker for real work.
Working with issues
Click any issue title to open it. The detail page shows the title, priority, status, assignee and nosy list, the full message history, and a complete audit trail of every change.
To raise a new issue, sign in and choose the issue-creation link. Give the issue a title, pick a priority and status, add a description, and save.
To work an issue, open it and add a message. Change the status (for example to in-progress or resolved) and reassign the issue if needed. Roundup records every change in the issue's history.
The image confirms on every instance that the tracker serves real content.
Optional: outbound email and the email gateway
Email is optional. The tracker works fully over the web without a mail server. To send outbound notifications, edit the [mail] section of /opt/roundup/tracker/config.ini to point at your SMTP server, then restart the service:
[mail] domain = your-domain.example host = smtp.your-domain.example username = notifications@your-domain.example password = your-smtp-password port = 587 tls = yesTo let people raise and reply to issues by email as well, configure Roundup's roundup-mailgw against a mailbox that you own. The Roundup documentation, linked from the tracker's Help menu, describes the setup. After you change config.ini, apply the change with sudo systemctl restart roundup.
Optional: a custom domain and HTTPS
Point a DNS record at the VM's public IP, then set the tracker's own URL so that the links it generates are correct. Edit the [tracker] web value in /opt/roundup/tracker/config.ini to https://your-domain.example/ and restart the service.
To terminate TLS, install a certificate for your domain with certbot:
sudo certbot --nginx -d your-domain.examplenginx already forwards X-Forwarded-Proto to gunicorn, so Roundup treats the connection as secure once TLS is in place.
Backups
Roundup keeps all issue data in PostgreSQL. Take a consistent dump on a schedule and copy it off the instance:
sudo -u postgres pg_dump roundup > /var/backups/roundup-$(date +%F).sqlStore backups off the instance. Never copy /opt/roundup/tracker/config.ini, which holds the database password, into a world-readable location.
Support
SecureAnyCloud publishes this image and includes 24/7 support for the packaged software and its deployment.
Roundup is distributed under the MIT licence, with small vendored components under the Zope Public License 2.0 and the Python Software Foundation License 2.0. Roundup is a trademark of its respective owners. SecureAnyCloud is not affiliated with, endorsed by or sponsored by the Roundup project, and uses the name nominatively to identify the open source software packaged in this image.
Deploy on Azure
Launch Roundup Issue Tracker 2.6 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