Deployment guide

Miniflux

Overview

Miniflux is a popular open-source, minimalist and fast self-hosted RSS/Atom/JSON feed reader. It is a privacy-respecting alternative to hosted readers, with a clean reader interface, keyboard shortcuts, full-text fetching, integrations and a REST API. It also offers the Google Reader and Fever APIs for mobile apps.

This SecureAnyCloud image runs the Miniflux server behind nginx as a reverse proxy on TCP 80. PostgreSQL is the datastore, on a dedicated Azure data disk. A unique administrator login is generated on the first boot of every VM.

What you get:

  • Miniflux 2.3 as a single, self-contained Go binary at /usr/local/bin/miniflux
  • An nginx reverse proxy on :80 in front of the Miniflux server, which is bound to loopback 127.0.0.1:8080
  • PostgreSQL with its datadir on a dedicated Azure data disk at /var/lib/postgresql, separate from the OS disk and re-provisioned with every VM
  • Per-VM administrator and PostgreSQL passwords, generated at first boot and stored in a root-only file
  • miniflux.service, postgresql.service 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_B2s (2 vCPU / 4 GiB RAM) is a good starting point, because Miniflux is lightweight.

Configure the NSG to allow inbound 22/tcp from your management network. Also allow 80/tcp, plus 443/tcp once you enable HTTPS, from the networks your readers use.

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Miniflux 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 PostgreSQL data disk on the Disks tab, then select Review + create and Create. First-boot initialization completes within about a minute of the VM starting.

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:miniflux-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name miniflux \
  --image sac1647283583153:miniflux-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 miniflux --port 80 --priority 1010

Step 3 - Connect to your VM

ssh azureuser@<vm-public-ip>

Step 4 - Confirm the services are running

systemctl is-active miniflux.service postgresql.service nginx.service curl -s http://127.0.0.1/healthcheck

All three services report active, and the health endpoint returns OK. Together they confirm that the full stack (nginx, the Miniflux server and PostgreSQL) is serving.

Step 5 - Retrieve your administrator login

The administrator account and the PostgreSQL password are generated uniquely on the first boot of your VM. They are written to a root-only file:

sudo cat /root/miniflux-credentials.txt

The miniflux.admin.user and miniflux.admin.pass values are your sign-in. The PostgreSQL password is rotated at the same time and is never shared between VMs.

Step 6 - Sign in for the first time

Open a web browser and go to http://<vm-public-ip>/. Miniflux shows its sign-in page.

Enter the username admin and the password from /root/miniflux-credentials.txt, then select Login.

Step 7 - Add feeds and read

Select Feeds, then Add feed. Paste a site or feed URL, and Miniflux discovers and subscribes to it.

Your unread entries appear in a clean, fast list with keyboard shortcuts. You can star items, fetch the original article inline, and open the source.

To migrate from another reader, select Import and upload an OPML file of your existing subscriptions.

Step 8 - Configure settings, integrations and mobile apps

Open Settings to set reader preferences, manage Integrations, generate API Keys for the REST API, manage Sessions, and add Users.

Miniflux also exposes the Google Reader and Fever APIs, so you can connect popular mobile and desktop RSS clients to your VM.

Step 9 - Use the REST API

The REST API is served on the same port. It authenticates with your administrator login, or with an API key generated under Settings -> API Keys.

From an SSH session on the VM, you can prove the round trip with the per-VM password:

PASS=$(sudo awk -F= '/^miniflux.admin.pass=/{print $2}' /root/miniflux-credentials.txt)
curl -s -o /dev/null -w 'authenticated: HTTP %{http_code}\n' -u "admin:${PASS}" http://127.0.0.1/v1/me

An authenticated: HTTP 200 response confirms that the API accepts the generated credentials. From your workstation, the same call is curl -u 'admin:<password>' http://<vm-public-ip>/v1/me.

Step 10 - Confirm the runtime and the data disk

The Miniflux binary reports its version, and the PostgreSQL datadir lives on the dedicated data disk:

/usr/local/bin/miniflux -version findmnt /var/lib/postgresql

The image pins a specific Miniflux release, keeps PostgreSQL on a dedicated data disk, and is patched at build time.

Enable HTTPS

For any production deployment, serve Miniflux over HTTPS so logins cannot be intercepted. The image ships with nginx, which certbot can configure automatically.

The following assumes a DNS record that points your fully qualified domain name at the VM's public IP, and port 443 open in the NSG:

sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d reader.your-domain.example \
  --non-interactive --agree-tos -m you@your-domain.example \
  --redirect

When certbot finishes, set the base URL so generated links are correct, then restart Miniflux: sudo sed -i 's|^BASE_URL=.*|BASE_URL=https://<your-domain>/|' /etc/miniflux.conf && sudo systemctl restart miniflux.

Back up and maintain

Miniflux keeps all of its state (feeds, entries, users and settings) in PostgreSQL on the dedicated data disk. Back it up regularly:

sudo -u postgres pg_dump miniflux > <backup-dir>/miniflux-db-$(date +%F).sql

Ship the dump to Azure Blob Storage or another object store. Because the database is on its own data disk, you can also take coordinated disk snapshots in Azure.

The Miniflux scheduler refreshes feeds on a schedule, and you can trigger a refresh from the UI at any time.

For kernel and package updates, Ubuntu's unattended-upgrades is enabled by default. Keep the OS patched with sudo apt update && sudo apt upgrade.

To upgrade Miniflux, replace /usr/local/bin/miniflux with a newer release and restart the service. Migrations run automatically. See https://miniflux.app/docs/.

Support

This image is backed by 24/7 SecureAnyCloud support. Contact us by email and chat for help with deployment, integrations, upgrades, TLS termination and database administration.

Response is guaranteed within 24 hours, with a one-hour average for critical issues. Contact sales@secureanycloud.com.

For general Miniflux questions, see the documentation at https://miniflux.app/docs/. Miniflux is a trademark of its respective owner. All product and company names are trademarks or registered trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.

Deploy on Azure

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