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
:80in front of the Miniflux server, which is bound to loopback127.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.serviceandnginx.serviceas 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 1010Step 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/healthcheckAll 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.txtThe 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/meAn 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/postgresqlThe 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 \
--redirectWhen 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).sqlShip 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
Overview
Miniflux is an 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. PostgreSQL is the datastore for feeds, entries and settings, and the server is otherwise stateless.
What you get:
- The Miniflux server on
127.0.0.1:8080, reached through nginx on port 80 (and 443 once you add TLS) - A PostgreSQL database that binds to the loopback interface only
- An administrator account and PostgreSQL password generated on the first boot of every deployed instance
- The login written to
/root/miniflux-credentials.txtwith mode 0600
Prerequisites
Before you deploy this image, you need:
- An Amazon Web Services account where you can launch EC2 instances
- IAM permissions to launch instances, create security groups and subscribe to AWS Marketplace products
- An EC2 key pair in the target Region for SSH access to the instance
- A VPC and subnet in the target Region, with a security group that allows inbound port 22 from your management network, and inbound ports 80 and 443 from the networks your users reach the reader from
- The AWS CLI (version 2) installed locally, if you plan to deploy from the command line
- Outbound internet access from the instance, so Miniflux can fetch feeds
Launch the instance from AWS Marketplace
Sign in to the AWS Management Console, open the EC2 service, and select Launch instance. Under Application and OS Images, choose AWS Marketplace AMIs and search for Miniflux.
Select the SecureAnyCloud listing and choose Select, then Continue on the subscription summary.
Pick an instance type of t3.medium or larger, because Miniflux is lightweight. Choose your EC2 key pair under Key pair (login).
Under Network settings, select your VPC and subnet. Create or select a security group that allows inbound port 22 from your management network, and inbound ports 80 and 443 from the networks your users use. Leave the root volume at the default size or larger.
Select Launch instance. First-boot initialization takes under a minute after the instance state becomes Running and the status checks pass.
Launch the instance from the AWS CLI
The following command launches an instance from the SecureAnyCloud Miniflux Marketplace AMI into an existing subnet and security group.
Replace <ami-id> with the AMI ID shown on the Marketplace listing, <key-name> with your EC2 key pair name, and <subnet-id> with your subnet ID. Replace <security-group-id> with a security group that opens ports 22, 80 and 443 as described above.
aws ec2 run-instances \
--image-id <ami-id> \
--instance-type t3.medium \
--key-name <key-name> \
--subnet-id <subnet-id> \
--security-group-ids <security-group-id> \
--block-device-mappings '[{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":30,"VolumeType":"gp3"}}]' \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=miniflux-01}]'On success, the command prints a JSON document. Note the instance ID. Once the instance is running, retrieve its public address with aws ec2 describe-instances --instance-ids <instance-id> --query "Reservations[].Instances[].PublicIpAddress" --output text.
Connect and retrieve the administrator login
Connect over SSH with the key pair you selected and the public IP address from Step 2. The SSH login user depends on the operating system of the AMI variant you launched:
AMI variant SSH login user
Miniflux 2.3 on Ubuntu 24.04 ubuntu
The first-boot service runs before the SSH daemon is ready, so the credentials file is always in place when you log in for the first time.
ssh <login-user>@<public-ip>
sudo cat /root/miniflux-credentials.txtThe plain-text file contains the Miniflux URL, the administrator username (admin) and the password.
From the same SSH session, confirm that the deployment is healthy. The health endpoint is open:
curl -fsS http://127.0.0.1/healthcheckOKAn OK response confirms that the full stack (nginx, the Miniflux server and PostgreSQL) is serving.
Sign in for the first time
Open a web browser and go to http://<public-ip>/. Miniflux shows its sign-in page.
Enter the username admin and the password from /root/miniflux-credentials.txt, then select Login.
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.
Configure settings, integrations and mobile apps
Open Settings to set reader preferences, manage Integrations (third-party services), 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 instance.
Enable HTTPS with Let's Encrypt
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 instance's public IP address.
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 \
--redirectWhen certbot finishes, set the base URL so generated links are correct, then restart Miniflux with 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. Back it up regularly:
sudo -u postgres pg_dump miniflux > <backup-dir>/miniflux-db-$(date +%F).sqlShip the dump to an Amazon S3 bucket or another object store. Because the database is on its own EBS volume, you can also take coordinated EBS snapshots.
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.
To upgrade Miniflux, replace /usr/local/bin/miniflux with a newer release and restart the service. Migrations run automatically. See https://miniflux.app/docs/.
Scale and operate
- Move PostgreSQL to Amazon RDS for PostgreSQL and update
DATABASE_URLin/etc/miniflux.conf - Put the web tier behind an Application Load Balancer if you need high availability
- Use the REST API or the Google Reader and Fever APIs to integrate Miniflux with other tools and mobile apps
The official Miniflux documentation at https://miniflux.app/docs/ covers each of these.
Support
SecureAnyCloud provides 24/7/365 expert technical support for this image. 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. The name is used here only to identify the software, and does not imply affiliation or endorsement.
Deploy on AWS
Launch Miniflux on AWS with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com