Compare commits

...

33 Commits

Author SHA1 Message Date
Chris King
63edf652b7 Update settings.json for oversseerr 2025-01-13 11:49:21 -08:00
Chris King
a2dff6fdd8 Change web interface ports to use expose in docker-compose.yml instead of ports
Change any port changes in docker-compose files to use expose and the default port instead of 3001:3000
Any localhost limited ports changed to expose instead
Add requestrr to caddyfile
2025-01-13 11:49:02 -08:00
Chris King
a671b15a96 Add TLS resolvers to allow acme challenges to resolve
Configure non-docker apps to proxy to host.docker.internal
Configure triliumnext-notes to use port 8080
Add host.docker.internal to caddy docker-compose
Explicitly specify .env file for caddy container
Remove port expose for triliumnext-notes container
2025-01-13 10:59:43 -08:00
Chris King
936242e24d Merge branch 'main' into caddy-docker 2025-01-13 09:39:45 -08:00
Chris King
817723d0bf update overseerr settings.json 2025-01-13 09:37:40 -08:00
Chris King
f016deb3a9 update overseerr settings.json 2025-01-13 09:35:23 -08:00
Chris King
ce8e342560 change caddy admin to listen on all interfaces in docker container
add cloudflared docker
change overseerr docker-compose to use proxy-net for testing
2025-01-13 09:34:55 -08:00
Chris King
ad9b4fef97 Updated authentik db service name to db in all locations 2025-01-12 23:49:47 -08:00
Chris King
28c734c1d2 Updated docker-compose files for use with Docker Caddy
Defined top level name for all services
Added proxy-net to services
Updated main service/server container service name to "app"
Updated hostname references to projectname-app-1
Updated docker Caddy caddyfile to reference container names
Updated docker Caddy caddyfile to use 192.168.1.234 instead of localhost for non-docker services
Adjusted caddyfile accordingly
2025-01-12 23:37:59 -08:00
Chris King
342559c8eb update overseerr and stashapp config files in preparation for new branch creation 2025-01-12 22:49:26 -08:00
Chris King
77803655c0 add Caddy docker configuration
add Caddy Dockerfile to build image using xcaddy including cloudflare modules
docker-compose.yml file builds image instead of pulling it
2025-01-12 22:47:49 -08:00
Chris King
eb0f41261f add authentik docker-compose.yml 2025-01-12 22:46:49 -08:00
Chris King
005c60abc3 rename authelia service to authelia
add proxy-net to authelia container
2025-01-12 22:46:09 -08:00
Chris King
7002b866f9 ignore authentik and caddy env files 2025-01-12 22:44:03 -08:00
Chris King
9c767b6e0c Add homepage integration labels for Frigate 2025-01-08 01:42:09 -08:00
Chris King
b66436fa95 Add homepage integration labels 2025-01-08 01:41:55 -08:00
Chris King
e36c6a7f1c Add dockerproxy for docker integration
Add generated homepage config files
Add docker integration setup
2025-01-08 01:41:39 -08:00
Chris King
43bacbcb48 Exclude log directories 2025-01-08 01:40:23 -08:00
Chris King
3d62803e05 Added homepage docker-compose 2025-01-08 00:17:55 -08:00
Chris King
99193bcaa7 Add TriliumNext Notes 2024-12-26 16:42:28 -08:00
Chris King
579adad744 Update requestrr notifications.json gitignore 2024-12-16 13:17:50 -08:00
Chris King
a67bdd8503 Removed requestrr notifications.json from git 2024-12-16 13:16:42 -08:00
Chris King
994b2d4c01 do not track requestrr notifications.json 2024-12-16 13:15:10 -08:00
Chris King
5ce753bd71 init stashapp docker
add stashapp specific gitignore entries
2024-12-16 02:28:59 -08:00
Chris King
e21a330b33 init requestrr docker 2024-12-16 01:44:14 -08:00
Chris King
914a7487b4 init overseerr docker 2024-12-16 01:44:00 -08:00
Chris King
3a3d3ff9c4 init orbital-sync docker 2024-12-16 01:43:39 -08:00
Chris King
1ddee07e72 init openobserve docker 2024-12-16 01:43:27 -08:00
Chris King
c3f08d5191 init homepage docker 2024-12-16 01:43:13 -08:00
Chris King
116a7716ac init gitea docker 2024-12-16 01:43:05 -08:00
Chris King
eeeb05be82 init frigate docker 2024-12-16 01:42:52 -08:00
Chris King
f170058551 init authelia docker 2024-12-16 01:42:38 -08:00
Chris King
f3920b60ab Init actual-server docker 2024-12-16 01:42:18 -08:00
33 changed files with 2147 additions and 1 deletions

8
.gitignore vendored
View File

@@ -1,3 +1,9 @@
data/
secrets/
tmp/
tmp/
stashapp/**/config.yml.*
stashapp/**/icon.png
requestrr/**/notifications.json
logs/
authentik/.env
caddy/.env

View File

