Giter Club home page Giter Club logo

feedbin-docker's Introduction

Feedbin in Docker

Self-host Feedbin with Docker. Feedbin is a web based RSS reader. It's an open-source Ruby on Rails software.

Feedbin's main goal is not to be easily self-hostable, and it was quite hard getting all of the services to work. During the process of creating feedbin-docker, I made a few contributions to the upstream project to make it self-hostable ready. Other have taken other approaches by forking it, but all the projects I found on GitHub were abandonned and weren't working anymore.

I chose to run it in Docker because of all the services required to run Feedbin.

Here is a breakdown of all the containers:

  • web: the puma rails app
  • workers: some of the sidekiq workers for background processing
  • refresher: sidekiq worker for refreshing feeds
  • image: sidekiq worker to find thumbnails
  • extract: nodejs service to extract article content from full web pages
  • camo: a node reverse proxy to prevent mixed content
  • minio: object storage for images, favicons, imports
  • redis: cache, store sidekiq queues and stats
  • memcached: cache
  • postgresql: database
  • elasticsearch: full text search
  • caddy: https-enabled reverse proxy

As you can see it's a lot. Technically, you can give up on a few of them without breaking Feedbin:

  • image: you won't have thumbnails, which is not that important depending on your appearance settings.
  • camo: your browser will make the requests directly to the websites. Less privacy and risk or mixed content.
  • elasticsearch: you won't have full text search

You can also replace caddy with another reverse proxy, but caddy is really handy.

Setup

I recommend a server with more than 2 GB of RAM. Otherwise you will likely have OOM kills.

Clone the repo:

git clone https://github.com/angristan/feedbin-docker.git
  • Copy .env.example to .env and fill ALL the variables
  • Copy docker-compose-example.yml to docker-compose.yml. If you want to disable a service this is the place.
  • Copy caddy/example.Caddyfile to caddy/Caddyfile and update the configuration if you need.

Run the database migrations:

docker-compose run --rm feedbin-web rake db:setup

Launch everything:

docker-compose up -d

You can check if everything is going well with docker-compose logs -f or docker-compose ps.

Now go to feedbin.domain.tld and create a new account. You're set!

You can make yourself an admin to manage users and to view the Sidekiq web interface.

To do so, run:

docker-compose exec feedbin-web rake feedbin:make_admin[[email protected]]

Once you're done, you can prevent new users from registering by modifying Caddy config and uncommenting the respond directive for /signup and /users routes.

feedbin-docker's People

Contributors

andreassko avatar angristan avatar dependabot[bot] avatar flosoft avatar gotmax23 avatar jostyee avatar karlprieb avatar nycterent avatar y8 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

feedbin-docker's Issues

Help Wanted. Feedbin on Synology Diskstation

I want to run Feedbin on Synology Diskstation with Docker installed,
but the Synology DSM system is a Highly Customized linux.

Linux version 4.4.180+ (root@build15) (gcc version 7.5.0 (GCC) )

And many dependencies can not install to build the Docker Image.

Is there any way to push the whole image to DockerHub and install it from docker pull command.

Thank you.

NoDatabaseError: could not translate host name "feedbin-postgres" to address

Hi, I tried to follow the setup instructions. When running docker-compose run --rm feedbin-web rake db:setup --trace the following error occurs:

