Compare commits
46 Commits
f016deb3a9
...
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 | ||
|
|
ad9b4fef97 | ||
|
|
28c734c1d2 |
@@ -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,6 +1,6 @@
|
||||
name: "authelia"
|
||||
name: authelia
|
||||
services:
|
||||
authelia:
|
||||
app:
|
||||
image: authelia/authelia:latest
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
@@ -25,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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: authentik
|
||||
services:
|
||||
postgresql:
|
||||
db:
|
||||
image: docker.io/library/postgres:16-alpine
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
@@ -10,7 +10,7 @@ services:
|
||||
retries: 5
|
||||
timeout: 5s
|
||||
volumes:
|
||||
- database:/var/lib/postgresql/data
|
||||
- ./data/postgres:/var/lib/postgresql/data
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${PG_PASS:?database password required}
|
||||
POSTGRES_USER: ${PG_USER:-authentik}
|
||||
@@ -28,20 +28,22 @@ services:
|
||||
retries: 5
|
||||
timeout: 3s
|
||||
volumes:
|
||||
- redis:/data
|
||||
server:
|
||||
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.12.2}
|
||||
- ./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: redis
|
||||
AUTHENTIK_POSTGRESQL__HOST: postgresql
|
||||
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
|
||||
@@ -50,18 +52,21 @@ services:
|
||||
ports:
|
||||
- "${COMPOSE_PORT_HTTP:-9000}:9000"
|
||||
- "${COMPOSE_PORT_HTTPS:-9443}:9443"
|
||||
expose:
|
||||
- "9000"
|
||||
- "9443"
|
||||
depends_on:
|
||||
postgresql:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
worker:
|
||||
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.12.2}
|
||||
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.12.3}
|
||||
restart: unless-stopped
|
||||
command: worker
|
||||
environment:
|
||||
AUTHENTIK_REDIS__HOST: redis
|
||||
AUTHENTIK_POSTGRESQL__HOST: postgresql
|
||||
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}
|
||||
@@ -80,17 +85,11 @@ services:
|
||||
env_file:
|
||||
- .env
|
||||
depends_on:
|
||||
postgresql:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
|
||||
volumes:
|
||||
database:
|
||||
driver: local
|
||||
redis:
|
||||
driver: local
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
116
caddy/Caddyfile
116
caddy/Caddyfile
@@ -1,116 +0,0 @@
|
||||
# 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}
|
||||
}
|
||||
}
|
||||
}
|
||||
(secure) {
|
||||
forward_auth {args[0]} authelia: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]} {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]}
|
||||
}
|
||||
}
|
||||
|
||||
# Web Config
|
||||
tremendousturtle.tools {
|
||||
import tls
|
||||
respond "I'm Alive!"
|
||||
}
|
||||
|
||||
auth.tremendousturtle.tools {
|
||||
import tls
|
||||
reverse_proxy 127.0.0.1:9091
|
||||
}
|
||||
|
||||
authentik.tremendousturtle.tools {
|
||||
import tls
|
||||
reverse_proxy 127.0.0.1:9000
|
||||
}
|
||||
|
||||
# Define code.tremendousturtle.tools
|
||||
import ttt-app code 8020
|
||||
|
||||
import ttt-app frigate 8971
|
||||
|
||||
import ttt-app pihole 1080
|
||||
|
||||
import ttt-app stash 9999
|
||||
|
||||
import ttt-app sonarr 8989
|
||||
|
||||
import ttt-app radarr 7878
|
||||
|
||||
import ttt-app overseerr 5055
|
||||
|
||||
import ttt-app prowlarr 9696
|
||||
|
||||
import ttt-app openobserve 5080
|
||||
|
||||
import ttt-app cockpit 9090
|
||||
|
||||
import ttt-app budget 5006
|
||||
|
||||
import ttt-app gitea 3000
|
||||
|
||||
import ttt-app trilium 8040
|
||||
|
||||
import ttt-app notes 8040
|
||||
|
||||
import ttt-app-alt pihole1 192.168.1.116 80
|
||||
|
||||
import ttt-app homepage 3001
|
||||
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}
|
||||
}
|
||||
@@ -1,32 +1,25 @@
|
||||
name: caddy
|
||||
services:
|
||||
caddy:
|
||||
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"
|
||||
configs:
|
||||
- source: caddyfile
|
||||
target: /etc/caddy/Caddyfile
|
||||
volumes:
|
||||
- ./data/site:/srv
|
||||
- ./data/logs:/logs
|
||||
- caddy_data:/data
|
||||
- caddy_config:/config
|
||||
- ./config:/etc/caddy
|
||||
- ./data/caddy_data:/data
|
||||
- ./data/caddy_config:/config
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
|
||||
configs:
|
||||
caddyfile:
|
||||
file: ./Caddyfile
|
||||
|
||||
volumes:
|
||||
caddy_data:
|
||||
caddy_config:
|
||||
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
|
||||
|
||||
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": 1736789700042
|
||||
"lastScan": 1741801200034
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "Movies",
|
||||
"enabled": true,
|
||||
"type": "movie",
|
||||
"lastScan": 1736789700053
|
||||
"lastScan": 1741801200054
|
||||
},
|
||||
{
|
||||
"id": "1",
|
||||
"name": "TV Shows",
|
||||
"enabled": true,
|
||||
"type": "show",
|
||||
"lastScan": 1736789700096
|
||||
"lastScan": 1741801200272
|
||||
}
|
||||
],
|
||||
"machineId": "5e16f8ceb511bde943f92bbe07e3e6e33307eb16"
|
||||
|
||||
@@ -8,8 +8,11 @@ services:
|
||||
- TZ=America/Los_Angeles
|
||||
networks:
|
||||
- proxy-net
|
||||
- default
|
||||
ports:
|
||||
- "5055:5055"
|
||||
expose:
|
||||
- "5055"
|
||||
volumes:
|
||||
- ./data:/app/config
|
||||
- ./config/settings.json:/app/config/settings.json
|
||||
|
||||
@@ -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
|
||||
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,631 +351,11 @@ ui:
|
||||
excludedStudioFields:
|
||||
- name
|
||||
fingerprintQueue:
|
||||
https://stashdb.org/graphql:
|
||||
- "14115"
|
||||
- "13320"
|
||||
- "13623"
|
||||
- "17433"
|
||||
- "14152"
|
||||
- "14206"
|
||||
- "14168"
|
||||
- "17294"
|
||||
- "13905"
|
||||
- "13385"
|
||||
- "13837"
|
||||
- "16837"
|
||||
- "16596"
|
||||
- "16686"
|
||||
- "13382"
|
||||
- "15576"
|
||||
- "16643"
|
||||
- "12278"
|
||||
- "16976"
|
||||
- "16406"
|
||||
- "14106"
|
||||
- "12610"
|
||||
- "17452"
|
||||
- "17174"
|
||||
- "12615"
|
||||
- "13066"
|
||||
- "12532"
|
||||
- "17526"
|
||||
- "17402"
|
||||
- "17170"
|
||||
- "17273"
|
||||
- "16997"
|
||||
- "17525"
|
||||
- "12403"
|
||||
- "15519"
|
||||
- "17428"
|
||||
- "16421"
|
||||
- "14631"
|
||||
- "17523"
|
||||
- "17287"
|
||||
- "17528"
|
||||
- "15901"
|
||||
- "17398"
|
||||
- "16135"
|
||||
- "13178"
|
||||
- "17282"
|
||||
- "17724"
|
||||
- "17727"
|
||||
- "17729"
|
||||
- "17709"
|
||||
- "17728"
|
||||
- "17737"
|
||||
- "17713"
|
||||
- "17726"
|
||||
- "17750"
|
||||
- "17748"
|
||||
- "17742"
|
||||
- "17747"
|
||||
- "17754"
|
||||
- "17719"
|
||||
- "17751"
|
||||
- "17714"
|
||||
- "17721"
|
||||
- "17712"
|
||||
- "17711"
|
||||
- "17739"
|
||||
- "17753"
|
||||
- "17710"
|
||||
- "17752"
|
||||
- "17741"
|
||||
- "17734"
|
||||
- "17720"
|
||||
- "17723"
|
||||
- "17707"
|
||||
- "17725"
|
||||
- "17746"
|
||||
- "17755"
|
||||
- "17757"
|
||||
- "17749"
|
||||
- "17730"
|
||||
- "17717"
|
||||
- "17756"
|
||||
- "17731"
|
||||
- "17716"
|
||||
- "17740"
|
||||
- "17733"
|
||||
- "17735"
|
||||
- "17758"
|
||||
- "17708"
|
||||
- "17718"
|
||||
- "17743"
|
||||
- "17745"
|
||||
- "17786"
|
||||
- "17878"
|
||||
- "17817"
|
||||
- "17814"
|
||||
- "17813"
|
||||
- "17815"
|
||||
- "17865"
|
||||
- "17893"
|
||||
- "17812"
|
||||
- "17792"
|
||||
- "17818"
|
||||
- "17819"
|
||||
- "17826"
|
||||
- "17787"
|
||||
- "17797"
|
||||
- "17804"
|
||||
- "17799"
|
||||
- "17795"
|
||||
- "17798"
|
||||
- "17828"
|
||||
- "17802"
|
||||
- "17805"
|
||||
- "17827"
|
||||
- "17831"
|
||||
- "17832"
|
||||
- "17839"
|
||||
- "17883"
|
||||
- "17845"
|
||||
- "17842"
|
||||
- "17810"
|
||||
- "17807"
|
||||
- "17844"
|
||||
- "17785"
|
||||
- "17822"
|
||||
- "17808"
|
||||
- "17811"
|
||||
- "17823"
|
||||
- "17816"
|
||||
- "17837"
|
||||
- "17836"
|
||||
- "17825"
|
||||
- "17833"
|
||||
- "17838"
|
||||
- "17830"
|
||||
- "17889"
|
||||
- "17891"
|
||||
- "17806"
|
||||
- "17770"
|
||||
- "17801"
|
||||
- "17843"
|
||||
- "17835"
|
||||
- "17809"
|
||||
- "17790"
|
||||
- "17796"
|
||||
- "17789"
|
||||
- "17820"
|
||||
- "17896"
|
||||
- "17867"
|
||||
- "17908"
|
||||
- "17909"
|
||||
- "17912"
|
||||
- "17886"
|
||||
- "17885"
|
||||
- "17794"
|
||||
- "17803"
|
||||
- "17821"
|
||||
- "17793"
|
||||
- "17784"
|
||||
- "17890"
|
||||
- "17834"
|
||||
- "17850"
|
||||
- "17800"
|
||||
- "17848"
|
||||
- "17841"
|
||||
- "17849"
|
||||
- "17846"
|
||||
- "17852"
|
||||
- "17824"
|
||||
- "17851"
|
||||
- "17961"
|
||||
- "17875"
|
||||
- "17880"
|
||||
- "17870"
|
||||
- "17856"
|
||||
- "17895"
|
||||
- "17897"
|
||||
- "17858"
|
||||
- "17854"
|
||||
- "17855"
|
||||
- "17860"
|
||||
- "17861"
|
||||
- "17859"
|
||||
- "17864"
|
||||
- "17857"
|
||||
- "17862"
|
||||
- "17863"
|
||||
- "17906"
|
||||
- "17927"
|
||||
- "17894"
|
||||
- "17911"
|
||||
- "17905"
|
||||
- "17873"
|
||||
- "17918"
|
||||
- "17892"
|
||||
- "17888"
|
||||
- "17916"
|
||||
- "17881"
|
||||
- "17920"
|
||||
- "17884"
|
||||
- "17930"
|
||||
- "17921"
|
||||
- "17915"
|
||||
- "17922"
|
||||
- "17928"
|
||||
- "17924"
|
||||
- "17874"
|
||||
- "17877"
|
||||
- "17879"
|
||||
- "17871"
|
||||
- "17869"
|
||||
- "17926"
|
||||
- "17876"
|
||||
- "17882"
|
||||
- "17917"
|
||||
- "17872"
|
||||
- "17868"
|
||||
- "17913"
|
||||
- "17903"
|
||||
- "17919"
|
||||
- "17914"
|
||||
- "17904"
|
||||
- "17933"
|
||||
- "17934"
|
||||
- "17932"
|
||||
- "17887"
|
||||
- "17866"
|
||||
- "17929"
|
||||
- "17923"
|
||||
- "17910"
|
||||
- "17925"
|
||||
- "17902"
|
||||
- "17931"
|
||||
- "17898"
|
||||
- "17901"
|
||||
- "17900"
|
||||
- "17899"
|
||||
- "17907"
|
||||
- "17935"
|
||||
- "17939"
|
||||
- "17937"
|
||||
- "17936"
|
||||
- "17938"
|
||||
- "17943"
|
||||
- "17947"
|
||||
- "17940"
|
||||
- "17955"
|
||||
- "17952"
|
||||
- "17948"
|
||||
- "17946"
|
||||
- "17941"
|
||||
- "17951"
|
||||
- "17942"
|
||||
- "17944"
|
||||
- "17953"
|
||||
- "17949"
|
||||
- "17945"
|
||||
- "17954"
|
||||
- "17983"
|
||||
- "17987"
|
||||
- "17968"
|
||||
- "17960"
|
||||
- "17959"
|
||||
- "17988"
|
||||
- "17972"
|
||||
- "17965"
|
||||
- "17984"
|
||||
- "17986"
|
||||
- "17967"
|
||||
- "17976"
|
||||
- "17962"
|
||||
- "17978"
|
||||
- "17977"
|
||||
- "17970"
|
||||
- "17969"
|
||||
- "17985"
|
||||
- "17991"
|
||||
- "17980"
|
||||
- "17975"
|
||||
- "17974"
|
||||
- "17964"
|
||||
- "17981"
|
||||
- "17957"
|
||||
- "17993"
|
||||
- "17989"
|
||||
- "17973"
|
||||
- "17958"
|
||||
- "17963"
|
||||
- "17966"
|
||||
- "17971"
|
||||
- "17990"
|
||||
- "17979"
|
||||
- "18003"
|
||||
- "18001"
|
||||
- "17995"
|
||||
- "18002"
|
||||
- "17994"
|
||||
- "18000"
|
||||
- "17997"
|
||||
- "17996"
|
||||
- "17999"
|
||||
- "17998"
|
||||
- "18004"
|
||||
- "18005"
|
||||
- "18009"
|
||||
- "18008"
|
||||
- "18012"
|
||||
- "18010"
|
||||
- "18007"
|
||||
- "18013"
|
||||
- "18006"
|
||||
- "18011"
|
||||
- "18207"
|
||||
- "18215"
|
||||
- "18217"
|
||||
- "18187"
|
||||
- "18190"
|
||||
- "18196"
|
||||
- "18191"
|
||||
- "18194"
|
||||
- "18227"
|
||||
- "18188"
|
||||
- "18281"
|
||||
- "18192"
|
||||
- "18189"
|
||||
- "18204"
|
||||
- "18246"
|
||||
- "18245"
|
||||
- "18208"
|
||||
- "18209"
|
||||
- "18199"
|
||||
- "18232"
|
||||
- "18213"
|
||||
- "18019"
|
||||
- "18014"
|
||||
- "18015"
|
||||
- "18016"
|
||||
- "18017"
|
||||
- "18018"
|
||||
- "18020"
|
||||
- "18249"
|
||||
- "18219"
|
||||
- "18229"
|
||||
- "18221"
|
||||
- "18233"
|
||||
- "18220"
|
||||
- "18198"
|
||||
- "18195"
|
||||
- "18212"
|
||||
- "18211"
|
||||
- "18239"
|
||||
- "18223"
|
||||
- "18203"
|
||||
- "18222"
|
||||
- "18226"
|
||||
- "18210"
|
||||
- "18225"
|
||||
- "18218"
|
||||
- "18224"
|
||||
- "18214"
|
||||
- "18231"
|
||||
- "18238"
|
||||
- "18243"
|
||||
- "18216"
|
||||
- "18202"
|
||||
- "18240"
|
||||
- "18205"
|
||||
- "18197"
|
||||
- "18242"
|
||||
- "18201"
|
||||
- "18241"
|
||||
- "18228"
|
||||
- "18200"
|
||||
- "18230"
|
||||
- "18193"
|
||||
- "18234"
|
||||
- "18237"
|
||||
- "18278"
|
||||
- "18279"
|
||||
- "18359"
|
||||
- "18303"
|
||||
- "18305"
|
||||
- "18297"
|
||||
- "18283"
|
||||
- "18275"
|
||||
- "18285"
|
||||
- "18298"
|
||||
- "18252"
|
||||
- "18250"
|
||||
- "18247"
|
||||
- "18206"
|
||||
- "18253"
|
||||
- "18254"
|
||||
- "18244"
|
||||
- "18236"
|
||||
- "18251"
|
||||
- "18248"
|
||||
- "18259"
|
||||
- "18256"
|
||||
- "18257"
|
||||
- "18258"
|
||||
- "18261"
|
||||
- "18260"
|
||||
- "18255"
|
||||
- "18267"
|
||||
- "18265"
|
||||
- "18264"
|
||||
- "18263"
|
||||
- "18266"
|
||||
- "18268"
|
||||
- "18262"
|
||||
- "18315"
|
||||
- "18294"
|
||||
- "18309"
|
||||
- "18314"
|
||||
- "18274"
|
||||
- "18288"
|
||||
- "18277"
|
||||
- "18273"
|
||||
- "18282"
|
||||
- "18329"
|
||||
- "18312"
|
||||
- "18308"
|
||||
- "18311"
|
||||
- "18287"
|
||||
- "18327"
|
||||
- "18307"
|
||||
- "18291"
|
||||
- "18271"
|
||||
- "18269"
|
||||
- "18295"
|
||||
- "18270"
|
||||
- "18272"
|
||||
- "18276"
|
||||
- "18290"
|
||||
- "18299"
|
||||
- "18331"
|
||||
- "18332"
|
||||
- "18328"
|
||||
- "18306"
|
||||
- "18280"
|
||||
- "18317"
|
||||
- "18304"
|
||||
- "18333"
|
||||
- "18300"
|
||||
- "18336"
|
||||
- "18296"
|
||||
- "18339"
|
||||
- "18326"
|
||||
- "18310"
|
||||
- "18292"
|
||||
- "18322"
|
||||
- "18323"
|
||||
- "18343"
|
||||
- "18313"
|
||||
- "18293"
|
||||
- "18286"
|
||||
- "18284"
|
||||
- "18337"
|
||||
- "18338"
|
||||
- "18334"
|
||||
- "18330"
|
||||
- "18335"
|
||||
- "18352"
|
||||
- "18372"
|
||||
- "18402"
|
||||
- "18347"
|
||||
- "18348"
|
||||
- "18396"
|
||||
- "18382"
|
||||
- "18384"
|
||||
- "18357"
|
||||
- "18405"
|
||||
- "18409"
|
||||
- "18371"
|
||||
- "18389"
|
||||
- "18374"
|
||||
- "18392"
|
||||
- "18388"
|
||||
- "18367"
|
||||
- "18404"
|
||||
- "18380"
|
||||
- "18361"
|
||||
- "18383"
|
||||
- "18391"
|
||||
- "18398"
|
||||
- "18350"
|
||||
- "18373"
|
||||
- "18408"
|
||||
- "18400"
|
||||
- "18377"
|
||||
- "18379"
|
||||
- "18403"
|
||||
- "18354"
|
||||
- "18362"
|
||||
- "18394"
|
||||
- "18410"
|
||||
- "18458"
|
||||
- "18459"
|
||||
- "18460"
|
||||
- "18455"
|
||||
- "18457"
|
||||
- "18456"
|
||||
- "18454"
|
||||
- "18453"
|
||||
- "18452"
|
||||
- "18451"
|
||||
- "18450"
|
||||
- "18448"
|
||||
- "18449"
|
||||
- "18447"
|
||||
- "18446"
|
||||
- "18445"
|
||||
- "18442"
|
||||
- "18444"
|
||||
- "18443"
|
||||
- "18441"
|
||||
- "18438"
|
||||
- "18439"
|
||||
- "18437"
|
||||
- "18436"
|
||||
- "18435"
|
||||
- "18434"
|
||||
- "18433"
|
||||
- "18432"
|
||||
- "18430"
|
||||
- "18431"
|
||||
- "18428"
|
||||
- "18429"
|
||||
- "18427"
|
||||
- "18426"
|
||||
- "18425"
|
||||
- "18423"
|
||||
- "18424"
|
||||
- "18422"
|
||||
- "18421"
|
||||
- "18420"
|
||||
- "18419"
|
||||
- "18418"
|
||||
- "18417"
|
||||
- "18416"
|
||||
- "18415"
|
||||
- "18413"
|
||||
- "18411"
|
||||
- "18412"
|
||||
- "18414"
|
||||
- "18461"
|
||||
- "18462"
|
||||
- "18463"
|
||||
- "18465"
|
||||
- "18466"
|
||||
- "18469"
|
||||
- "18468"
|
||||
- "18472"
|
||||
- "18471"
|
||||
- "18473"
|
||||
- "18474"
|
||||
- "18477"
|
||||
- "18476"
|
||||
- "18478"
|
||||
- "18479"
|
||||
- "18480"
|
||||
- "18481"
|
||||
- "18482"
|
||||
- "18483"
|
||||
- "18484"
|
||||
- "18485"
|
||||
- "18487"
|
||||
- "18488"
|
||||
- "18489"
|
||||
- "18490"
|
||||
- "18491"
|
||||
- "18493"
|
||||
- "18492"
|
||||
- "18495"
|
||||
- "18494"
|
||||
- "18497"
|
||||
- "18496"
|
||||
- "18498"
|
||||
- "18499"
|
||||
- "18501"
|
||||
- "18503"
|
||||
- "18502"
|
||||
- "18504"
|
||||
- "18505"
|
||||
- "18507"
|
||||
- "18506"
|
||||
- "18512"
|
||||
- "18486"
|
||||
- "18517"
|
||||
- "18534"
|
||||
- "18532"
|
||||
- "18535"
|
||||
- "18533"
|
||||
- "18537"
|
||||
- "18536"
|
||||
- "18539"
|
||||
- "18540"
|
||||
- "18541"
|
||||
- "18543"
|
||||
- "18544"
|
||||
- "18545"
|
||||
- "18546"
|
||||
- "18547"
|
||||
- "18550"
|
||||
- "18552"
|
||||
- "18554"
|
||||
- "18556"
|
||||
- "18555"
|
||||
- "18557"
|
||||
- "18559"
|
||||
- "18560"
|
||||
- "18551"
|
||||
- "18558"
|
||||
https://theporndb.net/graphql:
|
||||
- "18500"
|
||||
- "18538"
|
||||
- "18542"
|
||||
- "18549"
|
||||
- "18553"
|
||||
https://stashdb.org/graphql: []
|
||||
https://theporndb.net/graphql: []
|
||||
markSceneAsOrganizedOnSave: false
|
||||
mode: auto
|
||||
selectedEndpoint: https://stashdb.org/graphql
|
||||
selectedEndpoint: https://theporndb.net/graphql
|
||||
setCoverImage: true
|
||||
setTags: true
|
||||
showMales: true
|
||||
@@ -931,7 +364,7 @@ ui:
|
||||
cleanGenerated:
|
||||
blobFiles: true
|
||||
dryRun: false
|
||||
imageThumbnails: false
|
||||
imageThumbnails: true
|
||||
markers: true
|
||||
screenshots: true
|
||||
sprites: true
|
||||
@@ -944,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
|
||||
|
||||
networks:
|
||||
proxy-net:
|
||||
external: true
|
||||
Reference in New Issue
Block a user