@@ -0,0 +1,32 @@
name: actual-server
services:
app:
image: docker.io/actualbudget/actual-server:latest
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'
expose:
- "5006"
#environment:
# - ACTUAL_LOGIN_METHOD=header
# Uncomment any of the lines below to set configuration options.
# - ACTUAL_HTTPS_KEY=/data/selfhost.key
# - ACTUAL_HTTPS_CERT=/data/selfhost.crt
# - ACTUAL_PORT=5006
# - ACTUAL_UPLOAD_FILE_SYNC_SIZE_LIMIT_MB=20
# - ACTUAL_UPLOAD_SYNC_ENCRYPTED_FILE_SYNC_SIZE_LIMIT_MB=50
# - ACTUAL_UPLOAD_FILE_SIZE_LIMIT_MB=20
# See all options and more details at https://actualbudget.github.io/docs/Installing/Configuration
# !! If you are not using any of these options, remove the 'environment:' tag entirely.
volumes:
# Change './actual-data' below to the path to the folder you want Actual to store its data in on your server.
# '/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

View File

@@ -0,0 +1,18 @@
server:
endpoints:
authz:
forward-auth:
implementation: 'ForwardAuth'
# Security https://www.authelia.com/configuration/security/access-control/
access_control:
rules:
- domain: '*.tremendousturtle.tools'
policy: two_factor
# Session https://www.authelia.com/configuration/session/introduction/
# Set also AUTHELIA_SESSION_SECRET_FILE
session:
cookies:
- domain: 'tremendousturtle.tools'
authelia_url: 'https://auth.tremendousturtle.tools'

View File

@@ -0,0 +1,91 @@
name: authelia
services:
app:
image: authelia/authelia:latest
restart: unless-stopped
depends_on:
- database
- redis
volumes:
- ./config/authelia:/config
networks:
- proxy-net
- default
ports:
- "9091:9091"
environment:
AUTHELIA_IDENTITY_VALIDATION_RESET_PASSWORD_JWT_SECRET_FILE: /run/secrets/jwt_secret
AUTHELIA_SESSION_SECRET_FILE: /run/secrets/session_secret
AUTHELIA_NOTIFIER_SMTP_PASSWORD_FILE: /run/secrets/smtp_pass
AUTHELIA_STORAGE_ENCRYPTION_KEY_FILE: /run/secrets/storage_encryption_key
AUTHELIA_STORAGE_POSTGRES_PASSWORD_FILE: /run/secrets/postgres_pass
AUTHELIA_SESSION_REDIS_PASSWORD_FILE: /run/secrets/redis_pass
AUTHELIA_THEME: auto
AUTHELIA_LOG_LEVEL: debug
AUTHELIA_AUTHENTICATION_BACKEND_FILE_PATH: /run/secrets/users_database
AUTHELIA_TOTP_ISSUER: tremendousturtle.tools
AUTHELIA_ACCESS_CONTROL_DEFAULT_POLICY: deny
AUTHELIA_SESSION_REDIS_HOST: authelia-redis-1
AUTHELIA_SESSION_REDIS_PORT: 6379
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
AUTHELIA_NOTIFIER_SMTP_USERNAME: auth@mail.tremendousturtle.tools
AUTHELIA_NOTIFIER_SMTP_SENDER: Authelia <auth@tremendousturtle.tools>
secrets:
- jwt_secret
- session_secret
- smtp_pass
- storage_encryption_key
- postgres_pass
- redis_pass
- users_database
labels:
- homepage.group=Utility
- homepage.name=Authelia
- homepage.icon=authelia
- homepage.href=https://auth.tremendousturtle.tools/
- homepage.description=Authentication
database:
image: postgres:15
restart: unless-stopped
volumes:
- ./data/postgres:/var/lib/postgresql/data
environment:
POSTGRES_USER: authelia
POSTGRES_PASSWORD_FILE: /run/secrets/postgres_pass
secrets:
- postgres_pass
redis:
image: redis:7
restart: unless-stopped
environment:
REDIS_PASSWORD_FILE: /run/secrets/redis_pass
command: sh -c "redis-server --save 60 1 --loglevel warning --requirepass $(cat $$REDIS_PASSWORD_FILE)"
volumes:
- ./data/redis:/data
secrets:
- redis_pass
networks:
proxy-net:
external: true
secrets:
postgres_pass:
file: ./secrets/POSTGRES_PASS
jwt_secret:
file: ./secrets/JWT_SECRET
session_secret:
file: ./secrets/SESSION_SECRET
smtp_pass:
file: ./secrets/SMTP_PASSWORD
storage_encryption_key:
file: ./secrets/STORAGE_ENCRYPTION_KEY
redis_pass:
file: ./secrets/REDIS_PASSWORD
users_database:
file: ./secrets/users_database.yml

View File

@@ -0,0 +1,96 @@
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:
- database:/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:
- redis:/data
app:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.12.2}
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
volumes:
- ./data/media:/media
- ./config/custom-templates:/templates
env_file:
- .env
ports:
- "${COMPOSE_PORT_HTTP:-9000}:9000"
- "${COMPOSE_PORT_HTTPS:-9443}:9443"
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
worker:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.12.2}
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
volumes:
database:
driver: local
redis:
driver: local
networks:
proxy-net:
external: true

116
caddy/Caddyfile Normal file
View File

@@ -0,0 +1,116 @@
# 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]}
}
}
# 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

9
caddy/Dockerfile Normal file
View 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

35
caddy/docker-compose.yml Normal file
View File

@@ -0,0 +1,35 @@
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"
configs:
- source: caddyfile
target: /etc/caddy/Caddyfile
volumes:
- ./data/site:/srv
- ./data/logs:/logs
- caddy_data:/data
- caddy_config:/config
networks:
proxy-net:
external: true
configs:
caddyfile:
file: ./Caddyfile
volumes:
caddy_data:
caddy_config:

