Git Product home page Git Product logo

podify's Introduction

Podify

Docker Image Version (latest semver) Docker Image Size (latest semver) GitHub CI

Create podcasts from anything youtube-dl can handle.

Demo

Podify is a self-hosted service that allows you to download videos and audio from any source supported by youtube-dl, sort the downloads into feeds, and subscribe to these feeds using your favorite podcast app (I recommend Podcast Addict if you're on Android).

Installation using Docker

Here's a sample docker-compose.yml.

Configuration via Environment Variables

Variable Required Description
DATABASE_URL Yes postgres:// url pointing to postgres database
REDIS_URL Yes redis:// url pointing to redis instance
URL_HOST Yes Where the app will be available, e.g. https://podify.yourdomain.com
SECRET_KEY_BASE Yes This is used to encrypt sessions, see below
STORAGE_DIR Yes Where downloads will be stored
INITIAL_USER_EMAIL No Email of user to create at startup
INITIAL_USER_PASSWORD No Password of user to create at startup
ENABLE_SIGNUP No Allow anyone with access to the site to sign up. "yes" or "no" (default: "yes")

SECRET_KEY_BASE

This is utilized to encrypt and sign sessions. It's recommended that you generate a new one instead of using the one from the example docker-compose.yml. You can generate a new one using

docker run --rm maxhollmann/podify rails secret

Development

docker compose -f dev-env/docker-compose.yml up
bundle install
yarn install

bundle exec sequel -m db/migrate postgres://podify@localhost/podify_development
bundle exec sequel -m db/migrate postgres://podify@localhost/podify_test

bin/webpack-dev-server
bundle exec rails s
bundle exec sidekiq

If you have tmux and tmuxp installed you can start all required services by running dev-env/up.

podify's People

Contributors

dependabot[bot] avatar maxhollmann 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

podify's Issues

URL_HOST for local use

What should the URL_HOST be for running locally?

I'm attempting to run podify on a local server using the docker-compose.example.yml. In my docker-compose I set the URL_HOST environment variable to the server address 192.168.1.5, like this:

URL_HOST: http://192.168.1.5

When I navigate to the webpage, I get this basic login screen. I login using the INITIAL_USER_EMAIL which seems to succeed, but then I get a blank screen. Any idea how to fix this? Thanks!

image

image

Trouble with db after disk full issue

i started a download to podify, but the disk i was using didn't have enough space so it never finished.
i moved the container to another machine with more space, but if i try to download the same video i get a "request.create.error".
image
the video is not in the list.
i guess there is a missmatch between the db and the frontend, but i'm not sure how to best fix this.

ARM support

Is it possible to have the worker and web docker containers compiled to be run on ARM?

Help needed: Download is not working

Hello,
thanks for this nice app!
Unfortunately I'm not able to resolve my issue. So let me describe it:

I'm having two servers. I've been running podify on Server 1 (Ubuntu Server 22, docker) for a while now. "Out of now" it stopped working. Whenever I want to add a video it is appended to the queue:
Bildschirmfoto 2023-06-06 um 08 56 47

What I've tried so far:

  1. Delete everything on Server 1 regarding podify (folders and volumes). And restarting the Server 1. Here comes the weird thing (At least to me): When I now add new videos, the queue counter is increased by one, but it has the old value in memory (so it would be 11th in queue). How is that possible?

  2. To check, whether I'm doing something wrong I used my server 2 (proxmoxx, ubuntu server minimal 22, docker) to counter check my work. Here is everything working pretty fine and podify is able to download videos. (using my second server is not an option)

Anyone having a clue what I'm doing wrong? Really love to use the app!

Here's my docker-compose:

version: '3.4'

x-app-defaults: &app-defaults
  restart: always
  environment: &app-env
    URL_HOST: https://${HOST:?HOST not set}
    DATABASE_URL: postgres://podify:${DB_PW:?DB_PW not set}@db/podify
    REDIS_URL: redis://redis
    SECRET_KEY_BASE: ${SECRET:?SECRET not set}
    STORAGE_DIR: /storage
    INITIAL_USER_EMAIL: xx
    INITIAL_USER_PASSWORD: xx
    ENABLE_SIGNUP: "no"
  volumes:
    - storage:/storage

  depends_on:
    - db
    - redis

services:
  web:
    <<: *app-defaults
    image: maxhollmann/podify:latest
    command: start-server
    ports:
      - 3000:3000
    environment:
      <<: *app-env
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
      - "traefik.enable=true"
      - "traefik.http.routers.podify-secure.entrypoints=websecure"
      - "traefik.http.routers.podify-secure.rule=Host(`${HOST:?HOST not set}`)"  
      - "traefik.http.routers.podify-secure.tls=true"
      - "traefik.http.routers.podify-secure.service=podify"
      - "traefik.http.services.podify.loadbalancer.server.port=${PORT:?PORT not set}"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.podify-secure.middlewares=secHeaders@file"

    networks:
     - proxy
     - default


  worker:
    <<: *app-defaults
    image: maxhollmann/podify:latest
    command: start-worker
    environment:
      <<: *app-env

  db:
    image: postgres:12.3
    restart: always
    environment:
      POSTGRES_USER: podify
      POSTGRES_PASSWORD: ${DB_PW:?DB_PW not set}
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - pgdata:/var/lib/postgresql/data/pgdata
    networks:
      - default

  redis:
    image: redis:6
    restart: always
    networks:
    - default

volumes:
  pgdata:
    driver: local
    driver_opts:
      type: none
      device: /opt/containers/podify/db/
      o: bind
  storage:
    driver: local
    driver_opts:
      type: none
      device: /opt/containers/podify/data/
      o: bind
networks:
  proxy:
    external: true

Traefik can't find container

Hi. I have deployed podify as a docker-compose stack on a debian VM that also runs traefik. When I try to add podify to traefik I can't access it and I get this error:

level=error msg="service \"podify\" error: unable to find the IP address for the container \"/podify-web-1\": the server is ignored" container=web-podify-a8771715d6a01c1a926b2f8f98800c4331a544dd620640bbec2068c5884818e4 providerName=docker

When I run docker inspect on the web container, it returns this: "IPAddress": "",
I'm new to Traefik, I think I messed something up in the config. My docker-compose.yml:

version: '3.4'

x-app-defaults: &app-defaults
  restart: always
  environment: &app-env
    URL_HOST: https://podify.maantjemol.com
    DATABASE_URL: postgres://podify:verysecurepassword@db/podify
    REDIS_URL: redis://redis
    SECRET_KEY_BASE: SECRET
    RAILS_LOG_TO_STDOUT: "yes"
    STORAGE_DIR: /storage
    INITIAL_USER_EMAIL: [email protected]
    INITIAL_USER_PASSWORD: verysecurepassword
    ENABLE_SIGNUP: "no"

  volumes:
    - storage:/storage

  depends_on:
    - db
    - redis

services:
  web:
    <<: *app-defaults
    image: maxhollmann/podify:latest
    command: start-server
    ports:
      - 3010:3000
    networks:
      - proxy 
    environment:
      <<: *app-env

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.podify.entrypoints=https"
      - "traefik.http.routers.podify.rule=Host(`podify.maantjemol.com`)"
      - "traefik.http.middlewares.podify-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.podify.middlewares=podify-https-redirect"
      - "traefik.http.routers.podify-secure.entrypoints=https"
      - "traefik.http.routers.podify-secure.rule=Host(`podify.maantjemol.com`)"
      - "traefik.http.routers.podify-secure.tls=true"
      - "traefik.http.routers.podify-secure.service=podify"
      - "traefik.http.services.podify.loadbalancer.server.port=3000"
      - "traefik.http.routers.podify.middlewares=sslheader@docker"
      - "traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https"
      - "traefik.docker.network=proxy"
  
  worker:
    <<: *app-defaults
    image: maxhollmann/podify:latest
    command: start-worker
    environment:
      <<: *app-env

  db:
    image: postgres:12.3
    restart: always
    environment:
      POSTGRES_USER: podify
      POSTGRES_PASSWORD: verysecurepassword
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - pgdata:/var/lib/postgresql/data/pgdata

  redis:
    image: redis:6
    restart: always

volumes:
  pgdata:
  storage:

networks:
  proxy:
    external: true

Reverse proxy with nginx

Hi!

I'm trying to run podify behind a nginx reverse proxy but I'm getting an error in Safari:

Too many redirects occurred trying to open “https://podify.hogwarts.zone”. This might occur if you open a page that is redirected to open another page, which then is redirected to open the original page.

Any idea how I should configure podify to make this work?

Here's my docker-compose.yml

version: '3.4'

x-app-defaults: &app-defaults
  restart: always
  environment: &app-env
    URL_HOST: https://podify.hogwarts.zone
    DATABASE_URL: postgres://podify:verysecurepassword@db/podify
    REDIS_URL: redis://redis
    SECRET_KEY_BASE: SECRET
    RAILS_LOG_TO_STDOUT: "yes"
    STORAGE_DIR: /storage
    INITIAL_USER_EMAIL: SECRET
    INITIAL_USER_PASSWORD: SECRET
    ENABLE_SIGNUP: "no"

  volumes:
    - storage:/storage

  depends_on:
    - db
    - redis

services:
  web:
    <<: *app-defaults
    image: maxhollmann/podify-web:latest
    #ports:
      #- 3000:3000
    environment:
      <<: *app-env

  worker:
    <<: *app-defaults
    image: maxhollmann/podify-worker:latest
    environment:
      <<: *app-env

  db:
    image: postgres:12.3
    restart: always
    environment:
      POSTGRES_USER: podify
      POSTGRES_PASSWORD: verysecurepassword
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - pgdata:/var/lib/postgresql/data/pgdata

  redis:
    image: redis:6
    restart: always

volumes:
  pgdata:
  storage:

networks:
  default:
    external:
      name: nginx-certbot_default

Website docker-compose example breaks startup

The docker-compose example on website https://www.podify.org/docker.html contains a typo that breaks startup with the error listed in #45 .

The website shows

 worker:
    <<: *app-defaults
    image: maxhollmann/podify:latest
    command: start-server
    environment:
      <<: *app-env

Whereas the repo (correctly) shows

worker:
<<: *app-defaults
image: maxhollmann/podify:latest
command: start-worker
environment:
<<: *app-env

After replacing "start-server" with "start-worker", startup completed without issue.

Uninitialized Database: relation "users" does not exist

Using the docker-compose setup the podify container runs into an issue shortly after having started: It seems as if it does not setup all its databases properly:

PG::UndefinedTable: ERROR:  relation "users" does not exist (Sequel::DatabaseError)

Complete log since first start:

I, [2021-09-16T07:42:35.711129 #8]  INFO -- sentry: ** [Raven] Raven 3.1.2 configured not to capture errors: DSN not set
=> Booting Puma
=> Rails 6.1.4.1 application starting in production 
=> Run `bin/rails server --help` for more startup options
/app/lib/cli/commands/sources/add.rb:18: warning: Pattern matching is experimental, and the behavior may change in future versions of Ruby!
/app/lib/cli/commands/sources/fetch.rb:22: warning: Pattern matching is experimental, and the behavior may change in future versions of Ruby!
/app/lib/cli/commands/sources/request.rb:23: warning: Pattern matching is experimental, and the behavior may change in future versions of Ruby!
D, [2021-09-16T07:42:36.898911 #8] DEBUG -- :   �[1m�[36mSequel::Postgres::Database (0.4ms)�[0m  �[1mSET standard_conforming_strings = ON�[0m
D, [2021-09-16T07:42:36.899468 #8] DEBUG -- :   �[1m�[35mSequel::Postgres::Database (0.2ms)�[0m  SET client_min_messages = 'WARNING'
/app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/adapters/postgres.rb:156:in `exec': PG::UndefinedTable: ERROR:  relation "users" does not exist (Sequel::DatabaseError)
LINE 1: SELECT * FROM "users" LIMIT 1
                      ^
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/adapters/postgres.rb:156:in `block in execute_query'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-rails-1.1.1/lib/sequel_rails/sequel/database/active_support_notification.rb:17:in `block in log_connection_yield'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/notifications.rb:203:in `block in instrument'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/notifications.rb:203:in `instrument'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-rails-1.1.1/lib/sequel_rails/sequel/database/active_support_notification.rb:11:in `log_connection_yield'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/adapters/postgres.rb:156:in `execute_query'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/adapters/postgres.rb:144:in `block in execute'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/adapters/postgres.rb:120:in `check_disconnect_errors'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/adapters/postgres.rb:144:in `execute'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/adapters/postgres.rb:500:in `_execute'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/adapters/postgres.rb:318:in `block (2 levels) in execute'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/adapters/postgres.rb:522:in `check_database_errors'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/adapters/postgres.rb:318:in `block in execute'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/connection_pool/threaded.rb:88:in `hold'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/database/connecting.rb:269:in `synchronize'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/adapters/postgres.rb:318:in `execute'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/dataset/actions.rb:1093:in `execute'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/adapters/postgres.rb:614:in `fetch_rows'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/dataset/actions.rb:152:in `each'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/dataset/actions.rb:86:in `columns!'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/dataset/actions.rb:76:in `columns'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/model/base.rb:242:in `columns'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/model/base.rb:788:in `block (2 levels) in get_db_schema'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/model/base.rb:686:in `block in check_non_connection_error'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/database/transactions.rb:201:in `block in transaction'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/connection_pool/threaded.rb:92:in `hold'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/database/connecting.rb:269:in `synchronize'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/database/transactions.rb:195:in `transaction'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/model/base.rb:686:in `check_non_connection_error'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/model/base.rb:788:in `block in get_db_schema'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/model/base.rb:821:in `get_db_schema'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/model/base.rb:606:in `set_dataset'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/model/base.rb:869:in `inherited'
    from /app/vendor/bundle/ruby/2.7.0/gems/sequel-5.47.0/lib/sequel/plugins/subclasses.rb:72:in `inherited'
    from /app/app/models/user.rb:1:in `<top (required)>'
    from /app/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/kernel.rb:26:in `require'
    from /app/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.4.2/lib/zeitwerk/kernel.rb:26:in `require'
    from /app/lib/users/create_initial.rb:18:in `call'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-monads-1.4.0/lib/dry/monads/do.rb:137:in `block in call'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-monads-1.4.0/lib/dry/monads/do/mixin.rb:40:in `call'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-monads-1.4.0/lib/dry/monads/do.rb:137:in `call'
    from /app/config/system/initial_user.rb:4:in `block (3 levels) in <top (required)>'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/lifecycle.rb:115:in `trigger!'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/lifecycle.rb:80:in `start'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/lifecycle.rb:52:in `block in call'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/lifecycle.rb:50:in `each'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/lifecycle.rb:50:in `call'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/components/bootable.rb:99:in `start'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter.rb:84:in `block (2 levels) in start'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter.rb:71:in `block (2 levels) in init'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter.rb:110:in `block in call'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter.rb:153:in `with_component'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter.rb:107:in `call'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter.rb:69:in `block in init'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter.rb:153:in `with_component'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter.rb:68:in `init'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter.rb:83:in `block in start'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter.rb:153:in `with_component'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter.rb:80:in `start'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter.rb:51:in `block in finalize!'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter/component_registry.rb:16:in `each'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter/component_registry.rb:16:in `each'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/booter.rb:50:in `finalize!'
    from /app/vendor/bundle/ruby/2.7.0/gems/dry-system-0.18.2/lib/dry/system/container.rb:323:in `finalize!'
    from /app/vendor/bundle/ruby/2.7.0/bundler/gems/dry-rails-08eddd1df72a/lib/dry/rails/container.rb:141:in `finalize!'
    from /app/vendor/bundle/ruby/2.7.0/bundler/gems/dry-rails-08eddd1df72a/lib/dry/rails/railtie.rb:67:in `finalize!'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/railtie.rb:207:in `public_send'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/railtie.rb:207:in `method_missing'
    from /app/vendor/bundle/ruby/2.7.0/bundler/gems/dry-rails-08eddd1df72a/lib/dry/rails/railtie.rb:16:in `block in <class:Railtie>'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:427:in `instance_exec'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:427:in `block in make_lambda'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:198:in `block (2 levels) in halting'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:604:in `block (2 levels) in default_terminator'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:603:in `catch'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:603:in `block in default_terminator'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:199:in `block in halting'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:512:in `block in invoke_before'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:512:in `each'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:512:in `invoke_before'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:105:in `run_callbacks'
    from /app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/reloader.rb:88:in `prepare!'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/application/finisher.rb:124:in `block in <module:Finisher>'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:32:in `instance_exec'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:32:in `run'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:61:in `block in run_initializers'
    from /usr/local/lib/ruby/2.7.0/tsort.rb:228:in `block in tsort_each'
    from /usr/local/lib/ruby/2.7.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
    from /usr/local/lib/ruby/2.7.0/tsort.rb:431:in `each_strongly_connected_component_from'
    from /usr/local/lib/ruby/2.7.0/tsort.rb:349:in `block in each_strongly_connected_component'
    from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each'
    from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `call'
    from /usr/local/lib/ruby/2.7.0/tsort.rb:347:in `each_strongly_connected_component'
    from /usr/local/lib/ruby/2.7.0/tsort.rb:226:in `tsort_each'
    from /usr/local/lib/ruby/2.7.0/tsort.rb:205:in `tsort_each'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/initializable.rb:60:in `run_initializers'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/application.rb:391:in `initialize!'
    from /app/config/environment.rb:5:in `<top (required)>'
    from config.ru:3:in `require_relative'
    from config.ru:3:in `block in <main>'
    from /app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/builder.rb:116:in `eval'
    from /app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/builder.rb:116:in `new_from_string'
    from /app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/builder.rb:105:in `load_file'
    from /app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/builder.rb:66:in `parse_file'
    from /app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/server.rb:349:in `build_app_and_options_from_config'
    from /app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/server.rb:249:in `app'
    from /app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/server.rb:422:in `wrapped_app'
    from /app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/server.rb:312:in `block in start'
    from /app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/server.rb:379:in `handle_profiling'
    from /app/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/server.rb:311:in `start'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/commands/server/server_command.rb:39:in `start'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/commands/server/server_command.rb:144:in `block in perform'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/commands/server/server_command.rb:135:in `tap'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/commands/server/server_command.rb:135:in `perform'
    from /app/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/command.rb:27:in `run'
    from /app/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/invocation.rb:127:in `invoke_command'
    from /app/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor.rb:392:in `dispatch'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/command/base.rb:69:in `perform'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/command.rb:48:in `invoke'
    from /app/vendor/bundle/ruby/2.7.0/gems/railties-6.1.4.1/lib/rails/commands.rb:18:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

[Feature Request] Audio Only

It would be great to have an option to create an audio only download. I like to listen to conference talks from youtube and it would be awesome to get them as an audio only feed on my phone.

Tagline is blatantly incorrect

"Create podcasts from anything youtube-dl can handle"

I spent two hours figuring out why your Docker instructions from your website wouldn't work, to find that it was an issue reported here back in November. I fixed that, and fought with other issues, to get it to run.

Podify seemingly will not support "anything" youtube-dl can handle. Podify won't support a Youtube playlist, for example. Youtube-DL supports playlists. Podify does not support playlists, or this functionality is broken. This seems to be something most folks would like at some point, and definitely feels implied with "anything youtube-dl can handle" -- given that Youtube-DL can DEFINITELY handle playlists. Like, natively, quickly, easily, and by default. Please be more clear, if this wasn't an intended inclusion.

Here's the URL I was attempting to use.

https://www.youtube.com/playlist?list=UUBbnbBWJtwsf0jLGUwX5Q3g

If playlist support is not in the immediate future, please inform me so I can find a working solution.

automatively choosen youtube-dl Version too old

I just tried to get podify up and running. Yet I noticed, that youtube links haven't been working.
It appears, that the reason was the version of youtube-dl was too old.

It appears, that the installer inside the podify_worker installed youtube_dl in version 2020.6.6. I updated the version with pip3 install -U youtube-dl to 2021.5.16.

Maybe it would be helpful to add the -U into the dockerfile or alternatively could it be helpful to hardcode the youtube-dl version for the Python package?

Can't choose the quality when downloading?

I can't specify the quality when downloading videos from YouTube
Even if I download a 4K video, the downloaded video is in 720p, is there any way to specify the quality?

Authentication error

Hi
I am trying to set up the docker container and run it. Currently, I used the default example yalm config. I am stuck in authentication error, no matter how I try to replace and change passwords of podify user.
Here is my log
2021-05-03 03:31:07.951 UTC [53] FATAL: password authentication failed for user "podify"
db_1 | 2021-05-03 03:31:07.951 UTC [53] DETAIL: Password does not match for user "podify".
db_1 | Connection matched pg_hba.conf line 95: "host all all all md5"
web_1 | Error: Sequel::DatabaseConnectionError: PG::ConnectionBad: FATAL: password authentication failed for user "podify"

ERR_SSL_PROTOCOL_ERROR

Hello,

I was trying to setup podify using docker/docker-compose.example.yml on localhost and got ERR_SSL_PROTOCOL_ERROR in both firefox and chromium. Any idea how to fix this?

I can provide worker logs if needed.

Kind regards,
Ori

ARM64 architecture support

I've seen no indication of ARM64 architecture support on the docker page, so I've tried anyway to install it on my Armbian build without success.

Is it possible to make this project also available for the ARM64 architecture ?

Thanks you !

DB Auth Error

Hi, I have fired up the docker-compose in portainer as a stack, and I am having issues with the DB User password.

2021-09-05 07:20:33.021 UTC [32] FATAL: password authentication failed for user "podify"
2021-09-05 07:20:33.021 UTC [32] DETAIL: Password does not match for user "podify".
Connection matched pg_hba.conf line 95: "host all all all md5"

Here is my compose file, obviously the passwords do match, could I be missing something else?

version: '3.4'

x-app-defaults: &app-defaults
  restart: always
  environment: &app-env
    URL_HOST: https://podify.domain.com
    DATABASE_URL: postgres://podify:password@db/podify
    REDIS_URL: redis://redis
    SECRET_KEY_BASE: supersecretkey
    RAILS_LOG_TO_STDOUT: "yes"
    STORAGE_DIR: /storage
    INITIAL_USER_EMAIL: [email protected]
    INITIAL_USER_PASSWORD: password
    ENABLE_SIGNUP: "no"

  volumes:
    - storage:/storage

  depends_on:
    - db
    - redis

services:
  web:
    <<: *app-defaults
    image: maxhollmann/podify-web:latest
    ports:
      - 3000:3000
    environment:
      <<: *app-env

  worker:
    <<: *app-defaults
    image: maxhollmann/podify-worker:latest
    environment:
      <<: *app-env

  db:
    image: postgres:12.3
    restart: always
    environment:
      POSTGRES_USER: podify
      POSTGRES_DB: podify
      POSTGRES_PASSWORD: password
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - pgdata:/var/lib/postgresql/data/pgdata

  redis:
    image: redis:6
    restart: always

volumes:
  storage:
  pgdata:

Database authentication error

I'm noticing the same issue as issues #18, #29 and #43.

There is an authentication error with the database when using the default Docker Compose file from the website.
Not sure I have anything else to add, as it's pretty straightforward.

db_1      | 2021-09-16 09:53:41.072 UTC [46] FATAL:  password authentication failed for user "podify"
db_1      | 2021-09-16 09:53:41.072 UTC [46] DETAIL:  Password does not match for user "podify".

I didn't make any changes, apart from changing the domain URL and the initial user email and password.

Redis update message spam

Redis#exists(key) will return an Integer in redis-rb 4.3, if you want to keep the old behavior, use exists? instead. To opt-in to the new behavior now you can set Redis.exists_returns_integer = true. (/app/vendor/bundle/ruby/2.7.0/gems/sidekiq-6.0.7/lib/sidekiq/launcher.rb:160:in `block (2 levels) in ❤')

Download Youtube Playlist

Is there a way to download a youtube playlist instead of single video? If not, this would be a great feature to add.

Upgrade to Node 18

Currently, some of the dependencies are held back due to an "old" base image: ruby:3.2.1-bullseye installs an old node version (8?) which in turn requires Python 2 to be available. Both of which are long EOL. ruby:3.2.2-bookworm comes with a more recent Debian version that installs Node 18 which supports Python 3.

The problem of direction agency

Using caddy reverse proxy, the URL will become ip: port.
-"traefik.http.routers.podify.middlewares=sslheader@docker"
-"traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https"
Don't know how to add to docker-compose.yml

Fully-contained docker image

It would be cool if you guys could make the current docker image contain Redis and Postgres in one complete image.

Stuck in queue

Hi,

Thanks for a great app.

I've configured podify in my docker compose file. There are no errors in the logs and I can log in etc. fine. I'm having only one issue and that is when I add a link to a youtube video, it is stuck in queued status forever.

I thought there may have been an issue with youtube-dl so I got a terminal in the container and youtube-dl can download the video fine.

There are no errors or anything odd in the logs.

Secondly, are videos downloaded as videos or as audio? Can you configure to download by either?

Thanks again and any help would be appreciated.

what DB versions do you support?

The default compose file has you using postgres 12.3. I'm looking to upgrade to 13 for my other services; can you tell us what versions are supported?

Default Admin Account & Credentials

When deploying via Docker is there a default admin account that should be used ? Your .env doesn't seem to allow for setting defaults and I didn't spot anything in the dockerfiles.
Awesome app by the way.

Possible to upload files manually?

Sometimes yt-dl isn't able to download the files i'm interested in (for example twitter spaces).
Would it be possible to upload files manually?

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.