diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..2d08e3ff --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,21 @@ +version: '3' +services: + postgres: + build: + context: . + dockerfile: docker/Dockerfile.postgres + restart: unless-stopped + volumes: + - postgresdata:/var/lib/postgresql/data + invidious: + build: + context: . + dockerfile: docker/Dockerfile + restart: unless-stopped + ports: + - "3000:3000" + depends_on: + - postgres + +volumes: + postgresdata: diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000..0197db94 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,15 @@ +FROM archlinux/base + +RUN pacman -Sy --noconfirm shards crystal imagemagick librsvg \ + which pkgconf gcc ttf-liberation +# base-devel contains many other basic packages, that are normally assumed to already exist on a clean arch system + +ADD . /invidious + +WORKDIR /invidious + +RUN sed -i 's/host: localhost/host: postgres/' config/config.yml && \ + shards && \ + crystal build src/invidious.cr + +CMD [ "/invidious/invidious" ] diff --git a/docker/Dockerfile.postgres b/docker/Dockerfile.postgres new file mode 100644 index 00000000..3186e050 --- /dev/null +++ b/docker/Dockerfile.postgres @@ -0,0 +1,10 @@ +FROM postgres:10 + +ENV POSTGRES_USER postgres + +ADD ./setup.sh /setup.sh +ADD ./config/sql /config/sql +ADD ./docker/entrypoint.postgres.sh /entrypoint.sh + +ENTRYPOINT [ "/entrypoint.sh" ] +CMD [ "postgres" ] diff --git a/docker/entrypoint.postgres.sh b/docker/entrypoint.postgres.sh new file mode 100755 index 00000000..2f3ae65f --- /dev/null +++ b/docker/entrypoint.postgres.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +CMD="$@" +if [ ! -f /var/lib/postgresql/data/setupFinished ]; then + echo "### first run - setting up invidious database" + /usr/local/bin/docker-entrypoint.sh postgres & + sleep 10 + until runuser -l postgres -c 'pg_isready' 2>/dev/null; do + >&2 echo "### Postgres is unavailable - waiting" + sleep 5 + done + >&2 echo "### importing table schemas" + su postgres -c "/setup.sh" && touch /var/lib/postgresql/data/setupFinished + echo "### invidious database setup finished" + exit +fi + +echo "running postgres /usr/local/bin/docker-entrypoint.sh $CMD" +exec /usr/local/bin/docker-entrypoint.sh $CMD diff --git a/setup.sh b/setup.sh index 64097c3c..accae8dd 100755 --- a/setup.sh +++ b/setup.sh @@ -1,7 +1,8 @@ #!/bin/bash createdb invidious -createuser kemal +#createuser kemal +psql -c "CREATE USER kemal WITH PASSWORD 'kemal';" psql invidious < config/sql/channels.sql psql invidious < config/sql/videos.sql psql invidious < config/sql/channel_videos.sql