Skip to main content

FreshRSS

https://github.com/FreshRSS/FreshRSS/tree/edge/Docker

Deploy FreshRSS with Docker

FreshRSS is a self-hosted RSS feed aggregator.

FreshRSS logo

Install Docker

See https://docs.docker.com/get-docker/

Example for Linux Debian / Ubuntu:

# Install default Docker Compose and automatically the corresponding version of Docker
apt install docker-compose-v2

Quick run

Example running FreshRSS (or scroll down to the Docker Compose section instead):

docker run -d --restart unless-stopped --log-opt max-size=10m \
  -p 8080:80 \
  -e TZ=Europe/Paris \
  -e 'CRON_MIN=1,31' \
  -v freshrss_data:/var/www/FreshRSS/data \
  -v freshrss_extensions:/var/www/FreshRSS/extensions \
  --name freshrss \
  freshrss/freshrss

  • Exposing on port 8080
  • With a server timezone (default is UTC)
  • With an automatic cron job to refresh feeds
  • Saving FreshRSS data in a Docker volume freshrss_data and optional extensions in freshrss_extensions
  • Using the default image, which is the latest stable release

Complete installation

Browse to your server https://freshrss.example.net/ to complete the installation via the FreshRSS Web interface, or use the command line described below.

Command line

See the CLI documentation for all the commands, which can be applied like:

docker exec --user www-data freshrss cli/list-users.php

Example of installation via command line:

docker exec --user www-data freshrss cli/do-install.php --default_user freshrss

docker exec --user www-data freshrss cli/create-user.php --user freshrss --password freshrss

ℹ️ You have to replace --user www-data by --user apache when using our images based on Linux Alpine.

Our Docker image variants

The tags correspond to FreshRSS branches and versions:

  • :latest (default) is the latest stable release
  • :edge is the rolling release, same than our git edge branch
  • :x.y.z tags correspond to specific FreshRSS releases, allowing you to target a precise version for deployment
  • :x tags track the latest release within a major version series. For instance, :1 will update to include any 1.x releases, but will exclude versions beyond 2.x
  • *-alpine use Linux Alpine as base-image instead of Debian
  • Our Docker images are designed with multi-architecture support, accommodating a variety of Linux platforms including linux/arm/v7, linux/arm64, and linux/amd64.

Linux: Debian vs. Alpine

Our default image is based on Debian. We offer an alternative based on Alpine (with the *-alpine tag suffix). In our tests (2019), Alpine was slower, while Alpine is smaller on disk (and much faster to build), and with newer packages in general (Apache, PHP).

ℹ️ For some rare systems, one variant might work but not the other, for instance due to kernel incompatibilities.

Environment variables

  • TZ: (default is UTC) A server timezone
  • CRON_MIN: (default is disabled) Define minutes for the built-in cron job to automatically refresh feeds (see below for more advanced options)
  • DATA_PATH: (default is empty, defined by ./constants.local.php or ./constants.php) Defines the path for writeable data.
  • FRESHRSS_ENV: (default is production) Enables additional development information if set to development (increases the level of logging and ensures that errors are displayed) (see below for more development options)
  • COPY_LOG_TO_SYSLOG: (default is On) Copy all the logs to syslog
  • COPY_SYSLOG_TO_STDERR: (default is On) Copy syslog to Standard Error so that it is visible in docker logs
  • LISTEN: (default is 80) Modifies the internal Apache listening address and port, e.g. 0.0.0.0:8080 (for advanced users; useful for Docker host networking)
  • FRESHRSS_INSTALL: automatically pass arguments to command line cli/do-install.php (for advanced users; see example in Docker Compose section). Only executed at the very first run (so far), so if you make any change, you need to delete your freshrss service, freshrss_data volume, before running again.
  • FRESHRSS_USER: automatically pass arguments to command line cli/create-user.php (for advanced users; see example in Docker Compose section). Only executed at the very first run (so far), so if you make any change, you need to delete your freshrss service, freshrss_data volume, before running again.

How to update

# Rebuild an image (see build section below) or get a new online version:
docker pull freshrss/freshrss
# And then
docker stop freshrss
docker rename freshrss freshrss_old
# See the run section above for the full command
docker run ... --name freshrss freshrss/freshrss
# If everything is working, delete the old container
docker rm freshrss_old