๐ Awesome TTRSS โ
 
 
 
About โ
๐ Awesome TTRSS aims to provide a powerful Dockerized all-in-one solution for Tiny Tiny RSS, an open source RSS feed reader and aggregator written in PHP, with enhanced user experience via simplified deployment and a list of curated plugins.
Special Thanks โ
Deployment โ
A VPS is highly recommended to host your Awesome TTRSS instance, a VPS can be obtained from as little as $5/month at DigitalOcean.
Awesome TTRSS supports multiple architectures x86 โarm32v7 โarm64v8 โ, except the OpenCC API.
Deployment via Docker โ
docker run -it --name ttrss --restart=always \
-e SELF_URL_PATH=[ your public URL ]  \
-e DB_HOST=[ your DB address ]  \
-e DB_PORT=[ your DB port ]  \
-e DB_NAME=[ your DB name ]  \
-e DB_USER=[ your DB user ]  \
-e DB_PASS=[ your DB password ]  \
-p [ public port ]:80  \
-d wangqiru/ttrssDeployment via Docker Compose โ
docker-compose.yml include 4 docker images:
- TTRSS
 - PostgreSQL
 - Mercury Parser API
 - OpenCC API arm32v7 โarm64v8 โ
 - RSSHub
 
Steps โ
- Download docker-compose.yml to any directory.
 - Read 
docker-compose.ymland change the settings (please ensure you have changed the password for postgres). - Run 
docker compose up -dand wait for the deployment to finish. - Access ttrss via port 181, with default credentials 
adminandpassword, please change them asap. wangqiru/mercury-parser-apiandwangqiru/opencc-api-serverare optional service containers to support additional features, removing them will not affect TTRSS's basic functionalities.
Supported Environment Variables โ
SELF_URL_PATH: The url to your TTRSS instance. ๐ด Please note that this value should be consistent with the URL you see in your browser address bar, otherwise TTRSS will not start.DB_HOST: The address of your databaseDB_PORT: The port of your databaseDB_NAME: The name of your databaseDB_USER: The user of your DatabaseDB_PASS: The password of your databaseDB_SSLMODE: The SSL mode for database connection, default ispreferDB_USER_FILE: Docker Secrets support(alternative to DB_USER), the file containing the user of your databaseDB_PASS_FILE: Docker Secrets support(alternative to DB_PASS), the file containing the password of your databaseENABLE_PLUGINS: The plugins you'd like to enable as global plugins, note thatauth_internalis requiredALLOW_PORTS: Comma-separated port numbers, eg:1200,3000. Allow subscription of non-'80,443' port feed. ๐ด Use with caution.SESSION_COOKIE_LIFETIME: the expiry time in hours for your login session cookie in hours, default to24hoursHTTP_PROXY: In format ofip:port, the global proxy for your TTRSS instance. To set proxy on a per feed basis, use Options per FeedDISABLE_USER_IN_DAYS: Disable feed update for inactive users after X days without login, until the user performs a loginFEED_LOG_QUIET:truewill disable the printing of feed updating logs
For more environment variables, please refer to the official tt-rss documentation.
Configure HTTPS โ
TTRSS container itself doesn't handle HTTPS traffic. Examples of configuring a Caddy or an Nginx reverse proxy with free SSL certificate from Let's Encrypt are shown below:
# Caddyfile
ttrssdev.henry.wang {
    reverse_proxy 127.0.0.1:181
    encode zstd gzip
}# nginx.conf
upstream ttrssdev {
    server 127.0.0.1:181;
}
server {
    listen 80;
    server_name  ttrssdev.henry.wang;
    return 301 https://ttrssdev.henry.wang$request_uri;
}
server {
    listen 443 ssl;
    gzip on;
    server_name  ttrssdev.henry.wang;
    ssl_certificate /etc/letsencrypt/live/ttrssdev.henry.wang/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ttrssdev.henry.wang/privkey.pem;
    location / {
        proxy_redirect off;
        proxy_pass http://ttrssdev;
        proxy_set_header  Host                $http_host;
        proxy_set_header  X-Real-IP           $remote_addr;
        proxy_set_header  X-Forwarded-Ssl     on;
        proxy_set_header  X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto   $scheme;
        proxy_set_header  X-Frame-Options     SAMEORIGIN;
        client_max_body_size        100m;
        client_body_buffer_size     128k;
        proxy_buffer_size           4k;
        proxy_buffers               4 32k;
        proxy_busy_buffers_size     64k;
        proxy_temp_file_write_size  64k;
    }
}๐ด Please note that the value in you SELF_URL_PATH should be changed as well.
Update โ
Awesome TTRSS automatically keeps up with TTRSS by mirroring the official releases, this means update can be issued frequently.
Since TTRSS stopped releasing tags, wangqiru/ttrss:nightly will sync with TTRSS' main branch periodically.
WARNING
The latest tagged image is only released when there are changes in Awesome-TTRSS itself, it will not sync with TTRSS upstream periodically. Moving from nightly to latest is not recommended as it may cause data loss.
Manual Update โ
You can fetch the latest image manually:
docker pull wangqiru/ttrss:nightly
# docker pull wangqiru/mercury-parser-api:latest
# docker pull wangqiru/opencc-api-server:latest
docker compose up -d # If you didn't use docker compose, I'm sure you know what to do.Auto Update โ
The example Docker Compose includes Watchtower, which automatically pulls all containers included in Awesome TTRSS (and other containers running on your system) and refreshes your running services. By default, it's disabled, make sure it will not affect your other service containers before enabling this.
To exclude images, check the following for disabling auto update for containers:
service.mercury:
  image: wangqiru/mercury-parser-api:latest
  container_name: mercury
  expose:
    - 3000
  restart: always
  # โฌ๏ธ this prevents Watchtower from auto updating mercury-parser-api
  labels:
    - com.centurylinklabs.watchtower.enable=falseDatabase Upgrade or Migration โ