View 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

131
frigate/config/config.yaml Normal file
View File

@@ -0,0 +1,131 @@
# yaml-language-server: $schema=http://192.168.1.234:5000/api/config/schema.json
auth:
enabled: false
proxy:
header_map:
user: Remote-User
tls:
enabled: false
mqtt:
enabled: false
go2rtc:
streams:
nw_garage:
- ffmpeg:http://192.168.1.240/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=frigate&password=RN3cCsRP5HDF4hFy6dis5NTG#video=copy#audio=copy#audio=opus
ne_garage:
- ffmpeg:http://192.168.1.136/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=frigate&password=6aLJ6lWfm3aTlsgkJrt2m8S8#video=copy#audio=copy#audio=opus
doorbell:
- ffmpeg:http://192.168.1.60/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=frigate&password=dcp5rWdsQ3L4gVyUC2lLNGlf#video=copy#audio=copy#audio=opus
- rtsp://192.168.1.60/Preview_01_sub
webrtc:
candidates:
- 192.168.1.234:8555
- stun:8555
detectors: # <---- add detectors
coral1:
type: edgetpu
device: pci:0
coral2:
type: edgetpu
device: pci:1
objects:
track:
- person
- car
- dog
- cat
cameras:
nw_garage:
enabled: true
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/nw_garage
input_args: preset-rtsp-restream
roles:
- record
- detect
hwaccel_args: preset-vaapi
detect:
enabled: true
width: 960
height: 720
fps: 5
record:
enabled: true
motion:
mask:
- 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
ne_garage:
enabled: true
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/ne_garage
input_args: preset-rtsp-restream
roles:
- record
- detect
hwaccel_args: preset-vaapi
detect:
enabled: true
width: 960
height: 720
fps: 5
record:
enabled: true
motion:
mask:
- 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
doorbell:
enabled: true
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/doorbell
input_args: preset-rtsp-restream
roles:
- record
- detect
hwaccel_args: preset-vaapi
detect:
enabled: true
width: 960
height: 720
fps: 5
record:
enabled: true
motion:
mask:
- 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
improve_contrast: true
version: 0.14
camera_groups:
Birdseye:
order: 1
icon: LuBird
cameras: birdseye
Front:
order: 2
icon: LuWarehouse
cameras:
- doorbell
- ne_garage
- nw_garage
detect:
stationary:
interval: 50
threshold: 40

View File

@@ -0,0 +1,43 @@
name: frigate
services:
app:
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:stable
shm_size: "250mb"
devices:
- /dev/apex_0:/dev/apex_0 # Passes a PCIe Coral
- /dev/apex_1:/dev/apex_1 # Passes a PCIe Coral
- /dev/dri/renderD128:/dev/dri/renderD128 # GPU hw accel
volumes:
- /etc/localtime:/etc/localtime:ro
- ./data:/config
- ./config/config.yaml:/config/config.yaml
- /media/surveillance:/media/frigate
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 4000000000
networks:
- proxy-net
ports:
- "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"
environment:
LIBVA_DRIVER_NAME: "radeonsi" # FRIGATE_RTSP_PASSWORD: "69$nC*6$jADbc!"
labels:
- homepage.group=Utility
- homepage.name=Frigate
- homepage.icon=frigate
- homepage.href=https://frigate.tremendousturtle.tools/
- homepage.description=Camera Surveillance
- homepage.widget.type=frigate
- homepage.widget.url=http://frigate-app-1:5000
- homepage.widget.enableRecentEvents=true
networks:
proxy-net:
external: true

2
gitea/.env Normal file
View File

@@ -0,0 +1,2 @@
GITEA_DB_NAME=gitea
GITEA_DB_USER=gitea

54
gitea/docker-compose.yml Normal file
View File

@@ -0,0 +1,54 @@
networks:
gitea:
external: false
proxy-net:
external: true
name: gitea
services:
app:
image: gitea/gitea:latest
environment:
USER_UID: 141
USER_GID: 150
GITEA__database__DB_TYPE: postgres
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: 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:
- "127.0.0.1:2222:22"
expose:
- "3000"
depends_on:
- db
secrets:
- postgres_pass
db:
image: postgres:14
restart: unless-stopped
environment:
POSTGRES_USER: ${GITEA_DB_USER}
POSTGRES_PASSWORD_FILE: /run/secrets/postgres_pass
POSTGRES_DB: ${GITEA_DB_NAME}
networks:
- gitea
volumes:
- ./data/postgres:/var/lib/postgresql/data
secrets:
- postgres_pass
secrets:
postgres_pass:
file: ./secrets/POSTGRES_PASS

View File

@@ -0,0 +1,18 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/configs/bookmarks
- Developer:
- Github:
- abbr: GH
href: https://github.com/
- Social:
- Reddit:
- abbr: RE
href: https://reddit.com/
- Entertainment:
- YouTube:
- abbr: YT
href: https://youtube.com/

View File

View File

View File

@@ -0,0 +1,10 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/configs/docker/
my-docker:
host: homepage-dockerproxy-1
port: 2375
# my-docker:
# socket: /var/run/docker.sock

View File

@@ -0,0 +1,2 @@
---
# sample kubernetes config

View File

@@ -0,0 +1,18 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/configs/services/
- My First Group:
- My First Service:
href: http://localhost/
description: Homepage is awesome
- My Second Group:
- My Second Service:
href: http://localhost/
description: Homepage is the best
- My Third Group:
- My Third Service:
href: http://localhost/
description: Homepage is 😎

