title | description | published | date | tags | editor | dateCreated |
---|---|---|---|---|---|---|
Installation |
true |
2021-05-23 16:58:48 UTC |
markdown |
2021-02-25 11:24:06 UTC |
To manually compile invidious you need at least 2GB of RAM. If you have less you can setup SWAP to have a combined amount of 2 GB or use Docker instead.
After installation take a look at the Post-install steps.
Invidious-Updater is a self-contained script that can automatically install and update Invidious.
Use of the Invidious image hosted on Docker Hub is highly discouraged. The current maintainers no longer have access to the account and it is considered deprecated. The image hosted on Quay is recommended as an alternative. This change is reflected in the
docker-compose.yml
file used in this walkthrough. Also, unlike Docker Hub, Quay is open source. {.is-warning}
Ensure Docker Engine and Docker Compose are installed before beginning.
$ mkdir invidious
$ cd invidious
$ nano docker-compose.yml
Here is a working Compose setup:
version: "2.4"
services:
postgres:
image: postgres:10
restart: always
networks:
- invidious
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_USER: kemal
POSTGRES_PASSWORD: kemal
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
invidious:
image: quay.io/invidious/invidious:latest
restart: always
networks:
- invidious
mem_limit: 1024M
cpus: 0.5
ports:
- "127.0.0.1:3000:3000"
environment:
INVIDIOUS_CONFIG: |
channel_threads: 1
check_tables: true
feed_threads: 1
db:
dbname: invidious
user: kemal
password: kemal
host: postgres
port: 5432
full_refresh: false
https_only: false
domain:
# external_port:
depends_on:
- postgres
volumes:
postgresdata:
networks:
invidious:
The environment variable
POSTGRES_USER
cannot be changed. The SQL config files that run the initial database migrations are hard-coded with the usernamekemal
. {.is-warning}
$ docker-compose up
or
$ docker-compose up -d
to run it in the background.
Then, visit localhost:3000
in your browser.
$ docker-compose down
$ docker volume rm invidious_postgresdata
Arch Linux
sudo pacman -S base-devel shards librsvg postgresql
# Invidious depends on crystal 0.36.1-1, so you either have to downgrade Crystal or install it from the archive.
# Downgrade using the `downgrade` script from the AUR ( https://aur.archlinux.org/packages/downgrade/ ):
# A basic understanding of the AUR is required, and the installation of `yay` (or `paru`) has to be done
sudo pacman -S crystal
yay -S downgrade (or `paru -S downgrade`)
sudo downgrade crystal
# > Select 0.36.1-1
# When asked to add crystal to the ignore list (so it won't be updated in the future), choose "yes".
# Install from the archive:
# Checking the package's signature is optional, but is a recommended practice.
cd ~/Downloads
wget https://archive.archlinux.org/packages/c/crystal/crystal-0.36.1-1-x86_64.pkg.tar.zst
wget https://archive.archlinux.org/packages/c/crystal/crystal-0.36.1-1-x86_64.pkg.tar.zst.sig
gpg2 --homedir /etc/pacman.d/gnupg --verify crystal-0.36.1-1-x86_64.pkg.tar.zst.sig crystal-0.36.1-1-x86_64.pkg.tar.zst
sudo pacman -U crystal-0.36.1-1-x86_64.pkg.tar.zst
Ubuntu or Debian
# First you have to add the repository to your APT configuration. For easy setup just run in your command line:
curl -fsSL https://crystal-lang.org/install.sh | sudo bash
# That will add the signing key and the repository configuration.
# If you prefer to do it manually, Follow the instructions here https://crystal-lang.org/install
sudo apt-get update
sudo apt install crystal libssl-dev libxml2-dev libyaml-dev libgmp-dev libreadline-dev postgresql librsvg2-bin libsqlite3-dev zlib1g-dev libpcre3-dev libevent-dev
Fedora
# To install crystal on fedora, you can either install:
# - with brew/snap: https://crystal-lang.org/install/on_fedora/
# - from tarball: https://crystal-lang.org/install/from_targz/
# Currently, invidious depends on crystal 0.36.1-1, so a tarball install is necessary.
cd ~/Downloads
wget https://github.com/crystal-lang/crystal/releases/download/0.36.1/crystal-0.36.1-1-linux-x86_64.tar.gz
cd /opt
sudo tar -xzf ~/Downloads/crystal-0.36.1-1-linux-x86_64.tar.gz
sudo ln -s /opt/crystal-0.36.1-1/bin/crystal /usr/local/bin/crystal
sudo ln -s /opt/crystal-0.36.1-1/bin/shards /usr/local/bin/shards
# Then use dnf to install the dependencies:
sudo dnf install -y openssl-devel libevent-devel libxml2-devel libyaml-devel gmp-devel readline-devel postgresql librsvg2-devel sqlite-devel zlib-devel gcc
$ useradd -m invidious
$ sudo -i -u invidious
$ git clone https://github.com/iv-org/invidious
$ exit
$ sudo systemctl enable --now postgresql
$ sudo -i -u postgres
$ psql -c "CREATE USER kemal WITH PASSWORD 'kemal';" # Change 'kemal' here to a stronger password, and update `password` in config/config.yml
$ createdb -O kemal invidious
$ psql invidious kemal < /home/invidious/invidious/config/sql/channels.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/videos.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/channel_videos.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/users.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/session_ids.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/nonces.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/annotations.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/playlists.sql
$ psql invidious kemal < /home/invidious/invidious/config/sql/playlist_videos.sql
$ exit
$ sudo -i -u invidious
$ cd invidious
$ shards update && shards install
$ crystal build src/invidious.cr --release
# test compiled binary
$ ./invidious # stop with ctrl c
$ exit
$ sudo cp /home/invidious/invidious/invidious.service /etc/systemd/system/invidious.service
$ sudo systemctl enable --now invidious.service
$ echo "/home/invidious/invidious/invidious.log {
rotate 4
weekly
notifempty
missingok
compress
minsize 1048576
}" | sudo tee /etc/logrotate.d/invidious.logrotate
$ sudo chmod 0644 /etc/logrotate.d/invidious.logrotate
# Install dependencies
$ brew update
$ brew install shards crystal postgres imagemagick librsvg
# Clone the repository and set up a PostgreSQL database
$ git clone https://github.com/iv-org/invidious
$ cd invidious
$ brew services start postgresql
$ psql -c "CREATE ROLE kemal WITH PASSWORD 'kemal';" # Change 'kemal' here to a stronger password, and update `password` in config/config.yml
$ createdb -O kemal invidious
$ psql invidious kemal < config/sql/channels.sql
$ psql invidious kemal < config/sql/videos.sql
$ psql invidious kemal < config/sql/channel_videos.sql
$ psql invidious kemal < config/sql/users.sql
$ psql invidious kemal < config/sql/session_ids.sql
$ psql invidious kemal < config/sql/nonces.sql
$ psql invidious kemal < config/sql/annotations.sql
$ psql invidious kemal < config/sql/privacy.sql
$ psql invidious kemal < config/sql/playlists.sql
$ psql invidious kemal < config/sql/playlist_videos.sql
# Set up Invidious
$ shards update && shards install
$ crystal build src/invidious.cr --release
Detailed configuration available in the configuration guide.
Because of various issues Invidious must be restarted often, at least once a day, ideally every hours.
If you use a reverse proxy, you must configure invidious to properly serve request through it:
https_only: true
: if your are serving your instance via https, set it to true
domain: domain.ext
: if you are serving your instance via a domain name, set it here
external_port: 443
: if your are serving your instance via https, set it to 443
Instructions are available in the updating guide.
$ ./invidious -h
Usage: invidious [arguments]
-b HOST, --bind HOST Host to bind (defaults to 0.0.0.0)
-p PORT, --port PORT Port to listen for connections (defaults to 3000)
-s, --ssl Enables SSL
--ssl-key-file FILE SSL key file
--ssl-cert-file FILE SSL certificate file
-h, --help Shows this help
-c THREADS, --channel-threads=THREADS
Number of threads for refreshing channels (default: 1)
-f THREADS, --feed-threads=THREADS
Number of threads for refreshing feeds (default: 1)
-o OUTPUT, --output=OUTPUT Redirect output (default: STDOUT)
-v, --version Print version
Or for development:
$ curl -fsSLo- https://raw.githubusercontent.com/samueleaton/sentry/master/install.cr | crystal eval
$ ./sentry
🤖 Your SentryBot is vigilant. beep-boop...