Compare commits
No commits in common. "proxy-server" and "master" have entirely different histories.
proxy-serv
...
master
35 changed files with 1059 additions and 567 deletions
|
@ -1,44 +0,0 @@
|
||||||
# Docker images tags
|
|
||||||
COMPANION_TAG="latest"
|
|
||||||
HAPROXY_TAG="3.0"
|
|
||||||
NGINX_TAG="1.27.4"
|
|
||||||
YTPROXY_TAG="latest"
|
|
||||||
GLUETUN_TAG="latest"
|
|
||||||
|
|
||||||
# Reverse proxy
|
|
||||||
REVERSEPROXY_PUBLIC_PORT=443
|
|
||||||
REVERSEPROXY_METRICS_PORT=10000
|
|
||||||
|
|
||||||
# invidious-companion
|
|
||||||
SERVER_MAX_DASH_RESOLUTION=1080
|
|
||||||
VERIFY_REQUESTS=true
|
|
||||||
PORT=8081
|
|
||||||
SERVER_SECRET_KEY=""
|
|
||||||
SERVER_ENCRYPT_QUERY_PARAMS=true
|
|
||||||
PO_TOKEN_CHECK=true
|
|
||||||
JOBS_YOUTUBESESSION_FREQUENCY="*/5 * * * *"
|
|
||||||
MAX_PROXY_RETIRES=2
|
|
||||||
SERVER_ENABLE_METRICS=true
|
|
||||||
SERVER_DISABLE_LOGS=true
|
|
||||||
SERVER_TRACK_UNKNOWN_INNERTUBE_ERRORS=true
|
|
||||||
|
|
||||||
# ytproxy
|
|
||||||
YTPROXY_PORT=8080
|
|
||||||
# Has to be the same as SERVER_SECRET_KEY
|
|
||||||
YTPROXY_SECRET_KEY=""
|
|
||||||
YTPROXY_BLOCK_CHECKER=false
|
|
||||||
|
|
||||||
# Gluetun
|
|
||||||
DOT_PROVIDERS=google
|
|
||||||
HTTPPROXY=on
|
|
||||||
VPN_TYPE=wireguard
|
|
||||||
# Useless
|
|
||||||
BLOCK_MALICIOUS=off
|
|
||||||
# Useless
|
|
||||||
BLOCK_SURVEILLANCE=off
|
|
||||||
# Useless
|
|
||||||
BLOCK_ADS=off
|
|
||||||
# Unbound is installed on most servers
|
|
||||||
DNS_KEEP_NAMESERVER=on
|
|
||||||
DOT=on
|
|
||||||
UPDATER_PERIOD=12h
|
|
13
.env.example
13
.env.example
|
@ -1,13 +0,0 @@
|
||||||
# Reverse proxy
|
|
||||||
COMPANION_HOST=""
|
|
||||||
EXVPP_HOST=""
|
|
||||||
|
|
||||||
# Gluetun
|
|
||||||
UPDATER_VPN_SERVICE_PROVIDERS=
|
|
||||||
VPN_SERVICE_PROVIDER=
|
|
||||||
WIREGUARD_PRIVATE_KEY=
|
|
||||||
#SERVER_HOSTNAMES=""
|
|
||||||
#SERVER_CITIES=""
|
|
||||||
SERVER_COUNTRIES=""
|
|
||||||
ISP=""
|
|
||||||
WIREGUARD_ADDRESSES=
|
|
47
breezewiki/breezewiki.yml
Normal file
47
breezewiki/breezewiki.yml
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
# Save the output of this file and use kubectl create -f to import
|
||||||
|
# it into Kubernetes.
|
||||||
|
#
|
||||||
|
# Created with podman-5.4.0
|
||||||
|
|
||||||
|
# NOTE: If you generated this yaml from an unprivileged and rootless podman container on an SELinux
|
||||||
|
# enabled system, check the podman generate kube man page for steps to follow to ensure that your pod/container
|
||||||
|
# has the right permissions to access the volumes added.
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: breezewiki-config
|
||||||
|
data:
|
||||||
|
config.ini: |
|
||||||
|
canonical_origin = "breezewiki.nadeko.net"
|
||||||
|
debug = false
|
||||||
|
port = 10416
|
||||||
|
strict_proxy = true
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: "2025-02-27T16:49:02Z"
|
||||||
|
labels:
|
||||||
|
app: breezewiki-pod
|
||||||
|
name: breezewiki-pod
|
||||||
|
spec:
|
||||||
|
volumes:
|
||||||
|
- name: config
|
||||||
|
configMap:
|
||||||
|
name: breezewiki-config
|
||||||
|
|
||||||
|
containers:
|
||||||
|
- image: quay.io/pussthecatorg/breezewiki:latest
|
||||||
|
name: breezewiki
|
||||||
|
ports:
|
||||||
|
- containerPort: 10416
|
||||||
|
hostIP: 127.0.0.1
|
||||||
|
hostPort: 10007
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 512Mi
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /app/config.ini
|
||||||
|
subPath: config.ini
|
||||||
|
name: config
|
||||||
|
restartPolicy: Always
|
4
breezewiki/config.ini
Normal file
4
breezewiki/config.ini
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
canonical_origin = "breezewiki.nadeko.net"
|
||||||
|
debug = false
|
||||||
|
port = 10416
|
||||||
|
strict_proxy = true
|
11
breezewiki/docker-compose.yml
Normal file
11
breezewiki/docker-compose.yml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
services:
|
||||||
|
breezewiki:
|
||||||
|
container_name: breezewiki
|
||||||
|
image: quay.io/pussthecatorg/breezewiki:latest
|
||||||
|
restart: always
|
||||||
|
mem_limit: 512mb
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:10007:10416" # Replace with "10416:10416" if you don't use a reverse proxy
|
||||||
|
volumes:
|
||||||
|
- "./config.ini:/app/config.ini"
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
x-common-elements: &common-elements
|
|
||||||
restart: always
|
|
||||||
env_file:
|
|
||||||
- path: ./.common.env
|
|
||||||
- path: ./.env
|
|
||||||
|
|
||||||
services:
|
|
||||||
# NGINX
|
|
||||||
webserver:
|
|
||||||
image: git.nadeko.net/fijxu/nginx-ktls:${NGINX_TAG}
|
|
||||||
<<: *common-elements
|
|
||||||
networks:
|
|
||||||
proxy-server:
|
|
||||||
ipv4_address: 172.50.0.2
|
|
||||||
volumes:
|
|
||||||
- ./nginx.conf:/nginx.conf.template
|
|
||||||
- ./key.key:/certs/cert.pem.key
|
|
||||||
- ./fullchain.pem:/certs/cert.pem
|
|
||||||
- videoplayback_proxy:/tmp
|
|
||||||
ports:
|
|
||||||
- "${REVERSEPROXY_PUBLIC_PORT}:443/tcp"
|
|
||||||
labels:
|
|
||||||
- "com.centurylinklabs.watchtower.enable=true"
|
|
||||||
|
|
||||||
http3-ytproxy:
|
|
||||||
<<: *common-elements
|
|
||||||
extends:
|
|
||||||
file: ./proxy-components.yml
|
|
||||||
service: http3-ytproxy
|
|
||||||
|
|
||||||
companion:
|
|
||||||
<<: *common-elements
|
|
||||||
extends:
|
|
||||||
file: ./proxy-components.yml
|
|
||||||
service: companion
|
|
||||||
|
|
||||||
gluetun:
|
|
||||||
<<: *common-elements
|
|
||||||
extends:
|
|
||||||
file: ./proxy-components.yml
|
|
||||||
service: gluetun
|
|
||||||
|
|
||||||
watchtower:
|
|
||||||
<<: *common-elements
|
|
||||||
extends:
|
|
||||||
file: ./proxy-components.yml
|
|
||||||
service: watchtower
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
videoplayback_proxy:
|
|
||||||
|
|
||||||
networks:
|
|
||||||
proxy-server:
|
|
||||||
driver: bridge
|
|
||||||
ipam:
|
|
||||||
driver: default
|
|
||||||
config:
|
|
||||||
- subnet: 172.50.0.0/24
|
|
||||||
gateway: 172.50.0.1
|
|
|
@ -1,76 +0,0 @@
|
||||||
x-common-elements: &common-elements
|
|
||||||
restart: always
|
|
||||||
env_file:
|
|
||||||
- path: ./.common.env
|
|
||||||
- path: ./.env
|
|
||||||
|
|
||||||
services:
|
|
||||||
# HAProxy
|
|
||||||
webserver:
|
|
||||||
# https://github.com/iuridiniz/haproxy-quic-docker
|
|
||||||
# Image to support QUIC (altrough I don't use QUIC anymore becuase it's
|
|
||||||
# useless for video streaming, for a reason Netflix doesn't even use it)
|
|
||||||
image: iuridiniz/haproxy:${HAPROXY_TAG}
|
|
||||||
<<: *common-elements
|
|
||||||
networks:
|
|
||||||
proxy-server:
|
|
||||||
ipv4_address: 172.50.0.2
|
|
||||||
volumes:
|
|
||||||
- ./haproxy.cfg:/etc/haproxy/haproxy.cfg
|
|
||||||
- ./denylist.txt:/etc/haproxy/denylist.txt
|
|
||||||
- ./key.key:/certs/cert.pem.key
|
|
||||||
- ./fullchain.pem:/certs/cert.pem
|
|
||||||
- videoplayback_proxy:/tmp
|
|
||||||
ports:
|
|
||||||
- "${REVERSEPROXY_PUBLIC_PORT}:443/tcp"
|
|
||||||
- "${REVERSEPROXY_METRICS_PORT}:10000/tcp"
|
|
||||||
|
|
||||||
i2p:
|
|
||||||
image: ghcr.io/purplei2p/i2pd:latest
|
|
||||||
<<: *common-elements
|
|
||||||
networks:
|
|
||||||
proxy-server:
|
|
||||||
ipv4_address: 172.50.0.5
|
|
||||||
# Temporary root user until I make my own I2Pd image
|
|
||||||
user: 0:0
|
|
||||||
volumes:
|
|
||||||
- ./i2pd_data:/home/i2pd/data
|
|
||||||
ports:
|
|
||||||
- "127.0.0.1:7070:7070/tcp"
|
|
||||||
- "51023:51023"
|
|
||||||
|
|
||||||
ytproxy:
|
|
||||||
<<: *common-elements
|
|
||||||
extends:
|
|
||||||
file: ./proxy-components.yml
|
|
||||||
service: ytproxy
|
|
||||||
|
|
||||||
companion:
|
|
||||||
<<: *common-elements
|
|
||||||
extends:
|
|
||||||
file: ./proxy-components.yml
|
|
||||||
service: companion
|
|
||||||
|
|
||||||
gluetun:
|
|
||||||
<<: *common-elements
|
|
||||||
extends:
|
|
||||||
file: ./proxy-components.yml
|
|
||||||
service: gluetun
|
|
||||||
|
|
||||||
watchtower:
|
|
||||||
<<: *common-elements
|
|
||||||
extends:
|
|
||||||
file: ./proxy-components.yml
|
|
||||||
service: watchtower
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
videoplayback_proxy:
|
|
||||||
|
|
||||||
networks:
|
|
||||||
proxy-server:
|
|
||||||
driver: bridge
|
|
||||||
ipam:
|
|
||||||
driver: default
|
|
||||||
config:
|
|
||||||
- subnet: 172.50.0.0/24
|
|
||||||
gateway: 172.50.0.1
|
|
29
forgejo-runner/docker-compose.yml
Normal file
29
forgejo-runner/docker-compose.yml
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
services:
|
||||||
|
docker-in-docker:
|
||||||
|
image: docker:dind
|
||||||
|
container_name: 'forgejo-dind'
|
||||||
|
privileged: 'true'
|
||||||
|
command: ['dockerd', '-H', 'tcp://0.0.0.0:2375', '--tls=false']
|
||||||
|
restart: 'unless-stopped'
|
||||||
|
|
||||||
|
forgejo-runner:
|
||||||
|
image: 'code.forgejo.org/forgejo/runner:3.5.1'
|
||||||
|
container_name: 'forgejo-runner'
|
||||||
|
links:
|
||||||
|
- docker-in-docker
|
||||||
|
depends_on:
|
||||||
|
docker-in-docker:
|
||||||
|
condition: service_started
|
||||||
|
# user: 1001:1001
|
||||||
|
environment:
|
||||||
|
DOCKER_HOST: tcp://docker-in-docker:2375
|
||||||
|
volumes:
|
||||||
|
- ./data:/data
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
restart: 'unless-stopped'
|
||||||
|
privileged: 'true'
|
||||||
|
command: '/bin/sh -c "sleep 5; forgejo-runner daemon"'
|
||||||
|
# command: '/bin/sh -c "while : ; do sleep 1 ; done ;"'
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
forgejo-runner-data:
|
69
haproxy.cfg
69
haproxy.cfg
|
@ -1,69 +0,0 @@
|
||||||
# Good info about TLS speeds: https://istlsfastyet.com/
|
|
||||||
|
|
||||||
global
|
|
||||||
# This because haproxy is dumb and likes to use the maxconnection from the kernel and that is super mega huge making haproxy oom
|
|
||||||
# maxconn 32768
|
|
||||||
# Tied to net.core.somaxconn kernel parameter
|
|
||||||
|
|
||||||
resolvers docker
|
|
||||||
# Without this, if a container crashes, haproxy will not be
|
|
||||||
# able to find where the recreated container is.
|
|
||||||
# Ref: https://stackoverflow.com/a/42135283
|
|
||||||
nameserver dns1 127.0.0.11:53
|
|
||||||
|
|
||||||
defaults
|
|
||||||
mode http
|
|
||||||
timeout client 30s
|
|
||||||
timeout connect 5s
|
|
||||||
timeout server 30s
|
|
||||||
http-reuse safe
|
|
||||||
option splice-auto
|
|
||||||
option tcp-smart-connect
|
|
||||||
|
|
||||||
# Prometheus for graphs
|
|
||||||
frontend prometheus
|
|
||||||
bind *:10000
|
|
||||||
mode http
|
|
||||||
http-request use-service prometheus-exporter if { path /metrics }
|
|
||||||
no log
|
|
||||||
|
|
||||||
frontend www
|
|
||||||
bind *:80
|
|
||||||
# bind *:443 ssl crt /certs/cert.pem alpn h2,http/1.1 allow-0rtt
|
|
||||||
# Restrict to HTTP/1.1 since HTTP/2 is not useful for DASH video streaming.
|
|
||||||
# HTTP/1.1 also uses a fairly low ammount of CPU compared to HTTP/2.
|
|
||||||
# HTTP/2 is useful for requesting a lot of files at the same time, but
|
|
||||||
# for DASH video streaming you download the video in a synchronously way,
|
|
||||||
# making HTTP/2 useless for it.
|
|
||||||
bind *:443 ssl crt /certs/cert.pem alpn http/1.1
|
|
||||||
|
|
||||||
# https://docs.haproxy.org/3.0/configuration.html#4.2-tcp-request%20connection
|
|
||||||
# https://docs.haproxy.org/3.0/configuration.html#4.2-http-request
|
|
||||||
http-request deny if { src -f /etc/haproxy/denylist.txt }
|
|
||||||
|
|
||||||
filter bwlim-out video-streaming default-limit 5000k default-period 1s
|
|
||||||
# QUIC is not really needed for video streaming and it uses a lot of CPU.
|
|
||||||
# Ref: https://news.ycombinator.com/item?id=23585120
|
|
||||||
#bind quic4@:443 ssl crt /certs/cert.pem alpn h3 allow-0rtt
|
|
||||||
#http-after-response add-header alt-svc 'h3=":443"; ma=900'
|
|
||||||
|
|
||||||
# HAPROXY_EXVPP_HOST: The external video playback host
|
|
||||||
# acl c hdr(host) -i "$COMPANION_HOST"
|
|
||||||
# acl cc hdr(host) -i "$COMPANION_HOST":8443
|
|
||||||
# acl h hdr(host) -i "$EXVPP_HOST"
|
|
||||||
# acl hh hdr(host) -i "$EXVPP_HOST":8443
|
|
||||||
|
|
||||||
http-request set-bandwidth-limit video-streaming
|
|
||||||
|
|
||||||
acl health_check path /health
|
|
||||||
http-request return status 200 if health_check
|
|
||||||
|
|
||||||
use_backend http3-ytproxy if { path_beg /videoplayback } || { path /metrics_ytproxy }
|
|
||||||
default_backend companion
|
|
||||||
|
|
||||||
backend http3-ytproxy
|
|
||||||
http-request set-path /metrics if { path /metrics_ytproxy }
|
|
||||||
server s1 unix@/tmp/http-ytproxy.sock
|
|
||||||
|
|
||||||
backend companion
|
|
||||||
server s1 gluetun:8081 check resolvers docker init-addr libc,none
|
|
|
@ -1,46 +0,0 @@
|
||||||
log = stdout
|
|
||||||
loglevel = error
|
|
||||||
|
|
||||||
ipv4 = true
|
|
||||||
ipv6 = false
|
|
||||||
|
|
||||||
port = 51023
|
|
||||||
|
|
||||||
bandwidth = X
|
|
||||||
share = 5
|
|
||||||
|
|
||||||
[ntcp2]
|
|
||||||
enabled = true
|
|
||||||
published = true
|
|
||||||
|
|
||||||
[ssu2]
|
|
||||||
enabled = true
|
|
||||||
published = true
|
|
||||||
|
|
||||||
[http]
|
|
||||||
enabled = true
|
|
||||||
address = 0.0.0.0
|
|
||||||
port = 7070
|
|
||||||
# To prevent "host mismatch" when opening the WebUI
|
|
||||||
strictheaders = false
|
|
||||||
|
|
||||||
[httpproxy]
|
|
||||||
enabled = false
|
|
||||||
address = 0.0.0.0
|
|
||||||
port = 4444
|
|
||||||
|
|
||||||
[socksproxy]
|
|
||||||
enabled = false
|
|
||||||
address = 0.0.0.0
|
|
||||||
port = 4447
|
|
||||||
|
|
||||||
[sam]
|
|
||||||
enabled = false
|
|
||||||
address = 0.0.0.0
|
|
||||||
port = 7656
|
|
||||||
|
|
||||||
[upnp]
|
|
||||||
enabled = false
|
|
||||||
|
|
||||||
[reseed]
|
|
||||||
verify = true
|
|
|
@ -1,5 +0,0 @@
|
||||||
[companion]
|
|
||||||
type=http
|
|
||||||
host=172.50.0.2
|
|
||||||
port=80
|
|
||||||
keys=key.dat
|
|
0
invidious/README.md
Normal file
0
invidious/README.md
Normal file
4
invidious/invidious-all/.env-invidious.example
Normal file
4
invidious/invidious-all/.env-invidious.example
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
#INVIDIOUS_BANNER=""
|
||||||
|
# Fill those 2 environment variables
|
||||||
|
INVIDIOUS_INVIDIOUS_COMPANION_KEY=""
|
||||||
|
INVIDIOUS_HMAC_KEY=""
|
10
invidious/invidious-all/.env-pgbouncer.example
Normal file
10
invidious/invidious-all/.env-pgbouncer.example
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# PG_BOUNCER
|
||||||
|
# Use `/var/run/postgresql/` if you are passing a local
|
||||||
|
# postgresql database running on the host machine
|
||||||
|
# Otherwise, you will need to figure it out how to
|
||||||
|
# configure this if you want to run a separate
|
||||||
|
# postgresql database only for invidious.
|
||||||
|
DB_HOST=/var/run/postgresql/
|
||||||
|
DB_USER=""
|
||||||
|
DB_PASSWORD=""
|
||||||
|
DB_NAME=""
|
398
invidious/invidious-all/botPolicies.json.example
Normal file
398
invidious/invidious-all/botPolicies.json.example
Normal file
|
@ -0,0 +1,398 @@
|
||||||
|
{
|
||||||
|
"bots": [
|
||||||
|
{
|
||||||
|
"name": "amazonbot",
|
||||||
|
"user_agent_regex": "Amazonbot",
|
||||||
|
"action": "DENY"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "googlebot",
|
||||||
|
"user_agent_regex": "\\+http\\://www\\.google\\.com/bot\\.html",
|
||||||
|
"action": "ALLOW",
|
||||||
|
"remote_addresses": [
|
||||||
|
"2001:4860:4801:10::/64",
|
||||||
|
"2001:4860:4801:11::/64",
|
||||||
|
"2001:4860:4801:12::/64",
|
||||||
|
"2001:4860:4801:13::/64",
|
||||||
|
"2001:4860:4801:14::/64",
|
||||||
|
"2001:4860:4801:15::/64",
|
||||||
|
"2001:4860:4801:16::/64",
|
||||||
|
"2001:4860:4801:17::/64",
|
||||||
|
"2001:4860:4801:18::/64",
|
||||||
|
"2001:4860:4801:19::/64",
|
||||||
|
"2001:4860:4801:1a::/64",
|
||||||
|
"2001:4860:4801:1b::/64",
|
||||||
|
"2001:4860:4801:1c::/64",
|
||||||
|
"2001:4860:4801:1d::/64",
|
||||||
|
"2001:4860:4801:1e::/64",
|
||||||
|
"2001:4860:4801:1f::/64",
|
||||||
|
"2001:4860:4801:20::/64",
|
||||||
|
"2001:4860:4801:21::/64",
|
||||||
|
"2001:4860:4801:22::/64",
|
||||||
|
"2001:4860:4801:23::/64",
|
||||||
|
"2001:4860:4801:24::/64",
|
||||||
|
"2001:4860:4801:25::/64",
|
||||||
|
"2001:4860:4801:26::/64",
|
||||||
|
"2001:4860:4801:27::/64",
|
||||||
|
"2001:4860:4801:28::/64",
|
||||||
|
"2001:4860:4801:29::/64",
|
||||||
|
"2001:4860:4801:2::/64",
|
||||||
|
"2001:4860:4801:2a::/64",
|
||||||
|
"2001:4860:4801:2b::/64",
|
||||||
|
"2001:4860:4801:2c::/64",
|
||||||
|
"2001:4860:4801:2d::/64",
|
||||||
|
"2001:4860:4801:2e::/64",
|
||||||
|
"2001:4860:4801:2f::/64",
|
||||||
|
"2001:4860:4801:31::/64",
|
||||||
|
"2001:4860:4801:32::/64",
|
||||||
|
"2001:4860:4801:33::/64",
|
||||||
|
"2001:4860:4801:34::/64",
|
||||||
|
"2001:4860:4801:35::/64",
|
||||||
|
"2001:4860:4801:36::/64",
|
||||||
|
"2001:4860:4801:37::/64",
|
||||||
|
"2001:4860:4801:38::/64",
|
||||||
|
"2001:4860:4801:39::/64",
|
||||||
|
"2001:4860:4801:3a::/64",
|
||||||
|
"2001:4860:4801:3b::/64",
|
||||||
|
"2001:4860:4801:3c::/64",
|
||||||
|
"2001:4860:4801:3d::/64",
|
||||||
|
"2001:4860:4801:3e::/64",
|
||||||
|
"2001:4860:4801:40::/64",
|
||||||
|
"2001:4860:4801:41::/64",
|
||||||
|
"2001:4860:4801:42::/64",
|
||||||
|
"2001:4860:4801:43::/64",
|
||||||
|
"2001:4860:4801:44::/64",
|
||||||
|
"2001:4860:4801:45::/64",
|
||||||
|
"2001:4860:4801:46::/64",
|
||||||
|
"2001:4860:4801:47::/64",
|
||||||
|
"2001:4860:4801:48::/64",
|
||||||
|
"2001:4860:4801:49::/64",
|
||||||
|
"2001:4860:4801:4a::/64",
|
||||||
|
"2001:4860:4801:4b::/64",
|
||||||
|
"2001:4860:4801:4c::/64",
|
||||||
|
"2001:4860:4801:50::/64",
|
||||||
|
"2001:4860:4801:51::/64",
|
||||||
|
"2001:4860:4801:52::/64",
|
||||||
|
"2001:4860:4801:53::/64",
|
||||||
|
"2001:4860:4801:54::/64",
|
||||||
|
"2001:4860:4801:55::/64",
|
||||||
|
"2001:4860:4801:56::/64",
|
||||||
|
"2001:4860:4801:60::/64",
|
||||||
|
"2001:4860:4801:61::/64",
|
||||||
|
"2001:4860:4801:62::/64",
|
||||||
|
"2001:4860:4801:63::/64",
|
||||||
|
"2001:4860:4801:64::/64",
|
||||||
|
"2001:4860:4801:65::/64",
|
||||||
|
"2001:4860:4801:66::/64",
|
||||||
|
"2001:4860:4801:67::/64",
|
||||||
|
"2001:4860:4801:68::/64",
|
||||||
|
"2001:4860:4801:69::/64",
|
||||||
|
"2001:4860:4801:6a::/64",
|
||||||
|
"2001:4860:4801:6b::/64",
|
||||||
|
"2001:4860:4801:6c::/64",
|
||||||
|
"2001:4860:4801:6d::/64",
|
||||||
|
"2001:4860:4801:6e::/64",
|
||||||
|
"2001:4860:4801:6f::/64",
|
||||||
|
"2001:4860:4801:70::/64",
|
||||||
|
"2001:4860:4801:71::/64",
|
||||||
|
"2001:4860:4801:72::/64",
|
||||||
|
"2001:4860:4801:73::/64",
|
||||||
|
"2001:4860:4801:74::/64",
|
||||||
|
"2001:4860:4801:75::/64",
|
||||||
|
"2001:4860:4801:76::/64",
|
||||||
|
"2001:4860:4801:77::/64",
|
||||||
|
"2001:4860:4801:78::/64",
|
||||||
|
"2001:4860:4801:79::/64",
|
||||||
|
"2001:4860:4801:80::/64",
|
||||||
|
"2001:4860:4801:81::/64",
|
||||||
|
"2001:4860:4801:82::/64",
|
||||||
|
"2001:4860:4801:83::/64",
|
||||||
|
"2001:4860:4801:84::/64",
|
||||||
|
"2001:4860:4801:85::/64",
|
||||||
|
"2001:4860:4801:86::/64",
|
||||||
|
"2001:4860:4801:87::/64",
|
||||||
|
"2001:4860:4801:88::/64",
|
||||||
|
"2001:4860:4801:90::/64",
|
||||||
|
"2001:4860:4801:91::/64",
|
||||||
|
"2001:4860:4801:92::/64",
|
||||||
|
"2001:4860:4801:93::/64",
|
||||||
|
"2001:4860:4801:94::/64",
|
||||||
|
"2001:4860:4801:95::/64",
|
||||||
|
"2001:4860:4801:96::/64",
|
||||||
|
"2001:4860:4801:a0::/64",
|
||||||
|
"2001:4860:4801:a1::/64",
|
||||||
|
"2001:4860:4801:a2::/64",
|
||||||
|
"2001:4860:4801:a3::/64",
|
||||||
|
"2001:4860:4801:a4::/64",
|
||||||
|
"2001:4860:4801:a5::/64",
|
||||||
|
"2001:4860:4801:c::/64",
|
||||||
|
"2001:4860:4801:f::/64",
|
||||||
|
"192.178.5.0/27",
|
||||||
|
"192.178.6.0/27",
|
||||||
|
"192.178.6.128/27",
|
||||||
|
"192.178.6.160/27",
|
||||||
|
"192.178.6.192/27",
|
||||||
|
"192.178.6.32/27",
|
||||||
|
"192.178.6.64/27",
|
||||||
|
"192.178.6.96/27",
|
||||||
|
"34.100.182.96/28",
|
||||||
|
"34.101.50.144/28",
|
||||||
|
"34.118.254.0/28",
|
||||||
|
"34.118.66.0/28",
|
||||||
|
"34.126.178.96/28",
|
||||||
|
"34.146.150.144/28",
|
||||||
|
"34.147.110.144/28",
|
||||||
|
"34.151.74.144/28",
|
||||||
|
"34.152.50.64/28",
|
||||||
|
"34.154.114.144/28",
|
||||||
|
"34.155.98.32/28",
|
||||||
|
"34.165.18.176/28",
|
||||||
|
"34.175.160.64/28",
|
||||||
|
"34.176.130.16/28",
|
||||||
|
"34.22.85.0/27",
|
||||||
|
"34.64.82.64/28",
|
||||||
|
"34.65.242.112/28",
|
||||||
|
"34.80.50.80/28",
|
||||||
|
"34.88.194.0/28",
|
||||||
|
"34.89.10.80/28",
|
||||||
|
"34.89.198.80/28",
|
||||||
|
"34.96.162.48/28",
|
||||||
|
"35.247.243.240/28",
|
||||||
|
"66.249.64.0/27",
|
||||||
|
"66.249.64.128/27",
|
||||||
|
"66.249.64.160/27",
|
||||||
|
"66.249.64.224/27",
|
||||||
|
"66.249.64.32/27",
|
||||||
|
"66.249.64.64/27",
|
||||||
|
"66.249.64.96/27",
|
||||||
|
"66.249.65.0/27",
|
||||||
|
"66.249.65.128/27",
|
||||||
|
"66.249.65.160/27",
|
||||||
|
"66.249.65.192/27",
|
||||||
|
"66.249.65.224/27",
|
||||||
|
"66.249.65.32/27",
|
||||||
|
"66.249.65.64/27",
|
||||||
|
"66.249.65.96/27",
|
||||||
|
"66.249.66.0/27",
|
||||||
|
"66.249.66.128/27",
|
||||||
|
"66.249.66.160/27",
|
||||||
|
"66.249.66.192/27",
|
||||||
|
"66.249.66.224/27",
|
||||||
|
"66.249.66.32/27",
|
||||||
|
"66.249.66.64/27",
|
||||||
|
"66.249.66.96/27",
|
||||||
|
"66.249.68.0/27",
|
||||||
|
"66.249.68.128/27",
|
||||||
|
"66.249.68.32/27",
|
||||||
|
"66.249.68.64/27",
|
||||||
|
"66.249.68.96/27",
|
||||||
|
"66.249.69.0/27",
|
||||||
|
"66.249.69.128/27",
|
||||||
|
"66.249.69.160/27",
|
||||||
|
"66.249.69.192/27",
|
||||||
|
"66.249.69.224/27",
|
||||||
|
"66.249.69.32/27",
|
||||||
|
"66.249.69.64/27",
|
||||||
|
"66.249.69.96/27",
|
||||||
|
"66.249.70.0/27",
|
||||||
|
"66.249.70.128/27",
|
||||||
|
"66.249.70.160/27",
|
||||||
|
"66.249.70.192/27",
|
||||||
|
"66.249.70.224/27",
|
||||||
|
"66.249.70.32/27",
|
||||||
|
"66.249.70.64/27",
|
||||||
|
"66.249.70.96/27",
|
||||||
|
"66.249.71.0/27",
|
||||||
|
"66.249.71.128/27",
|
||||||
|
"66.249.71.160/27",
|
||||||
|
"66.249.71.192/27",
|
||||||
|
"66.249.71.224/27",
|
||||||
|
"66.249.71.32/27",
|
||||||
|
"66.249.71.64/27",
|
||||||
|
"66.249.71.96/27",
|
||||||
|
"66.249.72.0/27",
|
||||||
|
"66.249.72.128/27",
|
||||||
|
"66.249.72.160/27",
|
||||||
|
"66.249.72.192/27",
|
||||||
|
"66.249.72.224/27",
|
||||||
|
"66.249.72.32/27",
|
||||||
|
"66.249.72.64/27",
|
||||||
|
"66.249.72.96/27",
|
||||||
|
"66.249.73.0/27",
|
||||||
|
"66.249.73.128/27",
|
||||||
|
"66.249.73.160/27",
|
||||||
|
"66.249.73.192/27",
|
||||||
|
"66.249.73.224/27",
|
||||||
|
"66.249.73.32/27",
|
||||||
|
"66.249.73.64/27",
|
||||||
|
"66.249.73.96/27",
|
||||||
|
"66.249.74.0/27",
|
||||||
|
"66.249.74.128/27",
|
||||||
|
"66.249.74.160/27",
|
||||||
|
"66.249.74.192/27",
|
||||||
|
"66.249.74.32/27",
|
||||||
|
"66.249.74.64/27",
|
||||||
|
"66.249.74.96/27",
|
||||||
|
"66.249.75.0/27",
|
||||||
|
"66.249.75.128/27",
|
||||||
|
"66.249.75.160/27",
|
||||||
|
"66.249.75.192/27",
|
||||||
|
"66.249.75.224/27",
|
||||||
|
"66.249.75.32/27",
|
||||||
|
"66.249.75.64/27",
|
||||||
|
"66.249.75.96/27",
|
||||||
|
"66.249.76.0/27",
|
||||||
|
"66.249.76.128/27",
|
||||||
|
"66.249.76.160/27",
|
||||||
|
"66.249.76.192/27",
|
||||||
|
"66.249.76.224/27",
|
||||||
|
"66.249.76.32/27",
|
||||||
|
"66.249.76.64/27",
|
||||||
|
"66.249.76.96/27",
|
||||||
|
"66.249.77.0/27",
|
||||||
|
"66.249.77.128/27",
|
||||||
|
"66.249.77.160/27",
|
||||||
|
"66.249.77.192/27",
|
||||||
|
"66.249.77.224/27",
|
||||||
|
"66.249.77.32/27",
|
||||||
|
"66.249.77.64/27",
|
||||||
|
"66.249.77.96/27",
|
||||||
|
"66.249.78.0/27",
|
||||||
|
"66.249.78.32/27",
|
||||||
|
"66.249.79.0/27",
|
||||||
|
"66.249.79.128/27",
|
||||||
|
"66.249.79.160/27",
|
||||||
|
"66.249.79.192/27",
|
||||||
|
"66.249.79.224/27",
|
||||||
|
"66.249.79.32/27",
|
||||||
|
"66.249.79.64/27",
|
||||||
|
"66.249.79.96/27"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "bingbot",
|
||||||
|
"user_agent_regex": "\\+http\\://www\\.bing\\.com/bingbot\\.htm",
|
||||||
|
"action": "ALLOW",
|
||||||
|
"remote_addresses": [
|
||||||
|
"157.55.39.0/24",
|
||||||
|
"207.46.13.0/24",
|
||||||
|
"40.77.167.0/24",
|
||||||
|
"13.66.139.0/24",
|
||||||
|
"13.66.144.0/24",
|
||||||
|
"52.167.144.0/24",
|
||||||
|
"13.67.10.16/28",
|
||||||
|
"13.69.66.240/28",
|
||||||
|
"13.71.172.224/28",
|
||||||
|
"139.217.52.0/28",
|
||||||
|
"191.233.204.224/28",
|
||||||
|
"20.36.108.32/28",
|
||||||
|
"20.43.120.16/28",
|
||||||
|
"40.79.131.208/28",
|
||||||
|
"40.79.186.176/28",
|
||||||
|
"52.231.148.0/28",
|
||||||
|
"20.79.107.240/28",
|
||||||
|
"51.105.67.0/28",
|
||||||
|
"20.125.163.80/28",
|
||||||
|
"40.77.188.0/22",
|
||||||
|
"65.55.210.0/24",
|
||||||
|
"199.30.24.0/23",
|
||||||
|
"40.77.202.0/24",
|
||||||
|
"40.77.139.0/25",
|
||||||
|
"20.74.197.0/28",
|
||||||
|
"20.15.133.160/27",
|
||||||
|
"40.77.177.0/24",
|
||||||
|
"40.77.178.0/23"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "qwantbot",
|
||||||
|
"user_agent_regex": "\\+https\\://help\\.qwant\\.com/bot/",
|
||||||
|
"action": "ALLOW",
|
||||||
|
"remote_addresses": [
|
||||||
|
"91.242.162.0/24"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kagibot",
|
||||||
|
"user_agent_regex": "\\+https\\://kagi\\.com/bot",
|
||||||
|
"action": "ALLOW",
|
||||||
|
"remote_addresses": [
|
||||||
|
"216.18.205.234/32",
|
||||||
|
"35.212.27.76/32",
|
||||||
|
"104.254.65.50/32",
|
||||||
|
"209.151.156.194/32"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "marginalia",
|
||||||
|
"user_agent_regex": "search\\.marginalia\\.nu",
|
||||||
|
"action": "ALLOW",
|
||||||
|
"remote_addresses": [
|
||||||
|
"193.183.0.162/31",
|
||||||
|
"193.183.0.164/30",
|
||||||
|
"193.183.0.168/30",
|
||||||
|
"193.183.0.172/31",
|
||||||
|
"193.183.0.174/32"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mojeekbot",
|
||||||
|
"user_agent_regex": "http\\://www\\.mojeek\\.com/bot\\.html",
|
||||||
|
"action": "ALLOW",
|
||||||
|
"remote_addresses": [
|
||||||
|
"5.102.173.71/32"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "us-artificial-intelligence-scraper",
|
||||||
|
"user_agent_regex": "\\+https\\://github\\.com/US-Artificial-Intelligence/scraper",
|
||||||
|
"action": "DENY"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "well-known",
|
||||||
|
"path_regex": "^/.well-known/.*$",
|
||||||
|
"action": "ALLOW"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "favicon",
|
||||||
|
"path_regex": "^/favicon.ico$",
|
||||||
|
"action": "ALLOW"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "robots-txt",
|
||||||
|
"path_regex": "^/robots.txt$",
|
||||||
|
"action": "ALLOW"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "lightpanda",
|
||||||
|
"user_agent_regex": "^Lightpanda/.*$",
|
||||||
|
"action": "DENY"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "headless-chrome",
|
||||||
|
"user_agent_regex": "HeadlessChrome",
|
||||||
|
"action": "DENY"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "headless-chromium",
|
||||||
|
"user_agent_regex": "HeadlessChromium",
|
||||||
|
"action": "DENY"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "generic-bot-catchall",
|
||||||
|
"user_agent_regex": "(?i:bot|crawler)",
|
||||||
|
"action": "CHALLENGE",
|
||||||
|
"challenge": {
|
||||||
|
"difficulty": 16,
|
||||||
|
"report_as": 4,
|
||||||
|
"algorithm": "slow"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "generic-browser",
|
||||||
|
"user_agent_regex": "Mozilla",
|
||||||
|
"action": "CHALLENGE"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dnsbl": false
|
||||||
|
}
|
90
invidious/invidious-all/config.yml.example
Normal file
90
invidious/invidious-all/config.yml.example
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
# Fill the required fields!
|
||||||
|
database_url: postgres://<db_user>:<db_password>@pgbouncer:5432/<db_name>
|
||||||
|
# Main domain from where
|
||||||
|
domain: "fill me"
|
||||||
|
|
||||||
|
# Sane defaults, leave them like this
|
||||||
|
channel_threads: 0
|
||||||
|
log_level: Info
|
||||||
|
colorize_logs: true
|
||||||
|
redis_url: tcp://valkey:6379
|
||||||
|
https_only: true
|
||||||
|
use_pubsub_feeds: false
|
||||||
|
popular_enabled: true
|
||||||
|
captcha_enabled: true
|
||||||
|
login_enabled: true
|
||||||
|
registration_enabled: true
|
||||||
|
statistics_enabled: true
|
||||||
|
external_port: 443
|
||||||
|
cache_annotations: true
|
||||||
|
hsts: true
|
||||||
|
enable_user_notifications: true
|
||||||
|
force_resolve: ipv4
|
||||||
|
pool_size: 100
|
||||||
|
use_innertube_for_captions: true
|
||||||
|
|
||||||
|
# DO NOT CHANGE THIS UNLESS YOU DID A FORK OF MY FORK
|
||||||
|
modified_source_code_url: https://git.nadeko.net/Fijxu/invidious
|
||||||
|
|
||||||
|
# It's recommended to disable downloads from Invidious to prevent abuse
|
||||||
|
disable_proxy:
|
||||||
|
- downloads
|
||||||
|
|
||||||
|
instance_maintainer_email: admin@example.com
|
||||||
|
footer_instance_donate_link: ""
|
||||||
|
footer_instance_section_custom_fields:
|
||||||
|
- ["Example1", "https://example.com"]
|
||||||
|
- ["Example2", "https://example.com"]
|
||||||
|
|
||||||
|
# inv.nadeko.net only options
|
||||||
|
pubsub_domain: https://inv.nadeko.net
|
||||||
|
|
||||||
|
# This option only works when Invidious is in use with
|
||||||
|
# inv_sig_helper.
|
||||||
|
max_dash_resolution: 1080
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
refresh_channels:
|
||||||
|
enable: false
|
||||||
|
subscribe_to_feeds:
|
||||||
|
enable: false
|
||||||
|
|
||||||
|
default_user_preferences:
|
||||||
|
region: CL
|
||||||
|
dark_mode: dark
|
||||||
|
autoplay: true
|
||||||
|
quality: dash
|
||||||
|
save_player_pos: true
|
||||||
|
extend_desc: true
|
||||||
|
# Leave local like this due to a bug with VideoJS
|
||||||
|
#local: false
|
||||||
|
|
||||||
|
invidious_companion:
|
||||||
|
# private_url has to be the same as public_url if
|
||||||
|
# invidious companion is running on an external server
|
||||||
|
- private_url: "http://companion:8282"
|
||||||
|
public_url: "https://inv-companion.example.com"
|
||||||
|
i2p_public_url: "http://invcluifpcrybsji4imau42raygqc67ex3g65ff2md236gx37cgq.b32.i2p"
|
||||||
|
# Optional
|
||||||
|
note: "(CL)"
|
||||||
|
domain: ["inv1.nadeko.net", "inv1.nadekonw7plitnjuawu6ytjsl7jlglk2t6pyq6eftptmiv3dvqndwvyd.onion", "nadekoohummkxncchcsylr3eku36ze4waq4kdrhcqupckc3pe5qq.b32.i2p"]
|
||||||
|
|
||||||
|
# Cookie used so the user can switch between different
|
||||||
|
# companions on if there is more than one invidious_companion
|
||||||
|
server_id_cookie_name: "COMPANION_IDD"
|
||||||
|
|
||||||
|
# Leave this like this
|
||||||
|
# Backend 0 is postgresql
|
||||||
|
# Backend 1 is redis
|
||||||
|
# Backend 2 is built-in LRU (Not recommeneded, just for development purposes)
|
||||||
|
video_cache:
|
||||||
|
enabled: true
|
||||||
|
backend: 1
|
||||||
|
|
||||||
|
# This forces videoplayback proxy for all videos preveting
|
||||||
|
# the ip and tokens used on companion being leaked on the frontend
|
||||||
|
force_local: true
|
||||||
|
|
||||||
|
# Interval on which the invidious companions are being checked.
|
||||||
|
# Used to display a status dot next to the selected backend
|
||||||
|
check_backends_interval: 30
|
151
invidious/invidious-all/docker-compose.yml
Normal file
151
invidious/invidious-all/docker-compose.yml
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
# Docker compose file for inv.nadeko.net
|
||||||
|
|
||||||
|
# https://docs.docker.com/compose/how-tos/multiple-compose-files/include/
|
||||||
|
# Not used anymore, that is why it's commented
|
||||||
|
# include:
|
||||||
|
# - ../valkey-invidious/docker-compose.yml
|
||||||
|
# #- ../invidious-companion/docker-compose.yml
|
||||||
|
|
||||||
|
# https://docs.docker.com/reference/compose-file/extension/
|
||||||
|
x-common-invidious-env: &common-invidious-env
|
||||||
|
INVIDIOUS_CONFIG_FILE: "/etc/invidious/config.yml"
|
||||||
|
|
||||||
|
x-common: &common-invidious
|
||||||
|
#hostname: invidious
|
||||||
|
env_file:
|
||||||
|
# Env file containing INVIDIOUS_* variables
|
||||||
|
- .env-invidious
|
||||||
|
image: "git.nadeko.net/fijxu/invidious:latest"
|
||||||
|
restart: always
|
||||||
|
###
|
||||||
|
# I recommend leaving this like this
|
||||||
|
mem_limit: 780MB
|
||||||
|
cpus: 0.50
|
||||||
|
deploy:
|
||||||
|
replicas: 4
|
||||||
|
###
|
||||||
|
volumes:
|
||||||
|
# Thist postgresql mount is not needed anymore since I use pgbouncer now
|
||||||
|
# which is at the end of this docker compose file
|
||||||
|
# - /var/run/postgresql/.s.PGSQL.5432:/var/run/postgresql/.s.PGSQL.5432:rw
|
||||||
|
- ./config.yml:/etc/invidious/config.yml:ro
|
||||||
|
# Watchtower checks in intervals of 60 seconds for fast container updates.
|
||||||
|
# It needs to have a scope or Watchtower will spam docker servers asking
|
||||||
|
# for a new image update therefore rate limiting me
|
||||||
|
labels: [ "com.centurylinklabs.watchtower.scope=trusted-fast" ]
|
||||||
|
|
||||||
|
x-common-haproxy: &common-haproxy
|
||||||
|
hostname: haproxy
|
||||||
|
image: haproxy:lts-alpine
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
|
||||||
|
|
||||||
|
x-common-anubis-env: &common-anubis-env
|
||||||
|
DIFFICULTY: "3"
|
||||||
|
SERVE_ROBOTS_TXT: "true"
|
||||||
|
BIND: "0.0.0.0:4000"
|
||||||
|
METRICS_BIND: "0.0.0.0:9090"
|
||||||
|
POLICY_FNAME: "/data/cfg/botPolicy.json"
|
||||||
|
|
||||||
|
x-common-anubis: &common-anubis
|
||||||
|
image: git.nadeko.net/fijxu/anubis:latest
|
||||||
|
restart: always
|
||||||
|
env_file:
|
||||||
|
- .env-anubis
|
||||||
|
volumes:
|
||||||
|
- "./botPolicy.json:/data/cfg/botPolicy.json:ro"
|
||||||
|
labels: [ "com.centurylinklabs.watchtower.scope=trusted-fast" ]
|
||||||
|
|
||||||
|
x-common-valkey: &common-valkey
|
||||||
|
image: valkey/valkey:7.2-alpine
|
||||||
|
hostname: valkey
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ./valkey.conf:/usr/local/etc/valkey/valkey.conf
|
||||||
|
command: "valkey-server /usr/local/etc/valkey/valkey.conf"
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
# INVIDIOUS SECTION #
|
||||||
|
invidious:
|
||||||
|
<<: *common-invidious
|
||||||
|
environment:
|
||||||
|
<<: *common-invidious-env
|
||||||
|
networks:
|
||||||
|
- invidious
|
||||||
|
depends_on:
|
||||||
|
- valkey
|
||||||
|
- pgbouncer
|
||||||
|
- haproxy
|
||||||
|
- anubis-inv
|
||||||
|
|
||||||
|
# YTPROXY to proxy images, just for Fijxu's debugging purposes!
|
||||||
|
# ytproxy:
|
||||||
|
# image: git.nadeko.net/fijxu/http3-ytproxy:latest
|
||||||
|
# ports:
|
||||||
|
# - "127.0.0.1:12403:8080/tcp"
|
||||||
|
|
||||||
|
# ANUBIS SECTION #
|
||||||
|
anubis-inv:
|
||||||
|
<<: *common-anubis
|
||||||
|
environment:
|
||||||
|
<<: *common-anubis-env
|
||||||
|
TARGET: "http://invidious:3000"
|
||||||
|
networks:
|
||||||
|
- invidious
|
||||||
|
ports:
|
||||||
|
- 127.0.0.1:9051:9090
|
||||||
|
|
||||||
|
# HAPROXY SECTION #
|
||||||
|
haproxy:
|
||||||
|
<<: *common-haproxy
|
||||||
|
ports:
|
||||||
|
# Port to expose invidious
|
||||||
|
- "127.0.0.1:11101:8001"
|
||||||
|
# Port to expose the prometheus metrics
|
||||||
|
- "127.0.0.1:11111:8404"
|
||||||
|
networks:
|
||||||
|
- invidious
|
||||||
|
|
||||||
|
valkey:
|
||||||
|
<<: *common-valkey
|
||||||
|
networks:
|
||||||
|
- invidious
|
||||||
|
|
||||||
|
# Pgbouncer to keep connections to the database open
|
||||||
|
pgbouncer:
|
||||||
|
image: edoburu/pgbouncer
|
||||||
|
restart: unless-stopped
|
||||||
|
env_file:
|
||||||
|
- .env-pgbouncer
|
||||||
|
environment:
|
||||||
|
- POOL_MODE=transaction
|
||||||
|
# Everything is being done locally
|
||||||
|
# https://www.pgbouncer.org/config.html
|
||||||
|
- AUTH_TYPE=trust
|
||||||
|
mem_limit: "128m"
|
||||||
|
volumes:
|
||||||
|
- /var/run/postgresql/.s.PGSQL.5432:/var/run/postgresql/.s.PGSQL.5432:rw
|
||||||
|
networks:
|
||||||
|
- invidious
|
||||||
|
|
||||||
|
networks:
|
||||||
|
invidious:
|
||||||
|
name: invidious
|
||||||
|
|
||||||
|
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠤⠤⢤⣄⡤⠤⣤⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
# ⠀⠀⠀⠀⠀⠀⠀⢀⣠⠤⠀⡴⠋⠀⠀⠀⠀⠀⠉⠒⢌⠉⠛⣽⡲⣄⡀⠀⠀⠀⠀⠀⠀
|
||||||
|
# ⠀⠀⠀⠀⠀⣠⠾⠉⠀⠀⠀⠀⣄⠀⠀⠀⠀⠀⢀⣀⠀⣥⡤⠜⠊⣈⢻⣆⠀⠀⠀⠀⠀
|
||||||
|
# ⠀⠀⠀⣠⠾⠁⠔⠨⠂⠀⢀⠘⡜⡦⣀⡴⡆⠛⠒⠙⡴⡀⠘⡆⠀⠀⠛⡙⢷⡀⠀⠀⠀
|
||||||
|
# ⠀⠀⡴⠃⠀⠀⠀⠀⢀⣠⡼⠟⡏⡏⠙⣇⢸⡄⠀⠀⢹⠏⠁⢹⡳⣤⠀⠘⡌⣷⠀⠀⠀
|
||||||
|
# ⠀⣸⠃⠀⡠⠖⢲⠀⠀⣸⠃⢰⡇⡇⠀⢸⣌⣇⢀⠀⣸⣷⣀⡼⢣⡇⠀⠀⢹⣹⠀⠀⠀
|
||||||
|
# ⠀⡏⠀⡜⠁⠀⠁⠀⡰⢃⣴⣷⢟⣿⡟⡲⠟⠻⠊⠙⠃⣼⣿⣻⣾⡇⠀⠀⢸⡿⠀⠀⠀
|
||||||
|
# ⠀⡇⠰⡇⠀⢀⡠⠞⡗⢩⡟⢸⡏⠀⢹⡇⠀⠀⠀⠀⠀⢸⣿⠉⢱⣿⠠⢤⣟⠁⠀⠀⠀
|
||||||
|
# ⠀⣧⠀⠉⠉⠉⠀⢸⠦⡸⡅⢸⣏⠒⣱⠇⠀⠀⠀⠀⠀⠀⢿⣅⡽⠙⢦⠀⢈⣳⡄⠀⠀
|
||||||
|
# ⠀⡟⠀⠀⠀⠀⠀⠘⠀⣘⡌⣀⡉⠉⠁⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠁⠀⡸⠛⠜⡷⣠⠀
|
||||||
|
# ⢸⠃⠀⠀⠀⠀⣀⡫⣿⣮⡀⠀⠀⠀⠀⠀⢠⠤⠶⡦⡤⠀⠀⠀⠀⠀⢠⠇⡀⠸⣧⣤⡆
|
||||||
|
# ⡟⠀⠀⠀⠀⠀⠀⡄⢠⠉⢇⠀⡄⠀⠀⠀⠘⢦⣀⡸⠃⠀⠀⠀⢀⡠⠋⠈⠛⢷⡖⠋⠀
|
||||||
|
# ⡇⢀⠀⠀⠀⠀⠀⢇⠀⢕⣺⣿⣅⡀⠀⠀⠀⠀⠀⠀⢀⣠⠤⠒⠉⠀⢠⣄⡶⠋⠀⠀⠀
|
||||||
|
# ⠻⢾⣼⣦⣀⠀⡄⠈⠓⢦⣼⣿⣍⠉⠻⣄⠀⢈⠏⠉⣿⣦⡀⠀⢀⣠⠾⠀⠀⠀⠀⠀⠀
|
||||||
|
# ⠀⠀⠈⠀⠉⠙⠓⠛⣦⡼⠘⣿⣿⣷⣤⣀⣹⠞⢤⣼⣿⣿⠈⢶⡋⠁⠀⠀⠀⠀⠀⠀⠀
|
57
invidious/invidious-all/haproxy.cfg
Normal file
57
invidious/invidious-all/haproxy.cfg
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# Notes:
|
||||||
|
# Why I deleted `balance roundrobin`:
|
||||||
|
#
|
||||||
|
# https://www.haproxy.com/documentation/haproxy-configuration-manual/latest/#4-balance:
|
||||||
|
# The load balancing algorithm of a backend is set to roundrobin when no other
|
||||||
|
# algorithm, mode nor option have been set. The algorithm may only be set once
|
||||||
|
# for each backend.
|
||||||
|
#
|
||||||
|
# ---
|
||||||
|
# Why I removed `option http-keep-alive`: This is on by default
|
||||||
|
|
||||||
|
global
|
||||||
|
# This because haproxy is dumb and likes to use the maxconnection (somaxconn) from the kernel and that is super mega huge making haproxy oom
|
||||||
|
maxconn 8192
|
||||||
|
|
||||||
|
resolvers docker
|
||||||
|
# To be able to use multiple replicas of invidious
|
||||||
|
# using domains
|
||||||
|
nameserver dns1 127.0.0.11:53
|
||||||
|
|
||||||
|
defaults
|
||||||
|
mode http
|
||||||
|
# https://www.haproxy.com/documentation/haproxy-configuration-tutorials/service-reliability/retries/
|
||||||
|
# Use another server if one takes too long to reply
|
||||||
|
retries 4
|
||||||
|
option redispatch
|
||||||
|
timeout client 10s
|
||||||
|
timeout connect 5s
|
||||||
|
# The default timeout of http request on invidious is 10 seconds.
|
||||||
|
# If this is less than 10 seconds, the reverse proxy may return
|
||||||
|
# "503 service unavailable", not letting invidious respond to
|
||||||
|
# the client.
|
||||||
|
timeout server 30s
|
||||||
|
timeout queue 20s
|
||||||
|
# https://www.haproxy.com/documentation/haproxy-configuration-manual/latest/#4.2-http-reuse
|
||||||
|
http-reuse safe
|
||||||
|
|
||||||
|
# Prometheus for graphs
|
||||||
|
frontend prometheus
|
||||||
|
bind *:8404
|
||||||
|
mode http
|
||||||
|
http-request use-service prometheus-exporter if { path /metrics }
|
||||||
|
no log
|
||||||
|
|
||||||
|
frontend invidious
|
||||||
|
bind *:8001
|
||||||
|
|
||||||
|
# Use anubis only for /watch path
|
||||||
|
use_backend anubis-inv if { path /watch } || { path_beg /.within.website }
|
||||||
|
default_backend invidious
|
||||||
|
|
||||||
|
backend anubis-inv
|
||||||
|
server srv1 anubis-inv:4000 check resolvers docker init-addr libc,none
|
||||||
|
|
||||||
|
backend invidious
|
||||||
|
server-template srv 4 invidious:3000 check resolvers docker init-addr libc,none
|
||||||
|
|
7
invidious/invidious-all/valkey.conf
Normal file
7
invidious/invidious-all/valkey.conf
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
maxmemory 2048mb
|
||||||
|
maxmemory-policy volatile-lfu
|
||||||
|
|
||||||
|
# Disable AOF
|
||||||
|
appendonly no
|
||||||
|
# Disable RDB
|
||||||
|
save ""
|
25
invidious/invidious-feed-receiver/docker-compose.yml
Normal file
25
invidious/invidious-feed-receiver/docker-compose.yml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
# Docker compose file for the feed reciever of inv.nadeko.net
|
||||||
|
|
||||||
|
x-labels: &labels
|
||||||
|
labels: [ "com.centurylinklabs.watchtower.scope=invidious" ]
|
||||||
|
|
||||||
|
services:
|
||||||
|
# INVIDIOUS CLEARNET
|
||||||
|
invidious-feed-reciever:
|
||||||
|
image: "git.nadeko.net/fijxu/invidious:${TAG}"
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:20090:3000"
|
||||||
|
volumes:
|
||||||
|
- /var/run/postgresql/.s.PGSQL.5432:/var/run/postgresql/.s.PGSQL.5432:rw
|
||||||
|
- ./config.yml:/etc/invidious/config.yml:ro
|
||||||
|
environment:
|
||||||
|
INVIDIOUS_CONFIG_FILE: "/etc/invidious/config.yml"
|
||||||
|
<<: *labels
|
||||||
|
|
||||||
|
valkey:
|
||||||
|
image: valkey/valkey:7.2-alpine
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ./valkey.conf:/usr/local/etc/valkey/valkey.conf
|
||||||
|
command: "valkey-server /usr/local/etc/valkey/valkey.conf"
|
7
invidious/invidious-feed-receiver/valkey.conf
Normal file
7
invidious/invidious-feed-receiver/valkey.conf
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
maxmemory 1280mb
|
||||||
|
maxmemory-policy volatile-lfu
|
||||||
|
|
||||||
|
# Disable AOF
|
||||||
|
appendonly no
|
||||||
|
# Disable RDB
|
||||||
|
save ""
|
6
invidious/reload-config.sh
Executable file
6
invidious/reload-config.sh
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
docker compose --file /home/services/invidious/invidious/docker-compose.yml kill -s HUP invidious invidious-tor
|
||||||
|
docker compose --file /home/services/invidious/invidious-vpn/docker-compose.yml kill -s HUP invidious invidious-2 invidious-3 invidious-4 invidious-tor ptgen
|
||||||
|
docker compose --file /home/services/invidious/invidious-vpn-2/docker-compose.yml kill -s HUP invidious invidious-2 invidious-3 invidious-4 invidious-tor ptgen
|
||||||
|
docker compose --file /home/services/invidious/invidious-external/docker-compose.yml kill -s HUP invidious invidious-tor
|
7
invidious/restart-all-backends.sh
Executable file
7
invidious/restart-all-backends.sh
Executable file
|
@ -0,0 +1,7 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
docker compose --file /home/services/invidious/invidious-feed-receiver/docker-compose.yml up -d --force-recreate invidious-feed-reciever --remove-orphans
|
||||||
|
docker compose --file /home/services/invidious/invidious/docker-compose.yml up -d --force-recreate invidious --remove-orphans
|
||||||
|
docker compose --file /home/services/invidious/invidious-2/docker-compose-novpn.yml up -d --force-recreate invidious --remove-orphans
|
||||||
|
docker compose --file /home/services/invidious/invidious-3/docker-compose-novpn.yml up -d --force-recreate invidious --remove-orphans
|
||||||
|
docker compose --file /home/services/invidious/invidious-4/docker-compose.yml up -d --force-recreate invidious --remove-orphans
|
7
invidious/restart-fucking-everything.sh
Executable file
7
invidious/restart-fucking-everything.sh
Executable file
|
@ -0,0 +1,7 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
docker compose --file /home/services/invidious/invidious-feed-receiver/docker-compose.yml up -d --force-recreate --remove-orphans
|
||||||
|
docker compose --file /home/services/invidious/invidious/docker-compose.yml up -d --force-recreate --remove-orphans
|
||||||
|
docker compose --file /home/services/invidious/invidious-2/docker-compose-novpn.yml up -d --force-recreate --remove-orphans
|
||||||
|
docker compose --file /home/services/invidious/invidious-3/docker-compose-novpn.yml up -d --force-recreate --remove-orphans
|
||||||
|
docker compose --file /home/services/invidious/invidious-4/docker-compose.yml up -d --force-recreate --remove-orphans
|
38
invidious/valkey-invidious/docker-compose.yml
Normal file
38
invidious/valkey-invidious/docker-compose.yml
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
|
||||||
|
# https://docs.docker.com/reference/compose-file/extension/
|
||||||
|
x-common: &common
|
||||||
|
image: valkey/valkey:7.2-alpine
|
||||||
|
hostname: valkey
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ./valkey.conf:/usr/local/etc/valkey/valkey.conf
|
||||||
|
command: "valkey-server /usr/local/etc/valkey/valkey.conf"
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Cache needs to be separated since the cache data is bound to the IP
|
||||||
|
# address of the backend. Is not possible to mix cache between backends.
|
||||||
|
|
||||||
|
valkey:
|
||||||
|
<<: *common
|
||||||
|
networks:
|
||||||
|
- invidious
|
||||||
|
|
||||||
|
# valkey2:
|
||||||
|
# <<: *common
|
||||||
|
# networks:
|
||||||
|
# - invidious2
|
||||||
|
#
|
||||||
|
# valkey3:
|
||||||
|
# <<: *common
|
||||||
|
# networks:
|
||||||
|
# - invidious3
|
||||||
|
#
|
||||||
|
# valkey4:
|
||||||
|
# <<: *common
|
||||||
|
# networks:
|
||||||
|
# - invidious4
|
||||||
|
#
|
||||||
|
# valkey5:
|
||||||
|
# <<: *common
|
||||||
|
# networks:
|
||||||
|
# - invidious5
|
7
invidious/valkey-invidious/valkey.conf
Normal file
7
invidious/valkey-invidious/valkey.conf
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
maxmemory 2048mb
|
||||||
|
maxmemory-policy volatile-lfu
|
||||||
|
|
||||||
|
# Disable AOF
|
||||||
|
appendonly no
|
||||||
|
# Disable RDB
|
||||||
|
save ""
|
75
nginx.conf
75
nginx.conf
|
@ -1,75 +0,0 @@
|
||||||
worker_processes auto;
|
|
||||||
|
|
||||||
events {
|
|
||||||
worker_connections 4096;
|
|
||||||
multi_accept on;
|
|
||||||
use epoll;
|
|
||||||
}
|
|
||||||
|
|
||||||
http {
|
|
||||||
upstream http3-ytproxy {
|
|
||||||
keepalive 256;
|
|
||||||
server unix:/tmp/http-ytproxy.sock;
|
|
||||||
}
|
|
||||||
|
|
||||||
upstream companion {
|
|
||||||
keepalive 256;
|
|
||||||
server 172.50.0.3:8081;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Docker DNS resolver!
|
|
||||||
resolver 127.0.0.11;
|
|
||||||
|
|
||||||
access_log off;
|
|
||||||
sendfile on;
|
|
||||||
tcp_nopush on;
|
|
||||||
tcp_nodelay on;
|
|
||||||
|
|
||||||
# Restrict to HTTP/1.1 since HTTP/2 is not useful for DASH video streaming.
|
|
||||||
# HTTP/1.1 also uses a fairly low ammount of CPU compared to HTTP/2.
|
|
||||||
# HTTP/2 is useful for requesting a lot of files at the same time, but
|
|
||||||
# for DASH video streaming you download the video in a synchronously way,
|
|
||||||
# making HTTP/2 useless for it.
|
|
||||||
http2 off;
|
|
||||||
|
|
||||||
ssl_certificate /certs/cert.pem;
|
|
||||||
ssl_certificate_key /certs/cert.pem.key;
|
|
||||||
|
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
|
||||||
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
|
|
||||||
ssl_prefer_server_ciphers off;
|
|
||||||
ssl_session_timeout 1d;
|
|
||||||
ssl_session_cache shared:SSL:10m;
|
|
||||||
ssl_session_tickets off;
|
|
||||||
ssl_early_data on;
|
|
||||||
ssl_conf_command Options KTLS;
|
|
||||||
|
|
||||||
server {
|
|
||||||
server_name ${EXVPP_HOST};
|
|
||||||
listen 443 ssl reuseport;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
proxy_pass http://http3-ytproxy;
|
|
||||||
sendfile_max_chunk 512k;
|
|
||||||
proxy_buffering off;
|
|
||||||
aio threads=default;
|
|
||||||
aio_write on;
|
|
||||||
directio 16m;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Connection keep-alive;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
server_name ${COMPANION_HOST};
|
|
||||||
listen 443 ssl;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
proxy_pass http://companion;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Connection keep-alive;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# vim: ts=2 sw=2 et
|
|
37
peertube/docker-compose.yml
Normal file
37
peertube/docker-compose.yml
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
services:
|
||||||
|
peertube:
|
||||||
|
image: chocobozzz/peertube:production-bookworm
|
||||||
|
container_name: peertube
|
||||||
|
# build:
|
||||||
|
# context: .
|
||||||
|
# args:
|
||||||
|
# VERSION: production
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:1935:1935" # Comment if you don't want to use the live feature
|
||||||
|
- "127.0.0.1:10016:9000" # Uncomment if you use another webserver/proxy or test PeerTube in local, otherwise not suitable for production
|
||||||
|
volumes:
|
||||||
|
# Remove the following line if you want to use another webserver/proxy or test PeerTube in local
|
||||||
|
- assets:/app/client/dist
|
||||||
|
- ./docker-volume/data:/data
|
||||||
|
- ./docker-volume/config:/config
|
||||||
|
- /var/run/postgresql/.s.PGSQL.5432:/var/run/postgresql/.s.PGSQL.5432:rw
|
||||||
|
# group_add:
|
||||||
|
# - 989
|
||||||
|
# devices:
|
||||||
|
# - /dev/dri:/dev/dri
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
restart: "always"
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: valkey/valkey:7.2-alpine
|
||||||
|
container_name: peertube-valkey
|
||||||
|
volumes:
|
||||||
|
- ./docker-volume/redis:/data
|
||||||
|
restart: "always"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
assets:
|
||||||
|
certbot-www:
|
27
privatebin/docker-compose.yml
Normal file
27
privatebin/docker-compose.yml
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
services:
|
||||||
|
privatebin:
|
||||||
|
image: privatebin/nginx-fpm-alpine:latest
|
||||||
|
container_name: privatebin
|
||||||
|
user: "65534:82"
|
||||||
|
read_only: false # not in compose 3.0 documentation but appears supported based
|
||||||
|
# on issues for docker compose in Github
|
||||||
|
volumes:
|
||||||
|
- privatebin-data:/srv/data # data volume for pastes allows pastes
|
||||||
|
# to persist after container stop or restart
|
||||||
|
- './cfg:/srv/cfg:ro' # second volume for custom configuration file
|
||||||
|
ports:
|
||||||
|
# To update: Be sure to use a reverse proxy for HTTPS termination
|
||||||
|
# in front of it for production environments.
|
||||||
|
# ie, The Nginx setup supports only HTTP, so make sure that you run
|
||||||
|
# another webserver as reverse proxy in front of this for HTTPS
|
||||||
|
#offloading and reducing the attack surface on your TLS stack. The
|
||||||
|
# Nginx in this image is set up to deflate/gzip text content.
|
||||||
|
- 10002:8080
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
name: privatebin
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
privatebin-data:
|
|
@ -1,54 +0,0 @@
|
||||||
services:
|
|
||||||
companion:
|
|
||||||
image: git.nadeko.net/fijxu/invidious-companion:${COMPANION_TAG}
|
|
||||||
user: 2000:2000
|
|
||||||
network_mode: "service:gluetun"
|
|
||||||
logging:
|
|
||||||
driver: "json-file"
|
|
||||||
options:
|
|
||||||
max-size: "100m"
|
|
||||||
max-file: "10"
|
|
||||||
volumes:
|
|
||||||
- ./cache:/var/tmp/youtubei.js:rw
|
|
||||||
depends_on:
|
|
||||||
webserver:
|
|
||||||
condition: service_started
|
|
||||||
gluetun:
|
|
||||||
condition: service_healthy
|
|
||||||
labels:
|
|
||||||
- "com.centurylinklabs.watchtower.enable=true"
|
|
||||||
|
|
||||||
ytproxy:
|
|
||||||
image: git.nadeko.net/fijxu/http3-ytproxy:latest
|
|
||||||
network_mode: "service:gluetun"
|
|
||||||
volumes:
|
|
||||||
- videoplayback_proxy:/tmp
|
|
||||||
depends_on:
|
|
||||||
gluetun:
|
|
||||||
condition: service_healthy
|
|
||||||
webserver:
|
|
||||||
condition: service_started
|
|
||||||
labels:
|
|
||||||
- "com.centurylinklabs.watchtower.enable=true"
|
|
||||||
|
|
||||||
gluetun:
|
|
||||||
image: qmcgaw/gluetun:${GLUETUN_TAG}
|
|
||||||
networks:
|
|
||||||
proxy-server:
|
|
||||||
ipv4_address: 172.50.0.4
|
|
||||||
sysctls:
|
|
||||||
- net.ipv6.conf.all.disable_ipv6=1
|
|
||||||
cap_add:
|
|
||||||
- NET_ADMIN
|
|
||||||
devices:
|
|
||||||
- /dev/net/tun:/dev/net/tun
|
|
||||||
volumes:
|
|
||||||
- ./gluetun:/gluetun
|
|
||||||
|
|
||||||
watchtower:
|
|
||||||
image: containrrr/watchtower
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
environment:
|
|
||||||
- WATCHTOWER_LABEL_ENABLE=true
|
|
||||||
- WATCHTOWER_POLL_INTERVAL=30
|
|
18
rimgo/docker-compose.yml
Normal file
18
rimgo/docker-compose.yml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
services:
|
||||||
|
rimgo:
|
||||||
|
image: quay.io/pussthecatorg/rimgo:latest
|
||||||
|
container_name: rimgo
|
||||||
|
ports:
|
||||||
|
- "10001:3000" # Replace with "3000:3000" if you don't use a reverse proxy
|
||||||
|
environment:
|
||||||
|
- "PORT=3000"
|
||||||
|
- "ADDRESS=0.0.0.0"
|
||||||
|
- "IMGUR_CLIENT_ID=546c25a59c58ad7"
|
||||||
|
env_file: .env
|
||||||
|
restart: unless-stopped
|
||||||
|
labels:
|
||||||
|
- "com.centurylinklabs.watchtower.no-pull=true"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
name: rimgo
|
57
synapse/docker-compose.yml
Normal file
57
synapse/docker-compose.yml
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# This compose file is compatible with Compose itself, it might need some
|
||||||
|
# adjustments to run properly with stack.
|
||||||
|
|
||||||
|
services:
|
||||||
|
synapse:
|
||||||
|
container_name: synapse
|
||||||
|
image: docker.io/matrixdotorg/synapse:1.127.1
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- SYNAPSE_CONFIG_PATH=/data/homeserver.yaml
|
||||||
|
- SYNAPSE_SERVER_NAME=nadeko.net
|
||||||
|
- SYNAPSE_REPORT_STATS=no
|
||||||
|
volumes:
|
||||||
|
- ./synapse_data:/data:rw
|
||||||
|
- ./synapse_data/homeserver.yaml:/data/homeserver.yaml:ro
|
||||||
|
- /var/run/postgresql/:/run/postgresql:rw
|
||||||
|
ports:
|
||||||
|
- 127.0.0.1:10022:8008/tcp
|
||||||
|
- 127.0.0.1:9183:9183/tcp
|
||||||
|
|
||||||
|
mautrix-telegram:
|
||||||
|
image: dock.mau.dev/mautrix/telegram:latest
|
||||||
|
container_name: mautrix-telegram
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ./mautrix-telegram_data:/data:z
|
||||||
|
- /var/run/postgresql/:/run/postgresql:rw
|
||||||
|
depends_on:
|
||||||
|
synapse:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
|
mautrix-whatsapp:
|
||||||
|
image: dock.mau.dev/mautrix/whatsapp:latest
|
||||||
|
container_name: mautrix-whatsapp
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ./mautrix-whatsapp_data:/data:z
|
||||||
|
- /var/run/postgresql/:/run/postgresql:rw
|
||||||
|
depends_on:
|
||||||
|
synapse:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
|
element:
|
||||||
|
image: vectorim/element-web:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ./element-web/config.json:/app/config.json:ro
|
||||||
|
ports:
|
||||||
|
- 127.0.0.1:10024:80/tcp
|
||||||
|
|
||||||
|
synapse-admin:
|
||||||
|
image: ghcr.io/etkecc/synapse-admin:latest
|
||||||
|
ports:
|
||||||
|
- 127.0.0.1:10025:80
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
|
|
@ -1,58 +0,0 @@
|
||||||
# The same docker-compose.yml file but without gluetun and just host networking
|
|
||||||
|
|
||||||
services:
|
|
||||||
haproxy:
|
|
||||||
# https://github.com/iuridiniz/haproxy-quic-docker
|
|
||||||
# Image to support QUIC
|
|
||||||
image: iuridiniz/haproxy:3.0
|
|
||||||
restart: always
|
|
||||||
# Run as root to allow binding to port 80 and 443
|
|
||||||
user: 0:0
|
|
||||||
network_mode: host
|
|
||||||
env_file:
|
|
||||||
- .env
|
|
||||||
volumes:
|
|
||||||
- ./haproxy-host.cfg:/etc/haproxy/haproxy.cfg
|
|
||||||
- ./denylist.txt:/etc/haproxy/denylist.txt
|
|
||||||
- ./key.key:/certs/cert.pem.key
|
|
||||||
- ./fullchain.pem:/certs/cert.pem
|
|
||||||
- videoplayback_proxy:/tmp
|
|
||||||
|
|
||||||
http3-ytproxy:
|
|
||||||
image: git.nadeko.net/fijxu/http3-ytproxy:latest
|
|
||||||
restart: unless-stopped
|
|
||||||
network_mode: host
|
|
||||||
env_file:
|
|
||||||
- .env
|
|
||||||
volumes:
|
|
||||||
- videoplayback_proxy:/tmp
|
|
||||||
labels:
|
|
||||||
- "com.centurylinklabs.watchtower.enable=true"
|
|
||||||
depends_on: ["haproxy"]
|
|
||||||
|
|
||||||
companion:
|
|
||||||
image: git.nadeko.net/fijxu/invidious-companion:latest
|
|
||||||
restart: unless-stopped
|
|
||||||
network_mode: host
|
|
||||||
user: 2000:2000
|
|
||||||
env_file:
|
|
||||||
- .env
|
|
||||||
environment:
|
|
||||||
- HOST=127.0.0.1
|
|
||||||
volumes:
|
|
||||||
- ./cache:/var/tmp/youtubei.js:rw
|
|
||||||
- ./proxies.txt:/app/proxies.txt
|
|
||||||
labels:
|
|
||||||
- "com.centurylinklabs.watchtower.enable=true"
|
|
||||||
depends_on: ["haproxy"]
|
|
||||||
|
|
||||||
watchtower:
|
|
||||||
image: containrrr/watchtower
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
environment:
|
|
||||||
- WATCHTOWER_LABEL_ENABLE=true
|
|
||||||
- WATCHTOWER_POLL_INTERVAL=60
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
videoplayback_proxy:
|
|
|
@ -1,68 +0,0 @@
|
||||||
# Good info about TLS speeds: https://istlsfastyet.com/
|
|
||||||
|
|
||||||
global
|
|
||||||
# This because haproxy is dumb and likes to use the maxconnection from the kernel and that is super mega huge making haproxy oom
|
|
||||||
# maxconn 32768
|
|
||||||
# Tied to net.core.somaxconn kernel parameter
|
|
||||||
|
|
||||||
resolvers docker
|
|
||||||
# Without this, if a container crashes, haproxy will not be
|
|
||||||
# able to find where the recreated container is.
|
|
||||||
# Ref: https://stackoverflow.com/a/42135283
|
|
||||||
nameserver dns1 127.0.0.11:53
|
|
||||||
|
|
||||||
defaults
|
|
||||||
mode http
|
|
||||||
timeout client 30s
|
|
||||||
timeout connect 5s
|
|
||||||
timeout server 30s
|
|
||||||
http-reuse safe
|
|
||||||
option splice-auto
|
|
||||||
option tcp-smart-connect
|
|
||||||
|
|
||||||
# Prometheus for graphs
|
|
||||||
frontend prometheus
|
|
||||||
bind *:10000
|
|
||||||
mode http
|
|
||||||
http-request use-service prometheus-exporter if { path /metrics }
|
|
||||||
no log
|
|
||||||
|
|
||||||
frontend www
|
|
||||||
bind *:80
|
|
||||||
#bind *:443 ssl crt /certs/cert.pem alpn h2,http/1.1 allow-0rtt
|
|
||||||
bind *:443 ssl crt /certs/cert.pem alpn http/1.1
|
|
||||||
|
|
||||||
# https://docs.haproxy.org/3.0/configuration.html#4.2-tcp-request%20connection
|
|
||||||
# https://docs.haproxy.org/3.0/configuration.html#4.2-http-request
|
|
||||||
http-request deny if { src -f /etc/haproxy/denylist.txt }
|
|
||||||
|
|
||||||
filter bwlim-out video-streaming default-limit 5000k default-period 1s
|
|
||||||
# QUIC is not really needed for video streaming and it uses a lot of CPU.
|
|
||||||
# Ref: https://news.ycombinator.com/item?id=23585120
|
|
||||||
#bind quic4@:443 ssl crt /certs/cert.pem alpn h3 allow-0rtt
|
|
||||||
#http-after-response add-header alt-svc 'h3=":443"; ma=900'
|
|
||||||
|
|
||||||
# HAPROXY_EXVPP_HOST: The external video playback host
|
|
||||||
acl c hdr(host) -i "$COMPANION_HOST"
|
|
||||||
acl cc hdr(host) -i "$COMPANION_HOST":8443
|
|
||||||
acl h hdr(host) -i "$EXVPP_HOST"
|
|
||||||
acl hh hdr(host) -i "$EXVPP_HOST":8443
|
|
||||||
|
|
||||||
http-request set-bandwidth-limit video-streaming if h || hh
|
|
||||||
|
|
||||||
http-request redirect scheme https unless { ssl_fc }
|
|
||||||
|
|
||||||
acl health_check path /health
|
|
||||||
http-request return status 200 if health_check
|
|
||||||
|
|
||||||
acl videoplayback path_beg /videoplayback
|
|
||||||
|
|
||||||
use_backend http3-ytproxy if h || hh
|
|
||||||
use_backend companion if c || cc
|
|
||||||
|
|
||||||
backend http3-ytproxy
|
|
||||||
#server s1 gluetun:8080 resolvers docker init-addr libc,none
|
|
||||||
server s1 unix@/tmp/http-ytproxy.sock
|
|
||||||
|
|
||||||
backend companion
|
|
||||||
server s1 127.0.0.1:8081 check resolvers docker init-addr libc,none
|
|
15
watchtower/docker-compose.yml
Normal file
15
watchtower/docker-compose.yml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
services:
|
||||||
|
# Watchtower used for my own OCI images at https://git.nadeko.net/Fijxu/-/packages
|
||||||
|
watchtower-trusted-fast:
|
||||||
|
image: containrrr/watchtower
|
||||||
|
container_name: watchtower-trusted-fast
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes: [ "/var/run/docker.sock:/var/run/docker.sock" ]
|
||||||
|
command: --interval 30 --scope trusted-fast
|
||||||
|
|
||||||
|
watchtower-trusted:
|
||||||
|
image: containrrr/watchtower
|
||||||
|
container_name: watchtower-trusted
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes: [ "/var/run/docker.sock:/var/run/docker.sock" ]
|
||||||
|
command: --interval 900 --scope trusted
|
Loading…
Add table
Reference in a new issue