View File

@@ -0,0 +1,7 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/configs/settings/
providers:
openweathermap: openweathermapapikey
weatherapi: weatherapiapikey

View File

@@ -0,0 +1,12 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/configs/info-widgets/
- resources:
cpu: true
memory: true
disk: /
- search:
provider: duckduckgo
target: _blank

View File

@@ -0,0 +1,33 @@
name: homepage
services:
app:
image: ghcr.io/gethomepage/homepage:latest
depends_on:
- dockerproxy
environment:
DOCKER_TEMPLATE_CREATED: true
expose:
- "3000"
networks:
- proxy-net
- default
restart: unless-stopped
volumes:
- ./config:/app/config # Make sure your local config directory exists
dockerproxy:
image: ghcr.io/tecnativa/docker-socket-proxy:latest
environment:
- CONTAINERS=1 # Allow access to viewing containers
- 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)
expose:
- "2375"
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro # Mounted as read-only
networks:
proxy-net:
external: true

View File

@@ -0,0 +1,45 @@
name: openobserve
services:
db:
image: postgres:15
restart: unless-stopped
environment:
POSTGRES_USER: openobserve
POSTGRES_PASSWORD_FILE: /run/secrets/postgres_pass
volumes:
- ./data/postgres:/var/lib/postgresql/data
secrets:
- postgres_pass
app:
image: public.ecr.aws/zinclabs/openobserve:latest
restart: unless-stopped
depends_on:
- db
networks:
- proxy-net
- default
ports:
- "5514:5514"
expose:
- "5080"
env_file: ./secrets/openobserve.env
environment:
ZO_DATA_DIR: /data
ZO_DATA_STREAM_DIR: /stream
ZO_WEB_URL: https://openobserve.tremendousturtle.tools
ZO_TELEMETRY: false
ZO_PROMETHEUS_ENABLED: true
ZO_META_STORE: postgres
volumes:
- ./data/openobserve:/data
- ./data/stream:/stream
networks:
proxy-net:
external: true
secrets:
postgres_pass:
file: ./secrets/POSTGRES_PASS

View File

@@ -0,0 +1,18 @@
name: orbital-sync
services:
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: ""
SECONDARY_HOSTS_1_BASE_URL: 'http://192.168.1.116'
SECONDARY_HOSTS_1_PASSWORD: 'e8JBq59!pwM6Ppj'
INTERVAL_MINUTES: 60
VERBOSE: true
networks:
proxy-net:
external: true

View File

