Deployment guide

CommaFeed

Overview

CommaFeed is a self-hosted RSS and Atom feed reader inspired by the classic Google Reader. It fetches new articles from the sites, blogs and release feeds you follow, and presents them in a fast, keyboard-friendly web interface with folders, tags, full-text search, starred items and read tracking. It gives you one private place to keep up with the web without handing your reading habits to a third-party service.

This SecureAnyCloud image ships CommaFeed 7.2.0 as the official GraalVM native build on a hardened Ubuntu 24.04 LTS base, patched at build time. A bundled local PostgreSQL database makes the appliance complete on its own. A unique administrator account is created on the first boot of every VM, so there is no default login.

What you get:

  • CommaFeed 7.2.0 running as the native executable, managed by systemd
  • A bundled PostgreSQL 16 database holding your feeds, articles and settings, already installed and ready
  • CommaFeed served on :80 through an nginx reverse proxy, with WebSocket support for live feed tree updates
  • A per-VM administrator account created on first boot and recorded in a root-only file
  • No default login: the image ships an empty database, so the familiar admin / admin account never exists on your VM
  • CommaFeed and PostgreSQL bound to 127.0.0.1 only, never exposed to the network
  • A dedicated Azure data disk carrying the PostgreSQL cluster, so all of your reading data stays with the VM
  • commafeed.service, nginx.service and postgresql.service as enabled systemd units
  • An unauthenticated /health endpoint for Azure Load Balancer health probes
  • 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. Choose a larger size if you follow a large number of high-volume feeds.

Configure the network security group (NSG) to allow inbound 22/tcp from your management network and 80/tcp for the reader. CommaFeed serves plain HTTP on port 80, so for production terminate TLS in front of it with your own domain. The bundled PostgreSQL listens on 127.0.0.1 only, so port 5432 stays off the network.

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for CommaFeed 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:commafeed-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name commafeed \
  --image sac1647283583153:commafeed-ubuntu-24-04:default:latest \
  --size Standard_B2s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard

Open port 80 for the reader:

az vm open-port --resource-group <your-rg> --name commafeed --port 80

Step 3 - Confirm the services are running

SSH in as azureuser and confirm that CommaFeed, nginx and PostgreSQL are all active. CommaFeed listens only on 127.0.0.1:8082 and PostgreSQL only on 127.0.0.1:5432, while nginx serves the reader on port 80.

systemctl is-active commafeed nginx postgresql commafeed-firstboot
ss -tlnp | grep -E ':80 |:8082 |:5432 ' | sed 's/ */ /g'

Step 4 - Retrieve the per-VM administrator password

Every VM creates its own CommaFeed administrator account on first boot. The login user, the generated password and the URL are written to a root-only credentials file. Read it with sudo:

sudo cat /root/commafeed-credentials.txt

Sign in as user admin with the COMMAFEED_ADMIN_PASSWORD from this file.

Step 5 - Sign in to CommaFeed

Browse to http://<vm-public-ip>/. The CommaFeed login page opens. Sign in with username admin and the password from Step 4.

Step 6 - Read your feeds

After you sign in, CommaFeed opens the reader. The left column is your feed tree, with unread counts per feed and folder. The main column is the article list.

Click an article to read it, star it to keep it, or mark it read. The toolbar across the top offers next and previous navigation, refresh, mark all as read, unread and sort filters, and full-text search.

Step 7 - Subscribe to a feed

Click the plus button next to the CommaFeed logo to add a subscription. Paste a feed URL, or a website address, in which case CommaFeed tries to discover the feed in the page. Click Next to analyse it and subscribe.

You can organise subscriptions into categories, and import or export your whole subscription list as OPML from the same dialog.

Step 8 - Tune your display and profile

Open Settings from the user menu in the top right. The Display tab controls language, primary colour, the reading layout, and how entries scroll and are marked as read.

The Profile tab is where you change your own password, set an email address for password recovery, and manage your API key. The Push notifications and Custom code tabs let you extend CommaFeed further.

Step 9 - Confirm there are no default credentials

Older CommaFeed releases shipped a well-known admin / admin account. This image removes that risk. It ships an empty database, so CommaFeed has no users at all on first boot. The appliance then creates the administrator with a unique per-VM secret before the reader is reachable.

Prove it with two requests: the default credential is rejected, and your per-VM credential is accepted.

curl -s -o /dev/null -w 'admin/admin default -> HTTP %{http_code}\n' -u admin:admin http://127.0.0.1:8082/rest/user/settings
PW=$(sudo grep '^COMMAFEED_ADMIN_PASSWORD=' /root/commafeed-credentials.txt | cut -d= -f2-); curl -s -o /dev/null -w 'your per VM admin -> HTTP %{http_code}\n' -u "admin:$PW" http://127.0.0.1:8082/rest/user/settings

The default admin / admin is rejected with 401. An anonymous request is also rejected with 401. Only your per-VM administrator password is accepted, with 200.

Step 10 - Verify the stack and where your data lives

The PostgreSQL cluster lives on the dedicated data disk mounted at /var/lib/commafeed, and its data directory is /var/lib/commafeed/pgdata. Your subscriptions and articles are therefore kept separate from the operating system disk and ride with the VM.

Check the health endpoint, confirm the mount, and read your live feed, article and user counts:

curl -sI http://127.0.0.1/health | head -1
findmnt -no SOURCE,TARGET,FSTYPE,SIZE /var/lib/commafeed
sudo runuser -u postgres -- psql -d commafeed -tAc "SELECT 'feeds=' || (SELECT count(*) FROM feedsubscriptions) || ' entries=' || (SELECT count(*) FROM feedentries) || ' users=' || (SELECT count(*) FROM users)"

Adding your own domain and TLS

The appliance serves plain HTTP on port 80, so for production put CommaFeed behind your own domain and a TLS certificate. Terminate TLS with Azure Application Gateway, an nginx or Caddy reverse proxy, or a managed load balancer with a certificate for your domain. Point it at the VM on port 80.

CommaFeed itself needs no reconfiguration, because it already sits behind the local nginx proxy.

Security notes

  • Encrypt web traffic. CommaFeed serves plain HTTP on port 80. For anything beyond a trusted network, put it behind your own TLS-terminating reverse proxy or Azure Application Gateway with a certificate for your domain.
  • Keep PostgreSQL private. The bundled PostgreSQL listens on 127.0.0.1 only and is never reachable from the network. Administer it over SSH with sudo runuser -u postgres -- psql.
  • Protect the administrator account. It is unique per VM, and no default or blank credential authenticates. Keep /root/commafeed-credentials.txt protected, and change your password from the Settings Profile tab once you are signed in.
  • Restrict access. Public registration is disabled by default, so only accounts you create can sign in. Restrict inbound 80/tcp in your NSG to the networks that need the reader.

Support

SecureAnyCloud images come with 24/7 support. For help deploying or operating CommaFeed on Azure, contact us at secureanycloud.com.

Deploy on Azure

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