documentation/docs/community-installation-guide.md
Daniel Mendizabal fc5f83cb4e
Add new page: Community Installation Guide (#473)
* Create community-installation-guide

* Update and rename community-installation-guide to community-installation-guide.md

* Update community-installation-guide.md
2023-12-21 10:41:05 +01:00

3.1 KiB

Community Installation Guide

After installation take a look at the Post-install steps.

Podman (rootless container)

Podman is usually pre-installed in Fedora, CentOS, RHEL and derivatives. But if this is not the case, the instruction below will install all necessary packages.

RHEL based and RHEL-like systems

sudo dnf install podman

Download the configuration files from Invidious' repository

Note: Currently the repository has to be cloned, this is because the init-invidious-db.sh file and the config/sql directory have to be mounted to the postgres container (See the volumes section in the postgres' container). This "problem" will be solved in the future.

<INV-PATH> Absolute path in your home directory where invidious will be downloaded (e.i. /home/johnsmith/.inv)

cd <INV-PATH>
git clone https://github.com/iv-org/invidious.git

Create Pod - videos

podman pod create --name videos -p 3000:3000

Create Container - postgres

podman create --rm \
--pod videos \
--name postgres \
--label "io.containers.autoupdate=registry" \
--health-cmd='pg_isready -U $POSTGRES_USER -d $POSTGRES_DB' \
-v postgresdata:/var/lib/postgresql/data \
-v <INV-PATH>/invidious/config/sql:/config/sql:z \
-v <INV-PATH>/invidious/docker/init-invidious-db.sh:/docker-entrypoint-initdb.d/init-invidious-db.sh:z \
-e POSTGRES_DB=invidious \
-e POSTGRES_USER=kemal \
-e POSTGRES_PASSWORD=kemal \
docker.io/library/postgres:14

Create Container - invidious

Copy <INV-PATH>/invidious/config/config.example.yml to <INV-PATH>/config.yml and update parameters as required.

podman create --rm \
--pod videos \
--name invidious \
--label "io.containers.autoupdate=registry" \
--health-cmd="wget -nv --tries=1 --spider http://127.0.0.1:3000/api/v1/comments/jNQXAC9IVRw || exit 1" \
--health-interval=30s \
--health-timeout=5s \
--health-retries=2 \
-v <INV-PATH>/config.yml:/invidious/config/config.yml:z,U \
quay.io/invidious/invidious:latest

Create systemd services to manage the Pod

Podman can generate systemd services to handle the life cycle of pods and containers. The instructions below will create 3 service units, and they will be placed in the correct location ready to be used.

cd ~
cp $(podman generate systemd --new --files --name videos) .config/systemd/user

Start Pod

Despite the existance of 3 services, only the one related to the Pod must be used. The life cycle for the 2 containers implementing postgres and invidious will be handled by the pod.

systemctl --user daemon-reload
systemctl --user enable --now pod-videos.service

And similarly, the instruction below will re-start the service:

systemctl --user restart pod-videos.service

If this service runs on a server, it will stop as soon as you logout, because it is running in user space. To ensure it is persistent and remains active after logging out, you will need to enable user lingering.

loginctl enable-linger

Updating to the latest release

podman auto-update
podman image prune -f