@@ -0,0 +1,223 @@
{
"clientId": "bb40a33d-0bd4-4a13-b47e-57f97de8ed90",
"vapidPrivate": "NIRnOAl2iPQL4iLbTAsgLcxBuJnbINj5-k-_BDPEgQw",
"vapidPublic": "BHoozLG75WFgLXzgH_ljnWotlAwqGRat1eRZsd_zcsykHzN1MhWdukHOIgb7MzQYrcwMYHboeqihkSyoIKo7ziI",
"main": {
"apiKey": "MTYzNDA4NTYzNzU5MTgzNTQ2YzFhLTE3MGItNDE0Yi1hNjliLWVhYjJkZmE0ZDNhYyk=",
"applicationTitle": "Overseerr",
"applicationUrl": "",
"csrfProtection": false,
"cacheImages": false,
"defaultPermissions": 32,
"defaultQuotas": {
"movie": {},
"tv": {}
},
"hideAvailable": false,
"localLogin": true,
"newPlexLogin": true,
"region": "",
"originalLanguage": "",
"trustProxy": true,
"partialRequestsEnabled": true,
"locale": "en"
},
"plex": {
"name": "winterfell",
"ip": "192.168.1.234",
"port": 32400,
"useSsl": false,
"libraries": [
{
"id": "7",
"name": "4k Movies",
"enabled": true,
"type": "movie",
"lastScan": 1736797500041
},
{
"id": "2",
"name": "Movies",
"enabled": true,
"type": "movie",
"lastScan": 1736797500057
},
{
"id": "1",
"name": "TV Shows",
"enabled": true,
"type": "show",
"lastScan": 1736797500105
}
],
"machineId": "5e16f8ceb511bde943f92bbe07e3e6e33307eb16"
},
"tautulli": {
"hostname": "192.168.1.234",
"port": 8181,
"apiKey": "079935546d82416db237001d03059dc3"
},
"radarr": [
{
"name": "Radarr",
"hostname": "192.168.1.234",
"port": 7878,
"apiKey": "3fa0b478a19f4cb3add222e20f448ab8",
"useSsl": false,
"baseUrl": "",
"activeProfileId": 14,
"activeProfileName": "Default (Remux 1080p)",
"activeDirectory": "/media/movies",
"is4k": false,
"minimumAvailability": "released",
"tags": [],
"isDefault": true,
"syncEnabled": true,
"preventSearch": false,
"tagRequests": false,
"id": 0
}
],
"sonarr": [
{
"name": "Sonarr",
"hostname": "192.168.1.234",
"port": 8989,
"apiKey": "a050eae4aa664ac5b8b108d67e3f502f",
"useSsl": false,
"baseUrl": "",
"activeProfileId": 7,
"activeLanguageProfileId": 1,
"activeProfileName": "Default",
"activeDirectory": "/media/tv",
"activeAnimeProfileId": 9,
"activeAnimeLanguageProfileId": 1,
"activeAnimeProfileName": "Anime (Remux-1080p)",
"activeAnimeDirectory": "/media/tv",
"tags": [],
"animeTags": [],
"is4k": false,
"isDefault": true,
"enableSeasonFolders": true,
"syncEnabled": true,
"preventSearch": false,
"tagRequests": false,
"id": 0
}
],
"public": {
"initialized": true
},
"notifications": {
"agents": {
"email": {
"enabled": false,
"options": {
"emailFrom": "",
"smtpHost": "",
"smtpPort": 587,
"secure": false,
"ignoreTls": false,
"requireTls": false,
"allowSelfSigned": false,
"senderName": "Overseerr"
}
},
"discord": {
"enabled": true,
"types": 222,
"options": {
"webhookUrl": "https://discord.com/api/webhooks/897900990202777690/XRKCdyjqniEYYLwHI5du2BX96TlHmLjqzC8lEppioqIpR1uf2zkDNOHRg_zDOVG0kAwG",
"enableMentions": true
}
},
"lunasea": {
"enabled": false,
"types": 0,
"options": {
"webhookUrl": ""
}
},
"slack": {
"enabled": false,
"types": 0,
"options": {
"webhookUrl": ""
}
},
"telegram": {
"enabled": false,
"types": 0,
"options": {
"botAPI": "",
"chatId": "",
"sendSilently": false
}
},
"pushbullet": {
"enabled": false,
"types": 0,
"options": {
"accessToken": ""
}
},
"pushover": {
"enabled": false,
"types": 0,
"options": {
"accessToken": "",
"userToken": ""
}
},
"webhook": {
"enabled": false,
"types": 0,
"options": {
"webhookUrl": "",
"jsonPayload": "IntcbiAgICBcIm5vdGlmaWNhdGlvbl90eXBlXCI6IFwie3tub3RpZmljYXRpb25fdHlwZX19XCIsXG4gICAgXCJzdWJqZWN0XCI6IFwie3tzdWJqZWN0fX1cIixcbiAgICBcIm1lc3NhZ2VcIjogXCJ7e21lc3NhZ2V9fVwiLFxuICAgIFwiaW1hZ2VcIjogXCJ7e2ltYWdlfX1cIixcbiAgICBcImVtYWlsXCI6IFwie3tub3RpZnl1c2VyX2VtYWlsfX1cIixcbiAgICBcInVzZXJuYW1lXCI6IFwie3tub3RpZnl1c2VyX3VzZXJuYW1lfX1cIixcbiAgICBcImF2YXRhclwiOiBcInt7bm90aWZ5dXNlcl9hdmF0YXJ9fVwiLFxuICAgIFwie3ttZWRpYX19XCI6IHtcbiAgICAgICAgXCJtZWRpYV90eXBlXCI6IFwie3ttZWRpYV90eXBlfX1cIixcbiAgICAgICAgXCJ0bWRiSWRcIjogXCJ7e21lZGlhX3RtZGJpZH19XCIsXG4gICAgICAgIFwiaW1kYklkXCI6IFwie3ttZWRpYV9pbWRiaWR9fVwiLFxuICAgICAgICBcInR2ZGJJZFwiOiBcInt7bWVkaWFfdHZkYmlkfX1cIixcbiAgICAgICAgXCJzdGF0dXNcIjogXCJ7e21lZGlhX3N0YXR1c319XCIsXG4gICAgICAgIFwic3RhdHVzNGtcIjogXCJ7e21lZGlhX3N0YXR1czRrfX1cIlxuICAgIH0sXG4gICAgXCJ7e2V4dHJhfX1cIjogW10sXG4gICAgXCJ7e3JlcXVlc3R9fVwiOiB7XG4gICAgICAgIFwicmVxdWVzdF9pZFwiOiBcInt7cmVxdWVzdF9pZH19XCIsXG4gICAgICAgIFwicmVxdWVzdGVkQnlfZW1haWxcIjogXCJ7e3JlcXVlc3RlZEJ5X2VtYWlsfX1cIixcbiAgICAgICAgXCJyZXF1ZXN0ZWRCeV91c2VybmFtZVwiOiBcInt7cmVxdWVzdGVkQnlfdXNlcm5hbWV9fVwiLFxuICAgICAgICBcInJlcXVlc3RlZEJ5X2F2YXRhclwiOiBcInt7cmVxdWVzdGVkQnlfYXZhdGFyfX1cIlxuICAgIH1cbn0i"
}
},
"webpush": {
"enabled": false,
"options": {}
},
"gotify": {
"enabled": false,
"types": 0,
"options": {
"url": "",
"token": ""
}
}
}
},
"jobs": {
"plex-recently-added-scan": {
"schedule": "0 */5 * * * *"
},
"plex-full-scan": {
"schedule": "0 0 3 * * *"
},
"plex-watchlist-sync": {
"schedule": "0 */10 * * * *"
},
"radarr-scan": {
"schedule": "0 0 4 * * *"
},
"sonarr-scan": {
"schedule": "0 30 4 * * *"
},
"availability-sync": {
"schedule": "0 0 5 * * *"
},
"download-sync": {
"schedule": "0 * * * * *"
},
"download-sync-reset": {
"schedule": "0 0 1 * * *"
},
"image-cache-cleanup": {
"schedule": "0 0 5 * * *"
}
}
}

