Portainer Templates logo

Portainer Templates

CommaFeed CommaFeed

Container

ProductivitySocial

RSS reader in the style of Google Reader, with four layouts, keyboard shortcuts for nearly everything, rules that mark entries as read, OPML import and the Fever and Google Reader APIs for mobile apps. Source: https://github.com/Athou/commafeed

Image details

Pulls: 730k
Architecture: amd64, arm64
Image size: 203 MB
Latest: 7.3.2-h2-jvm
User: athou
Created: Apr 24, 2023
Updated: 1 hour ago
Status: active

Source details

Stars: 4k
Forks: 412
Language: Java
License: Apache-2.0
Updated: 1 hour ago

Configuration

Type
Container
Platform
linux
Image
athou/commafeed:latest-h2
Ports
8082:8082/tcp
Volumes
/commafeed/data
Env vars
QUARKUS_HTTP_AUTH_SESSION_ENCRYPTION_KEY=''
Restart
unless-stopped

Notes

Open http://<your-host>:8082 and the first page creates the admin account. There's no setup code, so do it straight after deploying. Sign-ups are off, so the admin adds everyone else from the user menu --> Manage users. It won't subscribe to feeds on private addresses, so for one on your own network add COMMAFEED_HTTP_CLIENT_BLOCK_LOCAL_ADDRESSES=false to the environment, but only if you trust everyone using it. Mobile apps log in with your username and an API key, which you make at the bottom of Settings --> Profile, where the Fever and Google Reader addresses are too. Everything lives in the H2 database in the volume. Docs: athou.github.io/commafeed

Standalone Install

Select an install method, to see config/commands for deploying CommaFeed

Installation method

Install on Portainer

Import all app templates into your Portainer instance, for easy 1-click deploys

  1. Ensure both Docker and Portainer are installed, and up-to-date
  2. Log into your Portainer web UI
  3. Under Settings → App Templates, paste the below URL
  4. Head to Home → App Templates, and the list of apps will show up
  5. Select CommaFeed, fill in any config options, and hit Deploy

Template Import URL

https://raw.githubusercontent.com/Lissy93/portainer-templates/main/templates.json
Show Me demo

More install options in our documentation, or see Athou/commafeed for app-specific guidance.

CommaFeed

Official docker images for https://github.com/Athou/commafeed/

Quickstart

Start CommaFeed with a H2 embedded database. The app will be accessible on http://localhost:8082/

docker

docker run --name commafeed --detach --publish 8082:8082 --restart unless-stopped --volume /path/to/commafeed/data:/commafeed/data --memory 256M athou/commafeed:latest-h2

docker-compose

services:
  commafeed:
    image: athou/commafeed:latest-h2
    restart: unless-stopped
    volumes:
      - ./data:/commafeed/data
    deploy:
      resources:
        limits:
          memory: 256M
    ports:
      - 8082:8082

Advanced

While using the H2 embedded database is perfectly fine for small instances, you may want to have more control over the database. Here's an example that uses PostgreSQL (note the image tag change from latest-h2 to latest-postgresql):
services:
  commafeed:
    image: athou/commafeed:latest-postgresql
    restart: unless-stopped
    environment:
      - QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://postgresql:5432/commafeed
      - QUARKUS_DATASOURCE_USERNAME=commafeed
      - QUARKUS_DATASOURCE_PASSWORD=commafeed
    deploy:
      resources:
        limits:
          memory: 256M
    ports:
      - 8082:8082

  postgresql:
    image: postgres:latest
    restart: unless-stopped
    environment:
      POSTGRES_USER: commafeed
      POSTGRES_PASSWORD: commafeed
      POSTGRES_DB: commafeed
    volumes:
      - ./data:/var/lib/postgresql

CommaFeed also supports:
  • MySQL:
QUARKUS_DATASOURCE_JDBC_URL=jdbc:mysql://localhost/commafeed?autoReconnect=true&failOverReadOnly=false&maxReconnects=20&rewriteBatchedStatements=true&timezone=UTC
  • MariaDB:
QUARKUS_DATASOURCE_JDBC_URL=jdbc:mariadb://localhost/commafeed?autoReconnect=true&failOverReadOnly=false&maxReconnects=20&rewriteBatchedStatements=true&timezone=UTC

Configuration

All CommaFeed settings are optional and have sensible default values.
Settings are overrideable with environment variables. For instance, commafeed.feed-refresh.interval-empirical can be set with the COMMAFEED_FEED_REFRESH_INTERVAL_EMPIRICAL variable.
When logging in, credentials are stored in an encrypted cookie. The encryption key is randomly generated at startup, meaning that you will have to log back in after each restart of the application. To prevent this, you can set the QUARKUS_HTTP_AUTH_SESSION_ENCRYPTION_KEY variable to a fixed value (min. 16 characters). All other Quarkus settings can be found here.

Updates

When CommaFeed is up and running, you can subscribe to this feed to be notified of new releases.

Docker tags

Tags are of the form <version>-<database>[-jvm] where:
  • <version> is either:
- a specific CommaFeed version (e.g. `5.0.0`)
- `latest` (always points to the latest version)
- `master` (always points to the latest git commit)
  • <database> is the database to use (h2, postgresql, mysql or mariadb)
  • -jvm is optional and indicates that CommaFeed is running on a JVM, and not compiled natively.

FAQ

Getting "Access to local address blocked" when adding a feed