Postgres major version upgrades (15->16) will require some manual operations. Sometimes breaking changes will be introduced to further optimize Awesome TTRSS.
Steps โ
WARNING
Do not skip multiple major versions when upgrading Postgres, for example, upgrading from 13.x to 16.x directly is not supported and may cause data loss.
This section demonstrates the steps to upgrade Postgres major version (from 15.x to 16.x) or migrate from other images to postgres:alpine.
Stop all the service containers:
bashdocker compose stopCopy the Postgres data volume
~/postgres/data/(or the location specified in your Docker Compose file) to somewhere else as a backup, THIS IS IMPORTANT.Use the following command to dump all your data:
bashdocker exec postgres pg_dumpall -c -U YourUsername > export.sqlDelete the Postgres data volume
~/postgres/data/.Update your Docker Compose file (Note that the
DB_NAMEmust not be changed) withdatabase.postgressection in the the latest docker-compose.yml, and bring it up:bashdocker compose up -dUse the following command to restore all your data:
bashcat export.sql | docker exec -i postgres psql -U YourUsernameTest if everything works fine, and now you may remove the backup in step 2.
Plugins โ
Mercury Fulltext Extraction โ
Fetch fulltext of articles via a self-hosted Mercury Parser API. A separate Mercury Parser API is required, the example Docker Compose has already included such a server.
Steps โ
- Enable 
mercury-fulltextplugin in preference - Enter Mercury Parser API endpoint 
 
Use service.mercury:3000 for Mercury instance deployed via Awesome-TTRSS.
Extraction Button โ
FreshRSS / Google Reader API โ
A FreshRSS / Google Reader API Plugin for Tiny-Tiny RSS
Steps โ
- Navigate to the Preferences menu in Tiny Tiny RSS, and check the box under "General" titled "Enable API" 

 - In Preferences, open the Plugin menu and enable "freshapi" 

 - When configuring your mobile app, select either "FreshRSS" or "Google Reader API". You'll need to point your client to your TT-RSS installation, depending on your setup. If you're using a subdomain to host TT-RSS then use 