View File

@@ -0,0 +1,23 @@
name: overseerr
services:
app:
image: sctx/overseerr:latest
user: '115'
environment:
- LOG_LEVEL=debug
- TZ=America/Los_Angeles
networks:
- proxy-net
- default
ports:
- "5055:5055"
expose:
- "5055"
volumes:
- ./data:/app/config
- ./config/settings.json:/app/config/settings.json
restart: unless-stopped
networks:
proxy-net:
external: true

View File

@@ -0,0 +1 @@
{"Authentication":{"Username":"chris","Password":"VCj5yqvSYO4ruUSeAc8ftelwSxAA5wgGtuKNEroIIkg=","PrivateKey":"3ec2e0c9-c3c5-48c3-8af3-a59cbe565648"},"ChatClients":{"Discord":{"BotToken":"ODk3NjU1MzM3Mjk1OTcwMzE0.YWY0rg.GYoe2CKabu380pKc1TsGiP_vSP8","ClientId":"897655337295970314","StatusMessage":"/help","TvShowRoles":["894757006248906782","894757531392540693","894759271986786314"],"MovieRoles":["894757006248906782","894757531392540693","894759271986786314"],"MonitoredChannels":["897633767303311370"],"EnableRequestsThroughDirectMessages":false,"AutomaticallyNotifyRequesters":true,"NotificationMode":"Channels","NotificationChannels":["897633767303311370"],"AutomaticallyPurgeCommandMessages":false,"MusicRoles":[]},"Language":"english"},"DownloadClients":{"Ombi":{"Hostname":"","Port":3579,"ApiKey":"","ApiUsername":"","BaseUrl":"","UseSSL":false,"Version":"3","UseMovieIssue":false,"UseTVIssue":false},"Overseerr":{"Hostname":"192.168.1.234","Port":5055,"ApiKey":"MTYzNDA4NTYzNzU5MTgzNTQ2YzFhLTE3MGItNDE0Yi1hNjliLWVhYjJkZmE0ZDNhYyk=","Movies":{"DefaultApiUserId":"16","Categories":[{"Id":749,"Is4K":false,"Name":"Movies","ServiceId":0,"ProfileId":14,"RootFolder":"/media/movies","Tags":[]},{"Id":244,"Is4K":false,"Name":"Movies_Anime","ServiceId":0,"ProfileId":16,"RootFolder":"/media/movies","Tags":[]}]},"TvShows":{"DefaultApiUserId":"16","Categories":[{"Id":383,"Is4K":false,"Name":"TV","ServiceId":0,"ProfileId":7,"LanguageProfileId":1,"RootFolder":"/media/tv","Tags":[2]},{"Id":451,"Is4K":false,"Name":"TV_Anime","ServiceId":0,"ProfileId":9,"LanguageProfileId":1,"RootFolder":"/media/tv","Tags":[]}]},"UseSSL":false,"Version":"1","UseMovieIssue":false,"UseTVIssue":false},"Radarr":{"Hostname":"","Port":7878,"ApiKey":"","BaseUrl":"","Categories":[{"Id":0,"Name":"movie","ProfileId":"1","RootFolder":"","MinimumAvailability":"announced","Tags":[]}],"SearchNewRequests":true,"MonitorNewRequests":true,"UseSSL":false,"Version":"3"},"Sonarr":{"Hostname":"","Port":8989,"ApiKey":"","BaseUrl":"","Categories":[{"Id":0,"Name":"tv","ProfileId":"1","RootFolder":"","Tags":[],"LanguageId":"1","UseSeasonFolders":true,"SeriesType":"standard"}],"SearchNewRequests":true,"MonitorNewRequests":true,"UseSSL":false,"Version":"3"},"Lidarr":{"Hostname":"","Port":8686,"ApiKey":"","BaseUrl":"","Categories":[{"Id":0,"Name":"music","ProfileId":1,"MetadataProfileId":1,"RootFolder":"","Tags":[]}],"SearchNewRequests":true,"MonitorNewRequests":true,"UseSSL":false,"Version":"1"}},"BotClient":{"Client":"Discord"},"Movies":{"Client":"Overseerr"},"TvShows":{"Client":"Overseerr","Restrictions":"None"},"Port":4545,"BaseUrl":"","DisableAuthentication":false,"Version":"2.1.3","Music":{"Client":"Disabled"}}

View File

@@ -0,0 +1,18 @@
name: requestrr
services:
app:
image: thomst08/requestrr
networks:
- proxy-net
ports:
- "4545:4545"
expose:
- "4545"
volumes:
- ./config:/root/config
- ./data/tmp:/root/config/tmp
restart: unless-stopped
networks:
proxy-net:
external: true

961
stashapp/config/config.yml Normal file
View File

