mirror of
https://github.com/iv-org/documentation.git
synced 2025-11-23 09:10:56 -05:00
chore: make companion officially supported in the installation guide (#663)
* chore: make companion officially supported in the installation guide * doc: improve again * docs: explain how to download binary for non docker user * docs: inv-sig-helper => invidious companion
This commit is contained in:
parent
db98664a22
commit
74e7a16c3b
11 changed files with 127 additions and 528 deletions
|
|
@ -7,12 +7,14 @@ Note: Any [PaaS](https://en.wikipedia.org/wiki/Platform_as_a_service) or [SaaS](
|
|||
|
||||
## Hardware requirements
|
||||
|
||||
Running Invidious requires at least 20GB disk space, 512MB of free RAM (so ~2G installed on the system), as long as it is restarted regularly, as recommended in the post-install configuration. Public instances should ideally have at least 60G disk space, 4GB of RAM, 2vCPU, a 200 mbps link and 20TB of traffic (no data cap/unlimited traffic is preferred).
|
||||
Running Invidious and Invidious companion requires at least 20GB disk space, 2GB of free RAM, as long as it is restarted regularly, as recommended in the post-install configuration. Public instances should ideally have at least 60G disk space, 4GB of RAM, 2vCPU, a 200 mbps link and 20TB of traffic (no data cap/unlimited traffic is preferred).
|
||||
|
||||
Compiling Invidious requires at least 2.5GB of free RAM (We recommend to have at least 4GB installed).
|
||||
If you have less (e.g on a cheap VPS) you can setup a SWAP file or partition, so the combined amount is >= 4GB.
|
||||
|
||||
You need at least 1GB of RAM for the machine that will run the tool `youtube-trusted-session-generator` in the 1st step. Doesn't need to be the same machine as the one running Invidious, just a machine running on the same public IP address.
|
||||
## **MIGRATION NEEDED (NEW)**: Invidious companion
|
||||
|
||||
Invidious companion replace both `inv-sig-helper` and `youtube-trusted-session-generator`. You don't need to execute `youtube-trusted-session-generator` anymore.
|
||||
|
||||
## Docker
|
||||
|
||||
|
|
@ -28,31 +30,19 @@ Note: Currently the repository has to be cloned, this is because the `init-invid
|
|||
|
||||
Make sure to run the newer Docker Compose V2: https://docs.docker.com/compose/install/linux/. It should already be installed if you can successfully run the command `docker compose` (with a space between the two words).
|
||||
|
||||
??? warning "About po_token and visitor_data identities"
|
||||
|
||||
po_token known as Proof of Origin Token. This is an attestation token generated by a complex anti robot verification system created by Google named BotGuard/DroidGuard. It is used to confirm that the request is coming from a genuine device.
|
||||
|
||||
These identity tokens (po_token and visitor_data) generated in this tutorial will make your entire Invidious session more easily traceable by YouTube because it is tied to a unique identifier.
|
||||
|
||||
There is currently no official automatic tool to periodically change these tokens. This is working in progress but, for the time being, this is the solution the Invidious team is offering.
|
||||
|
||||
If you want to be less traceable, you can always script the process by changing the identities every X hour.
|
||||
|
||||
|
||||
1. Generate po_token and visitor_data identities for passing all verification checks on YouTube side:
|
||||
```
|
||||
docker run quay.io/invidious/youtube-trusted-session-generator
|
||||
```
|
||||
You have to run this command on the same public IP address as the one blocked by YouTube. Not necessarily the same machine, just the same public IP address.
|
||||
You will need to copy these two parameters in the third step.
|
||||
Subsequent usage of this same token will work on the same IP range or even the same ASN. The point is to generate this token on a blocked IP as "unblocked" IP addresses seems to not generate a token valid for passing the checks on a blocked IP.
|
||||
|
||||
2. Execute these commands:
|
||||
1. Execute these commands:
|
||||
```bash
|
||||
git clone https://github.com/iv-org/invidious.git
|
||||
cd invidious
|
||||
```
|
||||
|
||||
2. Generate two secret keys, one for Invidious (HMAC_KEY) and one for Invidious companion (invidious_companion_key)
|
||||
```bash
|
||||
pwgen 16 1 # for Invidious (HMAC_KEY)
|
||||
pwgen 16 1 # for Invidious companion (invidious_companion_key)
|
||||
```
|
||||
|
||||
3. Edit the docker-compose.yml with this content:
|
||||
|
||||
```docker
|
||||
|
|
@ -63,6 +53,7 @@ Make sure to run the newer Docker Compose V2: https://docs.docker.com/compose/in
|
|||
image: quay.io/invidious/invidious:latest
|
||||
# image: quay.io/invidious/invidious:latest-arm64 # ARM64/AArch64 devices
|
||||
restart: unless-stopped
|
||||
# Remove "127.0.0.1:" if used from an external IP
|
||||
ports:
|
||||
- "127.0.0.1:3000:3000"
|
||||
environment:
|
||||
|
|
@ -77,13 +68,18 @@ Make sure to run the newer Docker Compose V2: https://docs.docker.com/compose/in
|
|||
host: invidious-db
|
||||
port: 5432
|
||||
check_tables: true
|
||||
signature_server: inv_sig_helper:12999
|
||||
visitor_data: "CHANGE_ME!!"
|
||||
po_token: "CHANGE_ME!!"
|
||||
invidious_companion:
|
||||
# URL used for the internal communication between invidious and invidious companion
|
||||
# There is no need to change that except if Invidious companion does not run on the same docker compose file.
|
||||
- private_url: "http://companion:8282/companion"
|
||||
# IT is NOT recommended to use the same key as HMAC KEY. Generate a new key!
|
||||
# Use the key generated in the 2nd step
|
||||
invidious_companion_key: "CHANGE_ME!!"
|
||||
# external_port:
|
||||
# domain:
|
||||
# https_only: false
|
||||
# statistics_enabled: false
|
||||
# Use the key generated in the 2nd step
|
||||
hmac_key: "CHANGE_ME!!"
|
||||
healthcheck:
|
||||
test: wget -nv --tries=1 --spider http://127.0.0.1:3000/api/v1/trending || exit 1
|
||||
|
|
@ -97,16 +93,27 @@ Make sure to run the newer Docker Compose V2: https://docs.docker.com/compose/in
|
|||
depends_on:
|
||||
- invidious-db
|
||||
|
||||
inv_sig_helper:
|
||||
image: quay.io/invidious/inv-sig-helper:latest
|
||||
init: true
|
||||
command: ["--tcp", "0.0.0.0:12999"]
|
||||
companion:
|
||||
image: quay.io/invidious/invidious-companion:latest
|
||||
environment:
|
||||
- RUST_LOG=info
|
||||
# Use the key generated in the 2nd step
|
||||
- SERVER_SECRET_KEY=CHANGE_ME!!SAME_AS_INVIDIOUS_COMPANION_SECRET_KEY_FROM_INVIDIOUS_CONFIG
|
||||
restart: unless-stopped
|
||||
# Uncomment only if you have configured "public_url" for Invidious companion
|
||||
# Or if you want to use Invidious companion as an API in your program.
|
||||
# Remove "127.0.0.1:" if used from an external IP
|
||||
#ports:
|
||||
# - "127.0.0.1:8282:8282"
|
||||
logging:
|
||||
options:
|
||||
max-size: "1G"
|
||||
max-file: "4"
|
||||
cap_drop:
|
||||
- ALL
|
||||
read_only: true
|
||||
# cache for youtube library
|
||||
volumes:
|
||||
- companioncache:/var/tmp/youtubei.js:rw
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
|
||||
|
|
@ -126,6 +133,7 @@ Make sure to run the newer Docker Compose V2: https://docs.docker.com/compose/in
|
|||
|
||||
volumes:
|
||||
postgresdata:
|
||||
companioncache:
|
||||
```
|
||||
|
||||
Note: This compose is made for a true "production" setup, where Invidious is behind a reverse proxy. If you prefer to directly access Invidious, replace `127.0.0.1:3000:3000` with `3000:3000` under the `ports:` section.
|
||||
|
|
@ -136,10 +144,10 @@ Make sure to run the newer Docker Compose V2: https://docs.docker.com/compose/in
|
|||
docker compose up -d
|
||||
```
|
||||
|
||||
|
||||
### Docker-compose method (development)
|
||||
|
||||
**This method builds a Docker image from source**
|
||||
**Playback won't work without Invidious companion configured.**
|
||||
|
||||
```bash
|
||||
git clone https://github.com/iv-org/invidious.git
|
||||
|
|
@ -152,42 +160,11 @@ docker-compose up
|
|||
|
||||
### Linux
|
||||
|
||||
#### Generate po_token and visitor_data identities
|
||||
|
||||
[Follow these instructions here on the official tool `youtube-trusted-session-generator`](https://github.com/iv-org/youtube-trusted-session-generator?tab=readme-ov-file#tutorial-without-docker)
|
||||
|
||||
These two parameters will be required for passing all verification checks on YouTube side and you will have to configure them in Invidious.
|
||||
|
||||
You have to run this command on the same public IP address as the one blocked by YouTube. Not necessarily the same machine, just the same public IP address.
|
||||
You will need to copy these two parameters in the `config.yaml` file.
|
||||
Subsequent usage of this same token will work on the same IP range or even the same ASN. The point is to generate this token on a blocked IP as "unblocked" IP addresses seems to not generate a token valid for passing the checks on a blocked IP.
|
||||
|
||||
??? warning "About po_token and visitor_data identities"
|
||||
|
||||
po_token known as Proof of Origin Token. This is an attestation token generated by a complex anti robot verification system created by Google named BotGuard/DroidGuard. It is used to confirm that the request is coming from a genuine device.
|
||||
|
||||
These identity tokens (po_token and visitor_data) generated in this tutorial will make your entire Invidious session more easily traceable by YouTube because it is tied to a unique identifier.
|
||||
|
||||
There is currently no official automatic tool to periodically change these tokens. This is working in progress but, for the time being, this is the solution the Invidious team is offering.
|
||||
|
||||
If you want to be less traceable, you can always script the process by changing the identities every X hour.
|
||||
|
||||
|
||||
#### Run inv_sig_helper in background
|
||||
|
||||
[Follow these instructions here on the official tool `inv_sig_helper`](https://github.com/iv-org/inv_sig_helper?tab=readme-ov-file#building-and-running-without-docker) and run it in the background with systemd for example.
|
||||
|
||||
inv_sig_helper handle the "deciphering" of the video stream fetched from YouTube servers. As it is running untrusted code from Google themselves, make sure to isolate it by for example running it inside a LXC or locked down through systemd.
|
||||
|
||||
The following systemd service file can be used to run inv_sig_helper with systemd: https://github.com/iv-org/inv_sig_helper/blob/master/inv_sig_helper.service
|
||||
|
||||
#### Install Crystal
|
||||
|
||||
Follow the instructions for your distribution here: https://crystal-lang.org/install/
|
||||
|
||||
**Note:** Invidious currently supports the following Crystal versions: `1.12.x` / `1.13.x` / `1.14.x`. \
|
||||
Versions `1.11.x` and older are incompatible because we use features only present in the newer versions. \
|
||||
Versions `1.15.x` should be compatible, however we did not test it.
|
||||
**Note:** Invidious currently supports the following Crystal versions: `1.14.x` / `1.15.x` / `1.16.x`.
|
||||
|
||||
#### Install the dependencies
|
||||
|
||||
|
|
@ -235,23 +212,52 @@ make
|
|||
# Configure config/config.yml as you like
|
||||
cp config/config.example.yml config/config.yml
|
||||
|
||||
# edit config.yaml to include po_token and visitor_data previously generated
|
||||
# edit config.yaml to include invidious companion
|
||||
|
||||
edit config/config.yaml
|
||||
|
||||
add:
|
||||
invidious_companion:
|
||||
# URL used for the internal communication between invidious and invidious companion
|
||||
- private_url: "http://localhost:8282/companion"
|
||||
# IT is NOT recommended to use the same key as HMAC KEY. Generate a new key!
|
||||
invidious_companion_key: "CHANGE_ME!!"
|
||||
|
||||
# Deploy the database
|
||||
./invidious --migrate
|
||||
|
||||
exit
|
||||
```
|
||||
|
||||
#### Systemd service
|
||||
#### Systemd service for Invidious
|
||||
|
||||
```bash
|
||||
cp /home/invidious/invidious/invidious.service /etc/systemd/system/invidious.service
|
||||
systemctl enable --now invidious.service
|
||||
```
|
||||
|
||||
#### Set up Invidious companion
|
||||
|
||||
```bash
|
||||
|
||||
# wget from a binary release
|
||||
# https://github.com/iv-org/invidious-companion/releases/tag/master
|
||||
|
||||
wget https://github.com/iv-org/invidious-companion/releases/download/master/invidious_companion-x86_64-unknown-linux-gnu.tar.gz
|
||||
|
||||
# or compile it using https://docs.deno.com/runtime/
|
||||
git clone https://github.com/iv-org/invidious-companion.git
|
||||
deno task compile
|
||||
|
||||
# launch it manually
|
||||
SERVER_SECRET_KEY=CHANGE_ME!!SAME_AS_INVIDIOUS_COMPANION_SECRET_KEY_FROM_INVIDIOUS_CONFIG ./invidious-companion
|
||||
|
||||
See more docs about the environment variables: https://github.com/iv-org/invidious-companion/wiki/Environment-variables
|
||||
|
||||
sudo wget https://github.com/iv-org/invidious-companion/raw/refs/heads/master/invidious-companion.service -O /etc/systemd/systemd/invidious-companion.service
|
||||
sudo systemctl enable --now invidious.service
|
||||
```
|
||||
|
||||
### MacOS
|
||||
|
||||
We recommend installing [Docker desktop](https://docs.docker.com/desktop/setup/install/mac-install/) and then following [our guide about Docker](#docker) which will make the installation easier.
|
||||
|
|
@ -273,13 +279,13 @@ Take a look at the community installation guide: [here](./community-installation
|
|||
|
||||
## Post-install configuration:
|
||||
|
||||
### Highly recommended
|
||||
|
||||
Detailed configuration available in the [configuration guide](./configuration.md).
|
||||
|
||||
You must set a random generated value for the parameter `hmac_key:`! On Linux you can generate it using the command `pwgen 20 1`.
|
||||
|
||||
Because of various issues, Invidious **must** be restarted often, at least once a day, ideally every hour.
|
||||
|
||||
If you use a reverse proxy, you **must** configure Invidious to properly serve request through it:
|
||||
1. You must set a random generated value for the parameter `hmac_key:`! On Linux you can generate it using the command `pwgen 20 1`.
|
||||
2. Because of various issues, Invidious **must** be restarted often, at least once a day, ideally every hour.
|
||||
3. If you use a reverse proxy, you **must** configure Invidious to properly serve request through it:
|
||||
|
||||
`https_only: true` : if you are serving your instance via https, set it to true
|
||||
|
||||
|
|
@ -291,6 +297,24 @@ If you use a reverse proxy, you **must** configure Invidious to properly serve r
|
|||
|
||||
`use_innertube_for_captions: true`: if you are serving a public instance or you are hosting Invidious in a datacenter, allow to unblock captions ([detailed explanation](https://github.com/iv-org/invidious/issues/2567#issuecomment-1727928996)).
|
||||
|
||||
### Advanced (improve performance)
|
||||
|
||||
For performance reasons, you may configure Invidious companion to be served directly under your reverse proxy for serving the video streams.
|
||||
|
||||
This will greatly improve your playback when used by multiple users.
|
||||
|
||||
Uncomment `public_url` for the parameter `invidious_companion:` in Invidious config.yaml and configure it like this:
|
||||
|
||||
Configure the `public_url` to be the same as the domain used for Invidious or on a separate domain (if you want) with the path `/companion`.
|
||||
Examples: `https://MYINVIDIOUSDOMAIN/companion` or `https://COMPANION.MYINVIDIOUSDOMAIN/companion`.
|
||||
|
||||
Then configure your reverse proxy:
|
||||
|
||||
- [NGINX](./companion-nginx.md)
|
||||
- [Apache2](./companion-apache2.md)
|
||||
- [Caddy](./companion-caddy.md)
|
||||
- [Traefik](./companion-traefik.md)
|
||||
|
||||
## Update Invidious
|
||||
|
||||
#### Updating a Docker install
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue