feedless
Middleware to create RSS feeds, filter existing feeds and transform them (e.g. fulltext).
Directory Structure
- .env
- docker-compose.yml
docker-compose.yml
version: '3.4'
# envs https://medium.com/softonic-eng/docker-compose-from-development-to-production-88000124a57c
services:
ingress:
image: nginx
network_mode: host
volumes:
- ./docker/nginx/config:/etc/nginx/conf.d
- ./docker/nginx/ssl:/etc/nginx/ssl
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
postgis:
image: postgis/postgis:15-3.4-alpine
container_name: postgis
restart: unless-stopped
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
expose:
- 5433
ports:
- "5433:5432"
logging:
driver: json-file
options:
max-size: 10m
networks:
- postgis
feedless-agent:
image: damoeb/feedless:agent-latest
# deploy:
# replicas: 2
security_opt:
- seccomp=./chrome.json
restart: unless-stopped
environment:
- APP_EMAIL=${APP_ROOT_EMAIL}
- APP_SECRET_KEY=${APP_ROOT_SECRET_KEY}
- APP_HOST=feedless-core:8080
- APP_PRERENDER_TIMEOUT_MILLIS=${APP_PRERENDER_TIMEOUT_MILLIS}
- APP_HOST=feedless-core:8080
- APP_SECURE=false
logging:
driver: json-file
options:
max-size: 10m
ports:
- "3000:3000"
# healthcheck:
# test: curl -f https://localhost:3000 || exit 1
networks:
- puppeteer
- monitoring
feedless-app:
image: damoeb/feedless:app-latest
restart: unless-stopped
volumes:
- ./docker/app-config.json:/usr/share/nginx/html/config.json
ports:
- "4200:80"
feedless-core:
image: damoeb/feedless:core-latest
restart: unless-stopped
# healthcheck:
# test: curl -f https://localhost:8080 || exit 1
depends_on:
- postgis
ports:
- "8082:8080"
volumes:
- ./feedless.pem:/usr/feedless/feedless.pem
- ./debug/:/usr/feedless/debug/ # heap dump directory
env_file:
- .env
environment:
- APP_DATABASE_URL=jdbc:postgresql://postgis:5432/${POSTGRES_DB}
- APP_ACTIVE_PROFILES=saas
- APP_PEM_FILE=./feedless.pem
- APP_WHITELISTED_HOSTS=feedless-core,172.26.0.1
- AUTH_TOKEN_ANONYMOUS_VALIDFORDAYS=3
- app.cors.allowedOrigins=https://feedless.org
- APP_PLAUSIBLE_URL=http://plausible:8000
networks:
- postgis
- monitoring
- puppeteer
loki:
image: grafana/loki:2.5.0
volumes:
- ./docker/loki:/etc/loki
ports:
- "3100:3100"
command: -config.file=/etc/loki/loki.yml
networks:
- monitoring
prometheus:
image: prom/prometheus
environment:
- APP_ACTUATOR_PASSWORD=${APP_ACTUATOR_PASSWORD}
volumes:
- ./docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
networks:
- monitoring
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- monitoring
plausible_db:
# Plausible v2.1.1 was tested against PostgreSQL versions 15 and 16
# https://github.com/plausible/analytics/blob/v2.1.1/.github/workflows/elixir.yml#L21-L32
image: postgres:16-alpine
restart: always
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=postgres
networks:
- monitoring
plausible_events_db:
image: clickhouse/clickhouse-server:24.3.3.102-alpine
restart: always
volumes:
- event-data:/var/lib/clickhouse
- event-logs:/var/log/clickhouse-server
- ./plausible/clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro
- ./plausible/clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:ro
ulimits:
nofile:
soft: 262144
hard: 262144
networks:
- monitoring
plausible:
image: ghcr.io/plausible/community-edition:v2.1.1
restart: always
command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
depends_on:
- plausible_db
- plausible_events_db
ports:
- 8088:8000
env_file:
- docker/plausible/plausible-conf.env
networks:
- monitoring
volumes:
db-data:
driver: local
event-data:
driver: local
event-logs:
driver: local
secrets:
TOKEN_SECRET:
file: ./tokenSecret.txt
networks:
postgis:
driver: bridge
monitoring:
driver: bridgeResources
Website: https://feedless.org/
GitHub: https://github.com/damoeb/feedless
Docker Hub: https://hub.docker.com/r/damoeb/feedless
Configuration: https://github.com/damoeb/feedless/blob/master/docker-compose.prod.yml