@@ -0,0 +1,961 @@
api_key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJjaHJpcyIsInN1YiI6IkFQSUtleSIsImlhdCI6MTcwNzg0MTk4OX0.nqDqNfNNNVHLuvA3wsvcR8aBwYjqUkCGDAn3AiBMU34
blobs_path: /blobs/
blobs_storage: FILESYSTEM
calculate_md5: false
continue_playlist_default: true
create_image_clip_from_videos: false
cssenabled: false
dangerous_allow_public_without_auth: "false"
database: /db/stash-go.sqlite
defaults:
auto_tag_task:
paths: []
performers:
- '*'
studios:
- '*'
tags: []
generate_task:
clippreviews: false
covers: false
forcetranscodes: false
imagepreviews: false
imagethumbnails: false
interactiveheatmapsspeeds: false
markerids: []
markerimagepreviews: false
markers: true
markerscreenshots: false
overwrite: false
phashes: false
previewoptions:
previewexcludeend: "0"
previewexcludestart: "0"
previewpreset: slow
previewsegmentduration: 0.75
previewsegments: 18
previews: false
sceneids: []
sprites: false
transcodes: false
identify_task:
options:
fieldoptions:
- createmissing: null
field: title
strategy: OVERWRITE
- createmissing: true
field: studio
strategy: MERGE
- createmissing: true
field: performers
strategy: MERGE
- createmissing: true
field: tags
strategy: MERGE
includemaleperformers: true
setcoverimage: true
setorganized: false
skipmultiplematches: true
skipmultiplematchtag: "1159"
skipsinglenameperformers: true
skipsinglenameperformertag: "524"
paths: []
sceneids: []
sources:
- options: null
source:
scraperid: null
stashboxendpoint: https://stashdb.org/graphql
stashboxindex: null
- options: null
source:
scraperid: null
stashboxendpoint: https://metadataapi.net/graphql
stashboxindex: null
scan_task:
scangenerateclippreviews: false
scangeneratecovers: true
scangenerateimagepreviews: false
scangeneratephashes: true
scangeneratepreviews: true
scangeneratesprites: true
scangeneratethumbnails: true
dlna:
default_whitelist:
- 192.168.1.149
video_sort_order: created_at
ffmpeg:
hardware_acceleration: true
gallery_cover_regex: (poster|cover|folder|board)\.[^\.]+$
generated: ""
host: 0.0.0.0
jwt_secret_key: 45dacba9bd122244b17a0365256a8e826f3c8e189cf21d26135b452824a9a037
menu_items:
- scenes
- groups
- markers
- galleries
- performers
- studios
- tags
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
package_sources:
- localpath: community
name: Community (stable)
url: https://stashapp.github.io/CommunityScripts/stable/index.yml
- localpath: stash-plugins
name: Stash-Plugins
url: https://7djx1qp.github.io/stash-plugins/main/index.yml
settings:
cjCardTweaks:
addBannerDimension: true
fileCount: true
performerProfileCards: true
stashStashIdInput:
performers: true
studios: true
tPdBmarkers:
disableSceneMarkerHook: true
timestampTrade:
createMovieFromScene: false
disableGalleryLookupHook: true
disableSceneMarkersHook: false
extraUrls: false
mergeMarkers: true
plugins_path: /plugins/
port: 9999
preview_audio: true
preview_exclude_end: 2%
preview_exclude_start: 5%
preview_preset: slow
preview_segment_duration: 1
preview_segments: 30
python_path: ""
scrapers:
package_sources:
- localpath: community
name: Community (stable)
url: https://stashapp.github.io/CommunityScrapers/stable/index.yml
scrapers_path: /scrapers/
security_tripwire_accessed_from_public_internet: ""
sequential_scanning: false
session_store_key: 72b6a684a4d0f214e5abb049f0110e2df38c43b90fe6cd78ff646607d48a5dae
show_one_time_moved_notification: false
sound_on_preview: false
stash:
- excludeimage: true
excludevideo: false
path: /data/
- excludeimage: true
excludevideo: false
path: /stash
- excludeimage: true
excludevideo: false
path: /junk
- excludeimage: true
excludevideo: false
path: /movies
- excludeimage: true
excludevideo: false
path: /packs
stash_boxes:
- apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI5ZDIxZTM2NS01N2QyLTRiZDUtODVkOC1kOGQwMjIxYTc2ZTMiLCJzdWIiOiJBUElLZXkiLCJpYXQiOjE2OTc5NjUyOTh9.Yk5agCaeidWqXyjsO29Lb6wnEglXHjSZdE94cDuLx2g
endpoint: https://stashdb.org/graphql
name: stashdb.org
- apikey: H04DEzLXkMqUBtNdS9CYOI4ek9KZb0EBSfNhTt1A87ee11b2
endpoint: https://theporndb.net/graphql
name: ThePornDB
theme_color: '#202b33'
ui:
advancedMode: true
compactExpandedDetails: false
defaultFilters:
performers:
find_filter:
direction: ASC
page: "1"
per_page: "40"
q: ""
sort: name
mode: PERFORMERS
object_filter:
gender:
modifier: EQUALS
value: Female
ui_options:
display_mode: "0"
zoom_index: "1"
scenes:
find_filter:
direction: DESC
page: "1"
per_page: "20"
q: ""
sort: random_81535573
mode: SCENES
object_filter:
path:
modifier: MATCHES_REGEX
value: ^/data/.*$|^/packs/.*$|^/movies/.*$
phash_distance:
modifier: NOT_NULL
value:
distance: "0"
value: ""
play_duration:
modifier: LESS_THAN
value:
value: "4"
studios:
modifier: NOT_NULL
value:
depth: "0"
excluded: []
items: []
ui_options:
display_mode: "0"
zoom_index: "3"
enableChromecast: true
enableMovieBackgroundImage: true
enablePerformerBackgroundImage: true
enableStudioBackgroundImage: true
frontPageContent:
- __typename: CustomFilter
direction: DESC
message:
id: recently_released_objects
values:
objects: Scenes
mode: SCENES
sortBy: date
- __typename: CustomFilter
direction: DESC
message:
id: recently_added_objects
values:
objects: Studios
mode: STUDIOS
sortBy: created_at
- __typename: CustomFilter
direction: DESC
message:
id: recently_released_objects
values:
objects: Movies
mode: MOVIES
sortBy: date
- __typename: CustomFilter
direction: DESC
message:
id: recently_added_objects
values:
objects: Performers
mode: PERFORMERS
sortBy: created_at
- __typename: CustomFilter
direction: DESC
message:
id: recently_released_objects
values:
objects: Galleries
mode: GALLERIES
sortBy: date
lastNoteSeen: "20240826"
minimumPlayPercent: "10"
pinnedFilters:
performers:
- isMissing
scenes:
- path
- isMissing
- tags
ratingSystemOptions:
starPrecision: half
type: stars
taggerConfig:
blacklist:
- \sXXX\s
- 1080p
- 720p
- 2160p
- KTR
- RARBG
- \scom\s
- \[
- \]
createParentStudios: true
excludedPerformerFields:
- name
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"
markSceneAsOrganizedOnSave: false
mode: auto
selectedEndpoint: https://stashdb.org/graphql
setCoverImage: true
setTags: true
showMales: true
tagOperation: merge
taskDefaults:
cleanGenerated:
blobFiles: true
dryRun: false
imageThumbnails: false
markers: true
screenshots: true
sprites: true
transcodes: true
generate:
clipPreviews: false
covers: true
imagePreviews: false
imageThumbnails: false
interactiveHeatmapsSpeeds: false
markerImagePreviews: false
markerScreenshots: false
markers: false
phashes: true
previewOptions:
previewExcludeEnd: "0"
previewExcludeStart: "0"
previewPreset: slow
previewSegmentDuration: "0.75"
previewSegments: "18"
previews: true
sprites: true
transcodes: false
trackActivity: true
username: chris
video_file_naming_algorithm: OSHASH
write_image_thumbnails: true

