Compare commits
53 Commits
9c767b6e0c
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ff4bea25f6 | ||
|
|
2abb9cb5d2 | ||
|
|
8231589d4d | ||
|
|
1ffdc6caaf | ||
|
|
eb5693322d | ||
|
|
773fb9067b | ||
|
|
31a5e76cee | ||
|
|
db5394a2c5 | ||
|
|
e07521a6ae | ||
|
|
8a2240a43e | ||
|
|
0dcd0c9823 | ||
|
|
5ffc709df3 | ||
|
|
a572313d3d | ||
|
|
8de9b57365 | ||
|
|
79aa347f6a | ||
|
|
d2810af09f | ||
|
|
aaaaa7766e | ||
|
|
b532587d76 | ||
|
|
8749ca7376 | ||
|
|
12a0e84181 | ||
|
|
aa51e224f8 | ||
|
|
67a8025b49 | ||
|
|
d2942bf100 | ||
|
|
2d1ac160e7 | ||
|
|
3d4cdaf8d6 | ||
|
|
7f5284c865 | ||
|
|
25937216ab | ||
|
|
bcc325afe1 | ||
|
|
e951edffaf | ||
|
|
2e67562d95 | ||
|
|
78688d8bf5 | ||
|
|
97a97f5028 | ||
|
|
f3bbf41add | ||
|
|
ceb05e3644 | ||
|
|
6040bcba8e | ||
|
|
9f394b4b97 | ||
|
|
6d353fcd69 | ||
|
|
b94f8d6557 | ||
|
|
8a07851ab8 | ||
|
|
63edf652b7 | ||
|
|
a2dff6fdd8 | ||
|
|
a671b15a96 | ||
|
|
936242e24d | ||
|
|
817723d0bf | ||
|
|
f016deb3a9 | ||
|
|
ce8e342560 | ||
|
|
ad9b4fef97 | ||
|
|
28c734c1d2 | ||
|
|
342559c8eb | ||
|
|
77803655c0 | ||
|
|
eb0f41261f | ||
|
|
005c60abc3 | ||
|
|
7002b866f9 |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -4,4 +4,6 @@ tmp/
|
||||
stashapp/**/config.yml.*
|
||||
stashapp/**/icon.png
|
||||
requestrr/**/notifications.json
|
||||
logs/
|
||||
logs/
|
||||
authentik/.env
|
||||
caddy/.env
|
||||
@@ -1,10 +1,15 @@
|
||||
name: actual-server
|
||||
services:
|
||||
actual_server:
|
||||
app:
|
||||
image: docker.io/actualbudget/actual-server:latest
|
||||
ports:
|
||||
networks:
|
||||
- proxy-net
|
||||
#ports:
|
||||
# This line makes Actual available at port 5006 of the device you run the server on,
|
||||
# i.e. http://localhost:5006. You can change the first number to change the port, if you want.
|
||||
- '5006:5006'
|
||||
# - '5006:5006'
|
||||
expose:
|
||||
- "5006"
|
||||
#environment:
|
||||
# - ACTUAL_LOGIN_METHOD=header
|
||||
# Uncomment any of the lines below to set configuration options.
|
||||
@@ -21,3 +26,7 @@ services:
|
||||
# '/data' is the path Actual will look for its files in by default, so leave that as-is.
|
||||
- ./data:/data
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
@@ -6,7 +6,19 @@ server:
|
||||
|
||||
# Security https://www.authelia.com/configuration/security/access-control/
|
||||
access_control:
|
||||
networks:
|
||||
- name: 'internal'
|
||||
networks:
|
||||
- '192.168.1.0/24'
|
||||
- '172.16.0.0/12'
|
||||
rules:
|
||||
- domain: 'gitea.tremendousturtle.tools'
|
||||
policy: bypass
|
||||
networks:
|
||||
- 'internal'
|
||||
resources:
|
||||
- '^/api([/?].*)?$'
|
||||
- '^/v2([/?].*)?$'
|
||||
- domain: '*.tremendousturtle.tools'
|
||||
policy: two_factor
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: "authelia"
|
||||
name: authelia
|
||||
services:
|
||||
app:
|
||||
image: authelia/authelia:latest
|
||||
@@ -8,6 +8,9 @@ services:
|
||||
- redis
|
||||
volumes:
|
||||
- ./config/authelia:/config
|
||||
networks:
|
||||
- proxy-net
|
||||
- default
|
||||
ports:
|
||||
- "9091:9091"
|
||||
environment:
|
||||
@@ -22,9 +25,9 @@ services:
|
||||
AUTHELIA_AUTHENTICATION_BACKEND_FILE_PATH: /run/secrets/users_database
|
||||
AUTHELIA_TOTP_ISSUER: tremendousturtle.tools
|
||||
AUTHELIA_ACCESS_CONTROL_DEFAULT_POLICY: deny
|
||||
AUTHELIA_SESSION_REDIS_HOST: redis
|
||||
AUTHELIA_SESSION_REDIS_HOST: authelia-redis-1
|
||||
AUTHELIA_SESSION_REDIS_PORT: 6379
|
||||
AUTHELIA_STORAGE_POSTGRES_ADDRESS: tcp://database:5432
|
||||
AUTHELIA_STORAGE_POSTGRES_ADDRESS: tcp://authelia-database-1:5432
|
||||
AUTHELIA_STORAGE_POSTGRES_DATABASE: authelia
|
||||
AUTHELIA_STORAGE_POSTGRES_USERNAME: authelia
|
||||
AUTHELIA_NOTIFIER_SMTP_ADDRESS: submissions://smtp.mailgun.org:465
|
||||
@@ -67,6 +70,10 @@ services:
|
||||
secrets:
|
||||
- redis_pass
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
|
||||
secrets:
|
||||
postgres_pass:
|
||||
file: ./secrets/POSTGRES_PASS
|
||||
|
||||
95
authentik/docker-compose.yml
Normal file
95
authentik/docker-compose.yml
Normal file
@@ -0,0 +1,95 @@
|
||||
name: authentik
|
||||
services:
|
||||
db:
|
||||
image: docker.io/library/postgres:16-alpine
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
|
||||
start_period: 20s
|
||||
interval: 30s
|
||||
retries: 5
|
||||
timeout: 5s
|
||||
volumes:
|
||||
- ./data/postgres:/var/lib/postgresql/data
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${PG_PASS:?database password required}
|
||||
POSTGRES_USER: ${PG_USER:-authentik}
|
||||
POSTGRES_DB: ${PG_DB:-authentik}
|
||||
env_file:
|
||||
- .env
|
||||
redis:
|
||||
image: docker.io/library/redis:alpine
|
||||
command: --save 60 1 --loglevel warning
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
|
||||
start_period: 20s
|
||||
interval: 30s
|
||||
retries: 5
|
||||
timeout: 3s
|
||||
volumes:
|
||||
- ./data/redis:/data
|
||||
app:
|
||||
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.12.3}
|
||||
restart: unless-stopped
|
||||
command: server
|
||||
environment:
|
||||
AUTHENTIK_REDIS__HOST: authentik-redis-1
|
||||
AUTHENTIK_POSTGRESQL__HOST: authentik-db-1
|
||||
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
|
||||
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
|
||||
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
|
||||
networks:
|
||||
- proxy-net
|
||||
- default
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
volumes:
|
||||
- ./data/media:/media
|
||||
- ./config/custom-templates:/templates
|
||||
env_file:
|
||||
- .env
|
||||
ports:
|
||||
- "${COMPOSE_PORT_HTTP:-9000}:9000"
|
||||
- "${COMPOSE_PORT_HTTPS:-9443}:9443"
|
||||
expose:
|
||||
- "9000"
|
||||
- "9443"
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
worker:
|
||||
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.12.3}
|
||||
restart: unless-stopped
|
||||
command: worker
|
||||
environment:
|
||||
AUTHENTIK_REDIS__HOST: authentik-redis-1
|
||||
AUTHENTIK_POSTGRESQL__HOST: authentik-db-1
|
||||
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
|
||||
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
|
||||
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
|
||||
# `user: root` and the docker socket volume are optional.
|
||||
# See more for the docker socket integration here:
|
||||
# https://goauthentik.io/docs/outposts/integrations/docker
|
||||
# Removing `user: root` also prevents the worker from fixing the permissions
|
||||
# on the mounted folders, so when removing this make sure the folders have the correct UID/GID
|
||||
# (1000:1000 by default)
|
||||
user: root
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- ./data/media:/media
|
||||
- ./data/certs:/certs
|
||||
- ./config/custom-templates:/templates
|
||||
env_file:
|
||||
- .env
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
9
caddy/Dockerfile
Normal file
9
caddy/Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM caddy:2.9.1-builder AS builder
|
||||
|
||||
RUN xcaddy build \
|
||||
--with github.com/caddy-dns/cloudflare \
|
||||
--with github.com/WeidiDeng/caddy-cloudflare-ip
|
||||
|
||||
FROM caddy:2.9.1
|
||||
|
||||
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
|
||||
221
caddy/config/Caddyfile
Normal file
221
caddy/config/Caddyfile
Normal file
@@ -0,0 +1,221 @@
|
||||
# Global Config
|
||||
{
|
||||
email certs@tremendousturtle.tools
|
||||
default_sni tremendousturtle.tools
|
||||
acme_ca https://acme-v02.api.letsencrypt.org/directory
|
||||
admin :2019
|
||||
# debug
|
||||
# acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
|
||||
|
||||
servers {
|
||||
trusted_proxies cloudflare {
|
||||
interval 12h
|
||||
timeout 15s
|
||||
}
|
||||
client_ip_headers Cf-Connecting-Ip X-Forwarded-For X-Real-IP
|
||||
}
|
||||
}
|
||||
|
||||
# Global Reusable Blocks
|
||||
(tls) {
|
||||
tls {
|
||||
dns cloudflare {
|
||||
zone_token {env.CF_ZONE_TOKEN}
|
||||
api_token {env.CF_API_TOKEN}
|
||||
}
|
||||
resolvers 1.1.1.1 1.0.0.1
|
||||
}
|
||||
}
|
||||
(secure) {
|
||||
forward_auth {args[0]} authelia-app-1:9091 {
|
||||
uri /api/authz/forward-auth
|
||||
copy_headers Remote-User Remote-Groups Remote-Name Remote-Email
|
||||
}
|
||||
}
|
||||
(secure-external) {
|
||||
forward_auth {args[0]} https://auth.tremendousturtle.tools {
|
||||
uri /api/authz/forward-auth
|
||||
copy_headers Remote-User Remote-Groups Remote-Name Remote-Email
|
||||
header_up Host {upstream_hostport}
|
||||
}
|
||||
}
|
||||
(ttt-log) {
|
||||
log {
|
||||
output file /logs/{args[0]}.tremendousturtle.tools.log
|
||||
}
|
||||
}
|
||||
(ttt-proxy) {
|
||||
reverse_proxy {args[0]}:{args[1]} {
|
||||
header_up X-Real-IP {http.request.header.CF-Connecting-IP}
|
||||
header_up X-Forwarded-For {http.request.header.CF-Connecting-IP}
|
||||
}
|
||||
}
|
||||
(ttt-app) {
|
||||
{args[0]}.tremendousturtle.tools {
|
||||
import ttt-log {args[0]}
|
||||
import tls
|
||||
import secure *
|
||||
import ttt-proxy {args[0]}-app-1 {args[1]}
|
||||
}
|
||||
}
|
||||
(ttt-app-local) {
|
||||
{args[0]}.tremendousturtle.tools {
|
||||
import ttt-log {args[0]}
|
||||
import tls
|
||||
import secure *
|
||||
import ttt-proxy host.docker.internal {args[1]}
|
||||
}
|
||||
}
|
||||
(ttt-app-alt) {
|
||||
{args[0]}.tremendousturtle.tools {
|
||||
import ttt-log {args[0]}
|
||||
import tls
|
||||
import secure *
|
||||
import ttt-proxy {args[1]} {args[2]}
|
||||
}
|
||||
}
|
||||
(authentik) {
|
||||
{args[0]}.tremendousturtle.tools {
|
||||
import ttt-log {args[0]}
|
||||
import tls
|
||||
@not_cf header !CF-Connecting-IP
|
||||
@cf header CF-Connecting-IP *
|
||||
|
||||
reverse_proxy @not_cf authentik-app-1:9000 {
|
||||
header_up X-Real-IP {remote_host}
|
||||
header_up X-Forwarded-Port {server_port}
|
||||
}
|
||||
|
||||
reverse_proxy @cf authentik-app-1:9000 {
|
||||
header_up X-Real-IP {http.request.header.CF-Connecting-IP}
|
||||
header_up X-Forwarded-Port {server_port}
|
||||
}
|
||||
}
|
||||
}
|
||||
(oidc) {
|
||||
{args[0]}.tremendousturtle.tools {
|
||||
import ttt-log {args[0]}
|
||||
import tls
|
||||
@not_cf header !CF-Connecting-IP
|
||||
@cf header CF-Connecting-IP *
|
||||
|
||||
reverse_proxy @not_cf {args[0]}-app-1:{args[1]} {
|
||||
header_up X-Real-IP {remote_host}
|
||||
header_up X-Forwarded-Port {server_port}
|
||||
}
|
||||
|
||||
reverse_proxy @cf {args[0]}-app-1:{args[1]} {
|
||||
header_up X-Real-IP {http.request.header.CF-Connecting-IP}
|
||||
header_up X-Forwarded-Port {server_port}
|
||||
}
|
||||
}
|
||||
}
|
||||
(redirect) {
|
||||
{args[0]}.tremendousturtle.tools {
|
||||
import tls
|
||||
redir https://{args[1]}.tremendousturtle.tools{uri}
|
||||
}
|
||||
}
|
||||
(authentik-forward) {
|
||||
{args[0]}.tremendousturtle.tools {
|
||||
import ttt-log {args[0]}
|
||||
import tls
|
||||
route {
|
||||
# always forward outpost path to actual outpost
|
||||
reverse_proxy /outpost.goauthentik.io/* http://authentik-app-1:9000
|
||||
|
||||
# forward authentication to outpost
|
||||
forward_auth http://authentik-app-1:9000 {
|
||||
uri /outpost.goauthentik.io/auth/caddy
|
||||
|
||||
# capitalization of the headers is important, otherwise they will be empty
|
||||
copy_headers X-Authentik-Username X-Authentik-Groups X-Authentik-Entitlements X-Authentik-Email X-Authentik-Name X-Authentik-Uid X-Authentik-Jwt X-Authentik-Meta-Jwks X-Authentik-Meta-Outpost X-Authentik-Meta-Provider X-Authentik-Meta-App X-Authentik-Meta-Version
|
||||
|
||||
# optional, in this config trust all private ranges, should probably be set to the outposts IP
|
||||
trusted_proxies private_ranges
|
||||
}
|
||||
|
||||
# actual site configuration below, for example
|
||||
reverse_proxy {args[1]}:{args[2]}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Web Config
|
||||
tremendousturtle.tools {
|
||||
import tls
|
||||
respond "I'm Alive!"
|
||||
}
|
||||
|
||||
auth.tremendousturtle.tools {
|
||||
import tls
|
||||
reverse_proxy authelia-app-1:9091
|
||||
}
|
||||
|
||||
authentik.tremendousturtle.tools {
|
||||
import tls
|
||||
reverse_proxy authentik-app-1:9000
|
||||
}
|
||||
|
||||
# Define code.tremendousturtle.tools
|
||||
# Locally hosted non-docker apps (proxies to 192.168.1.234 instead of localhost)
|
||||
#import ttt-app-local code 8020
|
||||
import ttt-app-local pihole 1080
|
||||
import ttt-app-local sonarr 8989
|
||||
import ttt-app-local radarr 7878
|
||||
import ttt-app-local prowlarr 9696
|
||||
import ttt-app-local cockpit 9090
|
||||
|
||||
# Docker apps with same subdomain as docker compose project name
|
||||
#import ttt-app frigate 8971
|
||||
import ttt-app overseerr 5055
|
||||
import ttt-app openobserve 5080
|
||||
#import ttt-app gitea 3000
|
||||
#import ttt-app homepage 3000
|
||||
import ttt-app requestrr 4545
|
||||
|
||||
# Alternate configuration (different subdomain and docker compose project name)
|
||||
import ttt-app-alt budget actual-server-app-1 5006
|
||||
import ttt-app-alt trilium triliumnext-notes-app-1 8080
|
||||
import ttt-app-alt notes triliumnext-notes-app-1 8080
|
||||
#import ttt-app-alt stash stashapp-app-1 9999
|
||||
import ttt-app-alt pihole1 192.168.1.116 80
|
||||
|
||||
# Authentik Configs
|
||||
import authentik homepage
|
||||
import redirect home homepage
|
||||
|
||||
import authentik frigate
|
||||
import authentik code
|
||||
import authentik gitea
|
||||
import authentik dozzle
|
||||
import authentik tautulli
|
||||
#import authentik-test stash
|
||||
|
||||
# Authentik OIDC Configs
|
||||
import oidc komodo 9120
|
||||
|
||||
stash.tremendousturtle.tools {
|
||||
import ttt-log stash
|
||||
import tls
|
||||
@not_cf header !CF-Connecting-IP
|
||||
@cf header CF-Connecting-IP *
|
||||
|
||||
# Match the bedroom Nvidia Shield IP to skip Authentik
|
||||
@exclude client_ip 192.168.1.142 192.168.1.234 127.0.0.1
|
||||
reverse_proxy @exclude stashapp-app-1:9999 {
|
||||
header_up X-Real-IP {remote_host}
|
||||
header_up X-Forwarded-Port {server_port}
|
||||
}
|
||||
|
||||
# When not from cloudflare just use the remote host as the real IP
|
||||
reverse_proxy @not_cf authentik-app-1:9000 {
|
||||
header_up X-Real-IP {remote_host}
|
||||
header_up X-Forwarded-Port {server_port}
|
||||
}
|
||||
|
||||
# When from cloudflare tunnel use the CF-Connecting-IP as the real IP
|
||||
reverse_proxy @cf authentik-app-1:9000 {
|
||||
header_up X-Real-IP {http.request.header.CF-Connecting-IP}
|
||||
header_up X-Forwarded-Port {server_port}
|
||||
}
|
||||
25
caddy/docker-compose.yml
Normal file
25
caddy/docker-compose.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
name: caddy
|
||||
services:
|
||||
app:
|
||||
build: .
|
||||
restart: unless-stopped
|
||||
env_file: .env
|
||||
networks:
|
||||
- proxy-net
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
- "443:443/udp"
|
||||
- "2019:2019"
|
||||
volumes:
|
||||
- ./data/site:/srv
|
||||
- ./data/logs:/logs
|
||||
- ./config:/etc/caddy
|
||||
- ./data/caddy_data:/data
|
||||
- ./data/caddy_config:/config
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
16
cloudflared/docker-compose.yml
Normal file
16
cloudflared/docker-compose.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
name: cloudflared
|
||||
services:
|
||||
app:
|
||||
image: cloudflare/cloudflared:latest
|
||||
volumes:
|
||||
- ./config:/etc/cloudflared
|
||||
command: tunnel --no-autoupdate run --token eyJhIjoiNjhmNjVkYzZkNDgzODZkMTMwNTk2ODk4ZThjNzVhODMiLCJ0IjoiYmNkMjg3OGYtYTRmYi00OWJmLTk0MGMtMzFkYWE2ZDkyNjIwIiwicyI6Ill6STNNbUUwT0RrdE4yWmhaaTAwWWpZM0xXRTFaRFF0TkdWa09HTmpOVFEwTnpRdyJ9
|
||||
restart: unless-stopped
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
networks:
|
||||
- proxy-net
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
19
dozzle/docker-compose.yml
Normal file
19
dozzle/docker-compose.yml
Normal file
@@ -0,0 +1,19 @@
|
||||
name: dozzle
|
||||
services:
|
||||
app:
|
||||
image: amir20/dozzle:latest
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
expose:
|
||||
- "8080"
|
||||
environment:
|
||||
DOZZLE_AUTH_PROVIDER: forward-proxy
|
||||
DOZZLE_ENABLE_ACTIONS: true
|
||||
DOZZLE_HOSTNAME: dozzle.tremendousturtle.tools
|
||||
networks:
|
||||
- proxy-net
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
@@ -4,7 +4,7 @@ auth:
|
||||
|
||||
proxy:
|
||||
header_map:
|
||||
user: Remote-User
|
||||
user: X-Forwarded-Preferred-Username
|
||||
|
||||
tls:
|
||||
enabled: false
|
||||
@@ -38,8 +38,19 @@ objects:
|
||||
track:
|
||||
- person
|
||||
- car
|
||||
- motorcycle
|
||||
- bicycle
|
||||
- dog
|
||||
- cat
|
||||
- license plate
|
||||
- face
|
||||
- amazon
|
||||
- usps
|
||||
- fedex
|
||||
- ups
|
||||
- package
|
||||
- waste bin
|
||||
|
||||
|
||||
cameras:
|
||||
nw_garage:
|
||||
@@ -64,6 +75,31 @@ cameras:
|
||||
- 0.865,0.955,0.865,0.99,0.895,0.99,0.895,0.955
|
||||
- 0.827,0.955,0.827,0.99,0.858,0.99,0.858,0.955
|
||||
- 0.79,0.955,0.79,0.99,0.821,0.99,0.821,0.955
|
||||
- 0.905,0.992,0.932,0.99,0.932,0.965,0.905,0.964
|
||||
- 0.942,0.987,0.983,0.987,0.982,0.957,0.942,0.958
|
||||
- 0.69,0.988,0.719,0.988,0.719,0.957,0.69,0.958
|
||||
threshold: 35
|
||||
contour_area: 15
|
||||
improve_contrast: true
|
||||
zones:
|
||||
Front_Yard:
|
||||
coordinates: 0,0.552,0.13,0.709,0.246,0.822,0.451,1,0,1
|
||||
loitering_time: 0
|
||||
objects:
|
||||
- cat
|
||||
- dog
|
||||
- package
|
||||
- person
|
||||
- usps
|
||||
- waste bin
|
||||
Driveway:
|
||||
coordinates:
|
||||
0,0.494,0,0.549,0.131,0.706,0.251,0.824,0.454,1,1,1,1,0.37,0.856,0.33,0.743,0.296,0.569,0.253,0.451,0.225,0.264,0.324,0.177,0.372,0.043,0.461
|
||||
loitering_time: 0
|
||||
Street:
|
||||
coordinates:
|
||||
0,0.491,0.05,0.454,0.176,0.371,0.257,0.325,0.45,0.224,0.49,0.217,0.561,0.185,0.671,0.139,0.738,0.114,0.813,0.084,0.756,0.049,0.736,0.027,0.737,0,0.474,0,0.46,0.009,0.389,0.012,0.318,0.022,0,0.128
|
||||
loitering_time: 0
|
||||
ne_garage:
|
||||
enabled: true
|
||||
ffmpeg:
|
||||
@@ -86,6 +122,33 @@ cameras:
|
||||
- 0.865,0.955,0.865,0.99,0.895,0.99,0.895,0.955
|
||||
- 0.827,0.955,0.827,0.99,0.858,0.99,0.858,0.955
|
||||
- 0.79,0.955,0.79,0.99,0.821,0.99,0.821,0.955
|
||||
- 0.905,0.992,0.932,0.99,0.932,0.965,0.905,0.964
|
||||
- 0.942,0.987,0.983,0.987,0.982,0.957,0.942,0.958
|
||||
- 0.69,0.988,0.719,0.988,0.719,0.957,0.69,0.958
|
||||
- 0.86,0,0.849,0.11,1,0.187,1,0
|
||||
threshold: 45
|
||||
contour_area: 16
|
||||
improve_contrast: true
|
||||
zones:
|
||||
Front_Yard:
|
||||
coordinates:
|
||||
0,0.247,0,0.417,0.07,0.391,0.16,0.363,0.287,0.332,0.406,0.306,0.518,0.286,0.314,0.18,0.21,0.195,0.119,0.212
|
||||
loitering_time: 0
|
||||
objects:
|
||||
- cat
|
||||
- dog
|
||||
- package
|
||||
- person
|
||||
- usps
|
||||
- waste bin
|
||||
Driveway:
|
||||
coordinates:
|
||||
0,0.42,0,1,1,1,1,0.601,0.876,0.512,0.709,0.402,0.584,0.328,0.514,0.289,0.413,0.307,0.297,0.332,0.177,0.361,0.085,0.388
|
||||
loitering_time: 0
|
||||
Street:
|
||||
coordinates:
|
||||
0.043,0.059,0.132,0.102,0.205,0.131,0.311,0.176,0.414,0.229,0.523,0.287,0.527,0.293,0.622,0.348,0.697,0.392,0.79,0.452,0.901,0.526,1,0.598,1,0.203,0.612,0.024,0.473,0,0.043,0
|
||||
loitering_time: 0
|
||||
doorbell:
|
||||
enabled: true
|
||||
ffmpeg:
|
||||
@@ -108,9 +171,26 @@ cameras:
|
||||
- 0.79,0.003,0.79,0.035,0.82,0.035,0.82,0.003
|
||||
- 0.828,0.003,0.828,0.035,0.858,0.035,0.858,0.003
|
||||
- 0.866,0.003,0.866,0.035,0.896,0.035,0.896,0.003
|
||||
threshold: 35
|
||||
contour_area: 15
|
||||
- 0.904,0.039,0.933,0.038,0.933,0.011,0.904,0.011
|
||||
- 0.943,0.033,0.983,0.033,0.983,0.004,0.942,0.005
|
||||
- 0.691,0.034,0.72,0.033,0.72,0.005,0.69,0.005
|
||||
threshold: 40
|
||||
contour_area: 13
|
||||
improve_contrast: true
|
||||
zones:
|
||||
Front_Yard:
|
||||
coordinates: 0,0.876,0,1,1,1,1,0.596,0.491,0.59
|
||||
loitering_time: 0
|
||||
objects:
|
||||
- cat
|
||||
- dog
|
||||
- package
|
||||
- person
|
||||
- usps
|
||||
- waste bin
|
||||
Street:
|
||||
coordinates: 0.363,0.583,0.643,0.591,0.644,0.524,0.363,0.522
|
||||
loitering_time: 0
|
||||
version: 0.14
|
||||
camera_groups:
|
||||
Birdseye:
|
||||
@@ -128,4 +208,23 @@ camera_groups:
|
||||
detect:
|
||||
stationary:
|
||||
interval: 50
|
||||
threshold: 40
|
||||
threshold: 50
|
||||
|
||||
snapshots:
|
||||
enabled: true
|
||||
retain:
|
||||
default: 30
|
||||
|
||||
record:
|
||||
enabled: true
|
||||
retain:
|
||||
days: 3
|
||||
mode: all
|
||||
events:
|
||||
retain:
|
||||
default: 30
|
||||
mode: motion
|
||||
|
||||
telemetry:
|
||||
stats:
|
||||
network_bandwidth: true
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
name: frigate
|
||||
services:
|
||||
frigate:
|
||||
container_name: frigate
|
||||
app:
|
||||
restart: unless-stopped
|
||||
image: ghcr.io/blakeblackshear/frigate:stable
|
||||
#image: ghcr.io/blakeblackshear/frigate:stable
|
||||
image: gitea.tremendousturtle.tools/chris/frigate:v0.14.1-web-admin-088ff992
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
- NET_RAW
|
||||
shm_size: "250mb"
|
||||
devices:
|
||||
- /dev/apex_0:/dev/apex_0 # Passes a PCIe Coral
|
||||
@@ -17,12 +21,18 @@ services:
|
||||
target: /tmp/cache
|
||||
tmpfs:
|
||||
size: 4000000000
|
||||
networks:
|
||||
- proxy-net
|
||||
ports:
|
||||
- "8971:8971"
|
||||
# - "8971:8971"
|
||||
- "8554:8554" # RTSP feeds
|
||||
- "8555:8555/tcp" # WebRTC over tcp
|
||||
- "8555:8555/udp" # WebRTC over udp
|
||||
- "5000:5000" # VS Code schema validation allowed
|
||||
expose:
|
||||
- "8971"
|
||||
secrets:
|
||||
- PLUS_API_KEY
|
||||
environment:
|
||||
LIBVA_DRIVER_NAME: "radeonsi" # FRIGATE_RTSP_PASSWORD: "69$nC*6$jADbc!"
|
||||
labels:
|
||||
@@ -32,5 +42,13 @@ services:
|
||||
- homepage.href=https://frigate.tremendousturtle.tools/
|
||||
- homepage.description=Camera Surveillance
|
||||
- homepage.widget.type=frigate
|
||||
- homepage.widget.url=http://192.168.1.234:5000
|
||||
- homepage.widget.url=http://frigate-app-1:5000
|
||||
- homepage.widget.enableRecentEvents=true
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
|
||||
secrets:
|
||||
PLUS_API_KEY:
|
||||
file: ./secrets/PLUS_API_KEY
|
||||
@@ -1,30 +1,45 @@
|
||||
networks:
|
||||
gitea:
|
||||
external: false
|
||||
proxy-net:
|
||||
external: true
|
||||
|
||||
name: gitea
|
||||
services:
|
||||
server:
|
||||
app:
|
||||
image: gitea/gitea:latest
|
||||
environment:
|
||||
USER_UID: 141
|
||||
USER_GID: 150
|
||||
GITEA__database__DB_TYPE: postgres
|
||||
GITEA__database__HOST: db:5432
|
||||
GITEA__database__HOST: gitea-db-1:5432
|
||||
GITEA__database__NAME: ${GITEA_DB_NAME}
|
||||
GITEA__database__USER: ${GITEA_DB_USER}
|
||||
GITEA__database__PASSWD__FILE: /run/secrets/postgres_pass
|
||||
GITEA__server__SSH_AUTHORIZED_KEYS_COMMAND_TEMPLATE: gitea --config={{.CustomConf}} serv key-{{.Key.ID}}
|
||||
restart: always
|
||||
GITEA__service__ENABLE_REVERSE_PROXY_AUTHENTICATION: true
|
||||
GITEA__service__ENABLE_REVERSE_PROXY_AUTO_REGISTRATION: true
|
||||
GITEA__service__ENABLE_REVERSE_PROXY_EMAIL: true
|
||||
GITEA__indexer__REPO_INDEXER_ENABLED: true
|
||||
GITEA__indexer__REPO_INDEXER_PATH: indexers/repos.bleve
|
||||
GITEA__indexer__MAX_FILE_SIZE: 1048576
|
||||
GITEA__indexer__REPO_INDEXER_INCLUDE: ""
|
||||
GITEA__indexer__REPO_INDEXER_EXCLUDE: resources/bin/**
|
||||
GITEA__security__REVERSE_PROXY_LIMIT: 2
|
||||
GITEA__security__REVERSE_PROXY_TRUSTED_PROXIES: '172.31.0.0/16'
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- gitea
|
||||
- proxy-net
|
||||
volumes:
|
||||
- ./data/gitea:/data
|
||||
- /home/git/.ssh/:/data/git/.ssh
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- "3000:3000"
|
||||
- "127.0.0.1:2222:22"
|
||||
expose:
|
||||
- "3000"
|
||||
depends_on:
|
||||
- db
|
||||
secrets:
|
||||
@@ -32,7 +47,7 @@ services:
|
||||
|
||||
db:
|
||||
image: postgres:14
|
||||
restart: always
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_USER: ${GITEA_DB_USER}
|
||||
POSTGRES_PASSWORD_FILE: /run/secrets/postgres_pass
|
||||
|
||||
@@ -6,8 +6,11 @@ services:
|
||||
- dockerproxy
|
||||
environment:
|
||||
DOCKER_TEMPLATE_CREATED: true
|
||||
ports:
|
||||
- "3001:3000"
|
||||
expose:
|
||||
- "3000"
|
||||
networks:
|
||||
- proxy-net
|
||||
- default
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./config:/app/config # Make sure your local config directory exists
|
||||
@@ -19,8 +22,12 @@ services:
|
||||
- SERVICES=1 # Allow access to viewing services (necessary when using Docker Swarm)
|
||||
- TASKS=1 # Allow access to viewing tasks (necessary when using Docker Swarm)
|
||||
- POST=0 # Disallow any POST operations (effectively read-only)
|
||||
ports:
|
||||
- "127.0.0.1:2375:2375"
|
||||
expose:
|
||||
- "2375"
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro # Mounted as read-only
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro # Mounted as read-only
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
131
komodo/.env
Normal file
131
komodo/.env
Normal file
@@ -0,0 +1,131 @@
|
||||
####################################
|
||||
# 🦎 KOMODO COMPOSE - VARIABLES 🦎 #
|
||||
####################################
|
||||
|
||||
## These compose variables can be used with all Komodo deployment options.
|
||||
## Pass these variables to the compose up command using `--env-file komodo/compose.env`.
|
||||
## Additionally, they are passed to both Komodo Core and Komodo Periphery with `env_file: ./compose.env`,
|
||||
## so you can pass any additional environment variables to Core / Periphery directly in this file as well.
|
||||
|
||||
## Stick to a specific version, or use `latest`
|
||||
COMPOSE_KOMODO_IMAGE_TAG=latest
|
||||
|
||||
## Note: 🚨 Podman does NOT support local logging driver 🚨. See Podman options here:
|
||||
## `https://docs.podman.io/en/v4.6.1/markdown/podman-run.1.html#log-driver-driver`
|
||||
COMPOSE_LOGGING_DRIVER=journald # Enable log rotation with the local driver.
|
||||
|
||||
## DB credentials - Ignored for Sqlite
|
||||
KOMODO_DB_USERNAME=admin
|
||||
KOMODO_DB_PASSWORD_FILE=/run/secrets/KOMODO_DB_PASSWORD
|
||||
|
||||
## Configure a secure passkey to authenticate between Core / Periphery.
|
||||
KOMODO_PASSKEY_FILE=/run/secrets/KOMODO_PASSKEY
|
||||
|
||||
#=-------------------------=#
|
||||
#= Komodo Core Environment =#
|
||||
#=-------------------------=#
|
||||
|
||||
## Full variable list + descriptions are available here:
|
||||
## 🦎 https://github.com/mbecker20/komodo/blob/main/config/core.config.toml 🦎
|
||||
|
||||
## Note. Secret variables also support `${VARIABLE}_FILE` syntax to pass docker compose secrets.
|
||||
## Docs: https://docs.docker.com/compose/how-tos/use-secrets/#examples
|
||||
|
||||
## Used for Oauth / Webhook url suggestion / Caddy reverse proxy.
|
||||
KOMODO_HOST=https://komodo.tremendousturtle.tools
|
||||
## Displayed in the browser tab.
|
||||
KOMODO_TITLE=Komodo
|
||||
## Create a server matching this address as the "first server".
|
||||
## Use `https://host.docker.internal:8120` when using systemd-managed Periphery.
|
||||
KOMODO_FIRST_SERVER=https://periphery:8120
|
||||
## Make all buttons just double-click, rather than the full confirmation dialog.
|
||||
KOMODO_DISABLE_CONFIRM_DIALOG=false
|
||||
|
||||
## Rate Komodo polls your servers for
|
||||
## status / container status / system stats / alerting.
|
||||
## Options: 1-sec, 5-sec, 15-sec, 1-min, 5-min.
|
||||
## Default: 15-sec
|
||||
KOMODO_MONITORING_INTERVAL="5-sec"
|
||||
## Rate Komodo polls Resources for updates,
|
||||
## like outdated commit hash.
|
||||
## Options: 1-min, 5-min, 15-min, 30-min, 1-hr.
|
||||
## Default: 5-min
|
||||
KOMODO_RESOURCE_POLL_INTERVAL="1-min"
|
||||
|
||||
## Used to auth incoming webhooks. Alt: KOMODO_WEBHOOK_SECRET_FILE
|
||||
KOMODO_WEBHOOK_SECRET_FILE=/run/secrets/KOMODO_WEBHOOK_SECRET
|
||||
## Used to generate jwt. Alt: KOMODO_JWT_SECRET_FILE
|
||||
KOMODO_JWT_SECRET_FILE=/run/secrets/KOMODO_JWT_SECRET
|
||||
|
||||
## Enable login with username + password.
|
||||
KOMODO_LOCAL_AUTH=false
|
||||
## Disable new user signups.
|
||||
KOMODO_DISABLE_USER_REGISTRATION=false
|
||||
## All new logins are auto enabled
|
||||
KOMODO_ENABLE_NEW_USERS=false
|
||||
## Disable non-admins from creating new resources.
|
||||
KOMODO_DISABLE_NON_ADMIN_CREATE=false
|
||||
## Allows all users to have Read level access to all resources.
|
||||
KOMODO_TRANSPARENT_MODE=false
|
||||
|
||||
## Time to live for jwt tokens.
|
||||
## Options: 1-hr, 12-hr, 1-day, 3-day, 1-wk, 2-wk
|
||||
KOMODO_JWT_TTL="1-wk"
|
||||
|
||||
## OIDC Login
|
||||
KOMODO_OIDC_ENABLED=true
|
||||
## Must reachable from Komodo Core container
|
||||
KOMODO_OIDC_PROVIDER=https://authentik.tremendousturtle.tools/application/o/komodo/
|
||||
## Change the host to one reachable be reachable by users (optional if it is the same as above).
|
||||
## DO NOT include the `path` part of the URL.
|
||||
KOMODO_OIDC_REDIRECT_HOST=https://authentik.tremendousturtle.tools
|
||||
## Your client credentials
|
||||
KOMODO_OIDC_CLIENT_ID_FILE=/run/secrets/KOMODO_OIDC_CLIENT_ID # Alt: KOMODO_OIDC_CLIENT_ID_FILE
|
||||
KOMODO_OIDC_CLIENT_SECRET_FILE=/run/secrets/KOMODO_OIDC_CLIENT_SECRET # Alt: KOMODO_OIDC_CLIENT_SECRET_FILE
|
||||
## Make usernames the full email.
|
||||
# KOMODO_OIDC_USE_FULL_EMAIL=true
|
||||
## Add additional trusted audiences for token claims verification.
|
||||
## Supports comma separated list, and passing with _FILE (for compose secrets).
|
||||
# KOMODO_OIDC_ADDITIONAL_AUDIENCES=abc,123 # Alt: KOMODO_OIDC_ADDITIONAL_AUDIENCES_FILE
|
||||
|
||||
## Github Oauth
|
||||
KOMODO_GITHUB_OAUTH_ENABLED=false
|
||||
# KOMODO_GITHUB_OAUTH_ID= # Alt: KOMODO_GITHUB_OAUTH_ID_FILE
|
||||
# KOMODO_GITHUB_OAUTH_SECRET= # Alt: KOMODO_GITHUB_OAUTH_SECRET_FILE
|
||||
|
||||
## Google Oauth
|
||||
KOMODO_GOOGLE_OAUTH_ENABLED=false
|
||||
# KOMODO_GOOGLE_OAUTH_ID= # Alt: KOMODO_GOOGLE_OAUTH_ID_FILE
|
||||
# KOMODO_GOOGLE_OAUTH_SECRET= # Alt: KOMODO_GOOGLE_OAUTH_SECRET_FILE
|
||||
|
||||
## Aws - Used to launch Builder instances and ServerTemplate instances.
|
||||
KOMODO_AWS_ACCESS_KEY_ID= # Alt: KOMODO_AWS_ACCESS_KEY_ID_FILE
|
||||
KOMODO_AWS_SECRET_ACCESS_KEY= # Alt: KOMODO_AWS_SECRET_ACCESS_KEY_FILE
|
||||
|
||||
## Hetzner - Used to launch ServerTemplate instances
|
||||
## Hetzner Builder not supported due to Hetzner pay-by-the-hour pricing model
|
||||
KOMODO_HETZNER_TOKEN= # Alt: KOMODO_HETZNER_TOKEN_FILE
|
||||
|
||||
#=------------------------------=#
|
||||
#= Komodo Periphery Environment =#
|
||||
#=------------------------------=#
|
||||
|
||||
## Full variable list + descriptions are available here:
|
||||
## 🦎 https://github.com/mbecker20/komodo/blob/main/config/periphery.config.toml 🦎
|
||||
|
||||
## Periphery passkeys must include KOMODO_PASSKEY to authenticate.
|
||||
PERIPHERY_PASSKEYS_FILE=${KOMODO_PASSKEY_FILE}
|
||||
|
||||
## Specify the root directory used by Periphery agent.
|
||||
PERIPHERY_ROOT_DIRECTORY=/etc/komodo
|
||||
|
||||
## Enable SSL using self signed certificates.
|
||||
## Connect to Periphery at https://address:8120.
|
||||
PERIPHERY_SSL_ENABLED=true
|
||||
|
||||
## If the disk size is overreporting, can use one of these to
|
||||
## whitelist / blacklist the disks to filter them, whichever is easier.
|
||||
## Accepts comma separated list of paths.
|
||||
## Usually whitelisting just /etc/hostname gives correct size.
|
||||
PERIPHERY_INCLUDE_DISK_MOUNTS=/etc/hostname
|
||||
# PERIPHERY_EXCLUDE_DISK_MOUNTS=/snap,/etc/repos
|
||||
115
komodo/docker-compose.yml
Normal file
115
komodo/docker-compose.yml
Normal file
@@ -0,0 +1,115 @@
|
||||
################################
|
||||
# 🦎 KOMODO COMPOSE - MONGO 🦎 #
|
||||
################################
|
||||
|
||||
## This compose file will deploy:
|
||||
## 1. MongoDB
|
||||
## 2. Komodo Core
|
||||
## 3. Komodo Periphery
|
||||
name: komodo
|
||||
services:
|
||||
db:
|
||||
image: mongo
|
||||
labels:
|
||||
komodo.skip: # Prevent Komodo from stopping with StopAllContainers
|
||||
command: --quiet --wiredTigerCacheSizeGB 0.25
|
||||
restart: unless-stopped
|
||||
logging:
|
||||
driver: ${COMPOSE_LOGGING_DRIVER:-local}
|
||||
networks:
|
||||
- default
|
||||
# ports:
|
||||
# - 27017:27017
|
||||
volumes:
|
||||
- ./data/mongo-data:/data/db
|
||||
- ./config/mongo-config:/data/configdb
|
||||
environment:
|
||||
MONGO_INITDB_ROOT_USERNAME: ${KOMODO_DB_USERNAME}
|
||||
MONGO_INITDB_ROOT_PASSWORD_FILE: ${KOMODO_DB_PASSWORD_FILE}
|
||||
secrets:
|
||||
- KOMODO_DB_PASSWORD
|
||||
|
||||
app:
|
||||
image: ghcr.io/mbecker20/komodo:${COMPOSE_KOMODO_IMAGE_TAG:-latest}
|
||||
labels:
|
||||
komodo.skip: # Prevent Komodo from stopping with StopAllContainers
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
logging:
|
||||
driver: ${COMPOSE_LOGGING_DRIVER:-local}
|
||||
networks:
|
||||
- default
|
||||
- proxy-net
|
||||
ports:
|
||||
- 9120:9120
|
||||
env_file: ./.env
|
||||
environment:
|
||||
KOMODO_DATABASE_ADDRESS: db:27017
|
||||
KOMODO_DATABASE_USERNAME: ${KOMODO_DB_USERNAME}
|
||||
KOMODO_DATABASE_PASSWORD_FILE: ${KOMODO_DB_PASSWORD_FILE}
|
||||
KOMODO_LOGGING_LEVEL: info
|
||||
volumes:
|
||||
## Core cache for repos for latest commit hash / contents
|
||||
- ./data/repo-cache:/repo-cache
|
||||
## Store sync files on server
|
||||
- ./data/syncs:/syncs
|
||||
## Optionally mount a custom core.config.toml
|
||||
# - /path/to/core.config.toml:/config/config.toml
|
||||
secrets:
|
||||
- KOMODO_DB_PASSWORD
|
||||
- KOMODO_PASSKEY
|
||||
- KOMODO_WEBHOOK_SECRET
|
||||
- KOMODO_JWT_SECRET
|
||||
- KOMODO_OIDC_CLIENT_SECRET
|
||||
- KOMODO_OIDC_CLIENT_ID
|
||||
|
||||
## Deploy Periphery container using this block,
|
||||
## or deploy the Periphery binary with systemd using
|
||||
## https://github.com/mbecker20/komodo/tree/main/scripts
|
||||
periphery:
|
||||
image: ghcr.io/mbecker20/periphery:${COMPOSE_KOMODO_IMAGE_TAG:-latest}
|
||||
labels:
|
||||
komodo.skip: # Prevent Komodo from stopping with StopAllContainers
|
||||
restart: unless-stopped
|
||||
logging:
|
||||
driver: ${COMPOSE_LOGGING_DRIVER:-local}
|
||||
networks:
|
||||
- default
|
||||
env_file: ./.env
|
||||
environment:
|
||||
PERIPHERY_REPO_DIR: ${PERIPHERY_ROOT_DIRECTORY:-/etc/komodo}/repos
|
||||
PERIPHERY_STACK_DIR: ${PERIPHERY_ROOT_DIRECTORY:-/etc/komodo}/stacks
|
||||
PERIPHERY_SSL_KEY_FILE: ${PERIPHERY_ROOT_DIRECTORY:-/etc/komodo}/ssl/key.pem
|
||||
PERIPHERY_SSL_CERT_FILE: ${PERIPHERY_ROOT_DIRECTORY:-/etc/komodo}/ssl/cert.pem
|
||||
volumes:
|
||||
## Mount external docker socket
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
## Allow Periphery to see processes outside of container
|
||||
- /proc:/proc
|
||||
## Specify the Periphery agent root directory.
|
||||
## Must be the same inside and outside the container,
|
||||
## or docker will get confused. See https://github.com/mbecker20/komodo/discussions/180.
|
||||
## Default: /etc/komodo.
|
||||
- ${PERIPHERY_ROOT_DIRECTORY:-/etc/komodo}:${PERIPHERY_ROOT_DIRECTORY:-/etc/komodo}
|
||||
secrets:
|
||||
- KOMODO_PASSKEY
|
||||
|
||||
networks:
|
||||
default: {}
|
||||
proxy-net:
|
||||
external: true
|
||||
|
||||
secrets:
|
||||
KOMODO_DB_PASSWORD:
|
||||
file: ./secrets/KOMODO_DB_PASSWORD
|
||||
KOMODO_PASSKEY:
|
||||
file: ./secrets/KOMODO_PASSKEY
|
||||
KOMODO_WEBHOOK_SECRET:
|
||||
file: ./secrets/KOMODO_WEBHOOK_SECRET
|
||||
KOMODO_JWT_SECRET:
|
||||
file: ./secrets/KOMODO_JWT_SECRET
|
||||
KOMODO_OIDC_CLIENT_SECRET:
|
||||
file: ./secrets/KOMODO_OIDC_CLIENT_SECRET
|
||||
KOMODO_OIDC_CLIENT_ID:
|
||||
file: ./secrets/KOMODO_OIDC_CLIENT_ID
|
||||
0
media-dude/.env
Normal file
0
media-dude/.env
Normal file
0
media-dude/docker-compose.yml
Normal file
0
media-dude/docker-compose.yml
Normal file
74
media-dude/torrentarr/compose.torrentarr.yml
Normal file
74
media-dude/torrentarr/compose.torrentarr.yml
Normal file
@@ -0,0 +1,74 @@
|
||||
services:
|
||||
transmission:
|
||||
image: lscr.io/linuxserver/transmission:latest
|
||||
environment:
|
||||
DOCKER_MODS: linuxserver/mods:transmission-env-var-settings
|
||||
PUID: 998 # media user
|
||||
PGID: 998 # media group
|
||||
UMASK: "002"
|
||||
TZ: America/Los_Angeles
|
||||
TRANSMISSION_DOWNLOAD_DIR: ${TORRENTARR_DOWNLOAD_DIR:?error}/complete
|
||||
TRANSMISSION_INCOMPLETE_DIR: ${TORRENTARR_DOWNLOAD_DIR:?error}/incomplete
|
||||
TRANSMISSION_SPEED_LIMIT_UP: "3750"
|
||||
TRANSMISSION_SPEED_LIMIT_UP_ENABLED: "true"
|
||||
TRANSMISSION_WATCH_DIR_ENABLED: "false"
|
||||
TRANSMISSION_RPC_PORT: ${TORRENTARR_TRANSMISSION_RPC_PORT:?error}
|
||||
TRANSMISSION_RPC_AUTHENTICATION_REQUIRED: "false"
|
||||
volumes:
|
||||
- ./transmission_config:/config
|
||||
- ${TORRENTARR_DOWNLOAD_DIR:?error}:${TORRENTARR_DOWNLOAD_DIR:?error}
|
||||
network_mode: "service:gluetun"
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
gluetun:
|
||||
condition: service_healthy
|
||||
|
||||
gluetun:
|
||||
image: qmcgaw/gluetun
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
devices:
|
||||
- /dev/net/tun:/dev/net/tun
|
||||
volumes:
|
||||
- gluetun_forwarding:/tmp/gluetun_forwarding
|
||||
ports:
|
||||
- ${TORRENTARR_TRANSMISSION_RPC_PORT:?error}:${TORRENTARR_TRANSMISSION_RPC_PORT:?error}
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
VPN_SERVICE_PROVIDER: protonvpn
|
||||
VPN_TYPE: wireguard
|
||||
VPN_PORT_FORWARDING: on
|
||||
VPN_PORT_FORWARDING_STATUS_FILE: /tmp/gluetun_forwarding/forwarded_port
|
||||
PORT_FORWARD_ONLY: "on"
|
||||
SERVER_COUNTRIES: United States
|
||||
SERVER_CITIES: Los Angeles
|
||||
UPDATER_PERIOD: 24h
|
||||
secrets:
|
||||
- wireguard_private_key
|
||||
port-watcher:
|
||||
build: ../port-watcher
|
||||
volumes:
|
||||
- gluetun_forwarding:/watch
|
||||
environment:
|
||||
PORT_FILE: /watch/forwarded_port
|
||||
TRANSMISSION_HOST: gluetun
|
||||
TRANSMISSION_PORT: ${TORRENTARR_TRANSMISSION_RPC_PORT:?error}
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "test", "-f", "/watch/forwarded_port"]
|
||||
interval: 10s
|
||||
timeout: 60s
|
||||
retries: 10
|
||||
start_period: 10s
|
||||
depends_on:
|
||||
transmission:
|
||||
condition: service_started
|
||||
gluetun:
|
||||
condition: service_healthy
|
||||
|
||||
volumes:
|
||||
gluetun_forwarding:
|
||||
|
||||
secrets:
|
||||
wireguard_private_key:
|
||||
file: ./secrets/wireguard_private_key
|
||||
4
media-dude/torrentarr/movies/.env
Normal file
4
media-dude/torrentarr/movies/.env
Normal file
@@ -0,0 +1,4 @@
|
||||
COMPOSE_FILE=compose.yml:../compose.torrentarr.yml
|
||||
TORRENTARR_DOWNLOAD_DIR=/media/movies/torrents
|
||||
TORRENTARR_TRANSMISSION_RPC_PORT=10011
|
||||
COMPOSE_BAKE=true
|
||||
15
media-dude/torrentarr/movies/compose.yml
Normal file
15
media-dude/torrentarr/movies/compose.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
name: torrentarr-movies
|
||||
services:
|
||||
radarr:
|
||||
image: ghcr.io/hotio/radarr
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "7878:7878"
|
||||
environment:
|
||||
PUID: 998
|
||||
PGID: 998
|
||||
UMASK: "002"
|
||||
TZ: America/Los_Angeles
|
||||
volumes:
|
||||
- ./radarr_config:/config
|
||||
- /media/movies/library:/media/movies/library
|
||||
8
media-dude/torrentarr/port-watcher/Dockerfile
Normal file
8
media-dude/torrentarr/port-watcher/Dockerfile
Normal file
@@ -0,0 +1,8 @@
|
||||
FROM python:3.11-alpine
|
||||
|
||||
WORKDIR /app
|
||||
COPY port-watcher.py .
|
||||
|
||||
RUN pip install watchdog transmission-rpc
|
||||
|
||||
CMD ["python", "port-watcher.py"]
|
||||
82
media-dude/torrentarr/port-watcher/port-watcher.py
Normal file
82
media-dude/torrentarr/port-watcher/port-watcher.py
Normal file
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import time
|
||||
import logging
|
||||
from transmission_rpc import Client
|
||||
from watchdog.observers import Observer
|
||||
from watchdog.events import FileSystemEventHandler
|
||||
|
||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')
|
||||
logger = logging.getLogger()
|
||||
|
||||
PORT_FILE = os.getenv('PORT_FILE', '/watch/forwarded_port')
|
||||
TRANSMISSION_HOST = os.getenv('TRANSMISSION_HOST', 'gluetun')
|
||||
TRANSMISSION_PORT = os.getenv('TRANSMISSION_PORT', 9091)
|
||||
|
||||
class PortFileHandler(FileSystemEventHandler):
|
||||
def __init__(self):
|
||||
self.last_port = None
|
||||
self.transmission_client = Client(host=TRANSMISSION_HOST, port=TRANSMISSION_PORT)
|
||||
self.check_port_file() # Initial check
|
||||
|
||||
def on_modified(self, event):
|
||||
if not event.is_directory and event.src_path == PORT_FILE:
|
||||
self.check_port_file()
|
||||
|
||||
def check_port_file(self):
|
||||
try:
|
||||
if not os.path.exists(PORT_FILE):
|
||||
logger.info(f"Port file not found: {PORT_FILE}")
|
||||
return
|
||||
|
||||
with open(PORT_FILE, 'r') as f:
|
||||
port = f.read().strip()
|
||||
|
||||
if port != self.last_port and port.isdigit():
|
||||
self.last_port = port
|
||||
logger.info(f"Port forwarding changed to: {port}")
|
||||
self.update_transmission(port)
|
||||
except Exception as e:
|
||||
logger.error(f"Error checking port file: {e}")
|
||||
|
||||
def update_transmission(self, port):
|
||||
max_attempts = 5
|
||||
attempt = 1
|
||||
delay = 5 # seconds between retry attempts
|
||||
|
||||
while attempt <= max_attempts:
|
||||
logger.info(f"Attempt {attempt}/{max_attempts}: Setting Transmission peer_port to {port}")
|
||||
try:
|
||||
self.transmission_client.set_session(peer_port=int(port))
|
||||
logger.info(f"Successfully updated Transmission peer_port to {port}")
|
||||
logger.info(f"Testing Transmission peer port...")
|
||||
if self.transmission_client.port_test():
|
||||
logger.info("Transmission peer port is open")
|
||||
else:
|
||||
logger.warning("Transmission peer port does not appear to be open")
|
||||
return
|
||||
except Exception as e:
|
||||
logger.warning(f"Attempt {attempt}/{max_attempts} failed: {e}")
|
||||
if attempt < max_attempts:
|
||||
logger.info(f"Retrying in {delay} seconds...")
|
||||
time.sleep(delay)
|
||||
attempt += 1
|
||||
|
||||
logger.error(f"Failed to update Transmission peer_port after {max_attempts} attempts")
|
||||
|
||||
if __name__ == "__main__":
|
||||
path = os.path.dirname(PORT_FILE)
|
||||
logger.info(f"Starting port-watcher monitoring {PORT_FILE}")
|
||||
|
||||
event_handler = PortFileHandler()
|
||||
observer = Observer()
|
||||
observer.schedule(event_handler, path, recursive=False)
|
||||
observer.start()
|
||||
|
||||
try:
|
||||
while True:
|
||||
time.sleep(1)
|
||||
except KeyboardInterrupt:
|
||||
observer.stop()
|
||||
observer.join()
|
||||
4
media-dude/torrentarr/tv/.env
Normal file
4
media-dude/torrentarr/tv/.env
Normal file
@@ -0,0 +1,4 @@
|
||||
COMPOSE_FILE=compose.yml:../compose.torrentarr.yml
|
||||
TORRENTARR_DOWNLOAD_DIR=/media/tv/torrents
|
||||
TORRENTARR_TRANSMISSION_RPC_PORT=10010
|
||||
COMPOSE_BAKE=true
|
||||
15
media-dude/torrentarr/tv/compose.yml
Normal file
15
media-dude/torrentarr/tv/compose.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
name: torrentarr-tv
|
||||
services:
|
||||
sonarr:
|
||||
image: ghcr.io/hotio/sonarr
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8989:8989"
|
||||
environment:
|
||||
PUID: 998
|
||||
PGID: 998
|
||||
UMASK: "002"
|
||||
TZ: America/Los_Angeles
|
||||
volumes:
|
||||
- ./sonarr_config:/config
|
||||
- /media/tv/library:/media/tv/library
|
||||
@@ -16,9 +16,13 @@ services:
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
networks:
|
||||
- proxy-net
|
||||
- default
|
||||
ports:
|
||||
- "5080:5080"
|
||||
- "5514:5514"
|
||||
expose:
|
||||
- "5080"
|
||||
env_file: ./secrets/openobserve.env
|
||||
environment:
|
||||
ZO_DATA_DIR: /data
|
||||
@@ -31,6 +35,10 @@ services:
|
||||
- ./data/openobserve:/data
|
||||
- ./data/stream:/stream
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
|
||||
secrets:
|
||||
postgres_pass:
|
||||
file: ./secrets/POSTGRES_PASS
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
name: orbital-sync
|
||||
services:
|
||||
orbital-sync:
|
||||
app:
|
||||
image: mattwebbio/orbital-sync:1
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- proxy-net
|
||||
environment:
|
||||
PRIMARY_HOST_BASE_URL: 'http://192.168.1.234:1080'
|
||||
PRIMARY_HOST_PASSWORD: ""
|
||||
@@ -8,3 +12,7 @@ services:
|
||||
SECONDARY_HOSTS_1_PASSWORD: 'e8JBq59!pwM6Ppj'
|
||||
INTERVAL_MINUTES: 60
|
||||
VERBOSE: true
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
@@ -33,21 +33,21 @@
|
||||
"name": "4k Movies",
|
||||
"enabled": true,
|
||||
"type": "movie",
|
||||
"lastScan": 1734342000015
|
||||
"lastScan": 1741801200034
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "Movies",
|
||||
"enabled": true,
|
||||
"type": "movie",
|
||||
"lastScan": 1734342000024
|
||||
"lastScan": 1741801200054
|
||||
},
|
||||
{
|
||||
"id": "1",
|
||||
"name": "TV Shows",
|
||||
"enabled": true,
|
||||
"type": "show",
|
||||
"lastScan": 1734342000067
|
||||
"lastScan": 1741801200272
|
||||
}
|
||||
],
|
||||
"machineId": "5e16f8ceb511bde943f92bbe07e3e6e33307eb16"
|
||||
|
||||
@@ -1,14 +1,23 @@
|
||||
name: overseerr
|
||||
services:
|
||||
overseerr:
|
||||
app:
|
||||
image: sctx/overseerr:latest
|
||||
container_name: overseerr
|
||||
user: '115'
|
||||
environment:
|
||||
- LOG_LEVEL=debug
|
||||
- TZ=America/Los_Angeles
|
||||
networks:
|
||||
- proxy-net
|
||||
- default
|
||||
ports:
|
||||
- 5055:5055
|
||||
- "5055:5055"
|
||||
expose:
|
||||
- "5055"
|
||||
volumes:
|
||||
- ./data:/app/config
|
||||
- ./config/settings.json:/app/config/settings.json
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
|
||||
@@ -1,11 +1,18 @@
|
||||
name: requestrr
|
||||
services:
|
||||
requestrr:
|
||||
app:
|
||||
image: thomst08/requestrr
|
||||
hostname: requestrr
|
||||
container_name: requestrr
|
||||
networks:
|
||||
- proxy-net
|
||||
ports:
|
||||
- 4545:4545
|
||||
- "4545:4545"
|
||||
expose:
|
||||
- "4545"
|
||||
volumes:
|
||||
- ./config:/root/config
|
||||
- ./data/tmp:/root/config/tmp
|
||||
- ./config:/root/config
|
||||
- ./data/tmp:/root/config/tmp
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
89
scripts/torrentarr.sh
Executable file
89
scripts/torrentarr.sh
Executable file
@@ -0,0 +1,89 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Define available options as a simple array
|
||||
OPTIONS=("tv" "movies" "all")
|
||||
|
||||
# Default values
|
||||
TARGET_ALL=true
|
||||
INSTANCE="all"
|
||||
ACTION="up"
|
||||
|
||||
# Parse command line arguments
|
||||
while [[ "$#" -gt 0 ]]; do
|
||||
case $1 in
|
||||
--down|-d)
|
||||
ACTION="down"
|
||||
;;
|
||||
--restart|-r)
|
||||
ACTION="restart"
|
||||
;;
|
||||
*)
|
||||
# Assume this is the instance name
|
||||
INSTANCE="$1"
|
||||
# Only set TARGET_ALL to false if a specific instance is provided
|
||||
if [ "$INSTANCE" != "all" ]; then
|
||||
TARGET_ALL=false
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# Validate the instance name
|
||||
if ! [[ " ${OPTIONS[*]} " == *" ${INSTANCE} "* ]]; then
|
||||
echo "Unknown instance: $INSTANCE"
|
||||
echo "Valid options: ${OPTIONS[*]}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Function to execute docker compose commands
|
||||
run_docker_compose() {
|
||||
local instance=$1
|
||||
local action=$2
|
||||
local ENV_FILE="./${instance}.env"
|
||||
|
||||
if [ "$action" == "restart" ]; then
|
||||
echo "Restart: Stopping $instance torrentarr instance..."
|
||||
docker compose --env-file "$ENV_FILE" down --remove-orphans
|
||||
echo "Restart: Starting $instance torrentarr instance..."
|
||||
docker compose --env-file "$ENV_FILE" up -d
|
||||
else
|
||||
if [ "$action" == "down" ]; then
|
||||
echo "Stopping $inst torrentarr instance..."
|
||||
docker compose --env-file "$ENV_FILE" down --remove-orphans
|
||||
echo "Stopped $inst torrentarr instance."
|
||||
elif [ "$action" == "up" ]; then
|
||||
echo "Starting $inst torrentarr instance..."
|
||||
docker compose --env-file "$ENV_FILE" up -d
|
||||
echo "Started $inst torrentarr instance."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Handle all instances or specific instance
|
||||
if [ "$TARGET_ALL" = true ]; then
|
||||
if [ "$ACTION" == "up" ]; then
|
||||
echo "Starting all instances..."
|
||||
elif [ "$ACTION" == "down" ]; then
|
||||
echo "Stopping all instances..."
|
||||
elif [ "$ACTION" == "restart" ]; then
|
||||
echo "Restarting all instances..."
|
||||
fi
|
||||
|
||||
# Loop through all options except "all"
|
||||
for inst in "${OPTIONS[@]}"; do
|
||||
if [ "$inst" != "all" ]; then
|
||||
run_docker_compose "$inst" $ACTION
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$ACTION" == "up" ]; then
|
||||
echo "Started all instances"
|
||||
elif [ "$ACTION" == "down" ]; then
|
||||
echo "Stopped all instances"
|
||||
elif [ "$ACTION" == "restart" ]; then
|
||||
echo "Restarted all instances"
|
||||
fi
|
||||
else
|
||||
run_docker_compose "$INSTANCE" $ACTION
|
||||
fi
|
||||
3
seedsync/.gitignore
vendored
Normal file
3
seedsync/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
config/**/*.persist
|
||||
config/**/*.bak
|
||||
config/**/*.backup
|
||||
35
seedsync/config/seedsync_junk/settings.cfg
Normal file
35
seedsync/config/seedsync_junk/settings.cfg
Normal file
@@ -0,0 +1,35 @@
|
||||
[General]
|
||||
debug = False
|
||||
verbose = False
|
||||
|
||||
[Lftp]
|
||||
remote_address = asia.feralhosting.com
|
||||
remote_username = tinyturtle
|
||||
remote_password = password
|
||||
remote_port = 22
|
||||
remote_path = /media/dmg/tinyturtle/junk_transfer
|
||||
local_path = /downloads
|
||||
remote_path_to_scan_script = /media/dmg/tinyturtle/.seedsync_junk_bin
|
||||
use_ssh_key = True
|
||||
num_max_parallel_downloads = 1
|
||||
num_max_parallel_files_per_download = 2
|
||||
num_max_connections_per_root_file = 5
|
||||
num_max_connections_per_dir_file = 5
|
||||
num_max_total_connections = 5
|
||||
use_temp_file = True
|
||||
|
||||
[Controller]
|
||||
interval_ms_remote_scan = 30000
|
||||
interval_ms_local_scan = 10000
|
||||
interval_ms_downloading_scan = 1000
|
||||
extract_path = /seedsynctmp
|
||||
use_local_path_as_extract_path = True
|
||||
|
||||
[Web]
|
||||
port = 8802
|
||||
|
||||
[AutoQueue]
|
||||
enabled = True
|
||||
patterns_only = False
|
||||
auto_extract = True
|
||||
|
||||
35
seedsync/config/seedsync_junk_movies/settings.cfg
Normal file
35
seedsync/config/seedsync_junk_movies/settings.cfg
Normal file
@@ -0,0 +1,35 @@
|
||||
[General]
|
||||
debug = False
|
||||
verbose = False
|
||||
|
||||
[Lftp]
|
||||
remote_address = asia.feralhosting.com
|
||||
remote_username = tinyturtle
|
||||
remote_password = password
|
||||
remote_port = 22
|
||||
remote_path = /media/dmg/tinyturtle/junk_transfer_movies
|
||||
local_path = /downloads
|
||||
remote_path_to_scan_script = /media/dmg/tinyturtle/.seedsync_junk_movies_bin
|
||||
use_ssh_key = True
|
||||
num_max_parallel_downloads = 1
|
||||
num_max_parallel_files_per_download = 2
|
||||
num_max_connections_per_root_file = 5
|
||||
num_max_connections_per_dir_file = 5
|
||||
num_max_total_connections = 5
|
||||
use_temp_file = True
|
||||
|
||||
[Controller]
|
||||
interval_ms_remote_scan = 30000
|
||||
interval_ms_local_scan = 10000
|
||||
interval_ms_downloading_scan = 1000
|
||||
extract_path = /seedsynctmp
|
||||
use_local_path_as_extract_path = True
|
||||
|
||||
[Web]
|
||||
port = 8805
|
||||
|
||||
[AutoQueue]
|
||||
enabled = True
|
||||
patterns_only = False
|
||||
auto_extract = True
|
||||
|
||||
35
seedsync/config/seedsync_junk_packs/settings.cfg
Normal file
35
seedsync/config/seedsync_junk_packs/settings.cfg
Normal file
@@ -0,0 +1,35 @@
|
||||
[General]
|
||||
debug = False
|
||||
verbose = False
|
||||
|
||||
[Lftp]
|
||||
remote_address = asia.feralhosting.com
|
||||
remote_username = tinyturtle
|
||||
remote_password = password
|
||||
remote_port = 22
|
||||
remote_path = /media/dmg/tinyturtle/junk_transfer_packs
|
||||
local_path = /downloads
|
||||
remote_path_to_scan_script = /media/dmg/tinyturtle/.seedsync_junk_packs_bin
|
||||
use_ssh_key = True
|
||||
num_max_parallel_downloads = 1
|
||||
num_max_parallel_files_per_download = 2
|
||||
num_max_connections_per_root_file = 5
|
||||
num_max_connections_per_dir_file = 5
|
||||
num_max_total_connections = 5
|
||||
use_temp_file = True
|
||||
|
||||
[Controller]
|
||||
interval_ms_remote_scan = 30000
|
||||
interval_ms_local_scan = 10000
|
||||
interval_ms_downloading_scan = 1000
|
||||
extract_path = /seedsynctmp
|
||||
use_local_path_as_extract_path = True
|
||||
|
||||
[Web]
|
||||
port = 8804
|
||||
|
||||
[AutoQueue]
|
||||
enabled = True
|
||||
patterns_only = False
|
||||
auto_extract = True
|
||||
|
||||
35
seedsync/config/seedsync_movies/settings.cfg
Normal file
35
seedsync/config/seedsync_movies/settings.cfg
Normal file
@@ -0,0 +1,35 @@
|
||||
[General]
|
||||
debug = False
|
||||
verbose = False
|
||||
|
||||
[Lftp]
|
||||
remote_address = asia.feralhosting.com
|
||||
remote_username = tinyturtle
|
||||
remote_password = password
|
||||
remote_port = 22
|
||||
remote_path = /media/dmg/tinyturtle/transfer/movies
|
||||
local_path = /downloads
|
||||
remote_path_to_scan_script = /media/dmg/tinyturtle/.seedsync_movies_bin
|
||||
use_ssh_key = True
|
||||
num_max_parallel_downloads = 1
|
||||
num_max_parallel_files_per_download = 1
|
||||
num_max_connections_per_root_file = 6
|
||||
num_max_connections_per_dir_file = 6
|
||||
num_max_total_connections = 6
|
||||
use_temp_file = True
|
||||
|
||||
[Controller]
|
||||
interval_ms_remote_scan = 30000
|
||||
interval_ms_local_scan = 10000
|
||||
interval_ms_downloading_scan = 1000
|
||||
extract_path = /seedsynctmp
|
||||
use_local_path_as_extract_path = True
|
||||
|
||||
[Web]
|
||||
port = 8801
|
||||
|
||||
[AutoQueue]
|
||||
enabled = True
|
||||
patterns_only = False
|
||||
auto_extract = True
|
||||
|
||||
35
seedsync/config/seedsync_other/settings.cfg
Normal file
35
seedsync/config/seedsync_other/settings.cfg
Normal file
@@ -0,0 +1,35 @@
|
||||
[General]
|
||||
debug = False
|
||||
verbose = False
|
||||
|
||||
[Lftp]
|
||||
remote_address = asia.feralhosting.com
|
||||
remote_username = tinyturtle
|
||||
remote_password = password
|
||||
remote_port = 22
|
||||
remote_path = /media/dmg/tinyturtle/transfer/other
|
||||
local_path = /downloads
|
||||
remote_path_to_scan_script = /media/dmg/tinyturtle/.seedsync_other_bin
|
||||
use_ssh_key = True
|
||||
num_max_parallel_downloads = 1
|
||||
num_max_parallel_files_per_download = 2
|
||||
num_max_connections_per_root_file = 4
|
||||
num_max_connections_per_dir_file = 4
|
||||
num_max_total_connections = 4
|
||||
use_temp_file = True
|
||||
|
||||
[Controller]
|
||||
interval_ms_remote_scan = 30000
|
||||
interval_ms_local_scan = 10000
|
||||
interval_ms_downloading_scan = 1000
|
||||
extract_path = /seedsynctmp
|
||||
use_local_path_as_extract_path = True
|
||||
|
||||
[Web]
|
||||
port = 8803
|
||||
|
||||
[AutoQueue]
|
||||
enabled = True
|
||||
patterns_only = False
|
||||
auto_extract = False
|
||||
|
||||
35
seedsync/config/seedsync_tv/settings.cfg
Normal file
35
seedsync/config/seedsync_tv/settings.cfg
Normal file
@@ -0,0 +1,35 @@
|
||||
[General]
|
||||
debug = False
|
||||
verbose = False
|
||||
|
||||
[Lftp]
|
||||
remote_address = asia.feralhosting.com
|
||||
remote_username = tinyturtle
|
||||
remote_password = password
|
||||
remote_port = 22
|
||||
remote_path = /media/dmg/tinyturtle/transfer/tv
|
||||
local_path = /downloads
|
||||
remote_path_to_scan_script = /media/dmg/tinyturtle/.seedsync_tv_bin
|
||||
use_ssh_key = True
|
||||
num_max_parallel_downloads = 1
|
||||
num_max_parallel_files_per_download = 2
|
||||
num_max_connections_per_root_file = 4
|
||||
num_max_connections_per_dir_file = 4
|
||||
num_max_total_connections = 4
|
||||
use_temp_file = True
|
||||
|
||||
[Controller]
|
||||
interval_ms_remote_scan = 30000
|
||||
interval_ms_local_scan = 10000
|
||||
interval_ms_downloading_scan = 1000
|
||||
extract_path = /seedsynctmp
|
||||
use_local_path_as_extract_path = True
|
||||
|
||||
[Web]
|
||||
port = 8800
|
||||
|
||||
[AutoQueue]
|
||||
enabled = True
|
||||
patterns_only = False
|
||||
auto_extract = True
|
||||
|
||||
68
seedsync/docker-compose.yml
Normal file
68
seedsync/docker-compose.yml
Normal file
@@ -0,0 +1,68 @@
|
||||
name: seedsync
|
||||
services:
|
||||
junksync:
|
||||
image: ipsingh06/seedsync:latest
|
||||
container_name: junksync
|
||||
user: '998'
|
||||
ports:
|
||||
- 8802:8802
|
||||
volumes:
|
||||
- /media/junk/new_transfer:/downloads
|
||||
- ./config/seedsync_junk:/config
|
||||
- /home/media/.ssh:/home/seedsync/.ssh
|
||||
restart: unless-stopped
|
||||
junkpacksync:
|
||||
image: ipsingh06/seedsync:latest
|
||||
container_name: junkpacksync
|
||||
user: '998'
|
||||
ports:
|
||||
- 8804:8804
|
||||
volumes:
|
||||
- /media/raid/junk_pack_transfer:/downloads
|
||||
- ./config/seedsync_junk_packs:/config
|
||||
- /home/media/.ssh:/home/seedsync/.ssh
|
||||
restart: unless-stopped
|
||||
junkmoviesync:
|
||||
image: ipsingh06/seedsync:latest
|
||||
container_name: junkmoviesync
|
||||
user: '998'
|
||||
ports:
|
||||
- 8805:8805
|
||||
volumes:
|
||||
- /media/raid/junk_movies_transfer:/downloads
|
||||
- ./config/seedsync_junk_movies:/config
|
||||
- /home/media/.ssh:/home/seedsync/.ssh
|
||||
restart: unless-stopped
|
||||
moviesync:
|
||||
image: ipsingh06/seedsync:latest
|
||||
container_name: moviesync
|
||||
user: '998'
|
||||
ports:
|
||||
- 8801:8801
|
||||
volumes:
|
||||
- /media/downloads/movies:/downloads
|
||||
- ./config/seedsync_movies:/config
|
||||
- /home/media/.ssh:/home/seedsync/.ssh
|
||||
restart: unless-stopped
|
||||
tvsync:
|
||||
image: ipsingh06/seedsync:latest
|
||||
container_name: tvsync
|
||||
user: '998'
|
||||
ports:
|
||||
- 8800:8800
|
||||
volumes:
|
||||
- /media/downloads/tv:/downloads
|
||||
- ./config/seedsync_tv:/config
|
||||
- /home/media/.ssh:/home/seedsync/.ssh
|
||||
restart: unless-stopped
|
||||
othersync:
|
||||
image: ipsingh06/seedsync:latest
|
||||
container_name: othersync
|
||||
user: '998'
|
||||
ports:
|
||||
- 8803:8803
|
||||
volumes:
|
||||
- /media/downloads/other:/downloads
|
||||
- ./config/seedsync_other:/config
|
||||
- /home/media/.ssh:/home/seedsync/.ssh
|
||||
restart: unless-stopped
|
||||
@@ -5,7 +5,9 @@ calculate_md5: false
|
||||
continue_playlist_default: true
|
||||
create_image_clip_from_videos: false
|
||||
cssenabled: false
|
||||
dangerous_allow_public_without_auth: "false"
|
||||
custom_served_folders:
|
||||
/: /custom_web
|
||||
dangerous_allow_public_without_auth: true
|
||||
database: /db/stash-go.sqlite
|
||||
defaults:
|
||||
auto_tag_task:
|
||||
@@ -103,11 +105,13 @@ no_proxy: localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12
|
||||
nobrowser: true
|
||||
notifications_enabled: false
|
||||
parallel_tasks: 0
|
||||
password: $2a$04$T8nN490lPHZw1rf6v1Q2ze/VAn3hhgiJ6l/SSV96gBMwhmDLk/dXq
|
||||
plugins:
|
||||
disabled:
|
||||
- VideoScrollWheel
|
||||
- TPDBMarkers
|
||||
- filemonitor
|
||||
- markerTagToScene
|
||||
- visage
|
||||
package_sources:
|
||||
- localpath: community
|
||||
name: Community (stable)
|
||||
@@ -115,22 +119,68 @@ plugins:
|
||||
- localpath: stash-plugins
|
||||
name: Stash-Plugins
|
||||
url: https://7djx1qp.github.io/stash-plugins/main/index.yml
|
||||
- localpath: tetrax
|
||||
name: Tetrax
|
||||
url: https://tetrax-10.github.io/stash-stuffs/index.yml
|
||||
- localpath: valkyr
|
||||
name: Valkyr
|
||||
url: https://valkyr-js.github.io/stash-plugins/index.yml
|
||||
- localpath: stgannon
|
||||
name: STG Annon
|
||||
url: https://stg-annon.github.io/StashScripts/stable/index.yml
|
||||
- localpath: community
|
||||
name: Axter-Stash
|
||||
url: https://stash.axter.com/Dev/index.yml
|
||||
settings:
|
||||
DupFileManager:
|
||||
matchDupDistance: "1"
|
||||
mergeDupFilename: true
|
||||
zwGraylist: /data,/movies,/packs
|
||||
zxBlacklist: ""
|
||||
zySwapBetterBitRate: true
|
||||
zySwapBetterFrameRate: false
|
||||
zySwapCodec: true
|
||||
zySwapHighRes: true
|
||||
zySwapLongLength: true
|
||||
zzDebug: true
|
||||
zzObsoleteSettingsCheckVer2: true
|
||||
zzTracing: true
|
||||
zzdryRun: false
|
||||
PerformerDetailsExtended:
|
||||
additionalStyling: false
|
||||
appearsMostWithGendered: true
|
||||
scenesTimespanReverse: false
|
||||
showWhenCollapsed: true
|
||||
topTagsOn: true
|
||||
totalPlayCountOn: true
|
||||
cjCardTweaks:
|
||||
addBannerDimension: true
|
||||
fileCount: true
|
||||
performerProfileCards: true
|
||||
markerTagToScene:
|
||||
allTags: false
|
||||
stashStashIDInput:
|
||||
performers: true
|
||||
studios: true
|
||||
stashStashIdInput:
|
||||
performers: true
|
||||
studios: true
|
||||
tPdBmarkers:
|
||||
disableSceneMarkerHook: true
|
||||
tagGraph:
|
||||
options: true
|
||||
timestampTrade:
|
||||
createMovieFromScene: false
|
||||
addTimestampTradeUrl: true
|
||||
addTsTradeTag: true
|
||||
createGalleryFromScene: false
|
||||
createMarkers: true
|
||||
createMovieFromScene: true
|
||||
disableGalleryLookupHook: true
|
||||
disableSceneMarkersHook: false
|
||||
extraUrls: false
|
||||
extraUrls: true
|
||||
matchFunscripts: false
|
||||
mergeMarkers: true
|
||||
overwriteMarkers: false
|
||||
plugins_path: /plugins/
|
||||
port: 9999
|
||||
preview_audio: true
|
||||
@@ -174,6 +224,9 @@ stash_boxes:
|
||||
- apikey: H04DEzLXkMqUBtNdS9CYOI4ek9KZb0EBSfNhTt1A87ee11b2
|
||||
endpoint: https://theporndb.net/graphql
|
||||
name: ThePornDB
|
||||
- apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiIwNWY4OTFiYy04MjVlLTQ1ZmQtYWFkYS0yYTc0OWE2NzgzMWQiLCJzdWIiOiJBUElLZXkiLCJpYXQiOjE3Mzk2MDkxOTF9.fMPLqqt2B3iw1qpOjMVMHmqMcorbw42Jy4WIBkyj7wo
|
||||
endpoint: https://fansdb.cc/graphql
|
||||
name: FansDB
|
||||
theme_color: '#202b33'
|
||||
ui:
|
||||
advancedMode: true
|
||||
@@ -298,423 +351,8 @@ ui:
|
||||
excludedStudioFields:
|
||||
- name
|
||||
fingerprintQueue:
|
||||
https://stashdb.org/graphql:
|
||||
- "16926"
|
||||
- "16932"
|
||||
- "16937"
|
||||
- "16916"
|
||||
- "16922"
|
||||
- "16931"
|
||||
- "16914"
|
||||
- "16924"
|
||||
- "16930"
|
||||
- "16920"
|
||||
- "16909"
|
||||
- "16927"
|
||||
- "16936"
|
||||
- "16911"
|
||||
- "16921"
|
||||
- "16925"
|
||||
- "16912"
|
||||
- "16918"
|
||||
- "16923"
|
||||
- "16933"
|
||||
- "16913"
|
||||
- "16928"
|
||||
- "16929"
|
||||
- "16910"
|
||||
- "16915"
|
||||
- "16943"
|
||||
- "16935"
|
||||
- "16919"
|
||||
- "16861"
|
||||
- "16945"
|
||||
- "16946"
|
||||
- "16949"
|
||||
- "16955"
|
||||
- "16956"
|
||||
- "16957"
|
||||
- "16958"
|
||||
- "16959"
|
||||
- "16962"
|
||||
- "16967"
|
||||
- "16970"
|
||||
- "16971"
|
||||
- "16977"
|
||||
- "16978"
|
||||
- "16989"
|
||||
- "16991"
|
||||
- "16988"
|
||||
- "16994"
|
||||
- "16995"
|
||||
- "16986"
|
||||
- "16996"
|
||||
- "16993"
|
||||
- "16984"
|
||||
- "16987"
|
||||
- "16992"
|
||||
- "16985"
|
||||
- "16998"
|
||||
- "17000"
|
||||
- "16999"
|
||||
- "17002"
|
||||
- "17007"
|
||||
- "17011"
|
||||
- "17008"
|
||||
- "17010"
|
||||
- "17009"
|
||||
- "17012"
|
||||
- "17013"
|
||||
- "17014"
|
||||
- "17016"
|
||||
- "17015"
|
||||
- "17017"
|
||||
- "17018"
|
||||
- "17019"
|
||||
- "17022"
|
||||
- "17020"
|
||||
- "17021"
|
||||
- "17023"
|
||||
- "17024"
|
||||
- "17027"
|
||||
- "17025"
|
||||
- "17028"
|
||||
- "17029"
|
||||
- "17030"
|
||||
- "17032"
|
||||
- "17035"
|
||||
- "17034"
|
||||
- "17036"
|
||||
- "17037"
|
||||
- "17038"
|
||||
- "17043"
|
||||
- "17045"
|
||||
- "17044"
|
||||
- "17047"
|
||||
- "17048"
|
||||
- "17053"
|
||||
- "17059"
|
||||
- "17060"
|
||||
- "17061"
|
||||
- "17063"
|
||||
- "17062"
|
||||
- "17065"
|
||||
- "17066"
|
||||
- "17067"
|
||||
- "17068"
|
||||
- "17069"
|
||||
- "17071"
|
||||
- "17072"
|
||||
- "17074"
|
||||
- "17073"
|
||||
- "17075"
|
||||
- "17076"
|
||||
- "17077"
|
||||
- "17078"
|
||||
- "17079"
|
||||
- "17082"
|
||||
- "17083"
|
||||
- "17085"
|
||||
- "17088"
|
||||
- "17090"
|
||||
- "17092"
|
||||
- "17093"
|
||||
- "17094"
|
||||
- "17095"
|
||||
- "17096"
|
||||
- "17099"
|
||||
- "17105"
|
||||
- "17141"
|
||||
- "17140"
|
||||
- "17160"
|
||||
- "17135"
|
||||
- "17159"
|
||||
- "17157"
|
||||
- "17175"
|
||||
- "17177"
|
||||
- "17176"
|
||||
- "17146"
|
||||
- "17164"
|
||||
- "17152"
|
||||
- "17179"
|
||||
- "17172"
|
||||
- "17145"
|
||||
- "17158"
|
||||
- "17153"
|
||||
- "17163"
|
||||
- "17156"
|
||||
- "17148"
|
||||
- "17138"
|
||||
- "17142"
|
||||
- "17137"
|
||||
- "17167"
|
||||
- "17171"
|
||||
- "17173"
|
||||
- "17154"
|
||||
- "17168"
|
||||
- "17166"
|
||||
- "17139"
|
||||
- "17151"
|
||||
- "17169"
|
||||
- "17162"
|
||||
- "17161"
|
||||
- "17178"
|
||||
- "17144"
|
||||
- "17136"
|
||||
- "17147"
|
||||
- "17180"
|
||||
- "17181"
|
||||
- "17182"
|
||||
- "17185"
|
||||
- "17186"
|
||||
- "17188"
|
||||
- "17192"
|
||||
- "17193"
|
||||
- "17194"
|
||||
- "17195"
|
||||
- "17196"
|
||||
- "17197"
|
||||
- "17198"
|
||||
- "17199"
|
||||
- "17200"
|
||||
- "17201"
|
||||
- "17202"
|
||||
- "17205"
|
||||
- "17209"
|
||||
- "17208"
|
||||
- "17210"
|
||||
- "17211"
|
||||
- "17212"
|
||||
- "17214"
|
||||
- "17213"
|
||||
- "17215"
|
||||
- "17217"
|
||||
- "17218"
|
||||
- "17220"
|
||||
- "17216"
|
||||
- "17219"
|
||||
- "17222"
|
||||
- "17221"
|
||||
- "17223"
|
||||
- "17224"
|
||||
- "17230"
|
||||
- "17226"
|
||||
- "17233"
|
||||
- "17232"
|
||||
- "17229"
|
||||
- "17231"
|
||||
- "17227"
|
||||
- "17225"
|
||||
- "17228"
|
||||
- "17234"
|
||||
- "17235"
|
||||
- "17236"
|
||||
- "17237"
|
||||
- "17238"
|
||||
- "17239"
|
||||
- "17241"
|
||||
- "17240"
|
||||
- "17243"
|
||||
- "17242"
|
||||
- "17245"
|
||||
- "17244"
|
||||
- "17246"
|
||||
- "17248"
|
||||
- "17247"
|
||||
- "17249"
|
||||
- "17250"
|
||||
- "17251"
|
||||
- "17252"
|
||||
- "17254"
|
||||
- "17253"
|
||||
- "17255"
|
||||
- "17256"
|
||||
- "17257"
|
||||
- "17258"
|
||||
- "17261"
|
||||
- "17259"
|
||||
- "17260"
|
||||
- "17265"
|
||||
- "17266"
|
||||
- "17267"
|
||||
- "17268"
|
||||
- "17269"
|
||||
- "17271"
|
||||
- "17270"
|
||||
- "17272"
|
||||
- "17277"
|
||||
- "17278"
|
||||
- "17312"
|
||||
- "17313"
|
||||
- "17315"
|
||||
- "17314"
|
||||
- "17316"
|
||||
- "17318"
|
||||
- "17317"
|
||||
- "16890"
|
||||
- "16891"
|
||||
- "17320"
|
||||
- "17321"
|
||||
- "17322"
|
||||
- "17323"
|
||||
- "17324"
|
||||
- "17325"
|
||||
- "17326"
|
||||
- "17327"
|
||||
- "17328"
|
||||
- "17329"
|
||||
- "17330"
|
||||
- "17331"
|
||||
- "17332"
|
||||
- "17336"
|
||||
- "17339"
|
||||
- "17338"
|
||||
- "17340"
|
||||
- "17342"
|
||||
- "17345"
|
||||
- "17348"
|
||||
- "17349"
|
||||
- "17351"
|
||||
- "17341"
|
||||
- "17367"
|
||||
- "17368"
|
||||
- "17376"
|
||||
- "17377"
|
||||
- "17378"
|
||||
- "17379"
|
||||
- "17382"
|
||||
- "17381"
|
||||
- "17383"
|
||||
- "17385"
|
||||
- "17386"
|
||||
- "17384"
|
||||
- "17389"
|
||||
- "17388"
|
||||
- "17390"
|
||||
- "17392"
|
||||
- "17399"
|
||||
- "17406"
|
||||
- "17405"
|
||||
- "17407"
|
||||
- "17409"
|
||||
- "17424"
|
||||
- "17426"
|
||||
- "17425"
|
||||
- "17427"
|
||||
- "17429"
|
||||
- "17430"
|
||||
- "17431"
|
||||
- "17432"
|
||||
- "17435"
|
||||
- "17434"
|
||||
- "17437"
|
||||
- "17438"
|
||||
- "17439"
|
||||
- "17441"
|
||||
- "17442"
|
||||
- "17444"
|
||||
- "17443"
|
||||
- "17445"
|
||||
- "17447"
|
||||
- "17446"
|
||||
- "17449"
|
||||
- "17448"
|
||||
- "17451"
|
||||
- "17453"
|
||||
- "17454"
|
||||
- "17455"
|
||||
- "17456"
|
||||
- "17440"
|
||||
- "17459"
|
||||
- "17458"
|
||||
- "17460"
|
||||
- "17462"
|
||||
- "17463"
|
||||
- "17464"
|
||||
- "17465"
|
||||
- "17466"
|
||||
- "17468"
|
||||
- "17469"
|
||||
- "17470"
|
||||
- "17503"
|
||||
- "17505"
|
||||
- "17506"
|
||||
- "17507"
|
||||
- "17510"
|
||||
- "17512"
|
||||
- "17514"
|
||||
- "17513"
|
||||
- "17515"
|
||||
- "17516"
|
||||
- "17517"
|
||||
- "17520"
|
||||
- "17521"
|
||||
- "17522"
|
||||
- "17508"
|
||||
- "17502"
|
||||
- "17509"
|
||||
- "17524"
|
||||
- "17527"
|
||||
- "17529"
|
||||
- "17530"
|
||||
- "17531"
|
||||
- "17532"
|
||||
- "17533"
|
||||
- "17534"
|
||||
- "17535"
|
||||
- "17536"
|
||||
- "17537"
|
||||
- "17538"
|
||||
- "17539"
|
||||
- "17540"
|
||||
- "17541"
|
||||
- "17542"
|
||||
- "17543"
|
||||
- "17544"
|
||||
- "17545"
|
||||
- "17546"
|
||||
https://theporndb.net/graphql:
|
||||
- "16934"
|
||||
- "16908"
|
||||
- "16944"
|
||||
- "16917"
|
||||
- "16947"
|
||||
- "16948"
|
||||
- "16979"
|
||||
- "16990"
|
||||
- "17026"
|
||||
- "17031"
|
||||
- "17033"
|
||||
- "17081"
|
||||
- "17080"
|
||||
- "17084"
|
||||
- "17087"
|
||||
- "17086"
|
||||
- "17089"
|
||||
- "17091"
|
||||
- "17143"
|
||||
- "17183"
|
||||
- "17150"
|
||||
- "17149"
|
||||
- "17155"
|
||||
- "17165"
|
||||
- "17184"
|
||||
- "17319"
|
||||
- "17347"
|
||||
- "17352"
|
||||
- "17369"
|
||||
- "17370"
|
||||
- "17371"
|
||||
- "17387"
|
||||
- "17391"
|
||||
- "17380"
|
||||
- "17436"
|
||||
- "17457"
|
||||
- "17461"
|
||||
- "17501"
|
||||
- "17504"
|
||||
- "17511"
|
||||
- "17519"
|
||||
https://stashdb.org/graphql: []
|
||||
https://theporndb.net/graphql: []
|
||||
markSceneAsOrganizedOnSave: false
|
||||
mode: auto
|
||||
selectedEndpoint: https://theporndb.net/graphql
|
||||
@@ -726,7 +364,7 @@ ui:
|
||||
cleanGenerated:
|
||||
blobFiles: true
|
||||
dryRun: false
|
||||
imageThumbnails: false
|
||||
imageThumbnails: true
|
||||
markers: true
|
||||
screenshots: true
|
||||
sprites: true
|
||||
@@ -739,7 +377,7 @@ ui:
|
||||
interactiveHeatmapsSpeeds: false
|
||||
markerImagePreviews: false
|
||||
markerScreenshots: false
|
||||
markers: false
|
||||
markers: true
|
||||
phashes: true
|
||||
previewOptions:
|
||||
previewExcludeEnd: "0"
|
||||
|
||||
@@ -1,25 +1,21 @@
|
||||
# APPNICENAME=Stash
|
||||
# APPDESCRIPTION=An organizer for your porn, written in Go
|
||||
name: stashapp
|
||||
services:
|
||||
stash:
|
||||
app:
|
||||
image: stashapp/stash:latest
|
||||
container_name: stash
|
||||
restart: unless-stopped
|
||||
## the container's port must be the same with the STASH_PORT in the environment section
|
||||
ports:
|
||||
- "9999:9999"
|
||||
## If you intend to use stash's DLNA functionality uncomment the below network mode and comment out the above ports section
|
||||
# network_mode: host
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-file: "10"
|
||||
max-size: "2m"
|
||||
networks:
|
||||
- proxy-net
|
||||
expose:
|
||||
- "9999"
|
||||
environment:
|
||||
- STASH_STASH=/data/
|
||||
- STASH_GENERATED=/generated/
|
||||
- STASH_METADATA=/metadata/
|
||||
- STASH_CACHE=/cache/
|
||||
- STASH_EXTERNAL_HOST=https://stash.tremendousturtle.tools
|
||||
## Adjust below to change default port (9999)
|
||||
- STASH_PORT=9999
|
||||
volumes:
|
||||
@@ -31,6 +27,7 @@ services:
|
||||
- ./config:/root/.stash
|
||||
## Point this at your collection.
|
||||
- /media/raid/junk_transfer:/data
|
||||
- /media/junk/new_transfer:/data/new_transfer
|
||||
- /media/raid/stash:/stash
|
||||
- /media/junk/junk:/junk
|
||||
- /media/raid/junk_movies_transfer:/movies
|
||||
@@ -47,5 +44,16 @@ services:
|
||||
- ./data/scrapers:/scrapers
|
||||
## Where to store database file
|
||||
- ./data/db:/db
|
||||
## Custom DupFileManager plugin
|
||||
- /code/Axter-Stash-Gitea/plugins/DupFileManager:/plugins/community/DupFileManager
|
||||
- /code/Axter-Stash-Gitea/plugins/DupFileManager/web:/custom_web
|
||||
## Custom TimestampTrade plugin
|
||||
- /code/Stash-CommunityScripts/plugins/timestampTrade:/plugins/timestampTrade
|
||||
## Custom RemoveMarkers plugin
|
||||
- /code/Stash-Plugins/RemoveMarkers:/plugins/RemoveMarkers
|
||||
## Where to store generated content (screenshots,previews,transcodes,sprites)
|
||||
- /media/stashapp/generated:/generated
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
8
tautulli/.gitignore
vendored
Normal file
8
tautulli/.gitignore
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
config/backups/
|
||||
config/cache/
|
||||
config/exports/
|
||||
config/logs/
|
||||
config/newsletters/
|
||||
config/release.lock
|
||||
config/tautulli.db
|
||||
config/version.lock
|
||||
170
tautulli/config/config.ini
Normal file
170
tautulli/config/config.ini
Normal file
@@ -0,0 +1,170 @@
|
||||
[General]
|
||||
allow_guest_access = 0
|
||||
date_format = YYYY-MM-DD
|
||||
time_format = HH:mm
|
||||
anon_redirect = https://www.nullrefer.com/?
|
||||
anon_redirect_dynamic = 0
|
||||
api_enabled = 1
|
||||
api_key = 079935546d82416db237001d03059dc3
|
||||
api_sql = 0
|
||||
backup_days = 3
|
||||
backup_dir = /config/backups
|
||||
backup_interval = 6
|
||||
cache_dir = /config/cache
|
||||
cache_images = 1
|
||||
check_github = 1
|
||||
check_github_interval = 6
|
||||
check_github_on_startup = 1
|
||||
cleanup_files = 0
|
||||
do_not_override_git_branch = 0
|
||||
enable_https = 0
|
||||
export_dir = /config/exports
|
||||
first_run_complete = 1
|
||||
freeze_db = 0
|
||||
get_file_sizes = 0
|
||||
git_branch = master
|
||||
git_path = ""
|
||||
git_remote = origin
|
||||
git_token = ""
|
||||
git_user = Tautulli
|
||||
git_repo = Tautulli
|
||||
group_history_tables = 1
|
||||
history_table_activity = 1
|
||||
home_sections = current_activity, watch_stats, library_stats, recently_added
|
||||
home_library_cards = 4, 2, 1, 5, 7, 8, 9, 12
|
||||
home_stats_cards = top_movies, popular_movies, top_tv, popular_tv, top_music, popular_music, last_watched, top_libraries, top_users, top_platforms, most_concurrent
|
||||
home_refresh_interval = 10
|
||||
https_create_cert = 1
|
||||
https_cert = /config/server.crt
|
||||
https_cert_chain = ""
|
||||
https_key = /config/server.key
|
||||
https_domain = localhost
|
||||
https_ip = 127.0.0.1
|
||||
http_basic_auth = 0
|
||||
http_environment = production
|
||||
http_hash_password = 1
|
||||
http_hashed_password = 1
|
||||
http_host = 0.0.0.0
|
||||
http_password = PBKDF2$sha256$600000$Y6kl7oc/cNUwRhxpN3cYDw==$b4hYGhFatQNKuNvFsY4IEFI5FHVZjBKY
|
||||
http_port = 8181
|
||||
http_proxy = 0
|
||||
http_root = ""
|
||||
http_username = chris
|
||||
http_plex_admin = 1
|
||||
http_base_url = ""
|
||||
http_rate_limit_attempts = 10
|
||||
http_rate_limit_attempts_interval = 300
|
||||
http_rate_limit_lockout_time = 300
|
||||
http_thread_pool = 10
|
||||
interface = default
|
||||
launch_browser = 0
|
||||
launch_startup = 0
|
||||
log_blacklist = 1
|
||||
log_blacklist_usernames = 1
|
||||
log_dir = /config/logs
|
||||
musicbrainz_lookup = 0
|
||||
plexpy_auto_update = 0
|
||||
show_advanced_settings = 1
|
||||
themoviedb_apikey = e9a6655bae34bf694a0f3e33338dc28e
|
||||
themoviedb_lookup = 0
|
||||
tvmaze_lookup = 0
|
||||
update_db_interval = 24
|
||||
update_show_changelog = 0
|
||||
week_start_monday = 0
|
||||
sys_tray_icon = 0
|
||||
[[get_file_sizes_hold]]
|
||||
section_ids = ,
|
||||
rating_keys = ,
|
||||
[PMS]
|
||||
pms_client_id = a63eebdc-9a0e-45be-9448-d8769535c470
|
||||
pms_identifier = 5e16f8ceb511bde943f92bbe07e3e6e33307eb16
|
||||
pms_ip = 192.168.1.234
|
||||
pms_is_cloud = 0
|
||||
pms_is_remote = 0
|
||||
pms_language = ""
|
||||
pms_logs_folder = /plex_logs
|
||||
pms_logs_line_cap = 1000
|
||||
pms_name = winterfell
|
||||
pms_name_override = ""
|
||||
pms_port = 32400
|
||||
pms_token = udTzPteNY8SNSibrzajX
|
||||
pms_ssl = 0
|
||||
pms_url = http://192.168.1.234:32400
|
||||
pms_url_override = ""
|
||||
pms_url_manual = 0
|
||||
pms_use_bif = 0
|
||||
pms_uuid = db661b1c35ed453bba7ddee2e44e3145
|
||||
pms_plexpass = 1
|
||||
pms_platform = Linux
|
||||
pms_version = 1.41.4.9463-630c9f557
|
||||
pms_update_channel = plex
|
||||
pms_update_distro = debian
|
||||
pms_update_distro_build = linux-x86
|
||||
pms_web_url = https://app.plex.tv/desktop
|
||||
[Advanced]
|
||||
pms_timeout = 15
|
||||
pms_update_check_interval = 24
|
||||
cache_sizemb = 32
|
||||
check_docker_mount = 1
|
||||
check_github_cache_seconds = 3600
|
||||
config_version = 22
|
||||
export_threads = 8
|
||||
https_min_tls_version = TLSv1.2
|
||||
journal_mode = WAL
|
||||
metadata_cache_seconds = 1800
|
||||
notification_threads = 2
|
||||
notify_text_eval = 0
|
||||
session_db_write_attempts = 5
|
||||
synchronous_mode = NORMAL
|
||||
upgrade_flag = 1
|
||||
verbose_logs = 1
|
||||
verify_ssl_cert = 1
|
||||
websocket_monitor_ping_pong = 0
|
||||
websocket_connection_attempts = 5
|
||||
websocket_connection_timeout = 5
|
||||
jwt_secret = 11a7ffcc84ad42c98cf603d50cffdde5
|
||||
jwt_update_secret = 0
|
||||
system_analytics = 1
|
||||
[Monitoring]
|
||||
buffer_threshold = 10
|
||||
buffer_wait = 900
|
||||
imgur_client_id = ""
|
||||
logging_ignore_interval = 60
|
||||
movie_watched_percent = 85
|
||||
music_watched_percent = 85
|
||||
monitor_pms_updates = 0
|
||||
monitoring_interval = 60
|
||||
notify_consecutive = 0
|
||||
notify_continued_session_threshold = 15
|
||||
notify_group_recently_added_grandparent = 1
|
||||
notify_group_recently_added_parent = 1
|
||||
notify_upload_posters = 0
|
||||
notify_recently_added_delay = 300
|
||||
notify_recently_added_grandparent = 0
|
||||
notify_recently_added_upgrade = 0
|
||||
notify_remote_access_threshold = 60
|
||||
notify_concurrent_by_ip = 0
|
||||
notify_concurrent_ipv6_cidr = /64
|
||||
notify_concurrent_threshold = 2
|
||||
notify_new_device_initial_only = 1
|
||||
notify_server_connection_threshold = 60
|
||||
notify_server_update_repeat = 0
|
||||
notify_plexpy_update_repeat = 0
|
||||
refresh_libraries_interval = 12
|
||||
refresh_libraries_on_startup = 1
|
||||
refresh_users_interval = 12
|
||||
refresh_users_on_startup = 1
|
||||
tv_watched_percent = 85
|
||||
watched_marker = 3
|
||||
[Cloudinary]
|
||||
cloudinary_cloud_name = ""
|
||||
cloudinary_api_key = ""
|
||||
cloudinary_api_secret = ""
|
||||
[Newsletter]
|
||||
newsletter_auth = 0
|
||||
newsletter_password = ""
|
||||
newsletter_custom_dir = ""
|
||||
newsletter_inline_styles = 0
|
||||
newsletter_templates = newsletters
|
||||
newsletter_dir = /config/newsletters
|
||||
newsletter_self_hosted = 0
|
||||
18
tautulli/docker-compose.yml
Normal file
18
tautulli/docker-compose.yml
Normal file
@@ -0,0 +1,18 @@
|
||||
name: tautulli
|
||||
services:
|
||||
app:
|
||||
environment:
|
||||
TZ: America/Los_Angeles
|
||||
image: ghcr.io/tautulli/tautulli:latest
|
||||
networks:
|
||||
- proxy-net
|
||||
expose:
|
||||
- "8181"
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./config:/config
|
||||
- /var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Logs:/plex_logs:ro
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
@@ -6,9 +6,15 @@ services:
|
||||
volumes:
|
||||
- ./data:/home/node/trilium-data
|
||||
- ./config:/home/node/trilium-config
|
||||
ports:
|
||||
- "127.0.0.1:8040:8080"
|
||||
expose:
|
||||
- "8080"
|
||||
networks:
|
||||
- proxy-net
|
||||
environment:
|
||||
USER_UID: 1000
|
||||
USER_GID: 1000
|
||||
TRILIUM_CONFIG_INI_PATH: /home/node/trilium-config/config.ini
|
||||
TRILIUM_CONFIG_INI_PATH: /home/node/trilium-config/config.ini
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
Reference in New Issue
Block a user