I, [2021-02-28T23:48:34.804083 #1]  INFO -- honeybadger: ** [Honeybadger] Initializing Honeybadger Error Tracker for Ruby. Ship it! version=4.7.2 framework=rails level=1 pid=1
** Invoke db:setup (first_time)
** Invoke db:schema:load_if_ruby (first_time)
** Invoke db:create (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Execute db:create
could not translate host name "feedbin-postgres" to address: Name or service not known
Couldn't create 'feedbin_production' database. Please check your configuration.
E, [2021-02-28T23:48:35.118691 #1] ERROR -- honeybadger: ** [Honeybadger] Unable to send error report: API key is missing. id=7bd6ec17-0599-46ad-ba95-4636898d30a0 level=3 pid=1
rake aborted!
ActiveRecord::NoDatabaseError: could not translate host name "feedbin-postgres" to address: Name or service not known
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/postgresql_adapter.rb:50:in `rescue in postgresql_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/postgresql_adapter.rb:33:in `postgresql_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in `new_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `checkout_new_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in `try_to_checkout_new_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:871:in `acquire_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:593:in `checkout'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:437:in `connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:1119:in `retrieve_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_handling.rb:221:in `retrieve_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_handling.rb:189:in `connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/postgresql_database_tasks.rb:12:in `connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/postgresql_database_tasks.rb:21:in `create'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:126:in `create'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:185:in `block in create_current'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:479:in `block (2 levels) in each_current_configuration'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:476:in `each'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:476:in `block in each_current_configuration'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:475:in `each'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:475:in `each_current_configuration'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:184:in `create_current'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/railties/databases.rake:39:in `block (2 levels) in <main>'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:281:in `block in execute'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:281:in `each'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:281:in `execute'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:199:in `invoke_with_call_chain'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:243:in `block in invoke_prerequisites'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:241:in `each'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:241:in `invoke_prerequisites'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:218:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:199:in `invoke_with_call_chain'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:243:in `block in invoke_prerequisites'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:241:in `each'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:241:in `invoke_prerequisites'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:218:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:199:in `invoke_with_call_chain'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:188:in `invoke'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:160:in `invoke_task'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:116:in `each'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:116:in `block in top_level'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:125:in `run_with_threads'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:110:in `top_level'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:83:in `block in run'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:186:in `standard_exception_handling'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:80:in `run'
/usr/local/bundle/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/usr/local/bundle/bin/rake:23:in `load'
/usr/local/bundle/bin/rake:23:in `<main>'

Caused by:
PG::ConnectionBad: could not translate host name "feedbin-postgres" to address: Name or service not known
/usr/local/bundle/gems/pg-1.2.3/lib/pg.rb:58:in `initialize'
/usr/local/bundle/gems/pg-1.2.3/lib/pg.rb:58:in `new'
/usr/local/bundle/gems/pg-1.2.3/lib/pg.rb:58:in `connect'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/postgresql_adapter.rb:46:in `postgresql_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in `new_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `checkout_new_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in `try_to_checkout_new_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:871:in `acquire_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:593:in `checkout'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:437:in `connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:1119:in `retrieve_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_handling.rb:221:in `retrieve_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_handling.rb:189:in `connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/postgresql_database_tasks.rb:12:in `connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/postgresql_database_tasks.rb:21:in `create'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:126:in `create'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:185:in `block in create_current'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:479:in `block (2 levels) in each_current_configuration'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:476:in `each'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:476:in `block in each_current_configuration'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:475:in `each'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:475:in `each_current_configuration'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:184:in `create_current'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/railties/databases.rake:39:in `block (2 levels) in <main>'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:281:in `block in execute'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:281:in `each'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:281:in `execute'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:199:in `invoke_with_call_chain'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:243:in `block in invoke_prerequisites'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:241:in `each'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:241:in `invoke_prerequisites'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:218:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:199:in `invoke_with_call_chain'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:243:in `block in invoke_prerequisites'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:241:in `each'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:241:in `invoke_prerequisites'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:218:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:199:in `invoke_with_call_chain'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/task.rb:188:in `invoke'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:160:in `invoke_task'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:116:in `each'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:116:in `block in top_level'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:125:in `run_with_threads'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:110:in `top_level'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:83:in `block in run'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:186:in `standard_exception_handling'
/usr/local/bundle/gems/rake-13.0.3/lib/rake/application.rb:80:in `run'
/usr/local/bundle/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/usr/local/bundle/bin/rake:23:in `load'
/usr/local/bundle/bin/rake:23:in `<main>'
Tasks: TOP => db:setup => db:schema:load_if_ruby => db:create

My .env looks like this:

# Minio
MINIO_ACCESS_KEY=password
MINIO_SECRET_KEY=password

# Caddy
CADDYPATH=/etc/ssl/caddy

# Camo
CAMO_HOST=https://camo.feedbin.domain.tld
CAMO_KEY=password

# Rails
RACK_ENV=production
RAILS_ENV=production
PORT=3000
SECRET_KEY_BASE=password
DEFAULT_URL_OPTIONS_HOST=feedbin.domain.tld
PUSH_URL=https://feedbin.domain.tld
FEEDBIN_URL=https://feedbin.domain.tld
FEEDBIN_HOST=feedbin.domain.tld
FORCE_SSL=false

# Databases
ELASTICSEARCH_URL=http://feedbin-elasticsearch:9200
MEMCACHED_HOSTS=feedbin-memcached:11211
REDIS_URL=redis://feedbin-redis:6379

POSTGRES=feedbin-postgres
POSTGRES_USERNAME=feedbin
POSTGRES_USER=feedbin
POSTGRES_PASSWORD=password
DATABASE_URL=postgres://feedbin:password@feedbin-postgres/feedbin_production

# S3
AWS_ACCESS_KEY_ID=password
AWS_SECRET_ACCESS_KEY=password
AWS_S3_BUCKET=feedbin
AWS_S3_BUCKET_FAVICONS=feedbin
AWS_S3_ENDPOINT=https://minio.feedbin.domain.tld
AWS_S3_PATH_STYLE="true"
ENTRY_IMAGE_HOST=minio.feedbin.domain.tld

# Extract service (needs to run behind HTTPS:443)
EXTRACT_HOST=extract.feedbin.domain.tld
EXTRACT_USER=username
EXTRACT_SECRET=secret

I also tried postgres and localhost instead of feedbin-postgres but that did not work either. Does anyone know how to resolve this issue?

installation error

Hi,
i did all the changes to env and docker-config and every is up and running.
when i go to feedbin_web url which is my lan ip it give an error

Action Controller: Exception caught
Blocked host: x.x.x.x
To allow requests to xx.x.x, add the following to your environment configuration:
config.hosts << "x.x.x.x"

Bumping Postgres version

When trying to set up a fresh install of Feedbin, it fails when trying to run the DB migrations with the following error.

florian@Pam:/volume1/docker/feedbin/feedbin-docker$ sudo docker-compose run --rm feedbin-web rake db:setup
I, [2021-01-07T21:20:43.955465 #1]  INFO -- honeybadger: ** [Honeybadger] Initializing Honeybadger Error Tracker for Ruby. Ship it! version=4.7.2 framework=rails level=1 pid=1
Created database 'feedbin_production'
 set_config 
------------
 
(1 row)

psql:/app/db/structure.sql:42: ERROR:  unrecognized configuration parameter "default_table_access_method"
E, [2021-01-07T21:20:52.358370 #1] ERROR -- honeybadger: ** [Honeybadger] Unable to send error report: API key is missing. id=03215d16-2272-4208-953f-ed22e67c2c2d level=3 pid=1
rake aborted!
failed to execute:
psql -v ON_ERROR_STOP=1 -q -X -f /app/db/structure.sql feedbin_production

Please check the output above for any errors and make sure that `psql` is installed in your PATH and has proper permissions.

/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/postgresql_database_tasks.rb:113:in `run_cmd'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/postgresql_database_tasks.rb:88:in `structure_load'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:316:in `structure_load'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:330:in `load_schema'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:425:in `block in load_schema_current'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:479:in `block (2 levels) in each_current_configuration'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:476:in `each'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:476:in `block in each_current_configuration'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:475:in `each'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:475:in `each_current_configuration'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:424:in `load_schema_current'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/railties/databases.rake:443:in `block (3 levels) in <main>'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/railties/databases.rake:447:in `block (3 levels) in <main>'
/usr/local/bundle/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
Tasks: TOP => db:structure:load
(See full trace by running task with --trace)
florian@Pam:/volume1/docker/feedbin/feedbin-docker$

Bumping the postgres image to version 13 fixes this.

Build failed - Webmock 3.16.0 no longer available

Hiya,

Just attempted a first time install but it's failing due to webmock 3.16.0 no longer being available. It's been yanked from rubygems for some reason.

Your bundle is locked to webmock (3.16.0) from rubygems repository
https://rubygems.org/ or installed locally, but that version can no longer be
found in that source. That means the author of webmock (3.16.0) has removed it.
You'll need to update your bundle to a version other than webmock (3.16.0) that
hasn't been removed in order to install.

The command '/bin/sh -c apk add --no-cache build-base git ruby-dev ruby-etc ruby-io-console ruby-json libxml2-dev vips-dev && git clone https://github.com/feedbin/image.git /app && gem install bundler && bundle install' returned a non-zero code: 7
ERROR: Service 'feedbin-image' failed to build : Build failed

Thanks

Can't start Caddy container

I am getting the following error:

Creating feedbin_feedbin-caddy_1 ... error

ERROR: for feedbin_feedbin-caddy_1  Cannot start service feedbin-caddy: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/root/composes/feedbin/caddy/Caddyfile\\\" to rootfs \\\"/var/lib/docker/overlay2/9d18ab42b2fba5e91b45fc58c1e1a68a77d82237c99f84203e60c1b9a6811f87/merged\\\" at \\\"/var/lib/docker/overlay2/9d18ab42b2fba5e91b45fc58c1e1a68a77d82237c99f84203e60c1b9a6811f87/merged/etc/Caddyfile\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

ERROR: for feedbin-caddy  Cannot start service feedbin-caddy: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/root/composes/feedbin/caddy/Caddyfile\\\" to rootfs \\\"/var/lib/docker/overlay2/9d18ab42b2fba5e91b45fc58c1e1a68a77d82237c99f84203e60c1b9a6811f87/merged\\\" at \\\"/var/lib/docker/overlay2/9d18ab42b2fba5e91b45fc58c1e1a68a77d82237c99f84203e60c1b9a6811f87/merged/etc/Caddyfile\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

How I should configure SMTP?

Hello, may I ask how I should configure SMTP? I follow the general configuration method, and the following error will be displayed when I send an email with forgotten password:

Postmark::ApiInputError: No Account or Server API tokens were supplied in the HTTP headers. Please add a header for either X-Postmark-Server-Token or X-Postmark-Account-Token.

Can you give me an example, such as SMTP whether to add a port.Or tell me what is the cause of the above error and how to solve it.

And...Can I send a password reset email with mailgun, and if so can you give a sample configuration file?

Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

Hello guys,

I have a problem with the Beef. When I run the ./beef

I have following error :

โ”Œโ”€โ”€(rootใ‰ฟkali)-[~/beef]
โ””โ”€# ./beef                                     
/var/lib/gems/3.1.0/gems/execjs-2.9.1/lib/execjs/runtimes.rb:68:in `autodetect': Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
        from /var/lib/gems/3.1.0/gems/execjs-2.9.1/lib/execjs.rb:5:in `<module:ExecJS>'
        from /var/lib/gems/3.1.0/gems/execjs-2.9.1/lib/execjs.rb:4:in `<top (required)>'
        from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
        from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:38:in `require'
        from /var/lib/gems/3.1.0/gems/uglifier-4.2.0/lib/uglifier.rb:5:in `<top (required)>'
        from /var/lib/gems/3.1.0/gems/bundler-2.5.3/lib/bundler/runtime.rb:60:in `require'
        from /var/lib/gems/3.1.0/gems/bundler-2.5.3/lib/bundler/runtime.rb:60:in `block (2 levels) in require'
        from /var/lib/gems/3.1.0/gems/bundler-2.5.3/lib/bundler/runtime.rb:55:in `each'
        from /var/lib/gems/3.1.0/gems/bundler-2.5.3/lib/bundler/runtime.rb:55:in `block in require'
        from /var/lib/gems/3.1.0/gems/bundler-2.5.3/lib/bundler/runtime.rb:44:in `each'
        from /var/lib/gems/3.1.0/gems/bundler-2.5.3/lib/bundler/runtime.rb:44:in `require'
        from /var/lib/gems/3.1.0/gems/bundler-2.5.3/lib/bundler.rb:187:in `require'
        from /root/beef/core/loader.rb:16:in `<top (required)>'
        from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:86:in `require'
        from <internal:/usr/lib/ruby/vendor_ruby/rubygems/core_ext/kernel_require.rb>:86:in `require'
        from ./beef:45:in `<main>'

Camo and Web Unhealthy With Traefik

Followed the instructions in the README, then added some labels in the compose for accessing web and other endpoints and tried start it all up. Camo and Web are unhealthy:

โžœ  feedbin git:(feedbin) โœ— sudo docker-compose ps
        Name                       Command                   State              Ports       
--------------------------------------------------------------------------------------------
feedbin-camo            npm start                        Up (unhealthy)   8081/tcp          
feedbin-elasticsearch   /docker-entrypoint.sh elas ...   Up (healthy)     9200/tcp, 9300/tcp
feedbin-extract         node app/server.js               Up                                 
feedbin-image           bundle exec foreman start        Up                                 
feedbin-memcached       docker-entrypoint.sh memcached   Up               11211/tcp         
feedbin-minio           /usr/bin/docker-entrypoint ...   Up (healthy)     9000/tcp          
feedbin-minio-create    mc                               Exit 1                             
feedbin-postgres        docker-entrypoint.sh postgres    Up (healthy)     5432/tcp          
feedbin-redis           docker-entrypoint.sh redis ...   Up (healthy)     6379/tcp          
feedbin-refresher       bundle exec foreman start        Up                                 
feedbin-web             bundle exec rails s --port ...   Up (unhealthy)   3000/tcp          
feedbin-workers         foreman start                    Up               3000/tcp          
โžœ  feedbin git:(feedbin) โœ— sudo docker-compose logs feedbin-camo   
Attaching to feedbin-camo
feedbin-camo             | npm info it worked if it ends with ok
feedbin-camo             | npm info using [email protected]
feedbin-camo             | npm info using [email protected]
feedbin-camo             | npm info lifecycle [email protected]~prestart: [email protected]
feedbin-camo             | npm info lifecycle [email protected]~start: [email protected]
feedbin-camo             | 
feedbin-camo             | > [email protected] start /opt/camo
feedbin-camo             | > node server.js
feedbin-camo             | 
feedbin-camo             | SSL-Proxy running on 8081 with node:v8.4.0 pid:16 version:2.3.0.
feedbin-camo             | npm info lifecycle [email protected]~poststart: [email protected]
feedbin-camo             | 
feedbin-camo             | โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
feedbin-camo             | โ”‚                 npm update check failed                  โ”‚
feedbin-camo             | โ”‚           Try running with sudo or get access            โ”‚
feedbin-camo             | โ”‚           to the local update config store via           โ”‚
feedbin-camo             | โ”‚ sudo chown -R $USER:$(id -gn $USER) /nonexistent/.config โ”‚
feedbin-camo             | โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
feedbin-camo             | npm info ok 
feedbin-camo             | npm info it worked if it ends with ok
feedbin-camo             | npm info using [email protected]
feedbin-camo             | npm info using [email protected]
feedbin-camo             | npm info lifecycle [email protected]~prestart: [email protected]
feedbin-camo             | npm info lifecycle [email protected]~start: [email protected]
feedbin-camo             | 
feedbin-camo             | > [email protected] start /opt/camo
feedbin-camo             | > node server.js
feedbin-camo             | 
feedbin-camo             | SSL-Proxy running on 8081 with node:v8.4.0 pid:16 version:2.3.0.
feedbin-camo             | npm info lifecycle [email protected]~poststart: [email protected]
feedbin-camo             | 
feedbin-camo             | โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
feedbin-camo             | โ”‚                 npm update check failed                  โ”‚
feedbin-camo             | โ”‚           Try running with sudo or get access            โ”‚
feedbin-camo             | โ”‚           to the local update config store via           โ”‚
feedbin-camo             | โ”‚ sudo chown -R $USER:$(id -gn $USER) /nonexistent/.config โ”‚
feedbin-camo             | โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
feedbin-camo             | npm info ok 
feedbin-camo             | npm info it worked if it ends with ok
feedbin-camo             | npm info using [email protected]
feedbin-camo             | npm info using [email protected]
feedbin-camo             | npm info lifecycle [email protected]~prestart: [email protected]
feedbin-camo             | npm info lifecycle [email protected]~start: [email protected]
feedbin-camo             | 
feedbin-camo             | > [email protected] start /opt/camo
feedbin-camo             | > node server.js
feedbin-camo             | 
feedbin-camo             | SSL-Proxy running on 8081 with node:v8.4.0 pid:17 version:2.3.0.
feedbin-camo             | npm info lifecycle [email protected]~poststart: [email protected]
feedbin-camo             | 
feedbin-camo             | โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
feedbin-camo             | โ”‚                 npm update check failed                  โ”‚
feedbin-camo             | โ”‚           Try running with sudo or get access            โ”‚
feedbin-camo             | โ”‚           to the local update config store via           โ”‚
feedbin-camo             | โ”‚ sudo chown -R $USER:$(id -gn $USER) /nonexistent/.config โ”‚
feedbin-camo             | โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
feedbin-camo             | npm info ok 
feedbin-camo             | npm info it worked if it ends with ok
feedbin-camo             | npm info using [email protected]
feedbin-camo             | npm info using [email protected]
feedbin-camo             | npm info lifecycle [email protected]~prestart: [email protected]
feedbin-camo             | npm info lifecycle [email protected]~start: [email protected]
feedbin-camo             | 
feedbin-camo             | > [email protected] start /opt/camo
feedbin-camo             | > node server.js
feedbin-camo             | 
feedbin-camo             | SSL-Proxy running on 8081 with node:v8.4.0 pid:17 version:2.3.0.
feedbin-camo             | npm info lifecycle [email protected]~poststart: [email protected]
feedbin-camo             | 
feedbin-camo             | โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
feedbin-camo             | โ”‚                 npm update check failed                  โ”‚
feedbin-camo             | โ”‚           Try running with sudo or get access            โ”‚
feedbin-camo             | โ”‚           to the local update config store via           โ”‚
feedbin-camo             | โ”‚ sudo chown -R $USER:$(id -gn $USER) /nonexistent/.config โ”‚
feedbin-camo             | โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
feedbin-camo             | npm info ok 
feedbin-camo             | npm info it worked if it ends with ok
feedbin-camo             | npm info using [email protected]
feedbin-camo             | npm info using [email protected]
feedbin-camo             | npm info lifecycle [email protected]~prestart: [email protected]
feedbin-camo             | npm info lifecycle [email protected]~start: [email protected]
feedbin-camo             | 
feedbin-camo             | > [email protected] start /opt/camo
feedbin-camo             | > node server.js
feedbin-camo             | 
feedbin-camo             | SSL-Proxy running on 8081 with node:v8.4.0 pid:16 version:2.3.0.
โžœ  feedbin git:(feedbin) โœ— sudo docker-compose logs feedbin-web  
Attaching to feedbin-web
feedbin-web              | => Booting Puma
feedbin-web              | => Rails 6.1.4 application starting in production 
feedbin-web              | => Run `bin/rails server --help` for more startup options
feedbin-web              | I, [2021-07-14T16:26:34.100744 #1]  INFO -- honeybadger: ** [Honeybadger] Initializing Honeybadger Error Tracker for Ruby. Ship it! version=4.8.0 framework=rails level=1 pid=1
feedbin-web              | Puma starting in single mode...
feedbin-web              | * Puma version: 5.3.2 (ruby 2.7.3-p183) ("Sweetnighter")
feedbin-web              | *  Min threads: 5
feedbin-web              | *  Max threads: 5
feedbin-web              | *  Environment: production
feedbin-web              | *          PID: 1
feedbin-web              | * Listening on http://0.0.0.0:3000
feedbin-web              | Use Ctrl-C to stop
feedbin-web              | - Gracefully stopping, waiting for requests to finish
feedbin-web              | Exiting
feedbin-web              | => Booting Puma
feedbin-web              | => Rails 6.1.4 application starting in production 
feedbin-web              | => Run `bin/rails server --help` for more startup options
feedbin-web              | I, [2021-07-14T16:30:19.312310 #1]  INFO -- honeybadger: ** [Honeybadger] Initializing Honeybadger Error Tracker for Ruby. Ship it! version=4.8.0 framework=rails level=1 pid=1
feedbin-web              | Puma starting in single mode...
feedbin-web              | * Puma version: 5.3.2 (ruby 2.7.3-p183) ("Sweetnighter")
feedbin-web              | *  Min threads: 5
feedbin-web              | *  Max threads: 5
feedbin-web              | *  Environment: production
feedbin-web              | *          PID: 1
feedbin-web              | * Listening on http://0.0.0.0:3000
feedbin-web              | Use Ctrl-C to stop
feedbin-web              | - Gracefully stopping, waiting for requests to finish
feedbin-web              | Exiting
feedbin-web              | => Booting Puma
feedbin-web              | => Rails 6.1.4 application starting in production 
feedbin-web              | => Run `bin/rails server --help` for more startup options
feedbin-web              | I, [2021-07-14T16:30:45.402806 #1]  INFO -- honeybadger: ** [Honeybadger] Initializing Honeybadger Error Tracker for Ruby. Ship it! version=4.8.0 framework=rails level=1 pid=1
feedbin-web              | Puma starting in single mode...
feedbin-web              | * Puma version: 5.3.2 (ruby 2.7.3-p183) ("Sweetnighter")
feedbin-web              | *  Min threads: 5
feedbin-web              | *  Max threads: 5
feedbin-web              | *  Environment: production
feedbin-web              | *          PID: 1
feedbin-web              | * Listening on http://0.0.0.0:3000
feedbin-web              | Use Ctrl-C to stop
feedbin-web              | - Gracefully stopping, waiting for requests to finish
feedbin-web              | Exiting
feedbin-web              | => Booting Puma
feedbin-web              | => Rails 6.1.4 application starting in production 
feedbin-web              | => Run `bin/rails server --help` for more startup options
feedbin-web              | I, [2021-07-14T16:36:42.476081 #1]  INFO -- honeybadger: ** [Honeybadger] Initializing Honeybadger Error Tracker for Ruby. Ship it! version=4.8.0 framework=rails level=1 pid=1
feedbin-web              | Puma starting in single mode...
feedbin-web              | * Puma version: 5.3.2 (ruby 2.7.3-p183) ("Sweetnighter")
feedbin-web              | *  Min threads: 5
feedbin-web              | *  Max threads: 5
feedbin-web              | *  Environment: production
feedbin-web              | *          PID: 1
feedbin-web              | * Listening on http://0.0.0.0:3000
feedbin-web              | Use Ctrl-C to stop
feedbin-web              | - Gracefully stopping, waiting for requests to finish
feedbin-web              | Exiting
feedbin-web              | => Booting Puma
feedbin-web              | => Rails 6.1.4 application starting in production 
feedbin-web              | => Run `bin/rails server --help` for more startup options
feedbin-web              | I, [2021-07-14T16:46:09.660104 #1]  INFO -- honeybadger: ** [Honeybadger] Initializing Honeybadger Error Tracker for Ruby. Ship it! version=4.8.0 framework=rails level=1 pid=1
feedbin-web              | Puma starting in single mode...
feedbin-web              | * Puma version: 5.3.2 (ruby 2.7.3-p183) ("Sweetnighter")
feedbin-web              | *  Min threads: 5
feedbin-web              | *  Max threads: 5
feedbin-web              | *  Environment: production
feedbin-web              | *          PID: 1
feedbin-web              | * Listening on http://0.0.0.0:3000
feedbin-web              | Use Ctrl-C to stop
โžœ  feedbin git:(feedbin) โœ— 

As I don't have an SMTP server or a Twitter account, I left those sections of the .env empty initially but then tried filling them with dummy values with no change I could tell. Here's the .env:

# Feedbin
RACK_ENV=production
RAILS_ENV=production
PORT=3000
SECRET_KEY_BASE=asdf
DEFAULT_URL_OPTIONS_HOST=feedbin.randombits.host
PUSH_URL=https://feedbin.randombits.host
FEEDBIN_URL=https://feedbin.randombits.host
FEEDBIN_HOST=feedbin.randombits.host
FORCE_SSL=false
FEEDBIN_API_HOST=api.feedbin.randombits.host

# Databases
ELASTICSEARCH_URL=http://feedbin-elasticsearch:9200
MEMCACHED_HOSTS=feedbin-memcached:11211
REDIS_URL=redis://feedbin-redis:6379

POSTGRES_USER=asdf
POSTGRES_PASSWORD=asdf

# Minio
MINIO_ACCESS_KEY=asdf
MINIO_SECRET_KEY=asdf
MINIO_BUCKET=feedbin
MINIO_HOST=minio.feedbin.randombits.host

# Extract service (needs to run behind HTTPS:443)
EXTRACT_HOST=extract.feedbin.randombits.host
EXTRACT_USER=asdf
EXTRACT_SECRET=asdf

# Camo
CAMO_HOST=camo.feedbin.randombits.host
CAMO_KEY=asdf

# SMTP
SMTP_ADDRESS=mail.example.com
SMTP_USERNAME=a
SMTP_PASSWORD=a
SMTP_DOMAIN=example.com
[email protected]

# Twitter
TWITTER_KEY=1234
TWITTER_SECRET=5678

and finally my docker-compose.yaml:

x-common-variables: &feedbin-environment
- PORT
- RACK_ENV
- RAILS_ENV
- SECRET_KEY_BASE
- DEFAULT_URL_OPTIONS_HOST
- PUSH_URL
- FEEDBIN_URL
- FEEDBIN_HOST=$FEEDBIN_HOST,api.feedbin.com
- FORCE_SSL
- ELASTICSEARCH_URL
- MEMCACHED_HOSTS
- REDIS_URL
- DATABASE_URL=postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@feedbin-postgres/feedbin_production
- EXTRACT_HOST
- EXTRACT_USER
- EXTRACT_SECRET
- CAMO_HOST=https://$CAMO_HOST
- CAMO_KEY
- SMTP_ADDRESS
- SMTP_USERNAME
- SMTP_PASSWORD
- SMTP_DOMAIN
- FROM_ADDRESS
- AWS_ACCESS_KEY_ID=$MINIO_ACCESS_KEY
- AWS_SECRET_ACCESS_KEY=$MINIO_SECRET_KEY
- AWS_S3_BUCKET=$MINIO_BUCKET
- AWS_S3_BUCKET_FAVICONS=$MINIO_BUCKET
- AWS_S3_ENDPOINT=https://$MINIO_HOST
- AWS_S3_PATH_STYLE
- ENTRY_IMAGE_HOST=$MINIO_HOST
- TWITTER_KEY
- TWITTER_SECRET

version: '3.4'

networks:
  live_network:
    external: true
  internal_network:
    external: false

services:
  feedbin-minio:
    image: minio/minio:latest
    container_name: feedbin-minio
    networks:
      - "internal_network"
      - "live_network"
    environment:
      - MINIO_ACCESS_KEY
      - MINIO_SECRET_KEY
    volumes:
      - ./data/feedbin_minio:/data
    command: server /data
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.feedbin-minio-websecure.rule=Host(`minio.feedbin.randombits.host`)"
      - "traefik.http.routers.feedbin-minio-websecure.entrypoints=websecure"
      - "traefik.http.routers.feedbin-minio-websecure.tls=true"
      - "traefik.http.routers.feedbin-minio-websecure.tls.certresolver=le"
      - "traefik.http.routers.feedbin-minio-web.rule=Host(`minio.feedbin.randombits.host`)"
      - "traefik.http.routers.feedbin-minio-web.entrypoints=web"
      - "traefik.http.routers.feedbin-minio-web.middlewares=feedbin-minio-http-redirect"

      - "traefik.http.middlewares.feedbin-minio-http-redirect.redirectscheme.scheme=https"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  feedbin-minio-create:
    image: minio/mc:latest
    container_name: feedbin-minio-create
    networks:
      - "internal_network"
      - "live_network"
    depends_on:
      - feedbin-minio
    entrypoint: >
      /bin/sh -c "
      /usr/bin/mc config host add minio http://feedbin-minio:9000 $MINIO_ACCESS_KEY $MINIO_SECRET_KEY;
      /usr/bin/mc mb minio/$MINIO_BUCKET;
      /usr/bin/mc policy set download minio/$MINIO_BUCKET;
      exit 0;
      "

  feedbin-web:
    build:
      context: ./feedbin-web
      args:
        FEEDBIN_URL: $FEEDBIN_URL
    container_name: feedbin-web
    networks:
      - "internal_network"
      - "live_network"
    environment: *feedbin-environment
    depends_on:
      - feedbin-minio
      - feedbin-elasticsearch
      - feedbin-memcached
      - feedbin-redis
      - feedbin-postgres
    command: bundle exec rails s --port $PORT --binding 0.0.0.0
    expose:
      - "$PORT"
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.feedbin-web-websecure.rule=Host(`feedbin.randombits.host`)"
      - "traefik.http.routers.feedbin-web-websecure.entrypoints=websecure"
      - "traefik.http.routers.feedbin-web-websecure.tls=true"
      - "traefik.http.routers.feedbin-web-websecure.tls.certresolver=le"
      - "traefik.http.routers.feedbin-web-web.rule=Host(`feedbin.randombits.host`)"
      - "traefik.http.routers.feedbin-web-web.entrypoints=web"
      - "traefik.http.routers.feedbin-web-web.middlewares=feedbin-web-http-redirect"
      - "traefik.http.middlewares.feedbin-web-http-redirect.redirectscheme.scheme=https"

      - "traefik.http.routers.feedbin-api-websecure.rule=Host(`api.feedbin.randombits.host`)"
      - "traefik.http.routers.feedbin-api-websecure.entrypoints=websecure"
      - "traefik.http.routers.feedbin-api-websecure.tls=true"
      - "traefik.http.routers.feedbin-api-websecure.tls.certresolver=le"
      - "traefik.http.routers.feedbin-api-web.rule=Host(`api.feedbin.randombits.host`)"
      - "traefik.http.routers.feedbin-api-web.entrypoints=web"
      - "traefik.http.routers.feedbin-api-web.middlewares=feedbin-api-http-redirect"
      - "traefik.http.middlewares.feedbin-api-http-redirect.redirectscheme.scheme=https"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:$PORT"]
      interval: 30s
      timeout: 20s
      retries: 3

  feedbin-workers:
    build: ./feedbin-web
    container_name: feedbin-workers
    networks:
      - "internal_network"
    environment: *feedbin-environment
    command: foreman start
    restart: unless-stopped

  feedbin-elasticsearch:
    image: elasticsearch:2.4
    container_name: feedbin-elasticsearch
    networks:
      - "internal_network"
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
    volumes:
      - ./data/feedbin_elasticsearch:/usr/share/elasticsearch/data
    ulimits:
      memlock:
        soft: -1
        hard: -1
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9200"]
      interval: 30s
      timeout: 20s
      retries: 3

  feedbin-refresher:
    build: ./feedbin-refresher
    environment:
      - REDIS_URL
      - TWITTER_KEY
      - TWITTER_SECRET
    container_name: feedbin-refresher
    networks:
      - "internal_network"
    restart: unless-stopped

  feedbin-image:
    build: ./feedbin-image
    environment:
      - AWS_ACCESS_KEY_ID=$MINIO_ACCESS_KEY
      - AWS_SECRET_ACCESS_KEY=$MINIO_SECRET_KEY
      - AWS_S3_BUCKET=$MINIO_BUCKET
      - AWS_S3_ENDPOINT=https://$MINIO_HOST
      - AWS_S3_PATH_STYLE
      - REDIS_URL
    container_name: feedbin-image
    networks:
      - "internal_network"
    restart: unless-stopped

  feedbin-extract:
    build:
      context: ./feedbin-extract
      args:
        EXTRACT_USER: $EXTRACT_USER
        EXTRACT_SECRET: $EXTRACT_SECRET
    container_name: feedbin-extract
    networks:
      - "internal_network"
      - "live_network"
    restart: unless-stopped
    expose:
      - "$PORT"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.feedbin-extract-websecure.rule=Host(`extract.feedbin.randombits.host`)"
      - "traefik.http.routers.feedbin-extract-websecure.entrypoints=websecure"
      - "traefik.http.routers.feedbin-extract-websecure.tls=true"
      - "traefik.http.routers.feedbin-extract-websecure.tls.certresolver=le"
      - "traefik.http.routers.feedbin-extract-web.rule=Host(`extract.feedbin.randombits.host`)"
      - "traefik.http.routers.feedbin-extract-web.entrypoints=web"
      - "traefik.http.routers.feedbin-extract-web.middlewares=feedbin-extract-http-redirect"
      - "traefik.http.middlewares.feedbin-extract-http-redirect.redirectscheme.scheme=https"

  feedbin-camo:
    image: increments/camo
    container_name: feedbin-camo
    networks:
      - "internal_network"
      - "live_network"
    environment:
      - PORT=8081
      - CAMO_KEY
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.feedbin-camo-websecure.rule=Host(`camo.feedbin.randombits.host`)"
      - "traefik.http.routers.feedbin-camo-websecure.entrypoints=websecure"
      - "traefik.http.routers.feedbin-camo-websecure.tls=true"
      - "traefik.http.routers.feedbin-camo-websecure.tls.certresolver=le"
      - "traefik.http.routers.feedbin-camo-web.rule=Host(`camo.feedbin.randombits.host`)"
      - "traefik.http.routers.feedbin-camo-web.entrypoints=web"
      - "traefik.http.routers.feedbin-camo-web.middlewares=feedbin-camo-http-redirect"
      - "traefik.http.middlewares.feedbin-camo-http-redirect.redirectscheme.scheme=https"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  feedbin-minio-create:
    image: minio/mc:latest
    container_name: feedbin-minio-create
    networks:
      - "internal_network"
      - "live_network"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8081"]
      interval: 30s
      timeout: 20s
      retries: 3

  feedbin-memcached:
    image: memcached:1.6-alpine
    container_name: feedbin-memcached
    networks:
      - "internal_network"
    restart: unless-stopped

  feedbin-redis:
    image: redis:6-alpine
    container_name: feedbin-redis
    networks:
      - "internal_network"
    volumes:
      - ./data/feedbin_redis:/data
    command: "redis-server --appendonly yes"
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 30s
      timeout: 20s
      retries: 3

  feedbin-postgres:
    image: postgres:13-alpine
    container_name: feedbin-postgres
    networks:
      - "internal_network"
    environment:
      - POSTGRES_USER
      - POSTGRES_PASSWORD
    volumes:
      - ./data/feedbin_db:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $POSTGRES_USER"]
      interval: 30s
      timeout: 20s
      retries: 3

caddy/letsencrypt #Help

Hi,

Hope you're well

Thanks again for software

After inconsistent success running feedbin from a local host (i.e. 127.0.0.1), today I decided to attempt the HTTPS route again and still keep hitting letsencrypt rate [l]imits, and I don't really know why?:

Caddyfile:

feedbin.ldexterldesign.uk {
  gzip
  proxy / http://feedbin-web:3000 {
    transparent
  }
}

camo.feedbin.ldexterldesign.uk {
  gzip
  proxy / http://camo:8081 {
    transparent
  }
}

minio.feedbin.ldexterldesign.uk {
  gzip
  proxy / http://minio:9000 {
    transparent
  }
}

My domain (i.e. https://ldexterldesign.uk) runs letsencrypt so I don't understand why this won't just work:

Screenshot 2020-04-12 at 14 43 15

I suspect I'm hitting rate limits every time I attempt a new install because it's not obvious I have to setup volumes:

docker-compose.yaml:

Before:

[...]
  feedbin-caddy:
    image: abiosoft/caddy:1.0.3
    volumes:
      - feedbin_caddy:/etc/ssl/caddy
      - ./caddy/Caddyfile:/etc/Caddyfile:ro
[...]

After:

[...]
  feedbin-caddy:
    image: abiosoft/caddy:1.0.3
    volumes:
      - ~/Downloads/-data:/etc/ssl/caddy
      - ~/Downloads/-data:/etc/Caddyfile:ro
[...]

Currently waiting (an hour?) to see if this makes a difference...

[a]biosoft states in its docker hub page:

[...]
Saving Certificates

Save certificates on host machine to prevent regeneration every time container starts. Let's Encrypt has rate limit.
[...]

I'm a letsencrypt newb but if this sounds valid then this should be clearer in the README

Also, what does "update the domains" mean in the [R]EADME:

[...]
Copy caddy/example.Caddyfile to caddy/Caddyfile and update the domains.
[...]

Are there any added steps to get an SSL certificate setup (e.g. install and/or run certbot, create a certificate signing request (CSR) and transfer to feedbin)?:

  • if yes then where in the [t]ree do I dump the CSR
  • if no then any help on where I'm going wrong

If you have any issues (e.g. questions/queries) then happy to help

Hope to hear back

Sincerely ๐Ÿ˜ซ

a: https://hub.docker.com/r/abiosoft/caddy
l: https://letsencrypt.org/docs/rate-limits/
r: https://github.com/angristan/feedbin-docker#setup
t:

/Users/ldexterldesign/Downloads/-data/-config/feedbin/caddy
โ”œโ”€โ”€ acme
โ”‚ย ย  โ””โ”€โ”€ acme-v02.api.letsencrypt.org
โ”‚ย ย      โ”œโ”€โ”€ challenge_tokens
โ”‚ย ย      โ””โ”€โ”€ users
โ”‚ย ย          โ””โ”€โ”€ default
โ”‚ย ย              โ”œโ”€โ”€ default.json
โ”‚ย ย              โ””โ”€โ”€ default.key
โ”œโ”€โ”€ locks
โ””โ”€โ”€ uuid

6 directories, 3 files

importing OPML fails

It appears that the full endpoint including the bucket name is feedbin.minio.feedbin.domain.tld. Import worker tries to access that when importing an OPML then fails. I did try to forward the full name in caddyfile, but then I get this in sidekiq: Excon::Error::Socket: SSL_connect returned=1 errno=0 state=error: tlsv1 alert internal error (OpenSSL::SSL::SSLError)

"Extract full content" feature does not work

Hi,

Hope you're safe

Disclaimer: I don't know what this means in the readme so I invite you to enhance it, specifically the "update the domains" part:

Copy caddy/example.Caddyfile to caddy/Caddyfile and update the domains

I left the caddy file default but had problems with letsencrypt

This could be due to [r]ate limiting because I must have been hammering something during my copious setup attempts. If you'd be kind enough to clarify the "update the domains" part of the readme then happy to retry in a week or so (I read rate limiting can last days/weeks ๐Ÿ˜•)..?

Here's what worked for me:

127.0.0.1:3000 {
  gzip
  proxy / http://feedbin-web:3000 {
    transparent
  }
}

127.0.0.1:8081 {
  gzip
  proxy / http://camo:8081 {
    transparent
  }
}

127.0.0.1:9000 {
  gzip
  proxy / http://minio:9000 {
    transparent
  }
}
# Rails
[...]
FEEDBIN_HOST=127.0.0.1
FORCE_SSL=false

Correct me if I'm wrong but localhost, instead of 127.0.0.1, won't work because [t]his

Aside, the "(extract/sticky) full content" feature doesn't seem to load full content (ever) for me - I presume this is because I'm not using SSL/HTTPS?:

  • If yes then how can I fix this
  • If no then any idea what the reason is

Screenshot 2020-03-28 at 05 50 30

Screenshot 2020-03-28 at 05 46 29

If you have any issues (e.g. questions/queries) then happy to help

Hope to hear back

Sincerely

r: https://letsencrypt.org/docs/rate-limits
t: https://letsencrypt.org/docs/certificates-for-localhost

Replace camo image

https://github.com/inventid/camo

ldexterldesign@Lewiss-MacBook-Pro feedbin % docker-compose up -d

Pulling camo (inventid/camo:)...
ERROR: The image for the service you're trying to recreate has been removed. If you continue, volume data could be lost. Consider backing up your data before continuing.

Continue with the new image? [yN]y
Pulling camo (inventid/camo:)...
ERROR: pull access denied for inventid/camo, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

Sincerely

Just for my understanding !

Do i really need to publicly expose minio, camo and extract ?
Or in other words, could feedbin url could be the only internet facing service ?
Thanks :)

import opml error

ERROR LOG:

NoMethodError: undefined method `body' for nil:NilClass

Import failure

feedbin-web image build failure

Hi, the build stage fails on RUN apk add... with:

#0 74.20 capybara-3.39.0 requires ruby version >= 3.0.0, which is incompatible with the
#0 74.20 current version, 2.7.6

ProstgreSQL authentication error

How do I fix this error?

I've explored numerous things (e.g. docker paths, default/root postgres user) but first and foremost looks like a redis/postgres issue..?

cli:

ldexterldesign@Lewiss-MacBook-Pro feedbin-docker % docker-compose run --rm feedbin-web rake db:setup --trace
Starting feedbin-docker_feedbin-redis_1 ...
Starting feedbin-docker_feedbin-postgres_1      ... done
Starting feedbin-docker_feedbin-minio_1         ... done
Starting feedbin-docker_feedbin-memcached_1     ... done
Starting feedbin-docker_feedbin-elasticsearch_1 ... done
I, [2020-03-24T23:53:01.251603 #1]  INFO -- honeybadger: ** [Honeybadger] Initializing Honeybadger Error Tracker for Ruby. Ship it! version=4.5.6 framework=rails level=1 pid=1
** Invoke db:setup (first_time)
** Invoke db:schema:load_if_ruby (first_time)
** Invoke db:create (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Execute db:create
FATAL:  password authentication failed for user "feedbin"
Couldn't create 'feedbin_production' database. Please check your configuration.
E, [2020-03-24T23:53:01.583493 #1] ERROR -- honeybadger: ** [Honeybadger] Unable to send error report: API key is missing. id=dbb2e00f-e075-4543-95e9-67acab2454c5 level=3 pid=1
rake aborted!
PG::ConnectionBad: FATAL:  password authentication failed for user "feedbin"
/usr/local/bundle/gems/pg-1.2.2/lib/pg.rb:58:in `initialize'
/usr/local/bundle/gems/pg-1.2.2/lib/pg.rb:58:in `new'
/usr/local/bundle/gems/pg-1.2.2/lib/pg.rb:58:in `connect'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb:46:in `postgresql_connection'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in `new_connection'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `checkout_new_connection'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in `try_to_checkout_new_connection'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb:871:in `acquire_connection'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb:593:in `checkout'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb:437:in `connection'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb:1119:in `retrieve_connection'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/connection_handling.rb:236:in `retrieve_connection'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/connection_handling.rb:204:in `connection'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/tasks/postgresql_database_tasks.rb:12:in `connection'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/tasks/postgresql_database_tasks.rb:21:in `create'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/tasks/database_tasks.rb:126:in `create'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/tasks/database_tasks.rb:185:in `block in create_current'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/tasks/database_tasks.rb:479:in `block (2 levels) in each_current_configuration'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/tasks/database_tasks.rb:476:in `each'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/tasks/database_tasks.rb:476:in `block in each_current_configuration'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/tasks/database_tasks.rb:475:in `each'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/tasks/database_tasks.rb:475:in `each_current_configuration'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/tasks/database_tasks.rb:184:in `create_current'
/usr/local/bundle/bundler/gems/rails-04e08ee17fb8/activerecord/lib/active_record/railties/databases.rake:39:in `block (2 levels) in <main>'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:281:in `block in execute'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:281:in `each'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:281:in `execute'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:243:in `block in invoke_prerequisites'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:241:in `each'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:241:in `invoke_prerequisites'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:218:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:243:in `block in invoke_prerequisites'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:241:in `each'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:241:in `invoke_prerequisites'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:218:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/task.rb:188:in `invoke'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/application.rb:160:in `invoke_task'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/application.rb:116:in `each'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/application.rb:116:in `block in top_level'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/application.rb:125:in `run_with_threads'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/application.rb:110:in `top_level'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/application.rb:83:in `block in run'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling'
/usr/local/bundle/gems/rake-13.0.1/lib/rake/application.rb:80:in `run'
/usr/local/bundle/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
/usr/local/bundle/bin/rake:23:in `load'
/usr/local/bundle/bin/rake:23:in `<main>'
Tasks: TOP => db:setup => db:schema:load_if_ruby => db:create

docker:

Attaching to feedbin-docker_feedbin-postgres_1, feedbin-docker_feedbin-elasticsearch_1, feedbin-docker_feedbin-minio_1, feedbin-docker_feedbin-redis_1, feedbin-docker_feedbin-memcached_1
feedbin-elasticsearch_1 | [2020-03-24 23:42:53,563][WARN ][bootstrap ] unable to install syscall filter: seccomp unavailable: your kernel is buggy and you should upgrade
feedbin-elasticsearch_1 | [2020-03-24 23:42:53,706][INFO ][node ] [Luke Cage] version[2.4.6], pid[1], build[5376dca/2017-07-18T12:17:44Z]
feedbin-elasticsearch_1 | [2020-03-24 23:42:53,706][INFO ][node ] [Luke Cage] initializing ...
feedbin-elasticsearch_1 | [2020-03-24 23:42:54,486][INFO ][plugins ] [Luke Cage] modules [reindex, lang-expression, lang-groovy], plugins [], sites []
feedbin-elasticsearch_1 | [2020-03-24 23:42:54,597][INFO ][env ] [Luke Cage] using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda1)]], net usable_space [47.2gb], net total_space [58.4gb], spins? [possibly], types [ext4]
feedbin-elasticsearch_1 | [2020-03-24 23:42:54,597][INFO ][env ] [Luke Cage] heap size [494.9mb], compressed ordinary object pointers [true]
feedbin-elasticsearch_1 | [2020-03-24 23:42:57,137][INFO ][node ] [Luke Cage] initialized
feedbin-elasticsearch_1 | [2020-03-24 23:42:57,137][INFO ][node ] [Luke Cage] starting ...
feedbin-elasticsearch_1 | [2020-03-24 23:42:57,321][INFO ][transport ] [Luke Cage] publish_address {172.18.0.6:9300}, bound_addresses {0.0.0.0:9300}
feedbin-elasticsearch_1 | [2020-03-24 23:42:57,328][INFO ][discovery ] [Luke Cage] elasticsearch/W-KZGVi7TFaQPk6nuZRj9w
feedbin-elasticsearch_1 | [2020-03-24 23:43:00,435][INFO ][cluster.service ] [Luke Cage] new_master {Luke Cage}{W-KZGVi7TFaQPk6nuZRj9w}{172.18.0.6}{172.18.0.6:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
feedbin-elasticsearch_1 | [2020-03-24 23:43:00,474][INFO ][http ] [Luke Cage] publish_address {172.18.0.6:9200}, bound_addresses {0.0.0.0:9200}
feedbin-elasticsearch_1 | [2020-03-24 23:43:00,474][INFO ][node ] [Luke Cage] started
feedbin-elasticsearch_1 | [2020-03-24 23:43:00,518][INFO ][gateway ] [Luke Cage] recovered [0] indices into cluster_state
feedbin-postgres_1 |
feedbin-postgres_1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
feedbin-postgres_1 | 2020-03-24 23:42:52.746 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
feedbin-postgres_1 | 2020-03-24 23:42:52.746 UTC [1] LOG: listening on IPv6 address "::", port 5432
feedbin-postgres_1 | 2020-03-24 23:42:52.749 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
feedbin-postgres_1 | 2020-03-24 23:42:52.767 UTC [27] LOG: database system was shut down at 2020-03-23 00:02:59 UTC
feedbin-minio_1 | ERROR Unable to initialize server switching into safe-mode: Unable to initialize config system: Invalid credentials
feedbin-postgres_1 | 2020-03-24 23:42:52.785 UTC [1] LOG: database system is ready to accept connections
feedbin-postgres_1 | 2020-03-24 23:43:00.188 UTC [34] FATAL: password authentication failed for user "feedbin"
feedbin-postgres_1 | 2020-03-24 23:43:00.188 UTC [34] DETAIL: Password does not match for user "feedbin".
feedbin-postgres_1 | Connection matched pg_hba.conf line 95: "host all all all md5"
feedbin-postgres_1 | 2020-03-24 23:53:01.581 UTC [45] FATAL: password authentication failed for user "feedbin"
feedbin-postgres_1 | 2020-03-24 23:53:01.581 UTC [45] DETAIL: Password does not match for user "feedbin".
feedbin-redis_1 | 1:C 24 Mar 2020 23:42:52.408 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
feedbin-redis_1 | 1:C 24 Mar 2020 23:42:52.408 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=1, just started
feedbin-redis_1 | 1:C 24 Mar 2020 23:42:52.408 # Configuration loaded
feedbin-redis_1 | 1:M 24 Mar 2020 23:42:52.411 * Running mode=standalone, port=6379.
feedbin-redis_1 | 1:M 24 Mar 2020 23:42:52.412 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
feedbin-redis_1 | 1:M 24 Mar 2020 23:42:52.412 # Server initialized
feedbin-redis_1 | 1:M 24 Mar 2020 23:42:52.412 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
feedbin-redis_1 | 1:M 24 Mar 2020 23:42:52.650 * DB loaded from append only file: 0.238 seconds
feedbin-redis_1 | 1:M 24 Mar 2020 23:42:52.650 * Ready to accept connections

cli:

ldexterldesign@Lewiss-MacBook-Pro feedbin-docker % docker-compose up -d

feedbin-docker_feedbin-minio_1 is up-to-date
feedbin-docker_feedbin-elasticsearch_1 is up-to-date
feedbin-docker_feedbin-redis_1 is up-to-date
feedbin-docker_feedbin-postgres_1 is up-to-date
feedbin-docker_feedbin-memcached_1 is up-to-date
Creating feedbin-docker_camo_1              ... done
Creating feedbin-docker_feedbin-image_1     ... done
Creating feedbin-docker_feedbin-refresher_1 ... done
Creating feedbin-docker_feedbin-workers_1   ... done
Creating feedbin-docker_feedbin-web_1       ... done
Creating feedbin-docker_feedbin-caddy_1     ... done

docker:

[...]
feedbin-workers_1 | 00:08:43 worker_slow.1 | 2020-03-25T00:08:43.965Z pid=10 tid=gr480pj46 WARN: PG::ConnectionBad: FATAL: password authentication failed for user "feedbin"
feedbin-workers_1 | 00:08:43 worker_slow.1 | 2020-03-25T00:08:43.965Z pid=10 tid=gr480pj46 WARN: /usr/local/bundle/gems/pg-1.2.2/lib/pg.rb:58:in `initialize'
ldexterldesign@Lewiss-MacBook-Pro feedbin-docker % docker-compose ps
                 Name                               Command                   State                      Ports
-----------------------------------------------------------------------------------------------------------------------------
feedbin-docker_camo_1                    npm start                        Up (healthy)     127.0.0.1:8081->8081/tcp
feedbin-docker_feedbin-caddy_1           /bin/parent caddy --conf / ...   Restarting
feedbin-docker_feedbin-elasticsearch_1   /docker-entrypoint.sh elas ...   Up (healthy)     127.0.0.1:9200->9200/tcp, 9300/tcp
feedbin-docker_feedbin-image_1           bundle exec foreman start        Up
feedbin-docker_feedbin-memcached_1       docker-entrypoint.sh memcached   Up               11211/tcp
feedbin-docker_feedbin-minio_1           /usr/bin/docker-entrypoint ...   Restarting
feedbin-docker_feedbin-postgres_1        docker-entrypoint.sh postgres    Up               5432/tcp
feedbin-docker_feedbin-redis_1           docker-entrypoint.sh redis ...   Up               6379/tcp
feedbin-docker_feedbin-refresher_1       bundle exec foreman start        Up
feedbin-docker_feedbin-web_1             bundle exec rails s --port ...   Up (unhealthy)   127.0.0.1:3000->3000/tcp
feedbin-docker_feedbin-workers_1         foreman start                    Up               3000/tcp

Hope to hear back

Sincerely

.env:

# Minio
MINIO_ACCESS_KEY=password
MINIO_SECRET_KEY=password

# Caddy
CADDYPATH=/etc/ssl/caddy

# Camo
CAMO_HOST=https://camo.feedbin.domain.tld
CAMO_KEY=password

# Rails
RACK_ENV=production
RAILS_ENV=production
PORT=3000
SECRET_KEY_BASE=password
DEFAULT_URL_OPTIONS_HOST=feedbin.domain.tld
PUSH_URL=https://feedbin.domain.tld
FEEDBIN_URL=https://feedbin.domain.tld
FEEDBIN_HOST=feedbin.domain.tld
FORCE_SSL=false

# Databases
ELASTICSEARCH_URL=http://elasticsearch:9200
MEMCACHED_HOSTS=memcached:11211
REDIS_URL=redis://feedbin-redis:6379

POSTGRES=postgres
POSTGRES_USERNAME=feedbin
POSTGRES_USER=feedbin
POSTGRES_PASSWORD=password
DATABASE_URL=postgres://feedbin:feedbin@postgres/feedbin_production

# S3
AWS_ACCESS_KEY_ID=password
AWS_SECRET_ACCESS_KEY=password
AWS_S3_BUCKET=feedbin
AWS_S3_BUCKET_FAVICONS=feedbin
AWS_S3_ENDPOINT=https://minio.feedbin.domain.tld
AWS_S3_PATH_STYLE="true"
ENTRY_IMAGE_HOST=minio.feedbin.domain.tld

docker-compose.yml:

version: '2.2'

volumes:
  feedbin_redis:
  feedbin_db:
  feedbin_elasticsearch:
  feedbin_minio:
  feedbin_caddy:

services:

  feedbin-caddy:
    image: abiosoft/caddy:1.0.3
    volumes:
      - feedbin_caddy:/etc/ssl/caddy
      - ./caddy/Caddyfile:/etc/Caddyfile:ro
    env_file:
     - ./.env
    ports:
      - 80:80
      - 443:443
      - 2015:2015
    links:
      - feedbin-web:feedbin-web
      - feedbin-minio:minio
    restart: always

  feedbin-minio:
    image: minio/minio
    volumes:
    - feedbin_minio:/data
    env_file:
     - ./.env
    command: server /data
    ports:
      - 127.0.0.1:9000:9000
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
    restart: always

  feedbin-web:
    build: .
    ports:
      - 127.0.0.1:3000:3000
    environment:
      PORT: 3000
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000"]
    env_file:
     - ./.env
    command: bundle exec rails s --port 3000 --binding 0.0.0.0
    links:
      - feedbin-redis:redis
      - feedbin-postgres:postgres
      - feedbin-elasticsearch:elasticsearch
      - feedbin-memcached:memcached
      - feedbin-minio:minio
    restart: always
    mem_limit: 512m

  feedbin-workers:
    build: .
    env_file:
     - ./.env
    command: foreman start
    links:
      - feedbin-redis:redis
      - feedbin-postgres:postgres
      - feedbin-elasticsearch:elasticsearch
      - feedbin-memcached:memcached
      - feedbin-minio:minio
    restart: always
    mem_limit: 512m

  feedbin-elasticsearch:
    image: elasticsearch:2.4
    ports:
      - 127.0.0.1:9200:9200
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9200"]
    volumes:
      - feedbin_elasticsearch:/usr/share/elasticsearch/data
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
    ulimits:
      memlock:
        soft: -1
        hard: -1
    mem_limit: 1g
    restart: always

  feedbin-refresher:
    build: ./feedbin-refresher
    env_file:
     - ./.env
    links:
      - feedbin-redis:feedbin-redis
    restart: always
    mem_limit: 512m

  feedbin-image:
    build: ./feedbin-image
    env_file:
      - ./.env
    links:
        - feedbin-redis:redis
    restart: always
    mem_limit: 512m

  camo:
    image: inventid/camo
    environment:
      - PORT=8081
    env_file:
     - ./.env
    ports:
      - 127.0.0.1:8081:8081
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8081"]
    restart: always

  feedbin-memcached:
    image: memcached:1.5
    restart: always

  feedbin-redis:
    image: redis:5
    command: "redis-server --appendonly yes"
    volumes:
      - feedbin_redis:/data
    restart: always

  feedbin-postgres:
    image: postgres:10
    env_file:
     - ./.env
    volumes:
      - feedbin_db:/var/lib/postgresql/data
    restart: always
    mem_limit: 512m

Caddyfile:

feedbin.domain.tld {
  gzip
  proxy / http://feedbin-web:3000 {
    transparent
  }
}

camo.feedbin.domain.tld {
  gzip
  proxy / http://camo:8081 {
    transparent
  }
}

minio.feedbin.domain.tld {
  gzip
  proxy / http://minio:9000 {
    transparent
  }
}

Could not find a JavaScript runtime

Hello guys,

I have a problem when I run the following command docker-compose up ( first running )

I have following error :

#######################################################

The bcrypt-ruby gem has changed its name to just bcrypt.  Instead of
installing `bcrypt-ruby`, you should install `bcrypt`.  Please update your
dependencies accordingly.

#######################################################

Post-install message from httparty:
When you HTTParty, you must party hard!
rake aborted!
ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.
/usr/local/bundle/gems/execjs-2.7.0/lib/execjs/runtimes.rb:58:in `autodetect'
/usr/local/bundle/gems/execjs-2.7.0/lib/execjs.rb:5:in `<module:ExecJS>'
/usr/local/bundle/gems/execjs-2.7.0/lib/execjs.rb:4:in `<main>'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/usr/local/bundle/gems/activesupport-6.1.3.1/lib/active_support/dependencies.rb:332:in `block in require'
/usr/local/bundle/gems/activesupport-6.1.3.1/lib/active_support/dependencies.rb:299:in `load_dependency'
/usr/local/bundle/gems/activesupport-6.1.3.1/lib/active_support/dependencies.rb:332:in `require'
/usr/local/bundle/gems/autoprefixer-rails-10.2.4.0/lib/autoprefixer-rails/processor.rb:4:in `<main>'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/usr/local/bundle/gems/activesupport-6.1.3.1/lib/active_support/dependencies.rb:332:in `block in require'
/usr/local/bundle/gems/activesupport-6.1.3.1/lib/active_support/dependencies.rb:299:in `load_dependency'
/usr/local/bundle/gems/activesupport-6.1.3.1/lib/active_support/dependencies.rb:332:in `require'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:53:in `require_relative'
/usr/local/bundle/gems/autoprefixer-rails-10.2.4.0/lib/autoprefixer-rails.rb:39:in `<main>'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.7.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/runtime.rb:74:in `block (2 levels) in require'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/runtime.rb:69:in `each'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/runtime.rb:69:in `block in require'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/runtime.rb:58:in `each'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/runtime.rb:58:in `require'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler.rb:174:in `require'
/app/config/application.rb:9:in `<top (required)>'
/app/Rakefile:4:in `require'
/app/Rakefile:4:in `<top (required)>'
/usr/local/bundle/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/cli/exec.rb:28:in `run'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/cli.rb:476:in `exec'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/cli.rb:30:in `dispatch'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/cli.rb:24:in `start'
/usr/local/bundle/gems/bundler-2.1.2/exe/bundle:46:in `block in <top (required)>'
/usr/local/bundle/gems/bundler-2.1.2/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
/usr/local/bundle/gems/bundler-2.1.2/exe/bundle:34:in `<top (required)>'
/usr/local/bundle/bin/bundle:23:in `load'
/usr/local/bundle/bin/bundle:23:in `<main>'
(See full trace by running task with --trace)
The command '/bin/sh -c gem install bundler -v '2.1.2'     && bundle install     && bundle exec rake assets:precompile' returned a non-zero code: 1
ERROR: Service 'feedbin-web' failed to build

Do you have any idea to resolve this ?

docker.log

"Client sent an HTTP request to an HTTPS server."

I've filled out all the variables and got it running. But when I try to access Feedbin, all i get is a page saying:

Client sent an HTTP request to an HTTPS server.

FOURCE_SSL is set to false.
I'm connecting to a LAN server.
I changed the feedbin-caddy service ports in the docker compose file since 80 and 443 are in use.

Any idea what's off?

Blocked host

I've been trying to get Feedbin up and running for the last day behind Traefik and am getting stuck firing up the feedbin-web instance.

I keep getting the following error on the webpage:

Blocked host: feedbin.DOMAIN.TLD
To allow requests to feedbin.DOMAIN.TLD, add the following to your environment configuration:

config.hosts << "feedbin.DOMAIN.TLD"

I checked the environment variable, and it's correctly set to feedbin.domain.tld in the container. I also tried editing https://github.com/feedbin/feedbin/blob/master/config/environments/production.rb#L3 and restarting the container without any luck.

Feedbin API

Thank you for this project, it's amazing.

Could you please advise if this configuration supports Feddbin API? It doesn't seem to expose the separate API endpoint. Is there a different URL (from the default api.feedbin.com) that is exposing the API?

Alpine images

Why not use Alpine as base for the images?
They're smaller, more secure and sometimes faster.
If there's nothing against Alpine can I create a PR changing the Dockerfiles?

Thanks for this project... without this project is almost impossible to self host Feedbin!

Enhance .env variable documentation

Hi,

Hope you're safe

Thanks so much for creating this ๐Ÿคฏ

I've been trying to get this build running on multiple occasions over the past few weeks and I'm on the verge of giving up and using https://miniflux.app but I just wanted to try one last time tonight, hopefully with your help ๐Ÿ™

Copy .env.example to .env and fill ALL the variables - https://github.com/angristan/feedbin-docker#setup

Please make this file more descriptive e.g. variable options and/or comments?:

FORCE_SSL=
FORCE_SSL=[true | false | 'true' | 'false' | undefined]
FORCE_SSL= // undefined == false

Oh yeah that was one of the PR I made for Feedbin. If you're running as localhost without HTTPS, set FORCE_SSL=false, I forgot to add it (6d0a06d) - #1 (comment)

NB seeing this in the same file confuses me:

AWS_S3_PATH_STYLE="true"

If you have any issues (e.g. questions/queries) then happy to help

Keep up kind work!

Hope to hear back

Sincerely

Disable registration

Hi,

Thanks for this repo, I can finally set up a feedbin instance on my own device. As it's only for personal using, I wonder if there's a setting that I can disable user signups?

Error loading shared library glib-2.0.so.0: No such file or directory.

Looks like this may not be maintained anymore, but just in case that it is โ€” or someone out there can help me out. When I initialize the database, I get the following error:

#0 268.5 LoadError: Could not open library 'glib-2.0.so.0': Error loading shared library glib-2.0.so.0: No such file or directory.
#0 268.5 Could not open library 'libglib-2.0.so.0': Error loading shared library libglib-2.0.so.0: No such file or directory
#0 268.5 /app/config/application.rb:9:in <top (required)>' #0 268.5 /app/Rakefile:4:in require'
#0 268.5 /app/Rakefile:4:in <top (required)>' #0 268.5 /usr/bin/bundle:23:in load'
#0 268.5 /usr/bin/bundle:23:in `

'

I've done a bit of research on this and it feels a bit out of my league. Any pointers would be greatly appreciated.

OAuth Integrations like Pocket or Evernote?

Trying to determine if the Pocket integration is broken in my setup or if it just doesn't work for self-hosted. Does anyone have Pocket (or Evernote, or any other integration that works via the below callstack for OAuth) working on a self-hosted instance and if so how did you resolve the below error to get it working? The following POST happens when I click activate on the pocket integration under the share & save menu and results in a 500 error page. No OAuth popup or redirect takes place, just a transition straight to the 500 error page.

today at 9:33 AM  I, [2021-04-08T14:33:26.165002 #1]  INFO -- : method=POST path=/supported_sharing_services format=html controller=SupportedSharingServicesController action=create status=500 error='NoMethodError: undefined method `token' for nil:NilClass' duration=166.00 view=0.00 db=0.84
today at 9:33 AM  F, [2021-04-08T14:33:26.172799 #1] FATAL -- :   
today at 9:33 AM  NoMethodError (undefined method `token' for nil:NilClass):
today at 9:33 AM    
today at 9:33 AM  app/controllers/supported_sharing_services_controller.rb:122:in `oauth_request'
today at 9:33 AM  app/controllers/supported_sharing_services_controller.rb:87:in `authorize_service'
today at 9:33 AM  app/controllers/supported_sharing_services_controller.rb:5:in `create'
today at 9:33 AM  lib/tld_length.rb:13:in `call'
today at 9:33 AM  lib/basic_authentication.rb:10:in `call'
`

Android app and self-hosted instance?

Has anyone gotten a self-hosted version working with any android client RSS readers? I have my instance properly exposed via reverse proxy and have host rewriting being done to the api endpoint such that I'm able to use it successfully from Postman on api.feedbin.mydomain.tld, but I'm having trouble getting any clients to connect. Palabre is what I'm trying to use right now as it's the only one I've found so far that allows self-hosted instances, but all it does is spin when attempting to connect.

Twitter Subscriptions

I'm struggling to enable Twitter subscriptions on my personal instance. I've set up a developer account, set TWITTER_KEY and TWITTER_SECRET (I've tried using both the consumer api key/secret and the access token secret/key) but I just get "unknown twitter error." whenever i try to enable Twitter via the sources tab or add a new twitter subscription. Anyone had luck getting this setup and have thoughts on what I may be missing or misconfiguring?

cannot run database migrations

/usr/local/lib/ruby/2.7.0/net/protocol.rb:66: warning: already initialized constant Net::ProtocRetryError
/usr/local/bundle/gems/net-protocol-0.1.3/lib/net/protocol.rb:68: warning: previous definition of ProtocRetryError was here
/usr/local/lib/ruby/2.7.0/net/protocol.rb:206: warning: already initialized constant Net::BufferedIO::BUFSIZE
/usr/local/bundle/gems/net-protocol-0.1.3/lib/net/protocol.rb:208: warning: previous definition of BUFSIZE was here
/usr/local/lib/ruby/2.7.0/net/protocol.rb:503: warning: already initialized constant Net::NetPrivate::Socket
/usr/local/bundle/gems/net-protocol-0.1.3/lib/net/protocol.rb:504: warning: previous definition of Socket was here
/app/config/initializers/core_ext/clean.rb:19: warning: Skipping set of ruby2_keywords flag for clean (method accepts keywords or method does not accept argument splat)
/app/config/initializers/sidekiq.rb:7: warning: Sidekiq's Delayed Extensions will be removed in Sidekiq 7.0
rake aborted!
ArgumentError: Secret should not be nil.
/usr/local/bundle/gems/activesupport-7.0.2.2/lib/active_support/message_verifier.rb:111:in `initialize'
/usr/local/bundle/gems/activesupport-7.0.2.2/lib/active_support/messages/rotator.rb:7:in `initialize'
/app/app/jobs/safari_push_notification_send.rb:5:in `new'
/app/app/jobs/safari_push_notification_send.rb:5:in `<class:SafariPushNotificationSend>'
/app/app/jobs/safari_push_notification_send.rb:1:in `<main>'
/usr/local/bundle/gems/bootsnap-1.11.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
/usr/local/bundle/gems/bootsnap-1.11.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
/usr/local/bundle/gems/zeitwerk-2.5.4/lib/zeitwerk/kernel.rb:27:in `require'
/usr/local/bundle/gems/zeitwerk-2.5.4/lib/zeitwerk/loader/helpers.rb:95:in `const_get'
/usr/local/bundle/gems/zeitwerk-2.5.4/lib/zeitwerk/loader/helpers.rb:95:in `cget'
/usr/local/bundle/gems/zeitwerk-2.5.4/lib/zeitwerk/loader.rb:237:in `block (2 levels) in eager_load'
/usr/local/bundle/gems/zeitwerk-2.5.4/lib/zeitwerk/loader/helpers.rb:26:in `block in ls'
/usr/local/bundle/gems/zeitwerk-2.5.4/lib/zeitwerk/loader/helpers.rb:18:in `each_child'
/usr/local/bundle/gems/zeitwerk-2.5.4/lib/zeitwerk/loader/helpers.rb:18:in `ls'
/usr/local/bundle/gems/zeitwerk-2.5.4/lib/zeitwerk/loader.rb:232:in `block in eager_load'
/usr/local/bundle/gems/zeitwerk-2.5.4/lib/zeitwerk/loader.rb:217:in `synchronize'
/usr/local/bundle/gems/zeitwerk-2.5.4/lib/zeitwerk/loader.rb:217:in `eager_load'
/usr/local/bundle/gems/zeitwerk-2.5.4/lib/zeitwerk/loader.rb:317:in `each'
/usr/local/bundle/gems/zeitwerk-2.5.4/lib/zeitwerk/loader.rb:317:in `eager_load_all'
/usr/local/bundle/gems/railties-7.0.2.2/lib/rails/application/finisher.rb:78:in `block in <module:Finisher>'
/usr/local/bundle/gems/railties-7.0.2.2/lib/rails/initializable.rb:32:in `instance_exec'
/usr/local/bundle/gems/railties-7.0.2.2/lib/rails/initializable.rb:32:in `run'
/usr/local/bundle/gems/railties-7.0.2.2/lib/rails/initializable.rb:61:in `block in run_initializers'
/usr/local/lib/ruby/2.7.0/tsort.rb:228:in `block in tsort_each'
/usr/local/lib/ruby/2.7.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
/usr/local/lib/ruby/2.7.0/tsort.rb:431:in `each_strongly_connected_component_from'
/usr/local/lib/ruby/2.7.0/tsort.rb:349:in `block in each_strongly_connected_component'
/usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each'
/usr/local/lib/ruby/2.7.0/tsort.rb:347:in `call'
/usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each_strongly_connected_component'
/usr/local/lib/ruby/2.7.0/tsort.rb:226:in `tsort_each'
/usr/local/lib/ruby/2.7.0/tsort.rb:205:in `tsort_each'
/usr/local/bundle/gems/railties-7.0.2.2/lib/rails/initializable.rb:60:in `run_initializers'
/usr/local/bundle/gems/railties-7.0.2.2/lib/rails/application.rb:372:in `initialize!'
/app/config/environment.rb:5:in `<main>'
/app/lib/tasks/feedbin_generate_coupon.rake:2:in `require_relative'
/app/lib/tasks/feedbin_generate_coupon.rake:2:in `<main>'
/usr/local/bundle/gems/bootsnap-1.11.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:39:in `load'
/usr/local/bundle/gems/bootsnap-1.11.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:39:in `load'
/usr/local/bundle/gems/railties-7.0.2.2/lib/rails/engine.rb:661:in `block in run_tasks_blocks'
/usr/local/bundle/gems/railties-7.0.2.2/lib/rails/engine.rb:661:in `each'
/usr/local/bundle/gems/railties-7.0.2.2/lib/rails/engine.rb:661:in `run_tasks_blocks'
/usr/local/bundle/gems/railties-7.0.2.2/lib/rails/application.rb:505:in `run_tasks_blocks'
/usr/local/bundle/gems/railties-7.0.2.2/lib/rails/engine.rb:464:in `load_tasks'
/usr/local/bundle/gems/railties-7.0.2.2/lib/rails/railtie.rb:224:in `public_send'
/usr/local/bundle/gems/railties-7.0.2.2/lib/rails/railtie.rb:224:in `method_missing'
/app/Rakefile:6:in `<top (required)>'
/usr/local/bundle/gems/rake-13.0.6/lib/rake/rake_module.rb:29:in `load'
/usr/local/bundle/gems/rake-13.0.6/lib/rake/rake_module.rb:29:in `load_rakefile'
/usr/local/bundle/gems/rake-13.0.6/lib/rake/application.rb:710:in `raw_load_rakefile'
/usr/local/bundle/gems/rake-13.0.6/lib/rake/application.rb:104:in `block in load_rakefile'
/usr/local/bundle/gems/rake-13.0.6/lib/rake/application.rb:186:in `standard_exception_handling'
/usr/local/bundle/gems/rake-13.0.6/lib/rake/application.rb:103:in `load_rakefile'
/usr/local/bundle/gems/rake-13.0.6/lib/rake/application.rb:82:in `block in run'
/usr/local/bundle/gems/rake-13.0.6/lib/rake/application.rb:186:in `standard_exception_handling'
/usr/local/bundle/gems/rake-13.0.6/lib/rake/application.rb:80:in `run'
/usr/local/bundle/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bundle/bin/rake:23:in `load'
/usr/local/bundle/bin/rake:23:in `<main>'

have lot of images cannot been delete that at minio

Sidekiq can see Retry list has lots ImageDeleter get Error.
The list item has same error: ImageDeleter - "Excon::Error::BadRequest: Expected(200) <=> Actual(400 Bad Request) excon.error.response :body => "\nBadRequestAn error..."
Seem minio or candy couse this error, the images file in minio cannot been remove automatic, don't know why, help plz.

Images aren't downloading in feed view when using Minio

The feedbin-image service can not connect to the S3 bucket when using Minio.

Additional configuration is required in the file lib/s3_pool.rb on the image host.

S3_POOL = ConnectionPool.new(size: 10, timeout: 5) do
  Fog::Storage.new(
    provider: "AWS",
    aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
    aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
    persistent: true,
    host: 'minio.your.tld',
    endpoint: 'https://minio.your.tld',
    path_style: true,
  )
end

More info: https://github.com/minio/docs/blob/legacy/docs/fog-aws-for-ruby-with-minio.md

Don't use Alpine as the base image

The current Dockerfiles are based on Alpine, but its DNS is absolutely horrendous. This causes a lot of name resolution issues when running Feedbin.

This is in addition to Alpine not shipping YJIT required by new Feedbin.

Image versions

Hey, I was just thinking about publishing all feedbin images and maintain versions for them.
As official feedbin doesn't have changelogs/documentation/versions, maybe we could create docker images for each service and try to keep versions.
I was thinking about that because every time I update some image I need to be very lucky to not broke feedbin, if we could do that in this repository we could keep some sanity on upgrades.
Another thing is that we could patch some fixes, like the one reported on #43 (the fix for this issue will never be accepted on feedbin repository)

What you think about that?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.