From 1862754ddbcae9f244eea690037e33ee3b62ef3d Mon Sep 17 00:00:00 2001 From: altescy Date: Tue, 3 Nov 2020 04:02:48 +0900 Subject: [PATCH] initial commit --- .gitignore | 1 + README.md | 15 ++++++ config/config.yml | 11 +++++ config/migrate-scripts/migrate-db-17cf077.sh | 4 ++ config/migrate-scripts/migrate-db-1c8075c.sh | 7 +++ config/migrate-scripts/migrate-db-1eca969.sh | 19 ++++++++ config/migrate-scripts/migrate-db-30e6d29.sh | 4 ++ config/migrate-scripts/migrate-db-3646395.sh | 5 ++ config/migrate-scripts/migrate-db-3bcb98e.sh | 3 ++ config/migrate-scripts/migrate-db-52cb239.sh | 3 ++ config/migrate-scripts/migrate-db-6e51189.sh | 4 ++ config/migrate-scripts/migrate-db-701b5ea.sh | 3 ++ config/migrate-scripts/migrate-db-88b7097.sh | 3 ++ config/migrate-scripts/migrate-db-8e884fe.sh | 5 ++ config/sql/annotations.sql | 12 +++++ config/sql/channel_videos.sql | 30 ++++++++++++ config/sql/channels.sql | 25 ++++++++++ config/sql/nonces.sql | 22 +++++++++ config/sql/playlist_videos.sql | 19 ++++++++ config/sql/playlists.sql | 29 +++++++++++ config/sql/session_ids.sql | 23 +++++++++ config/sql/users.sql | 29 +++++++++++ config/sql/videos.sql | 23 +++++++++ docker-compose.yml | 51 ++++++++++++++++++++ docker/init-invidious-db.sh | 16 ++++++ 25 files changed, 366 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 config/config.yml create mode 100755 config/migrate-scripts/migrate-db-17cf077.sh create mode 100755 config/migrate-scripts/migrate-db-1c8075c.sh create mode 100755 config/migrate-scripts/migrate-db-1eca969.sh create mode 100755 config/migrate-scripts/migrate-db-30e6d29.sh create mode 100755 config/migrate-scripts/migrate-db-3646395.sh create mode 100755 config/migrate-scripts/migrate-db-3bcb98e.sh create mode 100755 config/migrate-scripts/migrate-db-52cb239.sh create mode 100755 config/migrate-scripts/migrate-db-6e51189.sh create mode 100755 config/migrate-scripts/migrate-db-701b5ea.sh create mode 100755 config/migrate-scripts/migrate-db-88b7097.sh create mode 100755 config/migrate-scripts/migrate-db-8e884fe.sh create mode 100644 config/sql/annotations.sql create mode 100644 config/sql/channel_videos.sql create mode 100644 config/sql/channels.sql create mode 100644 config/sql/nonces.sql create mode 100644 config/sql/playlist_videos.sql create mode 100644 config/sql/playlists.sql create mode 100644 config/sql/session_ids.sql create mode 100644 config/sql/users.sql create mode 100644 config/sql/videos.sql create mode 100644 docker-compose.yml create mode 100755 docker/init-invidious-db.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env diff --git a/README.md b/README.md new file mode 100644 index 0000000..4337055 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +invidious-docker +================ + +Docker configs for [Invidious](https://github.com/iv-org/invidious). + + +### Installation + +``` +$ cat << EOF > .env +INVIDIOUS_HTTP_PORT=8080 +INVIDIOUS_ADMIN_USER=admin +EOF +$ docker-compose up -d +``` diff --git a/config/config.yml b/config/config.yml new file mode 100644 index 0000000..e83a751 --- /dev/null +++ b/config/config.yml @@ -0,0 +1,11 @@ +channel_threads: 1 +feed_threads: 1 +db: + user: kemal + password: kemal + host: localhost + port: 5432 + dbname: invidious +full_refresh: false +https_only: false +domain: diff --git a/config/migrate-scripts/migrate-db-17cf077.sh b/config/migrate-scripts/migrate-db-17cf077.sh new file mode 100755 index 0000000..5e5bb21 --- /dev/null +++ b/config/migrate-scripts/migrate-db-17cf077.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +psql invidious kemal -c "ALTER TABLE channels ADD COLUMN subscribed bool;" +psql invidious kemal -c "UPDATE channels SET subscribed = false;" diff --git a/config/migrate-scripts/migrate-db-1c8075c.sh b/config/migrate-scripts/migrate-db-1c8075c.sh new file mode 100755 index 0000000..6395439 --- /dev/null +++ b/config/migrate-scripts/migrate-db-1c8075c.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +psql invidious kemal -c "ALTER TABLE channel_videos DROP COLUMN live_now CASCADE" +psql invidious kemal -c "ALTER TABLE channel_videos DROP COLUMN premiere_timestamp CASCADE" + +psql invidious kemal -c "ALTER TABLE channel_videos ADD COLUMN live_now bool" +psql invidious kemal -c "ALTER TABLE channel_videos ADD COLUMN premiere_timestamp timestamptz" diff --git a/config/migrate-scripts/migrate-db-1eca969.sh b/config/migrate-scripts/migrate-db-1eca969.sh new file mode 100755 index 0000000..f840d92 --- /dev/null +++ b/config/migrate-scripts/migrate-db-1eca969.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN title CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN views CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN likes CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN dislikes CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN wilson_score CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN published CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN description CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN language CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN author CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN ucid CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN allowed_regions CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN is_family_friendly CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN genre CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN genre_url CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN license CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN sub_count_text CASCADE" +psql invidious kemal -c "ALTER TABLE videos DROP COLUMN author_thumbnail CASCADE" diff --git a/config/migrate-scripts/migrate-db-30e6d29.sh b/config/migrate-scripts/migrate-db-30e6d29.sh new file mode 100755 index 0000000..3a37746 --- /dev/null +++ b/config/migrate-scripts/migrate-db-30e6d29.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +psql invidious kemal -c "ALTER TABLE channels ADD COLUMN deleted bool;" +psql invidious kemal -c "UPDATE channels SET deleted = false;" diff --git a/config/migrate-scripts/migrate-db-3646395.sh b/config/migrate-scripts/migrate-db-3646395.sh new file mode 100755 index 0000000..830b85f --- /dev/null +++ b/config/migrate-scripts/migrate-db-3646395.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +psql invidious kemal < config/sql/session_ids.sql +psql invidious kemal -c "INSERT INTO session_ids (SELECT unnest(id), email, CURRENT_TIMESTAMP FROM users) ON CONFLICT (id) DO NOTHING" +psql invidious kemal -c "ALTER TABLE users DROP COLUMN id" diff --git a/config/migrate-scripts/migrate-db-3bcb98e.sh b/config/migrate-scripts/migrate-db-3bcb98e.sh new file mode 100755 index 0000000..cb9fa6a --- /dev/null +++ b/config/migrate-scripts/migrate-db-3bcb98e.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +psql invidious kemal < config/sql/annotations.sql diff --git a/config/migrate-scripts/migrate-db-52cb239.sh b/config/migrate-scripts/migrate-db-52cb239.sh new file mode 100755 index 0000000..db8efea --- /dev/null +++ b/config/migrate-scripts/migrate-db-52cb239.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +psql invidious kemal -c "ALTER TABLE channel_videos ADD COLUMN views bigint;" diff --git a/config/migrate-scripts/migrate-db-6e51189.sh b/config/migrate-scripts/migrate-db-6e51189.sh new file mode 100755 index 0000000..ce72811 --- /dev/null +++ b/config/migrate-scripts/migrate-db-6e51189.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +psql invidious kemal -c "ALTER TABLE channel_videos ADD COLUMN live_now bool;" +psql invidious kemal -c "UPDATE channel_videos SET live_now = false;" diff --git a/config/migrate-scripts/migrate-db-701b5ea.sh b/config/migrate-scripts/migrate-db-701b5ea.sh new file mode 100755 index 0000000..429531a --- /dev/null +++ b/config/migrate-scripts/migrate-db-701b5ea.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +psql invidious kemal -c "ALTER TABLE users ADD COLUMN feed_needs_update boolean" diff --git a/config/migrate-scripts/migrate-db-88b7097.sh b/config/migrate-scripts/migrate-db-88b7097.sh new file mode 100755 index 0000000..6bde839 --- /dev/null +++ b/config/migrate-scripts/migrate-db-88b7097.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +psql invidious kemal -c "ALTER TABLE channel_videos ADD COLUMN premiere_timestamp timestamptz;" diff --git a/config/migrate-scripts/migrate-db-8e884fe.sh b/config/migrate-scripts/migrate-db-8e884fe.sh new file mode 100755 index 0000000..1c8dafd --- /dev/null +++ b/config/migrate-scripts/migrate-db-8e884fe.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +psql invidious kemal -c "ALTER TABLE channels DROP COLUMN subscribed" +psql invidious kemal -c "ALTER TABLE channels ADD COLUMN subscribed timestamptz" +psql invidious kemal -c "UPDATE channels SET subscribed = '2019-01-01 00:00:00+00'" diff --git a/config/sql/annotations.sql b/config/sql/annotations.sql new file mode 100644 index 0000000..4ea077e --- /dev/null +++ b/config/sql/annotations.sql @@ -0,0 +1,12 @@ +-- Table: public.annotations + +-- DROP TABLE public.annotations; + +CREATE TABLE public.annotations +( + id text NOT NULL, + annotations xml, + CONSTRAINT annotations_id_key UNIQUE (id) +); + +GRANT ALL ON TABLE public.annotations TO kemal; diff --git a/config/sql/channel_videos.sql b/config/sql/channel_videos.sql new file mode 100644 index 0000000..cec57cd --- /dev/null +++ b/config/sql/channel_videos.sql @@ -0,0 +1,30 @@ +-- Table: public.channel_videos + +-- DROP TABLE public.channel_videos; + +CREATE TABLE public.channel_videos +( + id text NOT NULL, + title text, + published timestamp with time zone, + updated timestamp with time zone, + ucid text, + author text, + length_seconds integer, + live_now boolean, + premiere_timestamp timestamp with time zone, + views bigint, + CONSTRAINT channel_videos_id_key UNIQUE (id) +); + +GRANT ALL ON TABLE public.channel_videos TO kemal; + +-- Index: public.channel_videos_ucid_idx + +-- DROP INDEX public.channel_videos_ucid_idx; + +CREATE INDEX channel_videos_ucid_idx + ON public.channel_videos + USING btree + (ucid COLLATE pg_catalog."default"); + diff --git a/config/sql/channels.sql b/config/sql/channels.sql new file mode 100644 index 0000000..b5a29b8 --- /dev/null +++ b/config/sql/channels.sql @@ -0,0 +1,25 @@ +-- Table: public.channels + +-- DROP TABLE public.channels; + +CREATE TABLE public.channels +( + id text NOT NULL, + author text, + updated timestamp with time zone, + deleted boolean, + subscribed timestamp with time zone, + CONSTRAINT channels_id_key UNIQUE (id) +); + +GRANT ALL ON TABLE public.channels TO kemal; + +-- Index: public.channels_id_idx + +-- DROP INDEX public.channels_id_idx; + +CREATE INDEX channels_id_idx + ON public.channels + USING btree + (id COLLATE pg_catalog."default"); + diff --git a/config/sql/nonces.sql b/config/sql/nonces.sql new file mode 100644 index 0000000..7b8ce9f --- /dev/null +++ b/config/sql/nonces.sql @@ -0,0 +1,22 @@ +-- Table: public.nonces + +-- DROP TABLE public.nonces; + +CREATE TABLE public.nonces +( + nonce text, + expire timestamp with time zone, + CONSTRAINT nonces_id_key UNIQUE (nonce) +); + +GRANT ALL ON TABLE public.nonces TO kemal; + +-- Index: public.nonces_nonce_idx + +-- DROP INDEX public.nonces_nonce_idx; + +CREATE INDEX nonces_nonce_idx + ON public.nonces + USING btree + (nonce COLLATE pg_catalog."default"); + diff --git a/config/sql/playlist_videos.sql b/config/sql/playlist_videos.sql new file mode 100644 index 0000000..b2b8d5c --- /dev/null +++ b/config/sql/playlist_videos.sql @@ -0,0 +1,19 @@ +-- Table: public.playlist_videos + +-- DROP TABLE public.playlist_videos; + +CREATE TABLE playlist_videos +( + title text, + id text, + author text, + ucid text, + length_seconds integer, + published timestamptz, + plid text references playlists(id), + index int8, + live_now boolean, + PRIMARY KEY (index,plid) +); + +GRANT ALL ON TABLE public.playlist_videos TO kemal; diff --git a/config/sql/playlists.sql b/config/sql/playlists.sql new file mode 100644 index 0000000..468496c --- /dev/null +++ b/config/sql/playlists.sql @@ -0,0 +1,29 @@ +-- Type: public.privacy + +-- DROP TYPE public.privacy; + +CREATE TYPE public.privacy AS ENUM +( + 'Public', + 'Unlisted', + 'Private' +); + +-- Table: public.playlists + +-- DROP TABLE public.playlists; + +CREATE TABLE public.playlists +( + title text, + id text primary key, + author text, + description text, + video_count integer, + created timestamptz, + updated timestamptz, + privacy privacy, + index int8[] +); + +GRANT ALL ON public.playlists TO kemal; diff --git a/config/sql/session_ids.sql b/config/sql/session_ids.sql new file mode 100644 index 0000000..afbabb6 --- /dev/null +++ b/config/sql/session_ids.sql @@ -0,0 +1,23 @@ +-- Table: public.session_ids + +-- DROP TABLE public.session_ids; + +CREATE TABLE public.session_ids +( + id text NOT NULL, + email text, + issued timestamp with time zone, + CONSTRAINT session_ids_pkey PRIMARY KEY (id) +); + +GRANT ALL ON TABLE public.session_ids TO kemal; + +-- Index: public.session_ids_id_idx + +-- DROP INDEX public.session_ids_id_idx; + +CREATE INDEX session_ids_id_idx + ON public.session_ids + USING btree + (id COLLATE pg_catalog."default"); + diff --git a/config/sql/users.sql b/config/sql/users.sql new file mode 100644 index 0000000..0f2cdba --- /dev/null +++ b/config/sql/users.sql @@ -0,0 +1,29 @@ +-- Table: public.users + +-- DROP TABLE public.users; + +CREATE TABLE public.users +( + updated timestamp with time zone, + notifications text[], + subscriptions text[], + email text NOT NULL, + preferences text, + password text, + token text, + watched text[], + feed_needs_update boolean, + CONSTRAINT users_email_key UNIQUE (email) +); + +GRANT ALL ON TABLE public.users TO kemal; + +-- Index: public.email_unique_idx + +-- DROP INDEX public.email_unique_idx; + +CREATE UNIQUE INDEX email_unique_idx + ON public.users + USING btree + (lower(email) COLLATE pg_catalog."default"); + diff --git a/config/sql/videos.sql b/config/sql/videos.sql new file mode 100644 index 0000000..8def2f8 --- /dev/null +++ b/config/sql/videos.sql @@ -0,0 +1,23 @@ +-- Table: public.videos + +-- DROP TABLE public.videos; + +CREATE TABLE public.videos +( + id text NOT NULL, + info text, + updated timestamp with time zone, + CONSTRAINT videos_pkey PRIMARY KEY (id) +); + +GRANT ALL ON TABLE public.videos TO kemal; + +-- Index: public.id_idx + +-- DROP INDEX public.id_idx; + +CREATE UNIQUE INDEX id_idx + ON public.videos + USING btree + (id COLLATE pg_catalog."default"); + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..6f235cc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,51 @@ +version: '3' +services: + waitfordb: + image: dadarek/wait-for-dependencies + depends_on: + - postgres + command: postgres:5432 + + postgres: + image: postgres:11 + restart: always + volumes: + - postgresdata:/var/lib/postgresql/data + - ./config/sql:/config/sql + - ./docker/init-invidious-db.sh:/docker-entrypoint-initdb.d/init-invidious-db.sh + environment: + POSTGRES_DB: invidious + POSTGRES_PASSWORD: kemal + POSTGRES_USER: kemal + healthcheck: + test: ["CMD", "pg_isready", "-U", "postgres"] + + invidious: + image: 1337kavin/invidious + depends_on: + - postgres + - waitfordb + restart: always + ports: + - "${INVIDIOUS_HTTP_PORT}:3000" + environment: + INVIDIOUS_CONFIG: | + channel_threads: 1 + check_tables: true + feed_threads: 1 + db: + user: kemal + password: kemal + host: postgres + port: 5432 + dbname: invidious + full_refresh: false + https_only: false + domain: iv.altescy.jp + registration_enabled: false + admins: ["${INVIDIOUS_ADMIN_USER}"] + depends_on: + - postgres + +volumes: + postgresdata: diff --git a/docker/init-invidious-db.sh b/docker/init-invidious-db.sh new file mode 100755 index 0000000..3808e67 --- /dev/null +++ b/docker/init-invidious-db.sh @@ -0,0 +1,16 @@ +#!/bin/bash +set -eou pipefail + +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + CREATE USER postgres; +EOSQL + +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/channels.sql +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/videos.sql +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/channel_videos.sql +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/users.sql +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/session_ids.sql +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/nonces.sql +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/annotations.sql +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/playlists.sql +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/playlist_videos.sql