https://yoursubdomain.yourdomain.com/plugins.local/freshapi/api/greader.php. If you're running on the root domain, usehttps://yourdomain.com/plugins.local/freshapi/api/greader.phpas the server URL. - Use your standard TT-RSS username and password. If you've enabled 2 Factor Authentication (2FA) generate and use an App Password. As with all plugins which handle authentication, using HTTPS is strongly recommended.
 
Fever API โ
Provide Fever API simulation.
Steps โ
- Enable API in preference 
 - Enter a password for Fever in preference 
 - In supported RSS readers, use 
https://[your url]/plugins/feveras the target server address, with your account and the password set in Step 2. - The plugin communicates with TTRSS using an unsalted MD5 hash, using HTTPS is strongly recommended.
 
OpenCC Simp-Trad Chinese Conversion arm32v7 โarm64v8 โ โ
Conversion between Traditional and Simplified Chinese via OpenCC , a separate OpenCC API Server is required. The example Docker Compose has already included such a server.
Steps โ
- Enable 
openccplugin in preference - Enter OpenCC API endpoint 
 
Use service.opencc:3000 for OpenCC instance deployed via Awesome-TTRSS.
Conversion Button โ
FeedReader API โ
Provide FeedReader API support.
System plugin, enabled by adding api_feedreader to the environment variable ENABLE_PLUGINS.
Refer to FeedReader API for more details.
News+ API โ
Provide a faster two-way synchronization for Android App News+ and iOS App Fiery Feeds with TTRSS.
System plugin, enabled by adding api_newsplus to the environment variable ENABLE_PLUGINS.
Refer to News+ API for more details.
Feediron โ
Provide the ability to manipulate article DOMs.
Refer to Feediron for more details.
Options per Feed โ
Provide the ability to configure proxy, user-agent and SSL certificate verification on a per feed basis.
Refer to Options per Feed for more details.
Remove iframe sandbox โ
WARNING
If you are getting data via fever api, enable it by adding remove_iframe_sandbox to the environment variable ENABLE_PLUGINS.
This plugin cannot be enabled in conjunction with Fever API as global plugins, if you require both plugins:
- In 
ENABLE_PLUGINSreplacefeverwithremove_iframe_sandboxto enable this as a global plugin. - Enable 
Fever APIin the TTRSS preferences panel after login, as a local plugin. 
Remove the sandbox attribute on iframes, thus enabling playback of embedded video in feeds.
Refer to Remove iframe sandboxใ
Wallabag v2 โ
Save articles to Wallabag.
Refer to Wallabag v2ใ
Auth OIDC โ
This is a system plugin, that allow users to connect through an OpenID Connect provider, like Keycloak, to TTRSS.
Enable it by adding auth_oidc to the environment variable ENABLE_PLUGINS.
Then add the following environments variables with according values :
AUTH_OIDC_NAME: "IDP provider name displayed"
AUTH_OIDC_URL: "https://oidc.hostname.com"
AUTH_OIDC_CLIENT_ID: "test-rss"
AUTH_OIDC_CLIENT_SECRET: "your-secret-token"Refer to Auth OIDC for more details.
RSSHub โ
There is a minimal integration of RSSHub in the example Docker Compose. Once enabled, you can add RSS feeds from RSSHub via internal URL (docker service discovery), for example: http://service.rsshub:3000/bbc.
For more information on configuring RSSHub, please refer to RSSHub Docs.
Themes โ
Feedly โ
RSSHub โ
Recommendation โ
- RSSHub is an interesting place for discovering RSS feeds.
 - For iOS and macOS user, the integrated Fever plugin supplies Reeder 5 backend support.
 - For Android user, the integrated Fever plugin supplies News+ backend support.
 - For Linux user, the integrated FeedReader API supplies FeedReader backend support.
 
Support and Help โ
- Read this guide might help.
 - Open an issue via GitHub issue.
 - Direct donation to TTRSS.
 
Donation โ
Please consider donations to support TTRSS directly.
License โ
MIT