Initial commit - All Portainer stacks from Mac
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
13ft-ladder:
|
||||
container_name: 13ft-ladder
|
||||
image: wasimaster/13ft:latest
|
||||
restart: unless-stopped
|
||||
hostname: 13ft-ladder
|
||||
ports:
|
||||
- "192.168.1.155:5000:5000/tcp" # Keeps your specific host IP binding
|
||||
environment:
|
||||
PORT: "5000"
|
||||
TZ: America/New_York # Add for consistent timestamps
|
||||
working_dir: "/app"
|
||||
entrypoint:
|
||||
- "python"
|
||||
command:
|
||||
- "portable.py"
|
||||
logging:
|
||||
driver: json-file
|
||||
Binary file not shown.
@@ -0,0 +1,54 @@
|
||||
version: '3.8'
|
||||
|
||||
networks:
|
||||
blinko-network:
|
||||
driver: bridge
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
container_name: blinko-postgres
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: postgres
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: zZ8o3NahfCmXMzBLN # ← This is your current password
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD", "pg_isready", "-U", "postgres", "-d", "postgres"]
|
||||
interval: 5s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
networks:
|
||||
- blinko-network
|
||||
|
||||
blinko:
|
||||
image: blinkospace/blinko:latest
|
||||
container_name: blinko
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
NODE_ENV: production
|
||||
NEXTAUTH_URL: http://192.168.1.155:1111
|
||||
NEXT_PUBLIC_BASE_URL: http://192.168.1.155:1111
|
||||
NEXTAUTH_SECRET: 0543c607f3616eed8296e9dd62e3fc1eb5a077cd3ddd9618620a0c343b3601c7
|
||||
DATABASE_URL: postgresql://postgres:zZ8o3NahfCmXMzBLN@postgres:5432/postgres
|
||||
ports:
|
||||
- "1111:1111"
|
||||
volumes:
|
||||
- blinko_data:/app/.blinko
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- blinko-network
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:1111/"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
blinko_data:
|
||||
@@ -0,0 +1,18 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
freshrss:
|
||||
image: lscr.io/linuxserver/freshrss:latest # or linuxserver/freshrss:latest
|
||||
container_name: freshrss
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8082:80" # Change the left number if you want a different host port
|
||||
environment:
|
||||
- PUID=1000 # ← CHANGE to your Pi user's UID (run `id` to check)
|
||||
- PGID=1000 # ← CHANGE to your Pi user's GID
|
||||
- TZ=America/New_York # ← CHANGE to your actual timezone
|
||||
volumes:
|
||||
- freshrss_config:/config
|
||||
|
||||
volumes:
|
||||
freshrss_config:
|
||||
@@ -0,0 +1,21 @@
|
||||
version: '3.8'
|
||||
|
||||
volumes:
|
||||
gitea_data:
|
||||
|
||||
services:
|
||||
server:
|
||||
image: docker.gitea.com/gitea:latest
|
||||
container_name: gitea
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
- TZ=America/New_York
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- gitea_data:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- "3131:3000" # Web UI - change host port if 3000 is in use
|
||||
- "2222:22" # SSH - mapped to avoid host SSH conflict
|
||||
@@ -0,0 +1,31 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
homeassistant:
|
||||
container_name: homeassistant
|
||||
image: ghcr.io/home-assistant/home-assistant:stable
|
||||
restart: unless-stopped
|
||||
privileged: true
|
||||
network_mode: host
|
||||
security_opt:
|
||||
- label=disable
|
||||
hostname: homeassistant
|
||||
environment:
|
||||
TZ: America/New_York
|
||||
LANG: C.UTF-8
|
||||
S6_BEHAVIOUR_IF_STAGE2_FAILS: "2"
|
||||
S6_CMD_WAIT_FOR_SERVICES: "1"
|
||||
S6_CMD_WAIT_FOR_SERVICES_MAXTIME: "0"
|
||||
S6_SERVICES_READYTIME: "50"
|
||||
S6_SERVICES_GRACETIME: "240000"
|
||||
UV_EXTRA_INDEX_URL: https://wheels.home-assistant.io/musllinux-index/
|
||||
UV_SYSTEM_PYTHON: "true"
|
||||
UV_NO_CACHE: "true"
|
||||
volumes:
|
||||
- "/etc/localtime:/etc/localtime:ro"
|
||||
- "/home/pi/homeassistant:/config"
|
||||
- "/run/dbus:/run/dbus:ro"
|
||||
# Add USB/Zigbee if needed, e.g.:
|
||||
# - "/dev/ttyUSB0:/dev/ttyUSB0:rw"
|
||||
working_dir: "/config"
|
||||
entrypoint: ["/init"]
|
||||
@@ -0,0 +1,28 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
homebridge:
|
||||
container_name: homebridge
|
||||
image: homebridge/homebridge:ubuntu
|
||||
restart: always
|
||||
network_mode: host
|
||||
hostname: homebridge
|
||||
environment:
|
||||
HOMEBRIDGE_CONFIG_UI_PORT: "8581"
|
||||
TZ: America/New_York # Add if not already set in your env
|
||||
ENABLE_AVAHI: "1"
|
||||
HOMEBRIDGE_APT_PACKAGE: "1"
|
||||
UIX_CUSTOM_PLUGIN_PATH: "/var/lib/homebridge/node_modules"
|
||||
# Keep any other custom env you had
|
||||
expose:
|
||||
- "8581/tcp"
|
||||
volumes:
|
||||
- "homebridge_homebridge:/homebridge"
|
||||
working_dir: "/homebridge"
|
||||
entrypoint: ["/init"]
|
||||
logging:
|
||||
driver: json-file
|
||||
|
||||
volumes:
|
||||
homebridge_homebridge:
|
||||
external: true
|
||||
@@ -0,0 +1,21 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
homepage:
|
||||
image: ghcr.io/gethomepage/homepage:latest
|
||||
container_name: homepage
|
||||
environment:
|
||||
HOMEPAGE_ALLOWED_HOSTS: 192.168.1.155,192.168.1.155:49325,localhost,127.0.0.1,0.0.0.0,douglasdigitalhome.net,www.douglasdigitalhome.net,homepage.douglasdigitalhome.net
|
||||
PUID: 1000
|
||||
PGID: 1000
|
||||
# LOG_LEVEL: debug # remove or comment out once everything works
|
||||
ports:
|
||||
- "49325:3000"
|
||||
volumes:
|
||||
- /docker/homepage/config:/app/config
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- homepage.group=Infrastructure
|
||||
- homepage.name=Homepage
|
||||
- homepage.icon=mdi:view-dashboard
|
||||
@@ -0,0 +1,92 @@
|
||||
# https://gethomepage.dev/configs/services/
|
||||
---
|
||||
- Networking:
|
||||
- Pi-hole:
|
||||
icon: pi-hole
|
||||
href: https://pihole.douglasdigitalhome.net
|
||||
description: DNS ad-blocking & stats
|
||||
widget:
|
||||
type: pihole
|
||||
url: http://192.168.1.155:8080
|
||||
key: yL4lBDboHC5FVPAZTBSW8IZvoxEQA0ObAAVyzrcll04=
|
||||
version: 6
|
||||
|
||||
- Home Automation:
|
||||
- Home Assistant:
|
||||
icon: home-assistant
|
||||
href: https://homeassistant.douglasdigitalhome.net
|
||||
description: Smart home hub
|
||||
widget:
|
||||
type: homeassistant
|
||||
url: http://192.168.1.155:8123
|
||||
key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJjZWY5N2IxMDMwNDA0YzNlOGYwM2Q0OWYyMDc0NzBmZCIsImlhdCI6MTc3Njc4ODAzOCwiZXhwIjoyMDkyMTQ4MDM4fQ.aH7VzskO8tWAU1A14ieg8S98a8EQdyu_1PgE63Nm0_Y
|
||||
|
||||
- Office/Tools:
|
||||
- FreshRSS:
|
||||
icon: freshrss
|
||||
href: https://freshrss.douglasdigitalhome.net
|
||||
description: RSS reader
|
||||
widget:
|
||||
type: freshrss
|
||||
url: http://192.168.1.155:8082
|
||||
username: kdouglas011
|
||||
password: gyv!aky@gvz@fmu1AEV
|
||||
|
||||
- Stirling PDF:
|
||||
icon: mdi-file-pdf-box
|
||||
href: https://stirlingpdf.douglasdigitalhome.net
|
||||
description: PDF toolkit
|
||||
|
||||
- LibreOffice:
|
||||
icon: libreoffice
|
||||
href: https://libreoffice.douglasdigitalhome.net
|
||||
description: Online office suite
|
||||
|
||||
- Monitoring:
|
||||
- Uptime Kuma:
|
||||
icon: uptimekuma
|
||||
href: https://uptimekuma.douglasdigitalhome.net
|
||||
description: Service & System Monitoring
|
||||
widget:
|
||||
type: uptimekuma
|
||||
url: http://192.168.1.145:3001
|
||||
slug: myservers
|
||||
|
||||
- Automation:
|
||||
- n8n:
|
||||
icon: n8n
|
||||
href: https://n8n.douglasdigitalhome.net
|
||||
description: Workflow automation
|
||||
|
||||
- Blinko:
|
||||
icon: mdi-notebook
|
||||
href: https://blinko.douglasdigitalhome.net
|
||||
description: Notes / knowledge base
|
||||
|
||||
- Media:
|
||||
- Plex:
|
||||
icon: plex
|
||||
href: https://app.plex.tv
|
||||
description: Home Media Server
|
||||
|
||||
- AI / LLM:
|
||||
- OpenWebUI:
|
||||
icon: mdi-robot-excited # Nice modern robot icon
|
||||
href: https://openwebui.douglasdigitalhome.net
|
||||
description: Local LLM Chat Interface
|
||||
|
||||
- Other:
|
||||
- 13ft Ladder:
|
||||
icon: mdi-ladder
|
||||
href: https://13ftladder.douglasdigitalhome.net
|
||||
description: URL Paywall Scrubber
|
||||
|
||||
- Nginx Proxy:
|
||||
icon: nginx
|
||||
href: https://nginx.douglasdigitalhome.net
|
||||
description: Reverse proxy
|
||||
|
||||
- OpenSpeedTest:
|
||||
icon: mdi-speedometer
|
||||
href: https://openspeedtest.douglasdigitalhome.net
|
||||
description: Local Network Speed Test
|
||||
@@ -0,0 +1,30 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
libreoffice:
|
||||
container_name: libreoffice
|
||||
image: lscr.io/linuxserver/libreoffice:latest
|
||||
restart: unless-stopped
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
hostname: libreoffice
|
||||
environment:
|
||||
TZ: America/New_York
|
||||
PUID: "1000"
|
||||
PGID: "1000"
|
||||
START_DOCKER: "true"
|
||||
TITLE: "LibreOffice"
|
||||
LSIO_FIRST_PARTY: "true"
|
||||
NO_GAMEPAD: "true"
|
||||
DISABLE_ZINK: "false"
|
||||
DISABLE_DRI3: "false"
|
||||
ports:
|
||||
- "3000:3000/tcp"
|
||||
- "3001:3001/tcp"
|
||||
volumes:
|
||||
- "/home/kdouglas011/libreoffice/config:/config:rw" # ← REPLACE with real Source for /config
|
||||
- "/home/kdouglas011/Documents:/documents:rw" # ← REPLACE or REMOVE if no /documents mount
|
||||
working_dir: "/"
|
||||
entrypoint: ["/init"]
|
||||
logging:
|
||||
driver: json-file
|
||||
@@ -0,0 +1,36 @@
|
||||
version: "3.8" # Modern standard
|
||||
|
||||
services:
|
||||
n8n:
|
||||
container_name: n8n
|
||||
image: docker.n8n.io/n8nio/n8n
|
||||
restart: unless-stopped
|
||||
user: node
|
||||
ports:
|
||||
- "5678:5678/tcp" # Main n8n UI
|
||||
environment:
|
||||
TZ: America/New_York
|
||||
N8N_BASIC_AUTH_ACTIVE: "true"
|
||||
N8N_BASIC_AUTH_USER: "kdouglas011"
|
||||
N8N_BASIC_AUTH_PASSWORD: "athlete-fares-object-easily"
|
||||
N8N_SECURE_COOKIE: "false" # Only if you don't use HTTPS; otherwise set true
|
||||
NODE_ENV: production
|
||||
N8N_RELEASE_TYPE: stable
|
||||
volumes:
|
||||
- "n8n_n8n_data:/home/node/.n8n"
|
||||
networks:
|
||||
- n8n_default
|
||||
working_dir: "/home/node"
|
||||
entrypoint:
|
||||
- tini
|
||||
- "--"
|
||||
- "/docker-entrypoint.sh"
|
||||
|
||||
networks:
|
||||
n8n_default:
|
||||
external: true
|
||||
name: n8n_default
|
||||
|
||||
volumes:
|
||||
n8n_n8n_data:
|
||||
external: true
|
||||
@@ -0,0 +1,24 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
nginx-proxy-manager:
|
||||
container_name: nginx-proxy-manager
|
||||
image: jc21/nginx-proxy-manager:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80/tcp" # HTTP traffic
|
||||
- "443:443/tcp" # HTTPS traffic + certs
|
||||
- "81:81/tcp" # Admin UI (change if you want to hide it)
|
||||
environment:
|
||||
TZ: America/New_York
|
||||
SUPPRESS_NO_CONFIG_WARNING: "1"
|
||||
NODE_ENV: production
|
||||
NODE_OPTIONS: --openssl-legacy-provider
|
||||
# Add any custom env if you use CrowdSec or other integrations
|
||||
volumes:
|
||||
- "/data/compose/12/data:/data"
|
||||
- "/data/compose/12/letsencrypt:/etc/letsencrypt"
|
||||
working_dir: "/app"
|
||||
entrypoint: ["/init"]
|
||||
logging:
|
||||
driver: json-file
|
||||
@@ -0,0 +1,30 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
ollama:
|
||||
image: ollama/ollama:latest
|
||||
container_name: ollama
|
||||
ports:
|
||||
- "11434:11434"
|
||||
volumes:
|
||||
- ollama:/root/.ollama
|
||||
restart: unless-stopped
|
||||
|
||||
open-webui:
|
||||
image: ghcr.io/open-webui/open-webui:main
|
||||
container_name: open-webui
|
||||
ports:
|
||||
- "3000:8080"
|
||||
volumes:
|
||||
- open-webui:/app/backend/data
|
||||
environment:
|
||||
- OLLAMA_BASE_URL=http://ollama:11434
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
depends_on:
|
||||
- ollama
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
ollama:
|
||||
open-webui:
|
||||
@@ -0,0 +1,32 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
openspeedtest:
|
||||
container_name: openspeedtest
|
||||
image: openspeedtest/latest
|
||||
restart: unless-stopped
|
||||
hostname: openspeedtest
|
||||
user: "101"
|
||||
ports:
|
||||
- "3030:3000/tcp"
|
||||
- "3031:3001/tcp"
|
||||
environment:
|
||||
TZ: America/New_York
|
||||
ENABLE_LETSENCRYPT: "false"
|
||||
DOMAIN_NAME: "false"
|
||||
USER_EMAIL: "false"
|
||||
CONFIG: "/etc/nginx/conf.d/OpenSpeedTest-Server.conf"
|
||||
INDEX_HTML: "/usr/share/nginx/html/index.html"
|
||||
CHANGE_CONTAINER_PORTS: "false"
|
||||
HTTP_PORT: "3000"
|
||||
HTTPS_PORT: "3001"
|
||||
SET_USER: "101"
|
||||
# No volumes needed (stateless except unused LE path)
|
||||
# No custom network — let Docker use default bridge
|
||||
logging:
|
||||
driver: json-file
|
||||
working_dir: "/"
|
||||
entrypoint:
|
||||
- "/docker-entrypoint.sh"
|
||||
command:
|
||||
- "/entrypoint.sh"
|
||||
@@ -0,0 +1,30 @@
|
||||
version: "3.8" # Modern version (original was 3.6, safe to bump)
|
||||
|
||||
services:
|
||||
pihole:
|
||||
container_name: pihole
|
||||
image: pihole/pihole:latest
|
||||
restart: unless-stopped
|
||||
hostname: pihole # Cleaner than the random container ID
|
||||
environment:
|
||||
TZ: America/New_York # Proper IANA format (was "New York")
|
||||
FTLCONF_webserver_api_password: "~Guards1345"
|
||||
FTLCONF_dns_listeningMode: ALL
|
||||
FTL_CMD: no-daemon
|
||||
DNSMASQ_USER: pihole
|
||||
ports:
|
||||
- "53:53/tcp"
|
||||
- "53:53/udp"
|
||||
- "8080:80/tcp" # HTTP admin
|
||||
- "8443:443/tcp" # HTTPS admin
|
||||
volumes:
|
||||
- "/data/compose/5/etc-pihole:/etc/pihole:rw" # Keep this — confirmed by inspect
|
||||
# Add this second volume if you have custom dnsmasq configs (very common for Pi-hole)
|
||||
# - "/data/compose/5/etc-dnsmasq.d:/etc/dnsmasq.d:rw"
|
||||
networks:
|
||||
- pihole_default
|
||||
|
||||
networks:
|
||||
pihole_default:
|
||||
name: pihole_default
|
||||
external: true
|
||||
@@ -0,0 +1,11 @@
|
||||
version: '3'
|
||||
services:
|
||||
app:
|
||||
image: amruthpillai/reactive-resume:latest
|
||||
ports:
|
||||
- "3100:3100" # Access via localhost:3100
|
||||
environment:
|
||||
- PUBLIC_SERVER_URL=http://localhost:3100
|
||||
- STORAGE_URL=http://localhost:3100/storage
|
||||
volumes:
|
||||
- ./data:/data # Mount for persistent resumes
|
||||
@@ -0,0 +1,38 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
core:
|
||||
image: searxng/searxng:latest
|
||||
container_name: searxng
|
||||
restart: no # change to unless-stopped once stable
|
||||
ports:
|
||||
- "8080:8080"
|
||||
volumes:
|
||||
- searxng-config:/etc/searxng
|
||||
- searxng-cache:/var/cache/searxng
|
||||
environment:
|
||||
- SEARXNG_BASE_URL=http://192.168.1.112:8080/
|
||||
- SEARXNG_BIND_ADDRESS=0.0.0.0
|
||||
- SEARXNG_PORT=8080
|
||||
- FORCE_OWNERSHIP=true
|
||||
# Add a secret key (generate one or use this placeholder for now)
|
||||
- SEARXNG_SECRET_KEY=your-super-secret-key-change-this-in-production
|
||||
cap_drop:
|
||||
- ALL
|
||||
cap_add:
|
||||
- CHOWN
|
||||
- SETGID
|
||||
- SETUID
|
||||
|
||||
valkey:
|
||||
image: valkey/valkey:7-alpine
|
||||
container_name: searxng-valkey
|
||||
restart: unless-stopped
|
||||
command: --save 30 1 --loglevel warning
|
||||
volumes:
|
||||
- valkey-data:/data
|
||||
|
||||
volumes:
|
||||
searxng-config:
|
||||
searxng-cache:
|
||||
valkey-data:
|
||||
@@ -0,0 +1,38 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
stirling-pdf:
|
||||
image: stirlingtools/stirling-pdf:latest # or :latest-fat if you want more languages/features
|
||||
container_name: stirling-pdf
|
||||
restart: unless-stopped
|
||||
|
||||
ports:
|
||||
- "8081:8080" # ← change left side if 8080 is used (e.g. 8081:8080)
|
||||
|
||||
volumes:
|
||||
- stirling-configs:/configs # main settings, users, custom files
|
||||
- stirling-trainingdata:/usr/share/tessdata # for OCR – add extra lang data here later if needed
|
||||
# - ./logs:/logs # optional – uncomment if you want persistent logs
|
||||
# - ./extraConfigs:/extraConfigs # optional advanced customizations
|
||||
|
||||
environment:
|
||||
# Security / login (recommended to turn on eventually)
|
||||
- DOCKER_ENABLE_SECURITY=true # set to true → enables login screen
|
||||
# - SYSTEM_ROOTURIPATH=/pdf # if running behind reverse proxy / subpath (optional)
|
||||
|
||||
# Performance / feature flags (good defaults for Pi)
|
||||
- INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false # saves RAM / startup time
|
||||
- LANGS=en_US # change to en_GB, de_DE etc if preferred
|
||||
|
||||
# Optional: reduce memory pressure a bit more
|
||||
- JAVA_TOOL_OPTIONS=-Xmx1024m # cap at 1 GB (adjust down to 768m if Pi is RAM-tight)
|
||||
|
||||
# healthcheck: # optional but nice in Portainer
|
||||
# test: ["CMD", "curl", "-f", "http://localhost:8080/api/v1/server/health"]
|
||||
# interval: 30s
|
||||
# timeout: 10s
|
||||
# retries: 3
|
||||
|
||||
volumes:
|
||||
stirling-configs:
|
||||
stirling-trainingdata:
|
||||
@@ -0,0 +1,17 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
whoogle:
|
||||
image: benbusby/whoogle-search:latest
|
||||
container_name: whoogle
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "5000:5000" # change if 5000 is taken
|
||||
environment:
|
||||
- WHOOGLE_CONFIG_DISABLE=0 # optional: keep config page enabled for tweaks
|
||||
# Optional extras you can add later:
|
||||
# - WHOOGLE_PROXY=1
|
||||
# - WHOOGLE_TOR=0
|
||||
# No cap_drop/cap_add needed — it runs clean
|
||||
|
||||
volumes: {} # no volumes required for basic use
|
||||
Reference in New Issue
Block a user