0
stashapp/config/custom.css Executable file
View File

View File

@@ -0,0 +1,59 @@
# APPNICENAME=Stash
# APPDESCRIPTION=An organizer for your porn, written in Go
name: stashapp
services:
app:
image: stashapp/stash:latest
restart: unless-stopped
## the container's port must be the same with the STASH_PORT in the environment section
networks:
- proxy-net
ports:
- "9999:9999"
expose:
- "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"
environment:
- STASH_STASH=/data/
- STASH_GENERATED=/generated/
- STASH_METADATA=/metadata/
- STASH_CACHE=/cache/
## Adjust below to change default port (9999)
- STASH_PORT=9999
volumes:
- /etc/localtime:/etc/localtime:ro
## Adjust below paths (the left part) to your liking.
## E.g. you can change ./config:/root/.stash to ./stash:/root/.stash
## Keep configs, scrapers, and plugins here.
- ./config:/root/.stash
## Point this at your collection.
- /media/raid/junk_transfer:/data
- /media/raid/stash:/stash
- /media/junk/junk:/junk
- /media/raid/junk_movies_transfer:/movies
- /media/raid/junk_pack_transfer:/packs
## This is where your stash's metadata lives
- ./data/metadata:/metadata
## Any other cache content.
- ./data/cache:/cache
## Where to store binary blob data (scene covers, images)
- ./data/blobs:/blobs
## Where to store plugins
- ./data/plugins:/plugins
## Where to store scrapers
- ./data/scrapers:/scrapers
## Where to store database file
- ./data/db:/db
## Where to store generated content (screenshots,previews,transcodes,sprites)
- /media/stashapp/generated:/generated
networks:
proxy-net:
external: true

View File

@@ -0,0 +1,29 @@
[General]
# Instance name can be used to distinguish between different instances using backend api.getInstanceName()
instanceName=
# set to true to allow using Trilium without authentication (makes sense for server build only, desktop build doesn't need password)
noAuthentication=false
# set to true to disable backups (e.g. because of limited space on server)
noBackup=false
# Disable automatically generating desktop icon
# noDesktopIcon=true
[Network]
# host setting is relevant only for web deployments - set the host on which the server will listen
# host=0.0.0.0
# port setting is relevant only for web deployments, desktop builds run on a fixed port (changeable with TRILIUM_PORT environment variable)
port=8080
# true for TLS/SSL/HTTPS (secure), false for HTTP (insecure).
https=false
# path to certificate (run "bash bin/generate-cert.sh" to generate self-signed certificate). Relevant only if https=true
certPath=
keyPath=
# setting to give trust to reverse proxies, a comma-separated list of trusted rev. proxy IPs can be specified (CIDR notation is permitted),
# alternatively 'true' will make use of the leftmost IP in X-Forwarded-For, ultimately an integer can be used to tell about the number of hops between
# Trilium (which is hop 0) and the first trusted rev. proxy.
# once set, expressjs will use the X-Forwarded-For header set by the rev. proxy to determinate the real IPs of clients.
# expressjs shortcuts are supported: loopback(127.0.0.1/8, ::1/128), linklocal(169.254.0.0/16, fe80::/10), uniquelocal(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7)
trustedReverseProxy=false

View File

@@ -0,0 +1,20 @@
name: "triliumnext-notes"
services:
app:
image: triliumnext/notes:v0.90.12
restart: unless-stopped
volumes:
- ./data:/home/node/trilium-data
- ./config:/home/node/trilium-config
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