CommaFeed blocks access to local resources by default to prevent SSRF attacks. If you want to subscribe to feeds that are only available on your local network, you can disable this security measure by setting the COMMAFEED_HTTP_CLIENT_BLOCK_LOCAL_ADDRESSES variable to false. Do this only if you trust all users of your CommaFeed instance not to access private resources.

Serve CommaFeed on your own domain behind Caddy, Nginx or Traefik. Fill in your domain and copy the result. It's a starting point, some apps need their own base URL or extra headers set too.

Proxying commafeed.example.com to http://commafeed:8082

Add this to your Caddyfile

commafeed.example.com {
	reverse_proxy http://commafeed:8082
}

Check the logs first

Nine times out of ten the logs tell you exactly what went wrong.

  • In Portainer, go to Containers, click the container, then Logs. Or run docker logs commafeed
  • Exit codes help too: 137 means killed, usually out of memory. 126 or 127 means the command inside the image is broken.

Port already in use

If deployment fails with "Bind for 0.0.0.0:8082 failed: port is already allocated", something else on your server is using that port.

  • Find what's using it: sudo ss -tlnp | grep :8082
  • Stop the other service, or pick a different host port. In 8082:8082 only the left number is yours to change, the right one belongs to the app.

Running but the page won't load

The container is up but nothing appears in your browser.

  • Use your server's real IP: http://your-server-ip:8082. The 0.0.0.0 link Portainer shows isn't a real address.
  • Give it a minute after first deploy, commafeed can take a while to initialise.
  • Make sure your firewall allows the port, e.g. sudo ufw allow 8082

Image won't pull

Test the pull directly on the host: docker pull athou/commafeed:latest-h2

  • "manifest unknown" means the tag no longer exists.
  • "toomanyrequests" is the Docker Hub rate limit. Log in with docker login to raise it.
  • "no space left on device" means a full disk. Reclaim space with docker system prune

"exec format error"

This means the image was built for a different CPU architecture than your server.

  • This image supports: amd64, arm64
  • Check yours with uname -m: x86_64 is amd64, aarch64 is arm64. Raspberry Pi and other ARM boards are the usual culprits.

Container keeps restarting

The unless-stopped restart policy relaunches the app after every crash, so the real error can scroll past.

  • Check the logs right after a restart, the last few lines before it died are the useful ones.
  • Get the exit code with docker inspect commafeed --format '{{.State.ExitCode}}'
  • Still stuck? Redeploy once with the restart policy set to no so the failure stays visible.

Required settings are blank

QUARKUS_HTTP_AUTH_SESSION_ENCRYPTION_KEY has no default value, and commafeed may crash or misbehave if left empty.

  • Fill it in on the deploy screen before hitting deploy.

Raise an issue

Found something which isn't working as it should? Here's how to report it.

A single container

CommaFeed runs as one container, the simplest kind of app here. Just the one image to pull and nothing else wired up alongside it.

The app image

An image is the app packed up ready to go, everything CommaFeed needs bundled into one download. This template pulls athou/commafeed:latest-h2, which Docker fetches once (about 203 MB) and then starts your own copy from.

Where the image comes from

Docker pulls its images from registries, public libraries of ready-built apps. CommaFeed's comes from Docker Hub, published by athou.

Version tags

The bit after the colon in the image name is the version tag. This one pins latest-h2, so every redeploy gives you that exact build until you bump it yourself.

Which machines it runs on

Every image is built for particular CPU types. This one ships for amd64, arm64, so it runs on both regular x86 servers and ARM boards like a Raspberry Pi.

Ports

A port is the door the app answers on. A mapping like 8082:8082 means it's reachable on port 8082 of your server, where the left number is yours to change and the right one belongs to the app. It opens:

  • 8082:8082

Volumes

A volume is where CommaFeed keeps its files so they survive an update or a restart. Without one, anything it saves would sit inside the container and vanish the moment it's recreated. This template mounts:

  • /commafeed/data as a volume Docker manages for you

Environment variables

Environment variables are the settings you hand over when you deploy, things like a password or a timezone. CommaFeed takes 1 of them, and one needs a value before it'll start properly:

  • QUARKUS_HTTP_AUTH_SESSION_ENCRYPTION_KEY, needs a value. Keeps you logged in when it restarts. At least 16 characters, generate one with: openssl rand -hex 16. Leave it blank and every restart or update logs everyone out.

Restart policy

The restart policy here is unless-stopped, so Docker restarts CommaFeed after a crash or reboot, but leaves it off when you stop it on purpose. You can change this on the deploy screen. The choices are no (never restart), on-failure (only after a crash), unless-stopped (restart unless you stop it), and always (bring it back no matter what).

Networking

Nothing custom is set, so CommaFeed sits on Docker's default bridge network: its own private space that reaches the outside world only through the ports it publishes.

Container name

Once it's deployed, Portainer names the container commafeed. That's what you'll spot in the containers list and use in commands like docker logs commafeed.

Platform

The platform is linux, the kind of system the container is built to run on. Docker and Portainer handle this on a normal Linux server.

Open source license

CommaFeed is open source, released under the Apache-2.0 license. In plain terms the code is out in the open, so you're free to run it and change it to fit what you need.

Portainer app templates

Zooming out, this whole page comes from a Portainer app template: a short recipe telling Portainer how to set CommaFeed up. Add the template list to Portainer once, then deploying CommaFeed is a click rather than a wall of config.