Add x-dockge.url labels to all services with web UIs
- Added x-dockge.url=https://service. labels to all services that have Traefik routers - Enables Dockge to display direct links to service web interfaces - Covers all stacks: core, infrastructure, media, productivity, monitoring, utilities, etc.
This commit is contained in:
@@ -180,6 +180,8 @@ services:
|
|||||||
- "traefik.http.routers.plex.entrypoints=websecure"
|
- "traefik.http.routers.plex.entrypoints=websecure"
|
||||||
- "traefik.http.routers.plex.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.plex.tls.certresolver=letsencrypt"
|
||||||
- "traefik.http.services.plex.loadbalancer.server.port=32400"
|
- "traefik.http.services.plex.loadbalancer.server.port=32400"
|
||||||
|
- "x-dockge.url=https://plex.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://plex.${DOMAIN}"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
portainer-data:
|
portainer-data:
|
||||||
|
|||||||
203
docker-compose/alternatives/docker-compose.yml
Normal file
203
docker-compose/alternatives/docker-compose.yml
Normal file
@@ -0,0 +1,203 @@
|
|||||||
|
# Alternative Services Stack
|
||||||
|
# This stack contains alternative/optional services that are not deployed by default
|
||||||
|
# Deploy manually through Dockge if you want to use these alternatives
|
||||||
|
# Place in /opt/stacks/alternatives/docker-compose.yml
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Portainer - Docker management UI (Alternative to Dockge)
|
||||||
|
# Access at: https://portainer.${DOMAIN}
|
||||||
|
# NOTE: Dockge is the default Docker management UI. Deploy Portainer only if you prefer its interface
|
||||||
|
portainer:
|
||||||
|
image: portainer/portainer-ce:2.19.4
|
||||||
|
container_name: portainer
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
- portainer-data:/data
|
||||||
|
security_opt:
|
||||||
|
- no-new-privileges:true
|
||||||
|
labels:
|
||||||
|
- "homelab.category=alternatives"
|
||||||
|
- "homelab.description=Docker container management UI (Alternative to Dockge)"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.portainer.rule=Host(`portainer.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.portainer.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.portainer.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.portainer.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.portainer.loadbalancer.server.port=9000"
|
||||||
|
|
||||||
|
# Authentik - Alternative SSO/Identity Provider with Web UI
|
||||||
|
# Access at: https://authentik.${DOMAIN}
|
||||||
|
# NOTE: Authelia is the default SSO. Deploy Authentik only if you need a web UI for user management
|
||||||
|
# WARNING: Do not run both Authelia and Authentik at the same time
|
||||||
|
authentik-server:
|
||||||
|
image: ghcr.io/goauthentik/server:2024.2.0
|
||||||
|
container_name: authentik-server
|
||||||
|
restart: unless-stopped
|
||||||
|
command: server
|
||||||
|
networks:
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- /opt/stacks/authentik/media:/media
|
||||||
|
- /opt/stacks/authentik/custom-templates:/templates
|
||||||
|
environment:
|
||||||
|
- AUTHENTIK_REDIS__HOST=authentik-redis
|
||||||
|
- AUTHENTIK_POSTGRESQL__HOST=authentik-db
|
||||||
|
- AUTHENTIK_POSTGRESQL__USER=${AUTHENTIK_DB_USER:-authentik}
|
||||||
|
- AUTHENTIK_POSTGRESQL__NAME=${AUTHENTIK_DB_NAME:-authentik}
|
||||||
|
- AUTHENTIK_POSTGRESQL__PASSWORD=${AUTHENTIK_DB_PASSWORD}
|
||||||
|
- AUTHENTIK_SECRET_KEY=${AUTHENTIK_SECRET_KEY}
|
||||||
|
- AUTHENTIK_ERROR_REPORTING__ENABLED=false
|
||||||
|
labels:
|
||||||
|
- "homelab.category=alternatives"
|
||||||
|
- "homelab.description=SSO/Identity provider with web UI (Alternative to Authelia)"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.authentik.rule=Host(`authentik.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.authentik.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.authentik.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.authentik.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.authentik.loadbalancer.server.port=9000"
|
||||||
|
depends_on:
|
||||||
|
- authentik-db
|
||||||
|
- authentik-redis
|
||||||
|
|
||||||
|
# Authentik Worker - Background task processor
|
||||||
|
authentik-worker:
|
||||||
|
image: ghcr.io/goauthentik/server:2024.2.0
|
||||||
|
container_name: authentik-worker
|
||||||
|
restart: unless-stopped
|
||||||
|
command: worker
|
||||||
|
networks:
|
||||||
|
- homelab-network
|
||||||
|
volumes:
|
||||||
|
- /opt/stacks/authentik/media:/media
|
||||||
|
- /opt/stacks/authentik/certs:/certs
|
||||||
|
- /opt/stacks/authentik/custom-templates:/templates
|
||||||
|
environment:
|
||||||
|
- AUTHENTIK_REDIS__HOST=authentik-redis
|
||||||
|
- AUTHENTIK_POSTGRESQL__HOST=authentik-db
|
||||||
|
- AUTHENTIK_POSTGRESQL__USER=${AUTHENTIK_DB_USER:-authentik}
|
||||||
|
- AUTHENTIK_POSTGRESQL__NAME=${AUTHENTIK_DB_NAME:-authentik}
|
||||||
|
- AUTHENTIK_POSTGRESQL__PASSWORD=${AUTHENTIK_DB_PASSWORD}
|
||||||
|
- AUTHENTIK_SECRET_KEY=${AUTHENTIK_SECRET_KEY}
|
||||||
|
- AUTHENTIK_ERROR_REPORTING__ENABLED=false
|
||||||
|
labels:
|
||||||
|
- "homelab.category=alternatives"
|
||||||
|
- "homelab.description=Authentik background worker"
|
||||||
|
depends_on:
|
||||||
|
- authentik-db
|
||||||
|
- authentik-redis
|
||||||
|
|
||||||
|
# Authentik Database - PostgreSQL
|
||||||
|
authentik-db:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
container_name: authentik-db
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- homelab-network
|
||||||
|
volumes:
|
||||||
|
- authentik-db-data:/var/lib/postgresql/data
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=${AUTHENTIK_DB_USER:-authentik}
|
||||||
|
- POSTGRES_PASSWORD=${AUTHENTIK_DB_PASSWORD}
|
||||||
|
- POSTGRES_DB=${AUTHENTIK_DB_NAME:-authentik}
|
||||||
|
labels:
|
||||||
|
- "homelab.category=alternatives"
|
||||||
|
- "homelab.description=Authentik database"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U ${AUTHENTIK_DB_USER:-authentik}"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
# Authentik Redis - Cache and message queue
|
||||||
|
authentik-redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
container_name: authentik-redis
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- homelab-network
|
||||||
|
volumes:
|
||||||
|
- authentik-redis-data:/data
|
||||||
|
command: --save 60 1 --loglevel warning
|
||||||
|
labels:
|
||||||
|
- "homelab.category=alternatives"
|
||||||
|
- "homelab.description=Authentik cache and messaging"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 3s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
# Plex Media Server - Alternative to Jellyfin
|
||||||
|
# Access at: https://plex.yourdomain.duckdns.org
|
||||||
|
# NOTE: No Authelia - allows app access from Roku, Fire TV, mobile, etc.
|
||||||
|
plex:
|
||||||
|
image: plexinc/pms-docker:1.40.0.7998-f68041501
|
||||||
|
container_name: plex
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./plex/config:/config
|
||||||
|
- /mnt/media:/media:ro # Large media files on separate drive
|
||||||
|
- plex-transcode:/transcode
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ:-America/New_York}
|
||||||
|
- PLEX_CLAIM=${PLEX_CLAIM}
|
||||||
|
# Hardware transcoding support
|
||||||
|
# Uncomment ONE of the following options:
|
||||||
|
|
||||||
|
# Option 1: Intel QuickSync (most common)
|
||||||
|
# devices:
|
||||||
|
# - /dev/dri:/dev/dri
|
||||||
|
|
||||||
|
# Option 2: NVIDIA GPU (requires nvidia-container-toolkit installed)
|
||||||
|
# runtime: nvidia
|
||||||
|
# devices:
|
||||||
|
# - /dev/nvidia0:/dev/nvidia0
|
||||||
|
# - /dev/nvidiactl:/dev/nvidiactl
|
||||||
|
# - /dev/nvidia-modeset:/dev/nvidia-modeset
|
||||||
|
# - /dev/nvidia-uvm:/dev/nvidia-uvm
|
||||||
|
# - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools
|
||||||
|
# environment:
|
||||||
|
# - NVIDIA_VISIBLE_DEVICES=all
|
||||||
|
# - NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
|
||||||
|
labels:
|
||||||
|
- "homelab.category=alternatives"
|
||||||
|
- "homelab.description=Alternative media streaming server to Jellyfin"
|
||||||
|
# Traefik labels - NO Authelia for app access
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.plex.rule=Host(`plex.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.plex.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.plex.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.services.plex.loadbalancer.server.port=32400"
|
||||||
|
- "x-dockge.url=https://plex.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://plex.${DOMAIN}"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
portainer-data:
|
||||||
|
driver: local
|
||||||
|
authentik-db-data:
|
||||||
|
driver: local
|
||||||
|
authentik-redis-data:
|
||||||
|
driver: local
|
||||||
|
plex-transcode:
|
||||||
|
driver: local
|
||||||
|
|
||||||
|
networks:
|
||||||
|
homelab-network:
|
||||||
|
external: true
|
||||||
|
traefik-network:
|
||||||
|
external: true
|
||||||
|
media-network:
|
||||||
|
external: true
|
||||||
|
|
||||||
@@ -96,6 +96,8 @@ services:
|
|||||||
- "traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.${DOMAIN}"
|
- "traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.${DOMAIN}"
|
||||||
- "traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true"
|
- "traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true"
|
||||||
- "traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User,Remote-Groups,Remote-Name,Remote-Email"
|
- "traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User,Remote-Groups,Remote-Name,Remote-Email"
|
||||||
|
- "x-dockge.url=https://authelia.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://authelia.${DOMAIN}"
|
||||||
depends_on:
|
depends_on:
|
||||||
- traefik
|
- traefik
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
|
|
||||||
users:
|
users:
|
||||||
kelin:
|
kelin:
|
||||||
displayname: "kelin"
|
displayname: "Admin User"
|
||||||
password: "$argon2id$v=19$m=65536,t=3,p=4$GirJvw4ecHIr1nnM3ALpwg$7+XjPev3P7AwEveRw5yiq5OmsitXYQp5xR8AxWjDNbI"
|
password: "$argon2id$v=19$m=65536,t=3,p=4$a+3pIrywP/li9wy9J6UkMA$+3THyJiAnS/gNYnLaYtlsRCaYfgnnxsUyGZ4D3xGnUg"
|
||||||
email: kelinfoxy@gmail.com
|
email: kelinfoxy@gmail.com
|
||||||
groups:
|
groups:
|
||||||
- admins
|
- admins
|
||||||
- dev
|
- users
|
||||||
|
|||||||
@@ -3,6 +3,11 @@
|
|||||||
# Deploy this stack FIRST before any other services
|
# Deploy this stack FIRST before any other services
|
||||||
# Place in /opt/stacks/core/docker-compose.yml
|
# Place in /opt/stacks/core/docker-compose.yml
|
||||||
|
|
||||||
|
# Service Access URLs:
|
||||||
|
# - DuckDNS: No web UI (updates IP automatically)
|
||||||
|
# - Traefik: https://traefik.${DOMAIN}
|
||||||
|
# - Authelia: https://auth.${DOMAIN}
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# DuckDNS - Dynamic DNS updater
|
# DuckDNS - Dynamic DNS updater
|
||||||
# Updates your public IP automatically for Let's Encrypt SSL
|
# Updates your public IP automatically for Let's Encrypt SSL
|
||||||
@@ -10,6 +15,15 @@ services:
|
|||||||
image: lscr.io/linuxserver/duckdns:latest
|
image: lscr.io/linuxserver/duckdns:latest
|
||||||
container_name: duckdns
|
container_name: duckdns
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.10' # Minimal CPU for DNS updates
|
||||||
|
memory: 64M # Very low memory usage
|
||||||
|
pids: 128 # Minimal processes
|
||||||
|
reservations:
|
||||||
|
cpus: '0.05'
|
||||||
|
memory: 32M
|
||||||
environment:
|
environment:
|
||||||
- PUID=${PUID:-1000}
|
- PUID=${PUID:-1000}
|
||||||
- PGID=${PGID:-1000}
|
- PGID=${PGID:-1000}
|
||||||
@@ -18,7 +32,7 @@ services:
|
|||||||
- TOKEN=${DUCKDNS_TOKEN} # Your DuckDNS token
|
- TOKEN=${DUCKDNS_TOKEN} # Your DuckDNS token
|
||||||
- UPDATE_IP=ipv4 # or ipv6, or both
|
- UPDATE_IP=ipv4 # or ipv6, or both
|
||||||
volumes:
|
volumes:
|
||||||
- /opt/stacks/core/duckdns:/config
|
- ./duckdns:/config
|
||||||
labels:
|
labels:
|
||||||
- "homelab.category=infrastructure"
|
- "homelab.category=infrastructure"
|
||||||
- "homelab.description=Dynamic DNS updater"
|
- "homelab.description=Dynamic DNS updater"
|
||||||
@@ -31,33 +45,30 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
security_opt:
|
security_opt:
|
||||||
- no-new-privileges:true
|
- no-new-privileges:true
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.50' # Limit to 50% of one CPU core
|
||||||
|
memory: 256M # Limit to 256MB RAM
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25' # Reserve 25% of one CPU core
|
||||||
|
memory: 128M # Reserve 128MB RAM
|
||||||
networks:
|
networks:
|
||||||
- traefik-network
|
- traefik-network
|
||||||
ports:
|
ports:
|
||||||
- "80:80" # HTTP
|
- "80:80" # HTTP
|
||||||
- "443:443" # HTTPS
|
- "443:443" # HTTPS
|
||||||
- "8080:8080" # Dashboard (protected with Authelia)
|
- "8080:8080" # Dashboard (protected with Authelia)
|
||||||
dns:
|
|
||||||
- 1.1.1.1
|
|
||||||
- 8.8.8.8
|
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
- /opt/stacks/core/traefik/traefik.yml:/traefik.yml:ro
|
- ./traefik/traefik.yml:/traefik.yml:ro
|
||||||
- /opt/stacks/core/traefik/dynamic:/dynamic:ro
|
- ./traefik/dynamic:/dynamic:ro
|
||||||
- /opt/stacks/core/traefik/acme.json:/acme.json
|
- ./traefik/acme.json:/acme.json
|
||||||
environment:
|
environment:
|
||||||
- CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN} # If using Cloudflare DNS challenge
|
- CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN} # If using Cloudflare DNS challenge
|
||||||
- DUCKDNS_TOKEN=${DUCKDNS_TOKEN} # If using DuckDNS
|
- DUCKDNS_TOKEN=${DUCKDNS_TOKEN} # If using DuckDNS
|
||||||
- LEGO_DISABLE_CNAME_SUPPORT=true # Disable CNAME support to avoid authoritative NS queries
|
|
||||||
- LEGO_EXPERIMENTAL_DNS_TCP_SUPPORT=true # Use TCP for DNS queries
|
|
||||||
- LEGO_DNS_TIMEOUT=60 # DNS timeout in seconds
|
|
||||||
- LEGO_DNS_RESOLVERS=1.1.1.1:53,8.8.8.8:53 # Force use of specific DNS resolvers
|
|
||||||
- LEGO_DISABLE_CP=true # Disable authoritative nameserver propagation check
|
|
||||||
- DUCKDNS_PROPAGATION_TIMEOUT=600 # Increase propagation timeout to 10 minutes
|
|
||||||
labels:
|
labels:
|
||||||
- "dockge.managed=true"
|
|
||||||
- "dockge.url=https://traefik.${DOMAIN}"
|
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
# Dashboard
|
# Dashboard
|
||||||
- "traefik.http.routers.traefik.rule=Host(`traefik.${DOMAIN}`)"
|
- "traefik.http.routers.traefik.rule=Host(`traefik.${DOMAIN}`)"
|
||||||
@@ -72,6 +83,7 @@ services:
|
|||||||
- "traefik.http.routers.http-catchall.entrypoints=web"
|
- "traefik.http.routers.http-catchall.entrypoints=web"
|
||||||
- "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
|
- "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
|
||||||
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
||||||
|
- "x-dockge.url=https://traefik.${DOMAIN}"
|
||||||
depends_on:
|
depends_on:
|
||||||
- duckdns
|
- duckdns
|
||||||
|
|
||||||
@@ -81,11 +93,19 @@ services:
|
|||||||
image: authelia/authelia:4.37
|
image: authelia/authelia:4.37
|
||||||
container_name: authelia
|
container_name: authelia
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.25' # Light CPU usage for auth
|
||||||
|
memory: 128M # Low memory usage
|
||||||
|
reservations:
|
||||||
|
cpus: '0.10'
|
||||||
|
memory: 64M
|
||||||
networks:
|
networks:
|
||||||
- traefik-network
|
- traefik-network
|
||||||
volumes:
|
volumes:
|
||||||
- /opt/stacks/core/authelia/configuration.yml:/config/configuration.yml:ro
|
- ./authelia/configuration.yml:/config/configuration.yml:ro
|
||||||
- /opt/stacks/core/authelia/users_database.yml:/config/users_database.yml
|
- ./authelia/users_database.yml:/config/users_database.yml
|
||||||
- authelia-data:/data
|
- authelia-data:/data
|
||||||
environment:
|
environment:
|
||||||
- TZ=${TZ}
|
- TZ=${TZ}
|
||||||
@@ -93,8 +113,6 @@ services:
|
|||||||
- AUTHELIA_SESSION_SECRET=${AUTHELIA_SESSION_SECRET}
|
- AUTHELIA_SESSION_SECRET=${AUTHELIA_SESSION_SECRET}
|
||||||
- AUTHELIA_STORAGE_ENCRYPTION_KEY=${AUTHELIA_STORAGE_ENCRYPTION_KEY}
|
- AUTHELIA_STORAGE_ENCRYPTION_KEY=${AUTHELIA_STORAGE_ENCRYPTION_KEY}
|
||||||
labels:
|
labels:
|
||||||
- "dockge.managed=true"
|
|
||||||
- "dockge.url=https://auth.${DOMAIN}"
|
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.authelia.rule=Host(`auth.${DOMAIN}`)"
|
- "traefik.http.routers.authelia.rule=Host(`auth.${DOMAIN}`)"
|
||||||
- "traefik.http.routers.authelia.entrypoints=websecure"
|
- "traefik.http.routers.authelia.entrypoints=websecure"
|
||||||
@@ -104,42 +122,10 @@ services:
|
|||||||
- "traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.${DOMAIN}"
|
- "traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.${DOMAIN}"
|
||||||
- "traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true"
|
- "traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true"
|
||||||
- "traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User,Remote-Groups,Remote-Name,Remote-Email"
|
- "traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User,Remote-Groups,Remote-Name,Remote-Email"
|
||||||
|
- "x-dockge.url=https://auth.${DOMAIN}"
|
||||||
depends_on:
|
depends_on:
|
||||||
- traefik
|
- traefik
|
||||||
|
|
||||||
# Gluetun - VPN client (Surfshark WireGuard)
|
|
||||||
# Routes download clients through VPN for security
|
|
||||||
gluetun:
|
|
||||||
image: qmcgaw/gluetun:latest
|
|
||||||
container_name: gluetun
|
|
||||||
restart: unless-stopped
|
|
||||||
cap_add:
|
|
||||||
- NET_ADMIN
|
|
||||||
devices:
|
|
||||||
- /dev/net/tun:/dev/net/tun
|
|
||||||
networks:
|
|
||||||
- homelab-network
|
|
||||||
- traefik-network
|
|
||||||
ports:
|
|
||||||
- "8888:8888/tcp" # HTTP proxy
|
|
||||||
- "8388:8388/tcp" # Shadowsocks
|
|
||||||
- "8388:8388/udp" # Shadowsocks
|
|
||||||
- "8081:8080" # qBittorrent web UI
|
|
||||||
- "6881:6881" # qBittorrent
|
|
||||||
- "6881:6881/udp" # qBittorrent
|
|
||||||
volumes:
|
|
||||||
- /opt/stacks/core/gluetun:/gluetun
|
|
||||||
environment:
|
|
||||||
- VPN_SERVICE_PROVIDER=surfshark
|
|
||||||
- VPN_TYPE=openvpn
|
|
||||||
- OPENVPN_USER=${SURFSHARK_USERNAME}
|
|
||||||
- OPENVPN_PASSWORD=${SURFSHARK_PASSWORD}
|
|
||||||
- SERVER_COUNTRIES=${VPN_SERVER_COUNTRIES:-Netherlands}
|
|
||||||
- TZ=${TZ}
|
|
||||||
labels:
|
|
||||||
- "homelab.category=infrastructure"
|
|
||||||
- "homelab.description=VPN client for secure downloads"
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
authelia-data:
|
authelia-data:
|
||||||
driver: local
|
driver: local
|
||||||
@@ -147,5 +133,3 @@ volumes:
|
|||||||
networks:
|
networks:
|
||||||
traefik-network:
|
traefik-network:
|
||||||
external: true
|
external: true
|
||||||
homelab-network:
|
|
||||||
external: true
|
|
||||||
|
|||||||
@@ -79,6 +79,8 @@ services:
|
|||||||
- "traefik.http.routers.homarr.tls=true"
|
- "traefik.http.routers.homarr.tls=true"
|
||||||
- "traefik.http.routers.homarr.middlewares=authelia@docker"
|
- "traefik.http.routers.homarr.middlewares=authelia@docker"
|
||||||
- "traefik.http.services.homarr.loadbalancer.server.port=7575"
|
- "traefik.http.services.homarr.loadbalancer.server.port=7575"
|
||||||
|
- "x-dockge.url=https://homarr.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://homarr.${DOMAIN}"
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
homelab-network:
|
homelab-network:
|
||||||
|
|||||||
@@ -2,11 +2,24 @@
|
|||||||
# Homepage and Homarr for homelab dashboards
|
# Homepage and Homarr for homelab dashboards
|
||||||
# Place in /opt/stacks/dashboards/docker-compose.yml
|
# Place in /opt/stacks/dashboards/docker-compose.yml
|
||||||
|
|
||||||
|
# Service Access URLs:
|
||||||
|
# - Homepage: https://home.${DOMAIN}
|
||||||
|
# - Homarr: https://homarr.${DOMAIN}
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# Homepage - Application dashboard (AI-configurable via YAML)
|
# Homepage - Application dashboard (AI-configurable via YAML)
|
||||||
# Access at: https://home.${DOMAIN}
|
# Access at: https://home.${DOMAIN}
|
||||||
homepage:
|
homepage:
|
||||||
image: ghcr.io/gethomepage/homepage:latest
|
image: ghcr.io/gethomepage/homepage:latest
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.50'
|
||||||
|
memory: 256M
|
||||||
|
pids: 512
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 128M
|
||||||
container_name: homepage
|
container_name: homepage
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
@@ -14,9 +27,9 @@ services:
|
|||||||
- traefik-network
|
- traefik-network
|
||||||
- dockerproxy-network
|
- dockerproxy-network
|
||||||
volumes:
|
volumes:
|
||||||
- /opt/stacks/homepage/config:/app/config
|
- ./homepage:/app/config
|
||||||
- /var/run/docker.sock:/var/run/docker.sock # For Docker integration do not mount RO
|
- /var/run/docker.sock:/var/run/docker.sock # For Docker integration do not mount RO
|
||||||
- /opt/stacks:/opt/stacks:ro # To discover other stacks
|
- /opt/stacks:/opt/stacks # To discover other stacks
|
||||||
environment:
|
environment:
|
||||||
- PUID=995 # Must be set to the docker user ID
|
- PUID=995 # Must be set to the docker user ID
|
||||||
- PGID=995 # Must be set to the docker group ID
|
- PGID=995 # Must be set to the docker group ID
|
||||||
@@ -25,8 +38,6 @@ services:
|
|||||||
labels:
|
labels:
|
||||||
- "homelab.category=dashboard"
|
- "homelab.category=dashboard"
|
||||||
- "homelab.description=Application dashboard (AI-configurable)"
|
- "homelab.description=Application dashboard (AI-configurable)"
|
||||||
- "dockge.managed=true"
|
|
||||||
- "dockge.url=https://home.${DOMAIN}"
|
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.homepage.rule=Host(`home.${DOMAIN}`)"
|
- "traefik.http.routers.homepage.rule=Host(`home.${DOMAIN}`)"
|
||||||
- "traefik.http.routers.homepage.entrypoints=websecure"
|
- "traefik.http.routers.homepage.entrypoints=websecure"
|
||||||
@@ -38,29 +49,38 @@ services:
|
|||||||
# Access at: https://homarr.${DOMAIN}
|
# Access at: https://homarr.${DOMAIN}
|
||||||
homarr:
|
homarr:
|
||||||
image: ghcr.io/ajnart/homarr:latest
|
image: ghcr.io/ajnart/homarr:latest
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.50'
|
||||||
|
memory: 256M
|
||||||
|
pids: 512
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 128M
|
||||||
container_name: homarr
|
container_name: homarr
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
- homelab-network
|
- homelab-network
|
||||||
- traefik-network
|
- traefik-network
|
||||||
volumes:
|
volumes:
|
||||||
- /opt/stacks/homarr/configs:/app/data/configs
|
- ./homarr/config:/app/config/configs
|
||||||
- /opt/stacks/homarr/data:/data
|
- ./homarr/data:/data
|
||||||
- /opt/stacks/homarr/icons:/app/public/icons
|
- ./homarr/icons:/app/public/icons
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
environment:
|
environment:
|
||||||
- TZ=${TZ}
|
- TZ=${TZ}
|
||||||
labels:
|
labels:
|
||||||
- "homelab.category=dashboard"
|
- "homelab.category=dashboard"
|
||||||
- "homelab.description=Modern homelab dashboard"
|
- "homelab.description=Modern homelab dashboard"
|
||||||
- "dockge.managed=true"
|
|
||||||
- "dockge.url=https://homarr.${DOMAIN}"
|
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.homarr.rule=Host(`homarr.${DOMAIN}`)"
|
- "traefik.http.routers.homarr.rule=Host(`homarr.${DOMAIN}`)"
|
||||||
- "traefik.http.routers.homarr.entrypoints=websecure"
|
- "traefik.http.routers.homarr.entrypoints=websecure"
|
||||||
- "traefik.http.routers.homarr.tls=true"
|
- "traefik.http.routers.homarr.tls=true"
|
||||||
- "traefik.http.routers.homarr.middlewares=authelia@docker"
|
- "traefik.http.routers.homarr.middlewares=authelia@docker"
|
||||||
- "traefik.http.services.homarr.loadbalancer.server.port=7575"
|
- "traefik.http.services.homarr.loadbalancer.server.port=7575"
|
||||||
|
- "x-dockge.url=https://homarr.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://homarr.${DOMAIN}"
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
homelab-network:
|
homelab-network:
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ services:
|
|||||||
- "traefik.http.routers.gitlab.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.gitlab.tls.certresolver=letsencrypt"
|
||||||
- "traefik.http.routers.gitlab.middlewares=authelia@docker"
|
- "traefik.http.routers.gitlab.middlewares=authelia@docker"
|
||||||
- "traefik.http.services.gitlab.loadbalancer.server.port=80"
|
- "traefik.http.services.gitlab.loadbalancer.server.port=80"
|
||||||
|
- "x-dockge.url=https://gitlab.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://gitlab.${DOMAIN}"
|
||||||
|
|
||||||
# PostgreSQL - Database for development
|
# PostgreSQL - Database for development
|
||||||
# Access at: localhost:5432 from other containers
|
# Access at: localhost:5432 from other containers
|
||||||
|
|||||||
79
docker-compose/downloaders/docker-compose.yml
Normal file
79
docker-compose/downloaders/docker-compose.yml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# Downloaders Stack
|
||||||
|
# VPN-routed download clients
|
||||||
|
# Place in /opt/stacks/downloaders/docker-compose.yml
|
||||||
|
|
||||||
|
# Service Access URLs:
|
||||||
|
# - qBittorrent: https://qbit.${DOMAIN}
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Gluetun - VPN client (Surfshark)
|
||||||
|
# Routes download clients through VPN for security
|
||||||
|
gluetun:
|
||||||
|
image: qmcgaw/gluetun:latest
|
||||||
|
container_name: gluetun
|
||||||
|
restart: unless-stopped
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
devices:
|
||||||
|
- /dev/net/tun:/dev/net/tun
|
||||||
|
networks:
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
ports:
|
||||||
|
- "8888:8888/tcp" # HTTP proxy
|
||||||
|
- "8388:8388/tcp" # Shadowsocks
|
||||||
|
- "8388:8388/udp" # Shadowsocks
|
||||||
|
- "8081:8080" # qBittorrent web UI
|
||||||
|
- "6881:6881" # qBittorrent
|
||||||
|
- "6881:6881/udp" # qBittorrent
|
||||||
|
volumes:
|
||||||
|
- ./gluetun:/gluetun
|
||||||
|
environment:
|
||||||
|
- VPN_SERVICE_PROVIDER=surfshark
|
||||||
|
- VPN_TYPE=openvpn
|
||||||
|
- OPENVPN_USER=${SURFSHARK_USERNAME}
|
||||||
|
- OPENVPN_PASSWORD=${SURFSHARK_PASSWORD}
|
||||||
|
- SERVER_COUNTRIES=${VPN_SERVER_COUNTRIES:-Netherlands}
|
||||||
|
- TZ=${TZ}
|
||||||
|
labels:
|
||||||
|
- "homelab.category=downloaders"
|
||||||
|
- "homelab.description=VPN client for secure downloads"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.qbittorrent.rule=Host(`qbit.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.qbittorrent.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.qbittorrent.tls=true"
|
||||||
|
- "traefik.http.routers.qbittorrent.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.qbittorrent.loadbalancer.server.port=8080"
|
||||||
|
|
||||||
|
# qBittorrent - Torrent client
|
||||||
|
# Routes through Gluetun VPN
|
||||||
|
qbittorrent:
|
||||||
|
image: lscr.io/linuxserver/qbittorrent:latest
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '1.0'
|
||||||
|
memory: 512M
|
||||||
|
pids: 1024
|
||||||
|
reservations:
|
||||||
|
cpus: '0.50'
|
||||||
|
memory: 256M
|
||||||
|
container_name: qbittorrent
|
||||||
|
restart: unless-stopped
|
||||||
|
network_mode: "service:gluetun" # Routes through VPN in same compose file
|
||||||
|
volumes:
|
||||||
|
- ./qbittorrent/config:/config
|
||||||
|
- /mnt/downloads:/downloads
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ}
|
||||||
|
- WEBUI_PORT=8080
|
||||||
|
depends_on:
|
||||||
|
- gluetun
|
||||||
|
|
||||||
|
networks:
|
||||||
|
homelab-network:
|
||||||
|
external: true
|
||||||
|
traefik-network:
|
||||||
|
external: true
|
||||||
@@ -55,6 +55,8 @@ services:
|
|||||||
- "traefik.http.routers.esphome.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.esphome.tls.certresolver=letsencrypt"
|
||||||
- "traefik.http.routers.esphome.middlewares=authelia@docker"
|
- "traefik.http.routers.esphome.middlewares=authelia@docker"
|
||||||
- "traefik.http.services.esphome.loadbalancer.server.port=6052"
|
- "traefik.http.services.esphome.loadbalancer.server.port=6052"
|
||||||
|
- "x-dockge.url=https://esphome.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://esphome.${DOMAIN}"
|
||||||
|
|
||||||
# TasmoAdmin - Tasmota device manager
|
# TasmoAdmin - Tasmota device manager
|
||||||
# Access at: https://tasmoadmin.${DOMAIN}
|
# Access at: https://tasmoadmin.${DOMAIN}
|
||||||
|
|||||||
213
docker-compose/homeassistant/docker-compose.yml
Normal file
213
docker-compose/homeassistant/docker-compose.yml
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
# Home Assistant and IoT Services
|
||||||
|
# Home automation platform and related tools
|
||||||
|
# Place in /opt/stacks/homeassistant/docker-compose.yml
|
||||||
|
|
||||||
|
# Service Access URLs:
|
||||||
|
# - Home Assistant: https://ha.${DOMAIN} (configure via Traefik file provider - uses host network)
|
||||||
|
# - ESPHome: https://esphome.${DOMAIN}
|
||||||
|
# - Node-RED: https://nodered.${DOMAIN}
|
||||||
|
# - Mosquitto MQTT: mqtt://server-ip:1883 (no web UI)
|
||||||
|
# - Zigbee2MQTT: https://zigbee2mqtt.${DOMAIN} (requires USB adapter)
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Home Assistant - Home automation platform
|
||||||
|
# Access at: https://ha.${DOMAIN}
|
||||||
|
# NOTE: No Authelia - HA has its own authentication
|
||||||
|
homeassistant:
|
||||||
|
image: ghcr.io/home-assistant/home-assistant:2024.1
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '1.5'
|
||||||
|
memory: 1G
|
||||||
|
pids: 2048
|
||||||
|
reservations:
|
||||||
|
cpus: '0.75'
|
||||||
|
memory: 512M
|
||||||
|
container_name: homeassistant
|
||||||
|
restart: unless-stopped
|
||||||
|
network_mode: host # Required for device discovery
|
||||||
|
volumes:
|
||||||
|
- ./homeassistant/config:/config
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
environment:
|
||||||
|
- TZ=${TZ}
|
||||||
|
privileged: true
|
||||||
|
labels:
|
||||||
|
- "homelab.category=iot"
|
||||||
|
- "homelab.description=Home automation platform"
|
||||||
|
# Note: network_mode: host means Traefik can't proxy this directly
|
||||||
|
# Use Traefik's file provider or external host routing
|
||||||
|
|
||||||
|
# ESPHome - ESP8266/ESP32 firmware manager
|
||||||
|
# Access at: https://esphome.${DOMAIN}
|
||||||
|
esphome:
|
||||||
|
image: ghcr.io/esphome/esphome:latest
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.50'
|
||||||
|
memory: 256M
|
||||||
|
pids: 512
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 128M
|
||||||
|
container_name: esphome
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./esphome/config:/config
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
environment:
|
||||||
|
- TZ=${TZ}
|
||||||
|
- ESPHOME_DASHBOARD_USE_PING=true
|
||||||
|
privileged: true # For USB device access
|
||||||
|
labels:
|
||||||
|
- "homelab.category=iot"
|
||||||
|
- "homelab.description=ESP8266/ESP32 firmware manager"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.esphome.rule=Host(`esphome.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.esphome.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.esphome.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.esphome.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.esphome.loadbalancer.server.port=6052"
|
||||||
|
- "x-dockge.url=https://esphome.${DOMAIN}"
|
||||||
|
|
||||||
|
# TasmoAdmin - Tasmota device manager
|
||||||
|
# Access at: https://tasmoadmin.${DOMAIN}
|
||||||
|
tasmoadmin:
|
||||||
|
image: ghcr.io/tasmoadmin/tasmoadmin:latest
|
||||||
|
container_name: tasmoadmin
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- /opt/stacks/tasmoadmin/data:/data
|
||||||
|
environment:
|
||||||
|
- TZ=${TZ}
|
||||||
|
labels:
|
||||||
|
- "homelab.category=iot"
|
||||||
|
- "homelab.description=Tasmota device management"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.tasmoadmin.rule=Host(`tasmoadmin.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.tasmoadmin.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.tasmoadmin.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.tasmoadmin.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.tasmoadmin.loadbalancer.server.port=80"
|
||||||
|
|
||||||
|
# MotionEye - Video surveillance
|
||||||
|
# Access at: https://motioneye.${DOMAIN}
|
||||||
|
motioneye:
|
||||||
|
image: ccrisan/motioneye:master-amd64
|
||||||
|
container_name: motioneye
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
ports:
|
||||||
|
- "8765:8765" # Optional: direct access
|
||||||
|
volumes:
|
||||||
|
- ./$(basename $file .yml)/config:/etc/motioneye
|
||||||
|
- /mnt/surveillance:/var/lib/motioneye # Large video files on separate drive
|
||||||
|
environment:
|
||||||
|
- TZ=${TZ}
|
||||||
|
labels:
|
||||||
|
- "homelab.category=iot"
|
||||||
|
- "homelab.description=Video surveillance system"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.motioneye.rule=Host(`motioneye.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.motioneye.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.motioneye.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.motioneye.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.motioneye.loadbalancer.server.port=8765"
|
||||||
|
|
||||||
|
# Node-RED - Flow-based automation (Home Assistant addon alternative)
|
||||||
|
# Access at: https://nodered.${DOMAIN}
|
||||||
|
nodered:
|
||||||
|
image: nodered/node-red:latest
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.50'
|
||||||
|
memory: 256M
|
||||||
|
pids: 512
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 128M
|
||||||
|
container_name: nodered
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- /opt/stacks/nodered/data:/data
|
||||||
|
environment:
|
||||||
|
- TZ=${TZ}
|
||||||
|
labels:
|
||||||
|
- "homelab.category=iot"
|
||||||
|
- "homelab.description=Flow-based automation programming"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.nodered.rule=Host(`nodered.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.nodered.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.nodered.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.nodered.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.nodered.loadbalancer.server.port=1880"
|
||||||
|
|
||||||
|
# Mosquitto - MQTT broker (Home Assistant addon alternative)
|
||||||
|
# Used by: Home Assistant, ESPHome, Tasmota devices
|
||||||
|
mosquitto:
|
||||||
|
image: eclipse-mosquitto:latest
|
||||||
|
container_name: mosquitto
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- homelab-network
|
||||||
|
ports:
|
||||||
|
- "1883:1883" # MQTT
|
||||||
|
- "9001:9001" # Websockets
|
||||||
|
volumes:
|
||||||
|
- ./mosquitto/config:/mosquitto/config
|
||||||
|
- ./mosquitto/data:/mosquitto/data
|
||||||
|
- ./mosquitto/log:/mosquitto/log
|
||||||
|
labels:
|
||||||
|
- "homelab.category=iot"
|
||||||
|
- "homelab.description=MQTT message broker"
|
||||||
|
|
||||||
|
# Zigbee2MQTT - Zigbee to MQTT bridge (DISABLED - requires USB adapter)
|
||||||
|
# Access at: https://zigbee2mqtt.${DOMAIN}
|
||||||
|
# NOTE: Requires USB Zigbee adapter (e.g., ConBee II, Sonoff ZBDongle)
|
||||||
|
# Uncomment after connecting adapter
|
||||||
|
# zigbee2mqtt:
|
||||||
|
# image: koenkk/zigbee2mqtt:1.35.1
|
||||||
|
# container_name: zigbee2mqtt
|
||||||
|
# restart: unless-stopped
|
||||||
|
# networks:
|
||||||
|
# - homelab-network
|
||||||
|
# - traefik-network
|
||||||
|
# volumes:
|
||||||
|
# - ./zigbee2mqtt/data:/app/data
|
||||||
|
# - /run/udev:/run/udev:ro
|
||||||
|
# # Uncomment and adjust device path after connecting USB adapter:
|
||||||
|
# # devices:
|
||||||
|
# # - /dev/ttyACM0:/dev/ttyACM0 # Adjust based on your adapter
|
||||||
|
# # Common paths: /dev/ttyACM0, /dev/ttyUSB0, /dev/serial/by-id/...
|
||||||
|
# # Run 'ls -l /dev/serial/by-id/' to find your adapter
|
||||||
|
# environment:
|
||||||
|
# - TZ=${TZ}
|
||||||
|
# labels:
|
||||||
|
# - "homelab.category=iot"
|
||||||
|
# - "homelab.description=Zigbee to MQTT bridge"
|
||||||
|
# - "traefik.enable=true"
|
||||||
|
# - "traefik.http.routers.zigbee2mqtt.rule=Host(`zigbee2mqtt.${DOMAIN}`)"
|
||||||
|
# - "traefik.http.routers.zigbee2mqtt.entrypoints=websecure"
|
||||||
|
# - "traefik.http.routers.zigbee2mqtt.tls.certresolver=letsencrypt"
|
||||||
|
# - "traefik.http.routers.zigbee2mqtt.middlewares=authelia@docker"
|
||||||
|
# - "traefik.http.services.zigbee2mqtt.loadbalancer.server.port=8080"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
homelab-network:
|
||||||
|
external: true
|
||||||
|
traefik-network:
|
||||||
|
external: true
|
||||||
@@ -49,6 +49,8 @@ services:
|
|||||||
- "traefik.http.routers.dockge.tls=true"
|
- "traefik.http.routers.dockge.tls=true"
|
||||||
- "traefik.http.routers.dockge.middlewares=authelia@docker"
|
- "traefik.http.routers.dockge.middlewares=authelia@docker"
|
||||||
- "traefik.http.services.dockge.loadbalancer.server.port=5001"
|
- "traefik.http.services.dockge.loadbalancer.server.port=5001"
|
||||||
|
- "x-dockge.url=https://dockge.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://dockge.${DOMAIN}"
|
||||||
|
|
||||||
# Pi-hole - Network-wide ad blocker and DNS server
|
# Pi-hole - Network-wide ad blocker and DNS server
|
||||||
# Access at: https://pihole.${DOMAIN}
|
# Access at: https://pihole.${DOMAIN}
|
||||||
|
|||||||
@@ -4,11 +4,28 @@
|
|||||||
# NOTE: Traefik, Authelia, DuckDNS, and Gluetun have their own separate stacks
|
# NOTE: Traefik, Authelia, DuckDNS, and Gluetun have their own separate stacks
|
||||||
# See /opt/stacks/traefik/, /opt/stacks/authelia/, etc.
|
# See /opt/stacks/traefik/, /opt/stacks/authelia/, etc.
|
||||||
|
|
||||||
|
# Service Access URLs:
|
||||||
|
# - Dockge: https://dockge.${DOMAIN}
|
||||||
|
# - Portainer: https://portainer.${DOMAIN}
|
||||||
|
# - Pi-hole: https://pihole.${DOMAIN}
|
||||||
|
# - Dozzle: https://dozzle.${DOMAIN}
|
||||||
|
# - Glances: https://glances.${DOMAIN}
|
||||||
|
# - Netdata: https://netdata.${DOMAIN}
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# Dockge - Docker Compose Stack Manager (PRIMARY - preferred over Portainer)
|
# Dockge - Docker Compose Stack Manager (PRIMARY - preferred over Portainer)
|
||||||
# Access at: https://dockge.${DOMAIN}
|
# Access at: https://dockge.${DOMAIN}
|
||||||
dockge:
|
dockge:
|
||||||
image: louislam/dockge:1
|
image: louislam/dockge:1
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.50'
|
||||||
|
memory: 256M
|
||||||
|
pids: 512
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 128M
|
||||||
container_name: dockge
|
container_name: dockge
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
@@ -22,6 +39,7 @@ services:
|
|||||||
- /opt/dockge/data:/app/data
|
- /opt/dockge/data:/app/data
|
||||||
environment:
|
environment:
|
||||||
- DOCKGE_STACKS_DIR=/opt/stacks
|
- DOCKGE_STACKS_DIR=/opt/stacks
|
||||||
|
- DOCKGE_ENABLE_CONSOLE=true
|
||||||
labels:
|
labels:
|
||||||
- "homelab.category=infrastructure"
|
- "homelab.category=infrastructure"
|
||||||
- "homelab.description=Docker Compose stack manager (PRIMARY)"
|
- "homelab.description=Docker Compose stack manager (PRIMARY)"
|
||||||
@@ -31,11 +49,21 @@ services:
|
|||||||
- "traefik.http.routers.dockge.tls=true"
|
- "traefik.http.routers.dockge.tls=true"
|
||||||
- "traefik.http.routers.dockge.middlewares=authelia@docker"
|
- "traefik.http.routers.dockge.middlewares=authelia@docker"
|
||||||
- "traefik.http.services.dockge.loadbalancer.server.port=5001"
|
- "traefik.http.services.dockge.loadbalancer.server.port=5001"
|
||||||
|
- "x-dockge.url=https://dockge.${DOMAIN}"
|
||||||
|
|
||||||
# Pi-hole - Network-wide ad blocker and DNS server
|
# Pi-hole - Network-wide ad blocker and DNS server
|
||||||
# Access at: https://pihole.${DOMAIN}
|
# Access at: https://pihole.${DOMAIN}
|
||||||
pihole:
|
pihole:
|
||||||
image: pihole/pihole:2024.01.0
|
image: pihole/pihole:2024.01.0
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 128M
|
||||||
|
pids: 256
|
||||||
|
reservations:
|
||||||
|
cpus: '0.10'
|
||||||
|
memory: 64M
|
||||||
container_name: pihole
|
container_name: pihole
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
@@ -45,8 +73,8 @@ services:
|
|||||||
- "53:53/tcp" # DNS TCP
|
- "53:53/tcp" # DNS TCP
|
||||||
- "53:53/udp" # DNS UDP
|
- "53:53/udp" # DNS UDP
|
||||||
volumes:
|
volumes:
|
||||||
- /opt/stacks/pihole/etc-pihole:/etc/pihole
|
- ./pihole/etc-pihole:/etc/pihole
|
||||||
- /opt/stacks/pihole/etc-dnsmasq.d:/etc/dnsmasq.d
|
- ./pihole/etc-dnsmasq.d:/etc/dnsmasq.d
|
||||||
environment:
|
environment:
|
||||||
- TZ=${TZ:-America/New_York}
|
- TZ=${TZ:-America/New_York}
|
||||||
- WEBPASSWORD=${PIHOLE_PASSWORD:-changeme}
|
- WEBPASSWORD=${PIHOLE_PASSWORD:-changeme}
|
||||||
@@ -63,13 +91,24 @@ services:
|
|||||||
- "traefik.http.routers.pihole.rule=Host(`pihole.${DOMAIN}`)"
|
- "traefik.http.routers.pihole.rule=Host(`pihole.${DOMAIN}`)"
|
||||||
- "traefik.http.routers.pihole.entrypoints=websecure"
|
- "traefik.http.routers.pihole.entrypoints=websecure"
|
||||||
- "traefik.http.routers.pihole.tls=true"
|
- "traefik.http.routers.pihole.tls=true"
|
||||||
|
- "traefik.http.routers.pihole.tls.certresolver=letsencrypt"
|
||||||
- "traefik.http.routers.pihole.middlewares=authelia@docker"
|
- "traefik.http.routers.pihole.middlewares=authelia@docker"
|
||||||
- "traefik.http.services.pihole.loadbalancer.server.port=80"
|
- "traefik.http.services.pihole.loadbalancer.server.port=80"
|
||||||
|
- "x-dockge.url=https://pihole.${DOMAIN}"
|
||||||
|
|
||||||
# Watchtower - Automatic container updates
|
# Watchtower - Automatic container updates
|
||||||
# Runs silently in background, no UI
|
# TEMPORARILY DISABLED: Docker API version incompatibility with Docker 29.x
|
||||||
|
# Watchtower versions have API compatibility issues:
|
||||||
|
# - v1.7.1: Uses API v1.25 (too old for Docker 29.x which requires min v1.44)
|
||||||
|
# - v1.7.2+/latest: Has issues with API negotiation
|
||||||
|
# Issue tracked for resolution in future release
|
||||||
|
# To enable: Uncomment service below and run: docker compose up -d watchtower
|
||||||
|
#
|
||||||
|
# Watchtower - Automatic container updates
|
||||||
|
# Monitors and updates Docker containers to latest versions
|
||||||
|
# Runs daily at 4 AM
|
||||||
watchtower:
|
watchtower:
|
||||||
image: containrrr/watchtower:1.7.1
|
image: containrrr/watchtower:latest
|
||||||
container_name: watchtower
|
container_name: watchtower
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
@@ -77,12 +116,12 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
environment:
|
environment:
|
||||||
|
- DOCKER_API_VERSION=1.52
|
||||||
- WATCHTOWER_CLEANUP=true
|
- WATCHTOWER_CLEANUP=true
|
||||||
- WATCHTOWER_INCLUDE_RESTARTING=true
|
- WATCHTOWER_INCLUDE_RESTARTING=true
|
||||||
- WATCHTOWER_SCHEDULE=0 0 4 * * * # 4 AM daily
|
- WATCHTOWER_SCHEDULE=0 0 4 * * * # 4 AM daily
|
||||||
- WATCHTOWER_NOTIFICATIONS=shoutrrr
|
- WATCHTOWER_NOTIFICATIONS=shoutrrr
|
||||||
- WATCHTOWER_NOTIFICATION_URL=${WATCHTOWER_NOTIFICATION_URL}
|
- WATCHTOWER_NOTIFICATION_URL=${WATCHTOWER_NOTIFICATION_URL:-}
|
||||||
- DOCKER_API_VERSION=1.44
|
|
||||||
labels:
|
labels:
|
||||||
- "homelab.category=infrastructure"
|
- "homelab.category=infrastructure"
|
||||||
- "homelab.description=Automatic Docker container updates"
|
- "homelab.description=Automatic Docker container updates"
|
||||||
@@ -91,6 +130,15 @@ services:
|
|||||||
# Access at: https://dozzle.${DOMAIN}
|
# Access at: https://dozzle.${DOMAIN}
|
||||||
dozzle:
|
dozzle:
|
||||||
image: amir20/dozzle:latest
|
image: amir20/dozzle:latest
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.50'
|
||||||
|
memory: 256M
|
||||||
|
pids: 512
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 128M
|
||||||
container_name: dozzle
|
container_name: dozzle
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
@@ -138,6 +186,15 @@ services:
|
|||||||
# Access at: https://glances.${DOMAIN}
|
# Access at: https://glances.${DOMAIN}
|
||||||
glances:
|
glances:
|
||||||
image: nicolargo/glances:latest-full
|
image: nicolargo/glances:latest-full
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.50'
|
||||||
|
memory: 256M
|
||||||
|
pids: 512
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 128M
|
||||||
container_name: glances
|
container_name: glances
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
@@ -146,7 +203,7 @@ services:
|
|||||||
pid: host
|
pid: host
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
- /opt/stacks/glances/config:/glances/conf
|
- ./glances/config:/glances/conf
|
||||||
environment:
|
environment:
|
||||||
- GLANCES_OPT=-w
|
- GLANCES_OPT=-w
|
||||||
labels:
|
labels:
|
||||||
@@ -159,10 +216,48 @@ services:
|
|||||||
- "traefik.http.routers.glances.middlewares=authelia@docker"
|
- "traefik.http.routers.glances.middlewares=authelia@docker"
|
||||||
- "traefik.http.services.glances.loadbalancer.server.port=61208"
|
- "traefik.http.services.glances.loadbalancer.server.port=61208"
|
||||||
|
|
||||||
|
# Code Server - VS Code in browser
|
||||||
|
# Access at: https://code.${DOMAIN}
|
||||||
|
code-server:
|
||||||
|
image: lscr.io/linuxserver/code-server:latest
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '1.5'
|
||||||
|
memory: 1G
|
||||||
|
pids: 2048
|
||||||
|
reservations:
|
||||||
|
cpus: '0.75'
|
||||||
|
memory: 512M
|
||||||
|
container_name: code-server
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./code-server/config:/config
|
||||||
|
- /opt/stacks:/opt/stacks # Access to all stacks
|
||||||
|
- /mnt:/mnt:ro # Read-only access to data
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ}
|
||||||
|
- PASSWORD=${CODE_SERVER_PASSWORD}
|
||||||
|
- SUDO_PASSWORD=${CODE_SERVER_SUDO_PASSWORD}
|
||||||
|
labels:
|
||||||
|
- "homelab.category=infrastructure"
|
||||||
|
- "homelab.description=VS Code in browser"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.code-server.rule=Host(`code.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.code-server.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.code-server.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.code-server.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.code-server.loadbalancer.server.port=8443"
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
traefik-network:
|
|
||||||
external: true
|
|
||||||
homelab-network:
|
homelab-network:
|
||||||
external: true
|
external: true
|
||||||
|
traefik-network:
|
||||||
|
external: true
|
||||||
dockerproxy-network:
|
dockerproxy-network:
|
||||||
external: true
|
external: true
|
||||||
|
|||||||
@@ -230,6 +230,8 @@ services:
|
|||||||
- traefik.http.routers.jellyseerr.tls.certresolver=letsencrypt
|
- traefik.http.routers.jellyseerr.tls.certresolver=letsencrypt
|
||||||
- traefik.http.routers.jellyseerr.middlewares=authelia@docker
|
- traefik.http.routers.jellyseerr.middlewares=authelia@docker
|
||||||
- traefik.http.services.jellyseerr.loadbalancer.server.port=5055
|
- traefik.http.services.jellyseerr.loadbalancer.server.port=5055
|
||||||
|
- "x-dockge.url=https://jellyseerr.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://jellyseerr.${DOMAIN}"
|
||||||
# FlareSolverr - Cloudflare bypass for Prowlarr
|
# FlareSolverr - Cloudflare bypass for Prowlarr
|
||||||
# No web UI - used by Prowlarr
|
# No web UI - used by Prowlarr
|
||||||
flaresolverr:
|
flaresolverr:
|
||||||
|
|||||||
341
docker-compose/media-management/docker-compose.yml
Normal file
341
docker-compose/media-management/docker-compose.yml
Normal file
@@ -0,0 +1,341 @@
|
|||||||
|
# Media Management Services
|
||||||
|
# Content automation and library management (*arr apps, transcoders, etc.)
|
||||||
|
# Place in /opt/stacks/media-management/docker-compose.yml
|
||||||
|
|
||||||
|
# Service Access URLs:
|
||||||
|
# - Sonarr: https://sonarr.${DOMAIN}
|
||||||
|
# - Radarr: https://radarr.${DOMAIN}
|
||||||
|
# - Prowlarr: https://prowlarr.${DOMAIN}
|
||||||
|
# - Readarr: https://readarr.${DOMAIN}
|
||||||
|
# - Lidarr: https://lidarr.${DOMAIN}
|
||||||
|
# - LazyLibrarian: https://lazylibrarian.${DOMAIN}
|
||||||
|
# - Mylar3: https://mylar.${DOMAIN}
|
||||||
|
# - Jellyseerr: https://jellyseerr.${DOMAIN}
|
||||||
|
# - Tdarr: https://tdarr.${DOMAIN}
|
||||||
|
# - Unmanic: https://unmanic.${DOMAIN}
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Sonarr - TV show automation
|
||||||
|
# Access at: https://sonarr.yourdomain.duckdns.org
|
||||||
|
sonarr:
|
||||||
|
image: linuxserver/sonarr:4.0.0
|
||||||
|
container_name: sonarr
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./sonarr/config:/config
|
||||||
|
- /mnt/media:/media
|
||||||
|
- /mnt/downloads:/downloads # Large downloads on separate drive
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ:-America/New_York}
|
||||||
|
labels:
|
||||||
|
- homelab.category=media
|
||||||
|
- homelab.description=TV show management and automation
|
||||||
|
# Traefik labels with Authelia
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.sonarr.rule=Host(`sonarr.${DOMAIN}`)
|
||||||
|
- traefik.http.routers.sonarr.entrypoints=websecure
|
||||||
|
- traefik.http.routers.sonarr.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.sonarr.middlewares=authelia@docker
|
||||||
|
- traefik.http.services.sonarr.loadbalancer.server.port=8989
|
||||||
|
# Radarr - Movie automation
|
||||||
|
# Access at: https://radarr.yourdomain.duckdns.org
|
||||||
|
radarr:
|
||||||
|
image: linuxserver/radarr:5.2.6
|
||||||
|
container_name: radarr
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./radarr/config:/config
|
||||||
|
- /mnt/media:/media
|
||||||
|
- /mnt/downloads:/downloads # Large downloads on separate drive
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ:-America/New_York}
|
||||||
|
labels:
|
||||||
|
- homelab.category=media
|
||||||
|
- homelab.description=Movie management and automation
|
||||||
|
# Traefik labels with Authelia
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.radarr.rule=Host(`radarr.${DOMAIN}`)
|
||||||
|
- traefik.http.routers.radarr.entrypoints=websecure
|
||||||
|
- traefik.http.routers.radarr.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.radarr.middlewares=authelia@docker
|
||||||
|
- traefik.http.services.radarr.loadbalancer.server.port=7878
|
||||||
|
# Prowlarr - Indexer manager
|
||||||
|
# Access at: https://prowlarr.yourdomain.duckdns.org
|
||||||
|
prowlarr:
|
||||||
|
image: linuxserver/prowlarr:1.11.4
|
||||||
|
container_name: prowlarr
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./prowlarr/config:/config
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ:-America/New_York}
|
||||||
|
labels:
|
||||||
|
- homelab.category=media
|
||||||
|
- homelab.description=Indexer manager for Sonarr/Radarr
|
||||||
|
# Traefik labels with Authelia
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.prowlarr.rule=Host(`prowlarr.${DOMAIN}`)
|
||||||
|
- traefik.http.routers.prowlarr.entrypoints=websecure
|
||||||
|
- traefik.http.routers.prowlarr.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.prowlarr.middlewares=authelia@docker
|
||||||
|
- traefik.http.services.prowlarr.loadbalancer.server.port=9696
|
||||||
|
# Readarr - Ebook and audiobook management
|
||||||
|
# Access at: https://readarr.${DOMAIN}
|
||||||
|
readarr:
|
||||||
|
image: linuxserver/readarr:0.4.19-nightly
|
||||||
|
container_name: readarr
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./readarr/config:/config
|
||||||
|
- /mnt/media/books:/books
|
||||||
|
- /mnt/downloads:/downloads
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ}
|
||||||
|
labels:
|
||||||
|
- homelab.category=media
|
||||||
|
- homelab.description=Ebook and audiobook management
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.readarr.rule=Host(`readarr.${DOMAIN}`)
|
||||||
|
- traefik.http.routers.readarr.entrypoints=websecure
|
||||||
|
- traefik.http.routers.readarr.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.readarr.middlewares=authelia@docker
|
||||||
|
- traefik.http.services.readarr.loadbalancer.server.port=8787
|
||||||
|
# Lidarr - Music collection manager
|
||||||
|
# Access at: https://lidarr.${DOMAIN}
|
||||||
|
lidarr:
|
||||||
|
image: linuxserver/lidarr:2.0.7
|
||||||
|
container_name: lidarr
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./lidarr/config:/config
|
||||||
|
- /mnt/media/music:/music
|
||||||
|
- /mnt/downloads:/downloads
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ}
|
||||||
|
labels:
|
||||||
|
- homelab.category=media
|
||||||
|
- homelab.description=Music collection manager
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.lidarr.rule=Host(`lidarr.${DOMAIN}`)
|
||||||
|
- traefik.http.routers.lidarr.entrypoints=websecure
|
||||||
|
- traefik.http.routers.lidarr.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.lidarr.middlewares=authelia@docker
|
||||||
|
- traefik.http.services.lidarr.loadbalancer.server.port=8686
|
||||||
|
# Lazy Librarian - Book manager
|
||||||
|
# Access at: https://lazylibrarian.${DOMAIN}
|
||||||
|
lazylibrarian:
|
||||||
|
image: linuxserver/lazylibrarian:latest
|
||||||
|
container_name: lazylibrarian
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./lazylibrarian/config:/config
|
||||||
|
- /mnt/media/books:/books
|
||||||
|
- /mnt/downloads:/downloads
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ}
|
||||||
|
- DOCKER_MODS=linuxserver/mods:lazylibrarian-ffmpeg
|
||||||
|
labels:
|
||||||
|
- homelab.category=media
|
||||||
|
- homelab.description=Book download automation
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.lazylibrarian.rule=Host(`lazylibrarian.${DOMAIN}`)
|
||||||
|
- traefik.http.routers.lazylibrarian.entrypoints=websecure
|
||||||
|
- traefik.http.routers.lazylibrarian.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.lazylibrarian.middlewares=authelia@docker
|
||||||
|
- traefik.http.services.lazylibrarian.loadbalancer.server.port=5299
|
||||||
|
# Mylar3 - Comic book manager
|
||||||
|
# Access at: https://mylar.${DOMAIN}
|
||||||
|
mylar3:
|
||||||
|
image: linuxserver/mylar3:latest
|
||||||
|
container_name: mylar3
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./mylar3/config:/config
|
||||||
|
- /mnt/media/comics:/comics
|
||||||
|
- /mnt/downloads:/downloads
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ}
|
||||||
|
labels:
|
||||||
|
- homelab.category=media
|
||||||
|
- homelab.description=Comic book collection manager
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.mylar.rule=Host(`mylar.${DOMAIN}`)
|
||||||
|
- traefik.http.routers.mylar.entrypoints=websecure
|
||||||
|
- traefik.http.routers.mylar.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.mylar.middlewares=authelia@docker
|
||||||
|
- traefik.http.services.mylar.loadbalancer.server.port=8090
|
||||||
|
# Jellyseerr - Request management for Jellyfin/Plex
|
||||||
|
# Access at: https://jellyseerr.${DOMAIN}
|
||||||
|
jellyseerr:
|
||||||
|
image: fallenbagel/jellyseerr:latest
|
||||||
|
container_name: jellyseerr
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./jellyseerr/config:/app/config
|
||||||
|
environment:
|
||||||
|
- LOG_LEVEL=info
|
||||||
|
- TZ=${TZ}
|
||||||
|
labels:
|
||||||
|
- homelab.category=media
|
||||||
|
- homelab.description=Media request management
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.jellyseerr.rule=Host(`jellyseerr.${DOMAIN}`)
|
||||||
|
- traefik.http.routers.jellyseerr.entrypoints=websecure
|
||||||
|
- traefik.http.routers.jellyseerr.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.jellyseerr.middlewares=authelia@docker
|
||||||
|
- traefik.http.services.jellyseerr.loadbalancer.server.port=5055
|
||||||
|
- "x-dockge.url=https://jellyseerr.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://jellyseerr.${DOMAIN}"
|
||||||
|
# FlareSolverr - Cloudflare bypass for Prowlarr
|
||||||
|
# No web UI - used by Prowlarr
|
||||||
|
flaresolverr:
|
||||||
|
image: flaresolverr/flaresolverr:latest
|
||||||
|
container_name: flaresolverr
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
environment:
|
||||||
|
- LOG_LEVEL=info
|
||||||
|
- TZ=${TZ}
|
||||||
|
labels:
|
||||||
|
- homelab.category=media
|
||||||
|
- homelab.description=Cloudflare bypass for indexers
|
||||||
|
# Tdarr Server - Distributed transcoding server
|
||||||
|
# Access at: https://tdarr.${DOMAIN}
|
||||||
|
tdarr-server:
|
||||||
|
image: ghcr.io/haveagitgat/tdarr:latest
|
||||||
|
container_name: tdarr-server
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
ports:
|
||||||
|
- 8266:8266 # Server port
|
||||||
|
volumes:
|
||||||
|
- ./tdarr/server:/app/server
|
||||||
|
- ./tdarr/configs:/app/configs
|
||||||
|
- ./tdarr/logs:/app/logs
|
||||||
|
- /mnt/media:/media
|
||||||
|
- /mnt/tdarr-transcode:/temp # Transcode cache on separate drive
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ}
|
||||||
|
- serverIP=0.0.0.0
|
||||||
|
- serverPort=8266
|
||||||
|
- webUIPort=8265
|
||||||
|
labels:
|
||||||
|
- homelab.category=media
|
||||||
|
- homelab.description=Distributed transcoding server
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.tdarr.rule=Host(`tdarr.${DOMAIN}`)
|
||||||
|
- traefik.http.routers.tdarr.entrypoints=websecure
|
||||||
|
- traefik.http.routers.tdarr.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.tdarr.middlewares=authelia@docker
|
||||||
|
- traefik.http.services.tdarr.loadbalancer.server.port=8265
|
||||||
|
# Tdarr Node - Transcoding worker
|
||||||
|
# No web UI - controlled by server
|
||||||
|
tdarr-node:
|
||||||
|
image: ghcr.io/haveagitgat/tdarr_node:latest
|
||||||
|
container_name: tdarr-node
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
volumes:
|
||||||
|
- ./tdarr/configs:/app/configs
|
||||||
|
- ./tdarr/logs:/app/logs
|
||||||
|
- /mnt/media:/media
|
||||||
|
- /mnt/tdarr-transcode:/temp
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ}
|
||||||
|
- nodeID=MainNode
|
||||||
|
- nodeIP=0.0.0.0
|
||||||
|
- nodePort=8267
|
||||||
|
- serverIP=tdarr-server
|
||||||
|
- serverPort=8266
|
||||||
|
labels:
|
||||||
|
- homelab.category=media
|
||||||
|
- homelab.description=Tdarr transcoding worker node
|
||||||
|
# Unmanic - Another transcoding option
|
||||||
|
# Access at: https://unmanic.${DOMAIN}
|
||||||
|
unmanic:
|
||||||
|
image: josh5/unmanic:latest
|
||||||
|
container_name: unmanic
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./unmanic/config:/config
|
||||||
|
- /mnt/media:/library
|
||||||
|
- /mnt/unmanic-cache:/tmp/unmanic # Transcode cache on separate drive
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ}
|
||||||
|
labels:
|
||||||
|
- homelab.category=media
|
||||||
|
- homelab.description=Library optimization and transcoding
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.unmanic.rule=Host(`unmanic.${DOMAIN}`)
|
||||||
|
- traefik.http.routers.unmanic.entrypoints=websecure
|
||||||
|
- traefik.http.routers.unmanic.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.unmanic.middlewares=authelia@docker
|
||||||
|
- traefik.http.services.unmanic.loadbalancer.server.port=8888
|
||||||
|
networks:
|
||||||
|
media-network:
|
||||||
|
external: true
|
||||||
|
homelab-network:
|
||||||
|
external: true
|
||||||
|
traefik-network:
|
||||||
|
external: true
|
||||||
@@ -41,6 +41,8 @@ services:
|
|||||||
- "traefik.http.routers.jellyfin.tls=true"
|
- "traefik.http.routers.jellyfin.tls=true"
|
||||||
- "traefik.http.routers.jellyfin.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.jellyfin.tls.certresolver=letsencrypt"
|
||||||
- "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
|
- "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
|
||||||
|
- "x-dockge.url=https://jellyfin.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://jellyfin.${DOMAIN}"
|
||||||
|
|
||||||
# Calibre-Web - Ebook reader and server
|
# Calibre-Web - Ebook reader and server
|
||||||
# Access at: https://calibre.${DOMAIN}
|
# Access at: https://calibre.${DOMAIN}
|
||||||
|
|||||||
99
docker-compose/media/docker-compose.yml
Normal file
99
docker-compose/media/docker-compose.yml
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
# Media Services
|
||||||
|
# Default Services for media management and streaming
|
||||||
|
# Place in /opt/stacks/media/docker-compose.yml
|
||||||
|
|
||||||
|
|
||||||
|
# Service Access URLs:
|
||||||
|
# - Jellyfin: https://jellyfin.${DOMAIN} (no SSO - app access)
|
||||||
|
# - Plex: https://plex.${DOMAIN} (no SSO - app access)
|
||||||
|
# - qBittorrent: https://qbit.${DOMAIN} (routed through Gluetun VPN)
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Jellyfin - Open-source media streaming server
|
||||||
|
# Access at: https://jellyfin.yourdomain.duckdns.org
|
||||||
|
# NOTE: No Authelia - allows app access from Roku, Fire TV, mobile, etc.
|
||||||
|
jellyfin:
|
||||||
|
image: jellyfin/jellyfin:10.8.13
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '2.0'
|
||||||
|
memory: 2G
|
||||||
|
pids: 2048
|
||||||
|
reservations:
|
||||||
|
cpus: '1.0'
|
||||||
|
memory: 1G
|
||||||
|
container_name: jellyfin
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./jellyfin/config:/config
|
||||||
|
- ./jellyfin/cache:/cache
|
||||||
|
- /mnt/media:/media:ro # Large media files on separate drive
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ:-America/New_York}
|
||||||
|
# Uncomment for hardware transcoding
|
||||||
|
# devices:
|
||||||
|
# - /dev/dri:/dev/dri
|
||||||
|
labels:
|
||||||
|
- "homelab.category=media"
|
||||||
|
- "homelab.description=Open-source media streaming server"
|
||||||
|
# Traefik labels - NO Authelia for app access
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.jellyfin.rule=Host(`jellyfin.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.jellyfin.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.jellyfin.tls=true"
|
||||||
|
- "traefik.http.routers.jellyfin.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
|
||||||
|
- "x-dockge.url=https://jellyfin.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://jellyfin.${DOMAIN}"
|
||||||
|
|
||||||
|
# Calibre-Web - Ebook reader and server
|
||||||
|
# Access at: https://calibre.${DOMAIN}
|
||||||
|
calibre-web:
|
||||||
|
image: lscr.io/linuxserver/calibre-web:latest
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.50'
|
||||||
|
memory: 256M
|
||||||
|
pids: 512
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 128M
|
||||||
|
container_name: calibre-web
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- media-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- ./calibre-web/config:/config
|
||||||
|
- /mnt/media/books:/books
|
||||||
|
environment:
|
||||||
|
- PUID=${PUID:-1000}
|
||||||
|
- PGID=${PGID:-1000}
|
||||||
|
- TZ=${TZ:-America/New_York}
|
||||||
|
- DOCKER_MODS=linuxserver/mods:universal-calibre
|
||||||
|
labels:
|
||||||
|
- "homelab.category=media"
|
||||||
|
- "homelab.description=Ebook reader and library management"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.calibre.rule=Host(`calibre.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.calibre.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.calibre.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.calibre.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.calibre.loadbalancer.server.port=8083"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
media-network:
|
||||||
|
driver: bridge
|
||||||
|
homelab-network:
|
||||||
|
external: true
|
||||||
|
traefik-network:
|
||||||
|
external: true
|
||||||
@@ -153,6 +153,8 @@ services:
|
|||||||
- "traefik.http.routers.cadvisor.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.cadvisor.tls.certresolver=letsencrypt"
|
||||||
- "traefik.http.routers.cadvisor.middlewares=authelia@docker"
|
- "traefik.http.routers.cadvisor.middlewares=authelia@docker"
|
||||||
- "traefik.http.services.cadvisor.loadbalancer.server.port=8080"
|
- "traefik.http.services.cadvisor.loadbalancer.server.port=8080"
|
||||||
|
- "x-dockge.url=https://cadvisor.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://cadvisor.${DOMAIN}"
|
||||||
|
|
||||||
# Uptime Kuma - Uptime monitoring
|
# Uptime Kuma - Uptime monitoring
|
||||||
# Access at: https://uptime-kuma.${DOMAIN}
|
# Access at: https://uptime-kuma.${DOMAIN}
|
||||||
|
|||||||
35
docker-compose/monitoring/config/loki/loki-config.yml
Normal file
35
docker-compose/monitoring/config/loki/loki-config.yml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
server:
|
||||||
|
http_listen_port: 3100
|
||||||
|
grpc_listen_port: 9096
|
||||||
|
|
||||||
|
common:
|
||||||
|
path_prefix: /loki
|
||||||
|
storage:
|
||||||
|
filesystem:
|
||||||
|
chunks_directory: /loki/chunks
|
||||||
|
rules_directory: /loki/rules
|
||||||
|
replication_factor: 1
|
||||||
|
ring:
|
||||||
|
instance_addr: 127.0.0.1
|
||||||
|
kvstore:
|
||||||
|
store: inmemory
|
||||||
|
|
||||||
|
query_range:
|
||||||
|
results_cache:
|
||||||
|
cache:
|
||||||
|
embedded_cache:
|
||||||
|
enabled: true
|
||||||
|
max_size_mb: 100
|
||||||
|
|
||||||
|
schema_config:
|
||||||
|
configs:
|
||||||
|
- from: 2020-10-24
|
||||||
|
store: tsdb
|
||||||
|
object_store: filesystem
|
||||||
|
schema: v13
|
||||||
|
index:
|
||||||
|
prefix: index_
|
||||||
|
period: 24h
|
||||||
|
|
||||||
|
ruler:
|
||||||
|
alertmanager_url: http://localhost:9093
|
||||||
16
docker-compose/monitoring/config/prometheus/prometheus.yml
Normal file
16
docker-compose/monitoring/config/prometheus/prometheus.yml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
global:
|
||||||
|
scrape_interval: 15s
|
||||||
|
evaluation_interval: 15s
|
||||||
|
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: 'prometheus'
|
||||||
|
static_configs:
|
||||||
|
- targets: ['localhost:9090']
|
||||||
|
|
||||||
|
- job_name: 'node-exporter'
|
||||||
|
static_configs:
|
||||||
|
- targets: ['node-exporter:9100']
|
||||||
|
|
||||||
|
- job_name: 'cadvisor'
|
||||||
|
static_configs:
|
||||||
|
- targets: ['cadvisor:8080']
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
server:
|
||||||
|
http_listen_port: 9080
|
||||||
|
grpc_listen_port: 0
|
||||||
|
|
||||||
|
positions:
|
||||||
|
filename: /tmp/positions.yaml
|
||||||
|
|
||||||
|
clients:
|
||||||
|
- url: http://loki:3100/loki/api/v1/push
|
||||||
|
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: system
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
- localhost
|
||||||
|
labels:
|
||||||
|
job: varlogs
|
||||||
|
__path__: /var/log/*log
|
||||||
263
docker-compose/monitoring/docker-compose.yml
Normal file
263
docker-compose/monitoring/docker-compose.yml
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
# Monitoring and Observability Services
|
||||||
|
# Services for monitoring your homelab infrastructure
|
||||||
|
# Place in /opt/stacks/monitoring/docker-compose.yml
|
||||||
|
|
||||||
|
# Service Access URLs:
|
||||||
|
# - Prometheus: http://server-ip:9090 (or configure Traefik)
|
||||||
|
# - Grafana: http://server-ip:3000 (or configure Traefik)
|
||||||
|
# - Uptime Kuma: https://status.${DOMAIN}
|
||||||
|
# - Node Exporter: http://server-ip:9100/metrics
|
||||||
|
# - cAdvisor: http://server-ip:8082
|
||||||
|
# - Loki: http://server-ip:3100
|
||||||
|
# NOTE: Prometheus, Grafana, Loki use ports because they need to be accessible to other services
|
||||||
|
# Add Traefik labels if you want https://prometheus.${DOMAIN} access
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Prometheus - Metrics collection and storage
|
||||||
|
# Access at: http://server-ip:9090
|
||||||
|
prometheus:
|
||||||
|
image: prom/prometheus:v2.48.1
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.75'
|
||||||
|
memory: 512M
|
||||||
|
pids: 1024
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 256M
|
||||||
|
container_name: prometheus
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- monitoring-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
ports:
|
||||||
|
- "9090:9090"
|
||||||
|
volumes:
|
||||||
|
- ./config/prometheus:/etc/prometheus
|
||||||
|
- prometheus-data:/prometheus
|
||||||
|
command:
|
||||||
|
- '--config.file=/etc/prometheus/prometheus.yml'
|
||||||
|
- '--storage.tsdb.path=/prometheus'
|
||||||
|
- '--storage.tsdb.retention.time=30d'
|
||||||
|
- '--web.console.libraries=/etc/prometheus/console_libraries'
|
||||||
|
- '--web.console.templates=/etc/prometheus/consoles'
|
||||||
|
- '--web.enable-lifecycle'
|
||||||
|
labels:
|
||||||
|
- "homelab.category=monitoring"
|
||||||
|
- "homelab.description=Metrics collection and time-series database"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.prometheus.rule=Host(`prometheus.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.prometheus.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.prometheus.tls=true"
|
||||||
|
- "traefik.http.routers.prometheus.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.prometheus.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.prometheus.loadbalancer.server.port=9090"
|
||||||
|
|
||||||
|
# Grafana - Metrics visualization
|
||||||
|
# Access at: http://server-ip:3000
|
||||||
|
# Default credentials: admin / admin (change on first login)
|
||||||
|
grafana:
|
||||||
|
image: grafana/grafana:10.2.3
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.50'
|
||||||
|
memory: 256M
|
||||||
|
pids: 512
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 128M
|
||||||
|
container_name: grafana
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- monitoring-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
volumes:
|
||||||
|
- grafana-data:/var/lib/grafana
|
||||||
|
- ./config/grafana/provisioning:/etc/grafana/provisioning
|
||||||
|
environment:
|
||||||
|
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD:-admin}
|
||||||
|
- GF_USERS_ALLOW_SIGN_UP=false
|
||||||
|
- GF_SERVER_ROOT_URL=https://grafana.${DOMAIN}
|
||||||
|
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-piechart-panel
|
||||||
|
user: "${PUID:-1000}:${PGID:-1000}"
|
||||||
|
depends_on:
|
||||||
|
- prometheus
|
||||||
|
labels:
|
||||||
|
- "homelab.category=monitoring"
|
||||||
|
- "homelab.description=Metrics visualization and dashboards"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.grafana.rule=Host(`grafana.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.grafana.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.grafana.tls=true"
|
||||||
|
- "traefik.http.routers.grafana.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.grafana.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.grafana.loadbalancer.server.port=3000"
|
||||||
|
|
||||||
|
# Node Exporter - Host metrics exporter
|
||||||
|
# Metrics at: http://server-ip:9100/metrics
|
||||||
|
node-exporter:
|
||||||
|
image: prom/node-exporter:v1.7.0
|
||||||
|
container_name: node-exporter
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- monitoring-network
|
||||||
|
ports:
|
||||||
|
- "9100:9100"
|
||||||
|
volumes:
|
||||||
|
- /proc:/host/proc:ro
|
||||||
|
- /sys:/host/sys:ro
|
||||||
|
- /:/rootfs:ro
|
||||||
|
command:
|
||||||
|
- '--path.procfs=/host/proc'
|
||||||
|
- '--path.rootfs=/rootfs'
|
||||||
|
- '--path.sysfs=/host/sys'
|
||||||
|
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
|
||||||
|
labels:
|
||||||
|
- "homelab.category=monitoring"
|
||||||
|
- "homelab.description=Hardware and OS metrics exporter"
|
||||||
|
|
||||||
|
# cAdvisor - Container metrics exporter
|
||||||
|
# Access at: http://server-ip:8082
|
||||||
|
cadvisor:
|
||||||
|
image: gcr.io/cadvisor/cadvisor:v0.47.2
|
||||||
|
container_name: cadvisor
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- monitoring-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
ports:
|
||||||
|
- "8082:8080"
|
||||||
|
volumes:
|
||||||
|
- /:/rootfs:ro
|
||||||
|
- /var/run:/var/run:ro
|
||||||
|
- /sys:/sys:ro
|
||||||
|
- /var/lib/docker:/var/lib/docker:ro
|
||||||
|
- /dev/disk:/dev/disk:ro
|
||||||
|
privileged: true
|
||||||
|
devices:
|
||||||
|
- /dev/kmsg
|
||||||
|
labels:
|
||||||
|
- "homelab.category=monitoring"
|
||||||
|
- "homelab.description=Container metrics and performance monitoring"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.cadvisor.rule=Host(`cadvisor.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.cadvisor.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.cadvisor.tls=true"
|
||||||
|
- "traefik.http.routers.cadvisor.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.cadvisor.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.cadvisor.loadbalancer.server.port=8080"
|
||||||
|
- "x-dockge.url=https://cadvisor.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://cadvisor.${DOMAIN}"
|
||||||
|
|
||||||
|
# Uptime Kuma - Uptime monitoring
|
||||||
|
# Access at: https://uptime-kuma.${DOMAIN}
|
||||||
|
uptime-kuma:
|
||||||
|
image: louislam/uptime-kuma:1
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.50'
|
||||||
|
memory: 256M
|
||||||
|
pids: 512
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 128M
|
||||||
|
container_name: uptime-kuma
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- monitoring-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
volumes:
|
||||||
|
- uptime-kuma-data:/app/data
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
labels:
|
||||||
|
- "homelab.category=monitoring"
|
||||||
|
- "homelab.description=Service uptime monitoring and alerts"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.uptime-kuma.rule=Host(`uptime-kuma.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.uptime-kuma.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.uptime-kuma.tls=true"
|
||||||
|
- "traefik.http.routers.uptime-kuma.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.uptime-kuma.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.uptime-kuma.loadbalancer.server.port=3001"
|
||||||
|
|
||||||
|
# Loki - Log aggregation
|
||||||
|
# Access at: http://server-ip:3100
|
||||||
|
loki:
|
||||||
|
image: grafana/loki:2.9.3
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.75'
|
||||||
|
memory: 512M
|
||||||
|
pids: 1024
|
||||||
|
reservations:
|
||||||
|
cpus: '0.25'
|
||||||
|
memory: 256M
|
||||||
|
container_name: loki
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- monitoring-network
|
||||||
|
- homelab-network
|
||||||
|
- traefik-network
|
||||||
|
ports:
|
||||||
|
- "3100:3100"
|
||||||
|
volumes:
|
||||||
|
- ./config/loki:/etc/loki
|
||||||
|
- loki-data:/loki
|
||||||
|
command: -config.file=/etc/loki/loki-config.yml
|
||||||
|
labels:
|
||||||
|
- "homelab.category=monitoring"
|
||||||
|
- "homelab.description=Log aggregation system"
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.loki.rule=Host(`loki.${DOMAIN}`)"
|
||||||
|
- "traefik.http.routers.loki.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.loki.tls=true"
|
||||||
|
- "traefik.http.routers.loki.tls.certresolver=letsencrypt"
|
||||||
|
- "traefik.http.routers.loki.middlewares=authelia@docker"
|
||||||
|
- "traefik.http.services.loki.loadbalancer.server.port=3100"
|
||||||
|
|
||||||
|
# Promtail - Log shipper for Loki
|
||||||
|
# Ships Docker container logs to Loki
|
||||||
|
promtail:
|
||||||
|
image: grafana/promtail:2.9.3
|
||||||
|
container_name: promtail
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- monitoring-network
|
||||||
|
volumes:
|
||||||
|
- ./config/promtail:/etc/promtail
|
||||||
|
- /var/log:/var/log:ro
|
||||||
|
- /var/lib/docker/containers:/var/lib/docker/containers:ro
|
||||||
|
command: -config.file=/etc/promtail/promtail-config.yml
|
||||||
|
depends_on:
|
||||||
|
- loki
|
||||||
|
labels:
|
||||||
|
- "homelab.category=monitoring"
|
||||||
|
- "homelab.description=Log collector for Loki"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
prometheus-data:
|
||||||
|
driver: local
|
||||||
|
grafana-data:
|
||||||
|
driver: local
|
||||||
|
uptime-kuma-data:
|
||||||
|
driver: local
|
||||||
|
loki-data:
|
||||||
|
driver: local
|
||||||
|
|
||||||
|
networks:
|
||||||
|
monitoring-network:
|
||||||
|
driver: bridge
|
||||||
|
homelab-network:
|
||||||
|
external: true
|
||||||
|
traefik-network:
|
||||||
|
external: true
|
||||||
43
docker-compose/nextcloud/html/apps/photos/vendor/hexogen/kdtree/.github/workflows/tests.yml
vendored
Normal file
43
docker-compose/nextcloud/html/apps/photos/vendor/hexogen/kdtree/.github/workflows/tests.yml
vendored
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
name: Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
name: PHP ${{ matrix.php }}
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
php: ['7.4', '8.0', '8.1', '8.2', '8.3']
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 10
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
tools: composer:v2
|
||||||
|
coverage: none
|
||||||
|
|
||||||
|
- name: Setup Problem Matchers
|
||||||
|
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
|
||||||
|
|
||||||
|
- name: Install PHP Dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
command: composer update --no-interaction --no-progress
|
||||||
|
|
||||||
|
- name: Execute PHPcs
|
||||||
|
run: vendor/bin/phpcs --standard=psr2 src/
|
||||||
|
|
||||||
|
- name: Execute PHPUnit
|
||||||
|
run: vendor/bin/phpunit
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
name: Continuous Integration
|
||||||
|
|
||||||
|
on:
|
||||||
|
- push
|
||||||
|
- pull_request
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.1'
|
||||||
|
style-fix: 'none'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.2'
|
||||||
|
style-fix: 'none'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.3'
|
||||||
|
style-fix: 'none'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
|
||||||
|
- operating-system: 'windows-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
job-description: 'on Windows'
|
||||||
|
|
||||||
|
- operating-system: 'macos-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
job-description: 'on macOS'
|
||||||
|
|
||||||
|
name: PHP ${{ matrix.php-version }} ${{ matrix.job-description }}
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Set git to use LF
|
||||||
|
run: |
|
||||||
|
git config --global core.autocrlf false
|
||||||
|
git config --global core.eol lf
|
||||||
|
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-version }}
|
||||||
|
extensions: parallel
|
||||||
|
|
||||||
|
- name: Get Composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-dir)"
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
|
||||||
|
restore-keys: |
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-
|
||||||
|
composer-${{ runner.os }}-
|
||||||
|
composer-
|
||||||
|
|
||||||
|
- name: Remove php-cs-fixer if not needed
|
||||||
|
run: composer remove --dev --no-update amphp/php-cs-fixer-config
|
||||||
|
if: matrix.style-fix == 'none'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
retry_wait_seconds: 30
|
||||||
|
command: |
|
||||||
|
composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
|
||||||
|
composer info -D
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: vendor/bin/phpunit ${{ matrix.phpunit-flags }}
|
||||||
|
|
||||||
|
- name: Run style fixer
|
||||||
|
run: vendor/bin/php-cs-fixer --diff --dry-run -v fix
|
||||||
|
if: matrix.style-fix != 'none'
|
||||||
|
env:
|
||||||
|
PHP_CS_FIXER_IGNORE_ENV: 1
|
||||||
29
docker-compose/nextcloud/html/apps/suspicious_login/vendor/amphp/parallel/docs/_config.yml
vendored
Normal file
29
docker-compose/nextcloud/html/apps/suspicious_login/vendor/amphp/parallel/docs/_config.yml
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
kramdown:
|
||||||
|
input: GFM
|
||||||
|
toc_levels: 2..3
|
||||||
|
|
||||||
|
baseurl: "/parallel"
|
||||||
|
layouts_dir: ".shared/layout"
|
||||||
|
includes_dir: ".shared/includes"
|
||||||
|
|
||||||
|
exclude: ["Gemfile", "Gemfile.lock", "README.md", "vendor"]
|
||||||
|
safe: true
|
||||||
|
|
||||||
|
repository: amphp/parallel
|
||||||
|
gems:
|
||||||
|
- "jekyll-github-metadata"
|
||||||
|
- "jekyll-relative-links"
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
- scope:
|
||||||
|
path: ""
|
||||||
|
type: "pages"
|
||||||
|
values:
|
||||||
|
layout: "docs"
|
||||||
|
|
||||||
|
shared_asset_path: "/parallel/asset"
|
||||||
|
|
||||||
|
navigation:
|
||||||
|
- processes
|
||||||
|
- workers
|
||||||
|
- worker-pool
|
||||||
85
docker-compose/nextcloud/html/apps/suspicious_login/vendor/amphp/parser/.github/workflows/ci.yml
vendored
Normal file
85
docker-compose/nextcloud/html/apps/suspicious_login/vendor/amphp/parser/.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
name: Continuous Integration
|
||||||
|
|
||||||
|
on:
|
||||||
|
- push
|
||||||
|
- pull_request
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.1'
|
||||||
|
|
||||||
|
- operating-system: 'windows-latest'
|
||||||
|
php-version: '8.1'
|
||||||
|
job-description: 'on Windows'
|
||||||
|
|
||||||
|
- operating-system: 'macos-latest'
|
||||||
|
php-version: '8.1'
|
||||||
|
job-description: 'on macOS'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.2'
|
||||||
|
|
||||||
|
name: PHP ${{ matrix.php-version }} ${{ matrix.job-description }}
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Set git to use LF
|
||||||
|
run: |
|
||||||
|
git config --global core.autocrlf false
|
||||||
|
git config --global core.eol lf
|
||||||
|
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-version }}
|
||||||
|
|
||||||
|
- name: Get Composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-dir)"
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
|
||||||
|
restore-keys: |
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-
|
||||||
|
composer-${{ runner.os }}-
|
||||||
|
composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
retry_wait_seconds: 30
|
||||||
|
command: |
|
||||||
|
composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
|
||||||
|
composer info -D
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: vendor/bin/phpunit ${{ matrix.phpunit-flags }}
|
||||||
|
|
||||||
|
- name: Run static analysis
|
||||||
|
run: vendor/bin/psalm.phar
|
||||||
|
|
||||||
|
- name: Run style fixer
|
||||||
|
env:
|
||||||
|
PHP_CS_FIXER_IGNORE_ENV: 1
|
||||||
|
run: vendor/bin/php-cs-fixer --diff --dry-run -v fix
|
||||||
|
if: runner.os != 'Windows'
|
||||||
135
docker-compose/nextcloud/html/apps/suspicious_login/vendor/amphp/process/.github/workflows/ci.yml
vendored
Normal file
135
docker-compose/nextcloud/html/apps/suspicious_login/vendor/amphp/process/.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
name: Continuous Integration
|
||||||
|
|
||||||
|
on:
|
||||||
|
push: null
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
unit_tests:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.1'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.2'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.3'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
|
||||||
|
- operating-system: 'windows-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
|
||||||
|
- operating-system: 'macos-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
|
||||||
|
name: PHP ${{ matrix.php-version }} on ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-version }}
|
||||||
|
|
||||||
|
- name: Use LF line ends
|
||||||
|
run: |
|
||||||
|
git config --global core.autocrlf false
|
||||||
|
git config --global core.eol lf
|
||||||
|
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Get Composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-dir)"
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
|
||||||
|
restore-keys: |
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
retry_wait_seconds: 30
|
||||||
|
command: |
|
||||||
|
php_version=$(php -v)
|
||||||
|
composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
|
||||||
|
composer info -D
|
||||||
|
|
||||||
|
- name: Run unit tests
|
||||||
|
run: vendor/bin/phpunit --verbose
|
||||||
|
|
||||||
|
coding_standards:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
|
||||||
|
name: Coding standards
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-version }}
|
||||||
|
|
||||||
|
- name: Use LF line ends
|
||||||
|
run: |
|
||||||
|
git config --global core.autocrlf false
|
||||||
|
git config --global core.eol lf
|
||||||
|
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Get Composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-dir)"
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
|
||||||
|
restore-keys: |
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
retry_wait_seconds: 30
|
||||||
|
command: |
|
||||||
|
php_version=$(php -v)
|
||||||
|
composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
|
||||||
|
composer info -D
|
||||||
|
|
||||||
|
- name: Run style fixer
|
||||||
|
env:
|
||||||
|
PHP_CS_FIXER_IGNORE_ENV: 1
|
||||||
|
run: vendor/bin/php-cs-fixer --diff --dry-run -v fix
|
||||||
100
docker-compose/nextcloud/html/apps/suspicious_login/vendor/amphp/sync/.github/workflows/ci.yml
vendored
Normal file
100
docker-compose/nextcloud/html/apps/suspicious_login/vendor/amphp/sync/.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
name: Continuous Integration
|
||||||
|
|
||||||
|
on:
|
||||||
|
- push
|
||||||
|
- pull_request
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.1'
|
||||||
|
composer-require-checker-version: none
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.2'
|
||||||
|
composer-require-checker-version: 2.1.0
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.3'
|
||||||
|
composer-require-checker-version: 2.1.0
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
composer-require-checker-version: 3.3.0
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
composer-require-checker-version: 3.3.0
|
||||||
|
|
||||||
|
- operating-system: 'windows-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
composer-require-checker-version: 3.3.0
|
||||||
|
job-description: 'on Windows'
|
||||||
|
|
||||||
|
- operating-system: 'macos-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
composer-require-checker-version: 3.3.0
|
||||||
|
job-description: 'on macOS'
|
||||||
|
|
||||||
|
name: PHP ${{ matrix.php-version }} ${{ matrix.job-description }}
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Set git to use LF
|
||||||
|
run: |
|
||||||
|
git config --global core.autocrlf false
|
||||||
|
git config --global core.eol lf
|
||||||
|
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-version }}
|
||||||
|
|
||||||
|
- name: Get Composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-dir)"
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
|
||||||
|
restore-keys: |
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-
|
||||||
|
composer-${{ runner.os }}-
|
||||||
|
composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
retry_wait_seconds: 30
|
||||||
|
command: |
|
||||||
|
composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
|
||||||
|
composer info -D
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: vendor/bin/phpunit ${{ matrix.phpunit-flags }}
|
||||||
|
|
||||||
|
- name: Run style fixer
|
||||||
|
run: vendor/bin/php-cs-fixer --diff --dry-run -v fix
|
||||||
|
env:
|
||||||
|
PHP_CS_FIXER_IGNORE_ENV: 1
|
||||||
|
|
||||||
|
- name: Install composer-require-checker
|
||||||
|
run: php -r 'file_put_contents("composer-require-checker.phar", file_get_contents("https://github.com/maglnet/ComposerRequireChecker/releases/download/${{ matrix.composer-require-checker-version }}/composer-require-checker.phar"));'
|
||||||
|
if: runner.os != 'Windows' && matrix.composer-require-checker-version != 'none'
|
||||||
|
|
||||||
|
- name: Run composer-require-checker
|
||||||
|
run: php composer-require-checker.phar check composer.json --config-file $PWD/composer-require-check.json
|
||||||
|
if: runner.os != 'Windows' && matrix.composer-require-checker-version != 'none'
|
||||||
29
docker-compose/nextcloud/html/apps/suspicious_login/vendor/amphp/sync/docs/_config.yml
vendored
Normal file
29
docker-compose/nextcloud/html/apps/suspicious_login/vendor/amphp/sync/docs/_config.yml
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
kramdown:
|
||||||
|
input: GFM
|
||||||
|
toc_levels: 2..3
|
||||||
|
|
||||||
|
baseurl: "/sync"
|
||||||
|
layouts_dir: ".shared/layout"
|
||||||
|
includes_dir: ".shared/includes"
|
||||||
|
|
||||||
|
exclude: ["Gemfile", "Gemfile.lock", "README.md", "vendor"]
|
||||||
|
safe: true
|
||||||
|
|
||||||
|
repository: amphp/sync
|
||||||
|
gems:
|
||||||
|
- "jekyll-github-metadata"
|
||||||
|
- "jekyll-relative-links"
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
- scope:
|
||||||
|
path: ""
|
||||||
|
type: "pages"
|
||||||
|
values:
|
||||||
|
layout: "docs"
|
||||||
|
|
||||||
|
shared_asset_path: "/sync/asset"
|
||||||
|
|
||||||
|
navigation:
|
||||||
|
- mutex
|
||||||
|
- semaphore
|
||||||
|
- concurrent-iterator
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
github: [andrewdalpino]
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
name: "Code Checks"
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
Build:
|
||||||
|
name: PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }}
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
operating-system: [windows-latest, ubuntu-latest, macos-latest]
|
||||||
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
tools: pecl
|
||||||
|
extensions: mbstring, fileinfo
|
||||||
|
ini-values: memory_limit=-1
|
||||||
|
|
||||||
|
- name: Validate composer.json
|
||||||
|
run: composer validate
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: composer install
|
||||||
|
|
||||||
|
- name: Static Analysis
|
||||||
|
run: composer analyze
|
||||||
|
|
||||||
|
- name: Unit Tests
|
||||||
|
run: composer test
|
||||||
|
|
||||||
|
- name: Coding Style
|
||||||
|
run: composer check
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
name: "Static analysis"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "main"
|
||||||
|
- "master"
|
||||||
|
pull_request: null
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
static-analysis:
|
||||||
|
runs-on: "ubuntu-latest"
|
||||||
|
name: "PHPStan on PHP ${{ matrix.php }}"
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
php:
|
||||||
|
- "8.1"
|
||||||
|
steps:
|
||||||
|
- name: "Check out repository code"
|
||||||
|
uses: "actions/checkout@v2"
|
||||||
|
|
||||||
|
- name: "Setup PHP"
|
||||||
|
uses: "shivammathur/setup-php@v2"
|
||||||
|
with:
|
||||||
|
php-version: "${{ matrix.php }}"
|
||||||
|
tools: "composer"
|
||||||
|
|
||||||
|
- name: "Install Composer dependencies"
|
||||||
|
uses: "ramsey/composer-install@v2"
|
||||||
|
with:
|
||||||
|
dependency-versions: "highest"
|
||||||
|
|
||||||
|
- name: "Perform static analysis"
|
||||||
|
run: "make phpstan"
|
||||||
1
docker-compose/nextcloud/html/apps/suspicious_login/vendor/rubix/ml/.github/FUNDING.yml
vendored
Normal file
1
docker-compose/nextcloud/html/apps/suspicious_login/vendor/rubix/ml/.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
github: [andrewdalpino]
|
||||||
39
docker-compose/nextcloud/html/apps/suspicious_login/vendor/rubix/ml/.github/workflows/ci.yml
vendored
Normal file
39
docker-compose/nextcloud/html/apps/suspicious_login/vendor/rubix/ml/.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
name: "Code Checks"
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
Build:
|
||||||
|
name: PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }}
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-latest, macos-latest]
|
||||||
|
php-versions: ['8.0', '8.1', '8.2']
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
tools: composer, pecl
|
||||||
|
extensions: svm, mbstring, gd, fileinfo
|
||||||
|
ini-values: memory_limit=-1
|
||||||
|
|
||||||
|
- name: Validate composer.json
|
||||||
|
run: composer validate
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: composer install
|
||||||
|
|
||||||
|
- name: Static Analysis
|
||||||
|
run: composer analyze
|
||||||
|
|
||||||
|
- name: Unit Tests
|
||||||
|
run: composer test
|
||||||
|
|
||||||
|
- name: Check Coding Style
|
||||||
|
run: composer check
|
||||||
25
docker-compose/nextcloud/html/apps/suspicious_login/vendor/rubix/ml/.github/workflows/cla.yml
vendored
Normal file
25
docker-compose/nextcloud/html/apps/suspicious_login/vendor/rubix/ml/.github/workflows/cla.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
name: "CLA Assistant"
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened, closed, synchronize]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
CLAssistant:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: "CLA Assistant"
|
||||||
|
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
|
||||||
|
uses: cla-assistant/github-action@v2.1.3-beta
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
PERSONAL_ACCESS_TOKEN : ${{ secrets.CLA_BOT_TOKEN }}
|
||||||
|
with:
|
||||||
|
remote-organization-name: 'RubixML'
|
||||||
|
remote-repository-name: 'Signatures'
|
||||||
|
path-to-document: 'https://github.com/RubixML/Signatures/blob/master/CLA.md'
|
||||||
|
path-to-signatures: 'cla-v1.json'
|
||||||
|
branch: 'master'
|
||||||
|
allowlist: bot*
|
||||||
335
docker-compose/nextcloud/html/apps/suspicious_login/vendor/rubix/ml/mkdocs.yml
vendored
Normal file
335
docker-compose/nextcloud/html/apps/suspicious_login/vendor/rubix/ml/mkdocs.yml
vendored
Normal file
@@ -0,0 +1,335 @@
|
|||||||
|
site_name: 'Rubix ML'
|
||||||
|
|
||||||
|
theme:
|
||||||
|
name: material
|
||||||
|
logo: images/app-icon-medium.png
|
||||||
|
favicon: images/app-icon-small.png
|
||||||
|
icon:
|
||||||
|
repo: fontawesome/brands/github
|
||||||
|
features:
|
||||||
|
- navigation.tabs
|
||||||
|
|
||||||
|
nav:
|
||||||
|
- Home: https://rubixml.com
|
||||||
|
- Getting Started:
|
||||||
|
- Welcome: index.md
|
||||||
|
- What is Machine Learning?: what-is-machine-learning.md
|
||||||
|
- Installation: installation.md
|
||||||
|
- Basic Introduction: basic-introduction.md
|
||||||
|
- User Guide:
|
||||||
|
- Representing Your Data: representing-your-data.md
|
||||||
|
- Extracting Data: extracting-data.md
|
||||||
|
- Preprocessing: preprocessing.md
|
||||||
|
- Exploring Data: exploring-data.md
|
||||||
|
- Choosing an Estimator: choosing-an-estimator.md
|
||||||
|
- Training: training.md
|
||||||
|
- Inference: inference.md
|
||||||
|
- Cross-validation: cross-validation.md
|
||||||
|
- Hyper-parameter Tuning: hyper-parameter-tuning.md
|
||||||
|
- Model Ensembles: model-ensembles.md
|
||||||
|
- Model Persistence: model-persistence.md
|
||||||
|
- API Reference:
|
||||||
|
- Fundamental Interfaces:
|
||||||
|
- Estimator: estimator.md
|
||||||
|
- Learner: learner.md
|
||||||
|
- Online: online.md
|
||||||
|
- Parallel: parallel.md
|
||||||
|
- Persistable: persistable.md
|
||||||
|
- Probabilistic: probabilistic.md
|
||||||
|
- Ranks Features: ranks-features.md
|
||||||
|
- Scoring: scoring.md
|
||||||
|
- Verbose: verbose.md
|
||||||
|
- Extractors:
|
||||||
|
- API Reference: extractors/api.md
|
||||||
|
- Column Filter: extractors/column-filter.md
|
||||||
|
- Column Picker: extractors/column-picker.md
|
||||||
|
- Concatenator: extractors/concatenator.md
|
||||||
|
- CSV: extractors/csv.md
|
||||||
|
- Deduplicator: extractors/deduplicator.md
|
||||||
|
- NDJSON: extractors/ndjson.md
|
||||||
|
- SQL Table: extractors/sql-table.md
|
||||||
|
- Dataset Objects:
|
||||||
|
- API Reference: datasets/api.md
|
||||||
|
- Generators:
|
||||||
|
- API Reference: datasets/generators/api.md
|
||||||
|
- Agglomerate: datasets/generators/agglomerate.md
|
||||||
|
- Blob: datasets/generators/blob.md
|
||||||
|
- Circle: datasets/generators/circle.md
|
||||||
|
- Half Moon: datasets/generators/half-moon.md
|
||||||
|
- Hyperplane: datasets/generators/hyperplane.md
|
||||||
|
- Swiss Roll: datasets/generators/swiss-roll.md
|
||||||
|
- Labeled: datasets/labeled.md
|
||||||
|
- Unlabeled: datasets/unlabeled.md
|
||||||
|
- Classifiers:
|
||||||
|
- AdaBoost: classifiers/adaboost.md
|
||||||
|
- Classification Tree: classifiers/classification-tree.md
|
||||||
|
- Extra Tree Classifier: classifiers/extra-tree-classifier.md
|
||||||
|
- Gaussian Naive Bayes: classifiers/gaussian-naive-bayes.md
|
||||||
|
- K-d Neighbors: classifiers/kd-neighbors.md
|
||||||
|
- K Nearest Neighbors: classifiers/k-nearest-neighbors.md
|
||||||
|
- Logistic Regression: classifiers/logistic-regression.md
|
||||||
|
- Logit Boost: classifiers/logit-boost.md
|
||||||
|
- Multilayer Perceptron: classifiers/multilayer-perceptron.md
|
||||||
|
- Naive Bayes: classifiers/naive-bayes.md
|
||||||
|
- One Vs Rest: classifiers/one-vs-rest.md
|
||||||
|
- Radius Neighbors: classifiers/radius-neighbors.md
|
||||||
|
- Random Forest: classifiers/random-forest.md
|
||||||
|
- Softmax Classifier: classifiers/softmax-classifier.md
|
||||||
|
- SVC: classifiers/svc.md
|
||||||
|
- Regressors:
|
||||||
|
- Adaline: regressors/adaline.md
|
||||||
|
- Extra Tree Regressor: regressors/extra-tree-regressor.md
|
||||||
|
- Gradient Boost: regressors/gradient-boost.md
|
||||||
|
- K-d Neighbors Regressor: regressors/kd-neighbors-regressor.md
|
||||||
|
- KNN Regressor: regressors/knn-regressor.md
|
||||||
|
- MLP Regressor: regressors/mlp-regressor.md
|
||||||
|
- Radius Neighbors Regressor: regressors/radius-neighbors-regressor.md
|
||||||
|
- Regression Tree: regressors/regression-tree.md
|
||||||
|
- Ridge: regressors/ridge.md
|
||||||
|
- SVR: regressors/svr.md
|
||||||
|
- Clusterers:
|
||||||
|
- Seeders:
|
||||||
|
- K-MC2: clusterers/seeders/k-mc2.md
|
||||||
|
- Plus Plus: clusterers/seeders/plus-plus.md
|
||||||
|
- Preset: clusterers/seeders/preset.md
|
||||||
|
- Random: clusterers/seeders/random.md
|
||||||
|
- DBSCAN: clusterers/dbscan.md
|
||||||
|
- Fuzzy C Means: clusterers/fuzzy-c-means.md
|
||||||
|
- Gaussian Mixture: clusterers/gaussian-mixture.md
|
||||||
|
- K Means: clusterers/k-means.md
|
||||||
|
- Mean Shift: clusterers/mean-shift.md
|
||||||
|
- Anomaly Detectors:
|
||||||
|
- Gaussian MLE: anomaly-detectors/gaussian-mle.md
|
||||||
|
- Isolation Forest: anomaly-detectors/isolation-forest.md
|
||||||
|
- Loda: anomaly-detectors/loda.md
|
||||||
|
- Local Outlier Factor: anomaly-detectors/local-outlier-factor.md
|
||||||
|
- One Class SVM: anomaly-detectors/one-class-svm.md
|
||||||
|
- Robust Z-Score: anomaly-detectors/robust-z-score.md
|
||||||
|
- Meta Estimators:
|
||||||
|
- Bootstrap Aggregator: bootstrap-aggregator.md
|
||||||
|
- Committee Machine: committee-machine.md
|
||||||
|
- Grid Search: grid-search.md
|
||||||
|
- Persistent Model: persistent-model.md
|
||||||
|
- Pipeline: pipeline.md
|
||||||
|
- Transformers:
|
||||||
|
- API Reference: transformers/api.md
|
||||||
|
- Standardization and Normalization:
|
||||||
|
- L1 Normalizer: transformers/l1-normalizer.md
|
||||||
|
- L2 Normalizer: transformers/l2-normalizer.md
|
||||||
|
- Max Absolute Scaler: transformers/max-absolute-scaler.md
|
||||||
|
- Min Max Normalizer: transformers/min-max-normalizer.md
|
||||||
|
- Robust Standardizer: transformers/robust-standardizer.md
|
||||||
|
- Z Scale Standardizer: transformers/z-scale-standardizer.md
|
||||||
|
- Dimensionality Reduction:
|
||||||
|
- Gaussian Random Projector: transformers/gaussian-random-projector.md
|
||||||
|
- Linear Discriminant Analysis: transformers/linear-discriminant-analysis.md
|
||||||
|
- Principal Component Analysis: transformers/principal-component-analysis.md
|
||||||
|
- Sparse Random Projector: transformers/sparse-random-projector.md
|
||||||
|
- Truncated SVD: transformers/truncated-svd.md
|
||||||
|
- t-SNE: transformers/t-sne.md
|
||||||
|
- Feature Conversion:
|
||||||
|
- Interval Discretizer: transformers/interval-discretizer.md
|
||||||
|
- One Hot Encoder: transformers/one-hot-encoder.md
|
||||||
|
- Numeric String Converter: transformers/numeric-string-converter.md
|
||||||
|
- Boolean Converter: transformers/boolean-converter.md
|
||||||
|
- Feature Expansion:
|
||||||
|
- Polynomial Expander: transformers/polynomial-expander.md
|
||||||
|
- Imputation:
|
||||||
|
- Hot Deck Imputer: transformers/hot-deck-imputer.md
|
||||||
|
- KNN Imputer: transformers/knn-imputer.md
|
||||||
|
- Missing Data Imputer: transformers/missing-data-imputer.md
|
||||||
|
- Natural Language:
|
||||||
|
- BM25 Transformer: transformers/bm25-transformer.md
|
||||||
|
- Regex Filter: transformers/regex-filter.md
|
||||||
|
- Text Normalizer: transformers/text-normalizer.md
|
||||||
|
- Multibyte Text Normalizer: transformers/multibyte-text-normalizer.md
|
||||||
|
- Stop Word Filter: transformers/stop-word-filter.md
|
||||||
|
- TF-IDF Transformer: transformers/tf-idf-transformer.md
|
||||||
|
- Token Hashing Vectorizer: transformers/token-hashing-vectorizer.md
|
||||||
|
- Word Count Vectorizer: transformers/word-count-vectorizer.md
|
||||||
|
- Images:
|
||||||
|
- Image Resizer: transformers/image-resizer.md
|
||||||
|
- Image Rotator: transformers/image-rotator.md
|
||||||
|
- Image Vectorizer: transformers/image-vectorizer.md
|
||||||
|
- Other:
|
||||||
|
- Lambda Function: transformers/lambda-function.md
|
||||||
|
- Neural Network:
|
||||||
|
- Hidden Layers:
|
||||||
|
- Activation: neural-network/hidden-layers/activation.md
|
||||||
|
- Batch Norm: neural-network/hidden-layers/batch-norm.md
|
||||||
|
- Dense: neural-network/hidden-layers/dense.md
|
||||||
|
- Dropout: neural-network/hidden-layers/dropout.md
|
||||||
|
- Noise: neural-network/hidden-layers/noise.md
|
||||||
|
- PReLU: neural-network/hidden-layers/prelu.md
|
||||||
|
- Swish: neural-network/hidden-layers/swish.md
|
||||||
|
- Activation Functions:
|
||||||
|
- ELU: neural-network/activation-functions/elu.md
|
||||||
|
- GELU: neural-network/activation-functions/gelu.md
|
||||||
|
- Hyperbolic Tangent: neural-network/activation-functions/hyperbolic-tangent.md
|
||||||
|
- Leaky ReLU: neural-network/activation-functions/leaky-relu.md
|
||||||
|
- ReLU: neural-network/activation-functions/relu.md
|
||||||
|
- SELU: neural-network/activation-functions/selu.md
|
||||||
|
- Sigmoid: neural-network/activation-functions/sigmoid.md
|
||||||
|
- Softmax: neural-network/activation-functions/softmax.md
|
||||||
|
- Soft Plus: neural-network/activation-functions/soft-plus.md
|
||||||
|
- Soft Sign: neural-network/activation-functions/softsign.md
|
||||||
|
- SiLU: neural-network/activation-functions/silu.md
|
||||||
|
- Thresholded ReLU: neural-network/activation-functions/thresholded-relu.md
|
||||||
|
- Cost Functions:
|
||||||
|
- Cross Entropy: neural-network/cost-functions/cross-entropy.md
|
||||||
|
- Huber Loss: neural-network/cost-functions/huber-loss.md
|
||||||
|
- Least Squares: neural-network/cost-functions/least-squares.md
|
||||||
|
- Relative Entropy: neural-network/cost-functions/relative-entropy.md
|
||||||
|
- Initializers:
|
||||||
|
- Constant: neural-network/initializers/constant.md
|
||||||
|
- He: neural-network/initializers/he.md
|
||||||
|
- LeCun: neural-network/initializers/lecun.md
|
||||||
|
- Normal: neural-network/initializers/normal.md
|
||||||
|
- Uniform: neural-network/initializers/uniform.md
|
||||||
|
- Xavier 1: neural-network/initializers/xavier-1.md
|
||||||
|
- Xavier 2: neural-network/initializers/xavier-2.md
|
||||||
|
- Optimizers:
|
||||||
|
- AdaGrad: neural-network/optimizers/adagrad.md
|
||||||
|
- Adam: neural-network/optimizers/adam.md
|
||||||
|
- AdaMax: neural-network/optimizers/adamax.md
|
||||||
|
- Cyclical: neural-network/optimizers/cyclical.md
|
||||||
|
- Momentum: neural-network/optimizers/momentum.md
|
||||||
|
- RMS Prop: neural-network/optimizers/rms-prop.md
|
||||||
|
- Step Decay: neural-network/optimizers/step-decay.md
|
||||||
|
- Stochastic: neural-network/optimizers/stochastic.md
|
||||||
|
- Graph:
|
||||||
|
- Trees:
|
||||||
|
- Ball Tree: graph/trees/ball-tree.md
|
||||||
|
- K-d Tree: graph/trees/k-d-tree.md
|
||||||
|
- Vantage Tree: graph/trees/vantage-tree.md
|
||||||
|
- Kernels:
|
||||||
|
- Distance:
|
||||||
|
- Canberra: kernels/distance/canberra.md
|
||||||
|
- Cosine: kernels/distance/cosine.md
|
||||||
|
- Diagonal: kernels/distance/diagonal.md
|
||||||
|
- Euclidean: kernels/distance/euclidean.md
|
||||||
|
- Gower: kernels/distance/gower.md
|
||||||
|
- Hamming: kernels/distance/hamming.md
|
||||||
|
- Jaccard: kernels/distance/jaccard.md
|
||||||
|
- Manhattan: kernels/distance/manhattan.md
|
||||||
|
- Minkowski: kernels/distance/minkowski.md
|
||||||
|
- Safe Euclidean: kernels/distance/safe-euclidean.md
|
||||||
|
- Sparse Cosine: kernels/distance/sparse-cosine.md
|
||||||
|
- SVM:
|
||||||
|
- Linear: kernels/svm/linear.md
|
||||||
|
- Polynomial: kernels/svm/polynomial.md
|
||||||
|
- RBF: kernels/svm/rbf.md
|
||||||
|
- Sigmoidal: kernels/svm/sigmoidal.md
|
||||||
|
- Cross Validation:
|
||||||
|
- Metrics:
|
||||||
|
- API Reference: cross-validation/metrics/api.md
|
||||||
|
- Accuracy: cross-validation/metrics/accuracy.md
|
||||||
|
- Brier Score: cross-validation/metrics/brier-score.md
|
||||||
|
- F Beta: cross-validation/metrics/f-beta.md
|
||||||
|
- Informedness: cross-validation/metrics/informedness.md
|
||||||
|
- MCC: cross-validation/metrics/mcc.md
|
||||||
|
- Mean Absolute Error: cross-validation/metrics/mean-absolute-error.md
|
||||||
|
- Mean Squared Error: cross-validation/metrics/mean-squared-error.md
|
||||||
|
- Median Absolute Error: cross-validation/metrics/median-absolute-error.md
|
||||||
|
- Probabilistic Accuracy: cross-validation/metrics/probabilistic-accuracy.md
|
||||||
|
- RMSE: cross-validation/metrics/rmse.md
|
||||||
|
- R Squared: cross-validation/metrics/r-squared.md
|
||||||
|
- SMAPE: cross-validation/metrics/smape.md
|
||||||
|
- Completeness: cross-validation/metrics/completeness.md
|
||||||
|
- Homogeneity: cross-validation/metrics/homogeneity.md
|
||||||
|
- Rand Index: cross-validation/metrics/rand-index.md
|
||||||
|
- Top K Accuracy: cross-validation/metrics/top-k-accuracy.md
|
||||||
|
- V Measure: cross-validation/metrics/v-measure.md
|
||||||
|
- Reports:
|
||||||
|
- API Reference: cross-validation/reports/api.md
|
||||||
|
- Aggregate Report: cross-validation/reports/aggregate-report.md
|
||||||
|
- Confusion Matrix: cross-validation/reports/confusion-matrix.md
|
||||||
|
- Contingency Table: cross-validation/reports/contingency-table.md
|
||||||
|
- Error Analysis: cross-validation/reports/error-analysis.md
|
||||||
|
- Multiclass Breakdown: cross-validation/reports/multiclass-breakdown.md
|
||||||
|
- Validators:
|
||||||
|
- API Reference: cross-validation/api.md
|
||||||
|
- Hold Out: cross-validation/hold-out.md
|
||||||
|
- K Fold: cross-validation/k-fold.md
|
||||||
|
- Leave P Out: cross-validation/leave-p-out.md
|
||||||
|
- Monte Carlo: cross-validation/monte-carlo.md
|
||||||
|
- Tokenizers:
|
||||||
|
- K-Skip-N-Gram: tokenizers/k-skip-n-gram.md
|
||||||
|
- N-Gram: tokenizers/n-gram.md
|
||||||
|
- Sentence: tokenizers/sentence.md
|
||||||
|
- Whitespace: tokenizers/whitespace.md
|
||||||
|
- Word: tokenizers/word.md
|
||||||
|
- Word Stemmer: tokenizers/word-stemmer.md
|
||||||
|
- Persisters:
|
||||||
|
- API Reference: persisters/api.md
|
||||||
|
- Filesystem: persisters/filesystem.md
|
||||||
|
- Serializers:
|
||||||
|
- API Reference: serializers/api.md
|
||||||
|
- Gzip Native: serializers/gzip-native.md
|
||||||
|
- Native: serializers/native.md
|
||||||
|
- RBX: serializers/rbx.md
|
||||||
|
- Loggers:
|
||||||
|
- Screen: loggers/screen.md
|
||||||
|
- Backends:
|
||||||
|
- Amp: backends/amp.md
|
||||||
|
- Serial: backends/serial.md
|
||||||
|
- Helpers:
|
||||||
|
- Params: helpers/params.md
|
||||||
|
- Strategies:
|
||||||
|
- Constant: strategies/constant.md
|
||||||
|
- K Most Frequent: strategies/k-most-frequent.md
|
||||||
|
- Mean: strategies/mean.md
|
||||||
|
- Percentile: strategies/percentile.md
|
||||||
|
- Prior: strategies/prior.md
|
||||||
|
- Wild Guess: strategies/wild-guess.md
|
||||||
|
- FAQ: faq.md
|
||||||
|
|
||||||
|
extra:
|
||||||
|
version:
|
||||||
|
provider: mike
|
||||||
|
analytics:
|
||||||
|
provider: google
|
||||||
|
property: UA-136137674-1
|
||||||
|
social:
|
||||||
|
- icon: fontawesome/brands/github
|
||||||
|
link: https://github.com/RubixML
|
||||||
|
- icon: fontawesome/brands/telegram
|
||||||
|
link: https://t.me/RubixML
|
||||||
|
|
||||||
|
use_directory_urls: false
|
||||||
|
|
||||||
|
plugins:
|
||||||
|
- search
|
||||||
|
- git-revision-date-localized:
|
||||||
|
type: date
|
||||||
|
enable_creation_date: true
|
||||||
|
|
||||||
|
markdown_extensions:
|
||||||
|
- attr_list
|
||||||
|
- abbr
|
||||||
|
- admonition
|
||||||
|
- pymdownx.highlight:
|
||||||
|
extend_pygments_lang:
|
||||||
|
- name: php
|
||||||
|
lang: php
|
||||||
|
options:
|
||||||
|
startinline: true
|
||||||
|
- pymdownx.superfences
|
||||||
|
- pymdownx.arithmatex:
|
||||||
|
generic: true
|
||||||
|
- toc:
|
||||||
|
permalink: "#"
|
||||||
|
- footnotes
|
||||||
|
|
||||||
|
extra_javascript:
|
||||||
|
- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
|
||||||
|
- js/custom.js
|
||||||
|
|
||||||
|
extra_css:
|
||||||
|
- css/custom.css
|
||||||
|
|
||||||
|
repo_url: https://github.com/RubixML/ML
|
||||||
|
site_url: https://rubixml.com
|
||||||
|
site_description: 'A high-level machine learning and deep learning library for the PHP language.'
|
||||||
|
|
||||||
|
copyright: '© 2022 The Rubix ML Community'
|
||||||
1
docker-compose/nextcloud/html/apps/suspicious_login/vendor/rubix/tensor/.github/FUNDING.yml
vendored
Normal file
1
docker-compose/nextcloud/html/apps/suspicious_login/vendor/rubix/tensor/.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
github: [andrewdalpino]
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
name: Compile extension
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/ci-ext.*"
|
||||||
|
- "ext/**"
|
||||||
|
- package.xml
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "**"
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/ci-ext.*"
|
||||||
|
- "ext/**"
|
||||||
|
- package.xml
|
||||||
|
tags-ignore:
|
||||||
|
- "**"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
compile:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
image:
|
||||||
|
- php:7.4-cli
|
||||||
|
- php:7.4-cli-alpine
|
||||||
|
- php:8.0-cli
|
||||||
|
- php:8.0-cli-alpine
|
||||||
|
- php:8.1-cli
|
||||||
|
- php:8.1-cli-alpine
|
||||||
|
- php:8.2-cli
|
||||||
|
- php:8.2-cli-alpine
|
||||||
|
|
||||||
|
name: Image ${{ matrix.image }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: ${{ matrix.image }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Install system dependencies (Alpine)
|
||||||
|
if: contains(matrix.image, 'alpine')
|
||||||
|
run: |
|
||||||
|
apk update
|
||||||
|
. /etc/os-release
|
||||||
|
case "$VERSION_ID" in
|
||||||
|
3.11.* | 3.12.* | 3.13.* | 3.14.* | 3.15.* | 3.16.* | 3.17.*)
|
||||||
|
apk update && apk add $PHPIZE_DEPS lapack lapack-dev openblas-dev
|
||||||
|
if [ ! -e /usr/lib/liblapacke.so ]; then
|
||||||
|
# Fix for Alpine 3.15, 3.16 and 3.17
|
||||||
|
ln -s /usr/lib/liblapacke.so.3 /usr/lib/liblapacke.so
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
apk add $PHPIZE_DEPS liblapack lapack-dev openblas-dev
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
- name: Install system dependencies (Debian)
|
||||||
|
if: ${{ !contains(matrix.image, 'alpine') }}
|
||||||
|
run: |
|
||||||
|
apt-get update -q
|
||||||
|
apt-get install -qy gfortran liblapack-dev libopenblas-dev liblapacke-dev
|
||||||
|
|
||||||
|
- name: Create working directory
|
||||||
|
run: |
|
||||||
|
rm -rf /tmp/tensor-package
|
||||||
|
mkdir /tmp/tensor-package
|
||||||
|
|
||||||
|
- name: Create PECL package
|
||||||
|
run: |
|
||||||
|
cd /tmp/tensor-package
|
||||||
|
pecl package "$GITHUB_WORKSPACE/package.xml"
|
||||||
|
|
||||||
|
- name: Compile PECL package
|
||||||
|
run: |
|
||||||
|
cd /tmp/tensor-package
|
||||||
|
MAKE="make -j$(nproc)" pecl install tensor-*.tgz
|
||||||
|
|
||||||
|
- name: Enable PHP extension
|
||||||
|
run: docker-php-ext-enable tensor
|
||||||
|
|
||||||
|
- name: Check for PHP startup warnings
|
||||||
|
run: |
|
||||||
|
php -d display_errors=stderr -d display_startup_errors=1 -d error_reporting=-1 -r ';' 2>/tmp/php-startup-warnings
|
||||||
|
if [ -s /tmp/php-startup-warnings ]; then
|
||||||
|
echo 'The PHP extension was successfully installed, but PHP raised these warnings:' >&2
|
||||||
|
cat /tmp/php-startup-warnings >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "PHP didn't raise any warnings at startup."
|
||||||
|
|
||||||
|
- name: Inspect PHP extension
|
||||||
|
run: php --ri tensor
|
||||||
39
docker-compose/nextcloud/html/apps/suspicious_login/vendor/rubix/tensor/.github/workflows/ci.yml
vendored
Normal file
39
docker-compose/nextcloud/html/apps/suspicious_login/vendor/rubix/tensor/.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
name: "Code Checks"
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }}
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
operating-system: [windows-latest, ubuntu-latest, macos-latest]
|
||||||
|
php-versions: ['7.4', '8.0', '8.1', '8.2']
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
tools: pecl
|
||||||
|
extensions: fileinfo
|
||||||
|
ini-values: memory_limit=-1
|
||||||
|
|
||||||
|
- name: Validate composer.json
|
||||||
|
run: composer validate
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: composer install
|
||||||
|
|
||||||
|
- name: Static Analysis
|
||||||
|
run: composer analyze
|
||||||
|
|
||||||
|
- name: Run Unit Tests
|
||||||
|
run: composer test
|
||||||
|
|
||||||
|
- name: Check Coding Style
|
||||||
|
run: composer check
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
name: "CLA Assistant"
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened, closed, synchronize]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
CLAssistant:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: "CLA Assistant"
|
||||||
|
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
|
||||||
|
uses: cla-assistant/github-action@v2.1.3-beta
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
PERSONAL_ACCESS_TOKEN : ${{ secrets.CLA_BOT_TOKEN }}
|
||||||
|
with:
|
||||||
|
remote-organization-name: 'RubixML'
|
||||||
|
remote-repository-name: 'Signatures'
|
||||||
|
path-to-document: 'https://github.com/RubixML/Signatures/blob/master/CLA.md'
|
||||||
|
path-to-signatures: 'cla-v1.json'
|
||||||
|
branch: 'master'
|
||||||
|
allowlist: bot*
|
||||||
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
name: tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches: [master]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: true
|
||||||
|
matrix:
|
||||||
|
php: [7.3, 7.4, 8.0, 8.1, 8.2, 8.3]
|
||||||
|
stability: [prefer-lowest, prefer-stable]
|
||||||
|
|
||||||
|
name: PHP ${{ matrix.php }} - ${{ matrix.stability }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
tools: composer:v2
|
||||||
|
coverage: none
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
uses: nick-fields/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
command: composer update --${{ matrix.stability }} --prefer-dist --no-interaction --no-progress
|
||||||
|
|
||||||
|
- name: Copy PHP Unit Settings
|
||||||
|
run: cp phpunit.xml.dist phpunit.xml
|
||||||
|
|
||||||
|
- name: Execute tests
|
||||||
|
run: vendor/bin/phpunit --verbose
|
||||||
15
docker-compose/nextcloud/html/apps/twofactor_totp/vendor/rullzer/easytotp/.travis.yml
vendored
Normal file
15
docker-compose/nextcloud/html/apps/twofactor_totp/vendor/rullzer/easytotp/.travis.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
language: php
|
||||||
|
php:
|
||||||
|
- 7.1
|
||||||
|
- 7.2
|
||||||
|
- 7.3
|
||||||
|
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- "$HOME/.composer/cache/files"
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- php --info
|
||||||
|
- composer self-update
|
||||||
|
- composer install
|
||||||
|
|
||||||
@@ -246,6 +246,8 @@ services:
|
|||||||
- "traefik.http.routers.bookstack.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.bookstack.tls.certresolver=letsencrypt"
|
||||||
- "traefik.http.routers.bookstack.middlewares=authelia@docker"
|
- "traefik.http.routers.bookstack.middlewares=authelia@docker"
|
||||||
- "traefik.http.services.bookstack.loadbalancer.server.port=80"
|
- "traefik.http.services.bookstack.loadbalancer.server.port=80"
|
||||||
|
- "x-dockge.url=https://bookstack.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://bookstack.${DOMAIN}"
|
||||||
|
|
||||||
bookstack-db:
|
bookstack-db:
|
||||||
image: mariadb:10.11
|
image: mariadb:10.11
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# Config file for travis-ci.org
|
||||||
|
|
||||||
|
language: php
|
||||||
|
php:
|
||||||
|
- "5.5"
|
||||||
|
- "5.4"
|
||||||
|
- "5.3"
|
||||||
|
env:
|
||||||
|
- DOKUWIKI=master
|
||||||
|
- DOKUWIKI=stable
|
||||||
|
before_install: wget https://raw.github.com/splitbrain/dokuwiki-travis/master/travis.sh
|
||||||
|
install: sh travis.sh
|
||||||
|
script: cd _test && phpunit --stderr --group plugin_styling
|
||||||
@@ -264,6 +264,8 @@ services:
|
|||||||
- "traefik.http.routers.bookstack.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.bookstack.tls.certresolver=letsencrypt"
|
||||||
- "traefik.http.routers.bookstack.middlewares=authelia@docker"
|
- "traefik.http.routers.bookstack.middlewares=authelia@docker"
|
||||||
- "traefik.http.services.bookstack.loadbalancer.server.port=80"
|
- "traefik.http.services.bookstack.loadbalancer.server.port=80"
|
||||||
|
- "x-dockge.url=https://bookstack.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://bookstack.${DOMAIN}"
|
||||||
|
|
||||||
bookstack-db:
|
bookstack-db:
|
||||||
image: mariadb:10.11
|
image: mariadb:10.11
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# Config file for travis-ci.org
|
||||||
|
|
||||||
|
language: php
|
||||||
|
php:
|
||||||
|
- "5.5"
|
||||||
|
- "5.4"
|
||||||
|
- "5.3"
|
||||||
|
env:
|
||||||
|
- DOKUWIKI=master
|
||||||
|
- DOKUWIKI=stable
|
||||||
|
before_install: wget https://raw.github.com/splitbrain/dokuwiki-travis/master/travis.sh
|
||||||
|
install: sh travis.sh
|
||||||
|
script: cd _test && phpunit --stderr --group plugin_styling
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
name: Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
name: PHP ${{ matrix.php }}
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
php: ['7.3', '7.4', '8.0', '8.1', '8.2']
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
tools: composer:v2
|
||||||
|
coverage: none
|
||||||
|
|
||||||
|
- name: Setup Problem Matchers
|
||||||
|
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
|
||||||
|
|
||||||
|
- name: Install PHP Dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
command: composer update --no-interaction --no-progress
|
||||||
|
|
||||||
|
- name: Execute PHPUnit
|
||||||
|
run: vendor/bin/phpunit
|
||||||
1
docker-compose/productivity/nextcloud/html/apps/photos/vendor/hexogen/kdtree/.styleci.yml
vendored
Normal file
1
docker-compose/productivity/nextcloud/html/apps/photos/vendor/hexogen/kdtree/.styleci.yml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
preset: psr2
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
name: Continuous Integration
|
||||||
|
|
||||||
|
on:
|
||||||
|
push: null
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
unit_tests:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.1'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.2'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.3'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
|
||||||
|
- operating-system: 'windows-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
|
||||||
|
- operating-system: 'macos-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
|
||||||
|
name: PHP ${{ matrix.php-version }} on ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-version }}
|
||||||
|
|
||||||
|
- name: Use LF line ends
|
||||||
|
run: |
|
||||||
|
git config --global core.autocrlf false
|
||||||
|
git config --global core.eol lf
|
||||||
|
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Get Composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-dir)"
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
|
||||||
|
restore-keys: |
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
retry_wait_seconds: 30
|
||||||
|
command: |
|
||||||
|
php_version=$(php -v)
|
||||||
|
composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
|
||||||
|
composer info -D
|
||||||
|
|
||||||
|
- name: Run unit tests
|
||||||
|
run: vendor/bin/phpunit --verbose
|
||||||
|
|
||||||
|
coding_standards:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
|
||||||
|
name: Coding standards
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-version }}
|
||||||
|
|
||||||
|
- name: Use LF line ends
|
||||||
|
run: |
|
||||||
|
git config --global core.autocrlf false
|
||||||
|
git config --global core.eol lf
|
||||||
|
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Get Composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-dir)"
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
|
||||||
|
restore-keys: |
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
retry_wait_seconds: 30
|
||||||
|
command: |
|
||||||
|
php_version=$(php -v)
|
||||||
|
composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
|
||||||
|
composer info -D
|
||||||
|
|
||||||
|
- name: Run style fixer
|
||||||
|
env:
|
||||||
|
PHP_CS_FIXER_IGNORE_ENV: 1
|
||||||
|
run: vendor/bin/php-cs-fixer --diff --dry-run -v fix
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
name: Continuous Integration
|
||||||
|
|
||||||
|
on:
|
||||||
|
- push
|
||||||
|
- pull_request
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.1'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.2'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.3'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
|
||||||
|
- operating-system: 'windows-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
job-description: 'on Windows'
|
||||||
|
|
||||||
|
- operating-system: 'macos-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
job-description: 'on macOS'
|
||||||
|
|
||||||
|
name: PHP ${{ matrix.php-version }} ${{ matrix.job-description }}
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Set git to use LF
|
||||||
|
run: |
|
||||||
|
git config --global core.autocrlf false
|
||||||
|
git config --global core.eol lf
|
||||||
|
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-version }}
|
||||||
|
extensions: parallel
|
||||||
|
|
||||||
|
- name: Get Composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-dir)"
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
|
||||||
|
restore-keys: |
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-
|
||||||
|
composer-${{ runner.os }}-
|
||||||
|
composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
retry_wait_seconds: 30
|
||||||
|
command: |
|
||||||
|
composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
|
||||||
|
composer info -D
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: vendor/bin/phpunit ${{ matrix.phpunit-flags }}
|
||||||
|
|
||||||
|
- name: Run style fixer
|
||||||
|
run: vendor/bin/php-cs-fixer --diff --dry-run -v fix
|
||||||
|
env:
|
||||||
|
PHP_CS_FIXER_IGNORE_ENV: 1
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
build: false
|
||||||
|
shallow_clone: false
|
||||||
|
|
||||||
|
platform:
|
||||||
|
- x86
|
||||||
|
- x64
|
||||||
|
|
||||||
|
clone_folder: c:\projects\amphp
|
||||||
|
|
||||||
|
cache:
|
||||||
|
- c:\tools\php73 -> appveyor.yml
|
||||||
|
|
||||||
|
init:
|
||||||
|
- SET PATH=C:\Program Files\OpenSSL;c:\tools\php73;%PATH%
|
||||||
|
- SET COMPOSER_NO_INTERACTION=1
|
||||||
|
- SET PHP=1
|
||||||
|
- SET ANSICON=121x90 (121x90)
|
||||||
|
|
||||||
|
install:
|
||||||
|
- IF EXIST c:\tools\php73 (SET PHP=0)
|
||||||
|
- IF %PHP%==1 sc config wuauserv start= auto
|
||||||
|
- IF %PHP%==1 net start wuauserv
|
||||||
|
- IF %PHP%==1 cinst -y OpenSSL.Light
|
||||||
|
- IF %PHP%==1 cinst -y php
|
||||||
|
- cd c:\tools\php73
|
||||||
|
- IF %PHP%==1 copy php.ini-production php.ini /Y
|
||||||
|
- IF %PHP%==1 echo date.timezone="UTC" >> php.ini
|
||||||
|
- IF %PHP%==1 echo extension_dir=ext >> php.ini
|
||||||
|
- IF %PHP%==1 echo extension=php_openssl.dll >> php.ini
|
||||||
|
- IF %PHP%==1 echo extension=php_mbstring.dll >> php.ini
|
||||||
|
- IF %PHP%==1 echo extension=php_fileinfo.dll >> php.ini
|
||||||
|
- cd c:\projects\amphp
|
||||||
|
- appveyor DownloadFile https://getcomposer.org/composer.phar
|
||||||
|
- php composer.phar install --prefer-dist --no-progress
|
||||||
|
|
||||||
|
test_script:
|
||||||
|
- cd c:\projects\amphp
|
||||||
|
- phpdbg -qrr vendor/phpunit/phpunit/phpunit --colors=always --coverage-text --coverage-clover build/logs/clover.xml
|
||||||
|
# Disable for now, because it can't be combined and files can't be shown on coveralls.io
|
||||||
|
# https://github.com/php-coveralls/php-coveralls/issues/234
|
||||||
|
# - vendor/bin/coveralls -v
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
kramdown:
|
||||||
|
input: GFM
|
||||||
|
toc_levels: 2..3
|
||||||
|
|
||||||
|
baseurl: "/parallel"
|
||||||
|
layouts_dir: ".shared/layout"
|
||||||
|
includes_dir: ".shared/includes"
|
||||||
|
|
||||||
|
exclude: ["Gemfile", "Gemfile.lock", "README.md", "vendor"]
|
||||||
|
safe: true
|
||||||
|
|
||||||
|
repository: amphp/parallel
|
||||||
|
gems:
|
||||||
|
- "jekyll-github-metadata"
|
||||||
|
- "jekyll-relative-links"
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
- scope:
|
||||||
|
path: ""
|
||||||
|
type: "pages"
|
||||||
|
values:
|
||||||
|
layout: "docs"
|
||||||
|
|
||||||
|
shared_asset_path: "/parallel/asset"
|
||||||
|
|
||||||
|
navigation:
|
||||||
|
- processes
|
||||||
|
- workers
|
||||||
|
- worker-pool
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
name: Continuous Integration
|
||||||
|
|
||||||
|
on:
|
||||||
|
- push
|
||||||
|
- pull_request
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.1'
|
||||||
|
|
||||||
|
- operating-system: 'windows-latest'
|
||||||
|
php-version: '8.1'
|
||||||
|
job-description: 'on Windows'
|
||||||
|
|
||||||
|
- operating-system: 'macos-latest'
|
||||||
|
php-version: '8.1'
|
||||||
|
job-description: 'on macOS'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.2'
|
||||||
|
|
||||||
|
name: PHP ${{ matrix.php-version }} ${{ matrix.job-description }}
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Set git to use LF
|
||||||
|
run: |
|
||||||
|
git config --global core.autocrlf false
|
||||||
|
git config --global core.eol lf
|
||||||
|
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-version }}
|
||||||
|
|
||||||
|
- name: Get Composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-dir)"
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
|
||||||
|
restore-keys: |
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-
|
||||||
|
composer-${{ runner.os }}-
|
||||||
|
composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
retry_wait_seconds: 30
|
||||||
|
command: |
|
||||||
|
composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
|
||||||
|
composer info -D
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: vendor/bin/phpunit ${{ matrix.phpunit-flags }}
|
||||||
|
|
||||||
|
- name: Run static analysis
|
||||||
|
run: vendor/bin/psalm.phar
|
||||||
|
|
||||||
|
- name: Run style fixer
|
||||||
|
env:
|
||||||
|
PHP_CS_FIXER_IGNORE_ENV: 1
|
||||||
|
run: vendor/bin/php-cs-fixer --diff --dry-run -v fix
|
||||||
|
if: runner.os != 'Windows'
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
name: Continuous Integration
|
||||||
|
|
||||||
|
on:
|
||||||
|
push: null
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
unit_tests:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.0'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.1'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.2'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.3'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
|
||||||
|
- operating-system: 'windows-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
|
||||||
|
- operating-system: 'macos-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
|
||||||
|
name: PHP ${{ matrix.php-version }} on ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-version }}
|
||||||
|
|
||||||
|
- name: Use LF line ends
|
||||||
|
run: |
|
||||||
|
git config --global core.autocrlf false
|
||||||
|
git config --global core.eol lf
|
||||||
|
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Get Composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-dir)"
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
|
||||||
|
restore-keys: |
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
retry_wait_seconds: 30
|
||||||
|
command: |
|
||||||
|
php_version=$(php -v)
|
||||||
|
composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
|
||||||
|
composer info -D
|
||||||
|
|
||||||
|
- name: Run unit tests
|
||||||
|
run: vendor/bin/phpunit --verbose
|
||||||
|
|
||||||
|
coding_standards:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
|
||||||
|
name: Coding standards
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-version }}
|
||||||
|
|
||||||
|
- name: Use LF line ends
|
||||||
|
run: |
|
||||||
|
git config --global core.autocrlf false
|
||||||
|
git config --global core.eol lf
|
||||||
|
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Get Composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-dir)"
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
|
||||||
|
restore-keys: |
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
retry_wait_seconds: 30
|
||||||
|
command: |
|
||||||
|
php_version=$(php -v)
|
||||||
|
composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
|
||||||
|
composer info -D
|
||||||
|
|
||||||
|
- name: Run style fixer
|
||||||
|
env:
|
||||||
|
PHP_CS_FIXER_IGNORE_ENV: 1
|
||||||
|
run: vendor/bin/php-cs-fixer --diff --dry-run -v fix
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
name: Continuous Integration
|
||||||
|
|
||||||
|
on:
|
||||||
|
- push
|
||||||
|
- pull_request
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.1'
|
||||||
|
composer-require-checker-version: none
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.2'
|
||||||
|
composer-require-checker-version: 2.1.0
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.3'
|
||||||
|
composer-require-checker-version: 2.1.0
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
composer-require-checker-version: 3.3.0
|
||||||
|
|
||||||
|
- operating-system: 'ubuntu-latest'
|
||||||
|
php-version: '8.0'
|
||||||
|
composer-flags: '--ignore-platform-req=php'
|
||||||
|
composer-require-checker-version: 3.3.0
|
||||||
|
|
||||||
|
- operating-system: 'windows-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
composer-require-checker-version: 3.3.0
|
||||||
|
job-description: 'on Windows'
|
||||||
|
|
||||||
|
- operating-system: 'macos-latest'
|
||||||
|
php-version: '7.4'
|
||||||
|
composer-require-checker-version: 3.3.0
|
||||||
|
job-description: 'on macOS'
|
||||||
|
|
||||||
|
name: PHP ${{ matrix.php-version }} ${{ matrix.job-description }}
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Set git to use LF
|
||||||
|
run: |
|
||||||
|
git config --global core.autocrlf false
|
||||||
|
git config --global core.eol lf
|
||||||
|
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-version }}
|
||||||
|
|
||||||
|
- name: Get Composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-dir)"
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
|
||||||
|
restore-keys: |
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
|
||||||
|
composer-${{ runner.os }}-${{ matrix.php-version }}-
|
||||||
|
composer-${{ runner.os }}-
|
||||||
|
composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
uses: nick-invision/retry@v2
|
||||||
|
with:
|
||||||
|
timeout_minutes: 5
|
||||||
|
max_attempts: 5
|
||||||
|
retry_wait_seconds: 30
|
||||||
|
command: |
|
||||||
|
composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
|
||||||
|
composer info -D
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: vendor/bin/phpunit ${{ matrix.phpunit-flags }}
|
||||||
|
|
||||||
|
- name: Run style fixer
|
||||||
|
run: vendor/bin/php-cs-fixer --diff --dry-run -v fix
|
||||||
|
env:
|
||||||
|
PHP_CS_FIXER_IGNORE_ENV: 1
|
||||||
|
|
||||||
|
- name: Install composer-require-checker
|
||||||
|
run: php -r 'file_put_contents("composer-require-checker.phar", file_get_contents("https://github.com/maglnet/ComposerRequireChecker/releases/download/${{ matrix.composer-require-checker-version }}/composer-require-checker.phar"));'
|
||||||
|
if: runner.os != 'Windows' && matrix.composer-require-checker-version != 'none'
|
||||||
|
|
||||||
|
- name: Run composer-require-checker
|
||||||
|
run: php composer-require-checker.phar check composer.json --config-file $PWD/composer-require-check.json
|
||||||
|
if: runner.os != 'Windows' && matrix.composer-require-checker-version != 'none'
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
kramdown:
|
||||||
|
input: GFM
|
||||||
|
toc_levels: 2..3
|
||||||
|
|
||||||
|
baseurl: "/sync"
|
||||||
|
layouts_dir: ".shared/layout"
|
||||||
|
includes_dir: ".shared/includes"
|
||||||
|
|
||||||
|
exclude: ["Gemfile", "Gemfile.lock", "README.md", "vendor"]
|
||||||
|
safe: true
|
||||||
|
|
||||||
|
repository: amphp/sync
|
||||||
|
gems:
|
||||||
|
- "jekyll-github-metadata"
|
||||||
|
- "jekyll-relative-links"
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
- scope:
|
||||||
|
path: ""
|
||||||
|
type: "pages"
|
||||||
|
values:
|
||||||
|
layout: "docs"
|
||||||
|
|
||||||
|
shared_asset_path: "/sync/asset"
|
||||||
|
|
||||||
|
navigation:
|
||||||
|
- mutex
|
||||||
|
- semaphore
|
||||||
|
- concurrent-iterator
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
webdav:
|
||||||
|
image: bytemark/webdav
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
environment:
|
||||||
|
AUTH_TYPE: Digest
|
||||||
|
USERNAME: alice
|
||||||
|
PASSWORD: secret1234
|
||||||
|
sftp:
|
||||||
|
container_name: sftp
|
||||||
|
restart: always
|
||||||
|
image: atmoz/sftp
|
||||||
|
volumes:
|
||||||
|
- ./test_files/sftp/users.conf:/etc/sftp/users.conf
|
||||||
|
- ./test_files/sftp/ssh_host_ed25519_key:/etc/ssh/ssh_host_ed25519_key
|
||||||
|
- ./test_files/sftp/ssh_host_rsa_key:/etc/ssh/ssh_host_rsa_key
|
||||||
|
- ./test_files/sftp/id_rsa.pub:/home/bar/.ssh/keys/id_rsa.pub
|
||||||
|
ports:
|
||||||
|
- "2222:22"
|
||||||
|
ftp:
|
||||||
|
container_name: ftp
|
||||||
|
restart: always
|
||||||
|
image: delfer/alpine-ftp-server
|
||||||
|
environment:
|
||||||
|
USERS: 'foo|pass|/home/foo/upload'
|
||||||
|
ADDRESS: 'localhost'
|
||||||
|
ports:
|
||||||
|
- "2121:21"
|
||||||
|
- "21000-21010:21000-21010"
|
||||||
|
ftpd:
|
||||||
|
container_name: ftpd
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
PUBLICHOST: localhost
|
||||||
|
FTP_USER_NAME: foo
|
||||||
|
FTP_USER_PASS: pass
|
||||||
|
FTP_USER_HOME: /home/foo
|
||||||
|
image: stilliard/pure-ftpd
|
||||||
|
ports:
|
||||||
|
- "2122:21"
|
||||||
|
- "30000-30009:30000-30009"
|
||||||
|
command: "/run.sh -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -j -P localhost"
|
||||||
|
toxiproxy:
|
||||||
|
container_name: toxiproxy
|
||||||
|
restart: unless-stopped
|
||||||
|
image: ghcr.io/shopify/toxiproxy
|
||||||
|
command: "-host 0.0.0.0 -config /opt/toxiproxy/config.json"
|
||||||
|
volumes:
|
||||||
|
- ./test_files/toxiproxy/toxiproxy.json:/opt/toxiproxy/config.json:ro
|
||||||
|
ports:
|
||||||
|
- "8474:8474" # HTTP API
|
||||||
|
- "8222:8222" # SFTP
|
||||||
|
- "8121:8121" # FTP
|
||||||
|
- "8122:8122" # FTPD
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
github: [RubixML, andrewdalpino]
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
name: "Code Checks"
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
Build:
|
||||||
|
name: PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }}
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
operating-system: [windows-latest, ubuntu-latest, macos-latest]
|
||||||
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
tools: pecl
|
||||||
|
extensions: svm, mbstring, redis, igbinary, gd, fileinfo
|
||||||
|
ini-values: memory_limit=-1
|
||||||
|
|
||||||
|
- name: Validate composer.json
|
||||||
|
run: composer validate
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: composer install
|
||||||
|
|
||||||
|
- name: Static Analysis
|
||||||
|
run: composer analyze
|
||||||
|
|
||||||
|
- name: Unit Tests
|
||||||
|
run: composer test
|
||||||
|
|
||||||
|
- name: Coding Style
|
||||||
|
run: composer check
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
name: "CLA Assistant"
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened, closed, synchronize]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
CLAssistant:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: "CLA Assistant"
|
||||||
|
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
|
||||||
|
uses: cla-assistant/github-action@v2.0.2-alpha
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
PERSONAL_ACCESS_TOKEN : ${{ secrets.CLA_BOT_TOKEN }}
|
||||||
|
with:
|
||||||
|
remote-organization-name: 'RubixML'
|
||||||
|
remote-repository-name: 'Signatures'
|
||||||
|
path-to-document: 'https://github.com/RubixML/Signatures/blob/master/CLA.md'
|
||||||
|
path-to-signatures: 'cla-v1.json'
|
||||||
|
branch: 'master'
|
||||||
|
allowlist: bot*
|
||||||
331
docker-compose/productivity/nextcloud/html/apps/suspicious_login/vendor/rubix/ml/mkdocs.yml
vendored
Normal file
331
docker-compose/productivity/nextcloud/html/apps/suspicious_login/vendor/rubix/ml/mkdocs.yml
vendored
Normal file
@@ -0,0 +1,331 @@
|
|||||||
|
site_name: 'Rubix ML'
|
||||||
|
|
||||||
|
theme:
|
||||||
|
name: material
|
||||||
|
logo: images/app-icon-medium.png
|
||||||
|
favicon: images/app-icon-small.png
|
||||||
|
icon:
|
||||||
|
repo: fontawesome/brands/github
|
||||||
|
features:
|
||||||
|
- navigation.tabs
|
||||||
|
|
||||||
|
nav:
|
||||||
|
- Home: https://rubixml.com
|
||||||
|
- Getting Started:
|
||||||
|
- Welcome: index.md
|
||||||
|
- What is Machine Learning?: what-is-machine-learning.md
|
||||||
|
- Installation: installation.md
|
||||||
|
- Basic Introduction: basic-introduction.md
|
||||||
|
- User Guide:
|
||||||
|
- Representing Your Data: representing-your-data.md
|
||||||
|
- Extracting Data: extracting-data.md
|
||||||
|
- Preprocessing: preprocessing.md
|
||||||
|
- Choosing an Estimator: choosing-an-estimator.md
|
||||||
|
- Training: training.md
|
||||||
|
- Inference: inference.md
|
||||||
|
- Cross-validation: cross-validation.md
|
||||||
|
- Hyper-parameter Tuning: hyper-parameter-tuning.md
|
||||||
|
- Model Persistence: model-persistence.md
|
||||||
|
- API Reference:
|
||||||
|
- Fundamental Interfaces:
|
||||||
|
- Estimator: estimator.md
|
||||||
|
- Learner: learner.md
|
||||||
|
- Online: online.md
|
||||||
|
- Parallel: parallel.md
|
||||||
|
- Persistable: persistable.md
|
||||||
|
- Probabilistic: probabilistic.md
|
||||||
|
- Ranks Features: ranks-features.md
|
||||||
|
- Scoring: scoring.md
|
||||||
|
- Verbose: verbose.md
|
||||||
|
- Wrapper: wrapper.md
|
||||||
|
- Extractors:
|
||||||
|
- API Reference: extractors/api.md
|
||||||
|
- Column Picker: extractors/column-picker.md
|
||||||
|
- CSV: extractors/csv.md
|
||||||
|
- JSON: extractors/json.md
|
||||||
|
- NDJSON: extractors/ndjson.md
|
||||||
|
- Dataset Objects:
|
||||||
|
- API Reference: datasets/api.md
|
||||||
|
- Generators:
|
||||||
|
- API Reference: datasets/generators/api.md
|
||||||
|
- Agglomerate: datasets/generators/agglomerate.md
|
||||||
|
- Blob: datasets/generators/blob.md
|
||||||
|
- Circle: datasets/generators/circle.md
|
||||||
|
- Half Moon: datasets/generators/half-moon.md
|
||||||
|
- Hyperplane: datasets/generators/hyperplane.md
|
||||||
|
- Swiss Roll: datasets/generators/swiss-roll.md
|
||||||
|
- Labeled: datasets/labeled.md
|
||||||
|
- Unlabeled: datasets/unlabeled.md
|
||||||
|
- Classifiers:
|
||||||
|
- AdaBoost: classifiers/adaboost.md
|
||||||
|
- Classification Tree: classifiers/classification-tree.md
|
||||||
|
- Dummy Classifier: classifiers/dummy-classifier.md
|
||||||
|
- Extra Tree Classifier: classifiers/extra-tree-classifier.md
|
||||||
|
- Gaussian Naive Bayes: classifiers/gaussian-naive-bayes.md
|
||||||
|
- K-d Neighbors: classifiers/kd-neighbors.md
|
||||||
|
- K Nearest Neighbors: classifiers/k-nearest-neighbors.md
|
||||||
|
- Logistic Regression: classifiers/logistic-regression.md
|
||||||
|
- Multilayer Perceptron: classifiers/multilayer-perceptron.md
|
||||||
|
- Naive Bayes: classifiers/naive-bayes.md
|
||||||
|
- Radius Neighbors: classifiers/radius-neighbors.md
|
||||||
|
- Random Forest: classifiers/random-forest.md
|
||||||
|
- Softmax Classifier: classifiers/softmax-classifier.md
|
||||||
|
- SVC: classifiers/svc.md
|
||||||
|
- Regressors:
|
||||||
|
- Adaline: regressors/adaline.md
|
||||||
|
- Dummy Regressor: regressors/dummy-regressor.md
|
||||||
|
- Extra Tree Regressor: regressors/extra-tree-regressor.md
|
||||||
|
- Gradient Boost: regressors/gradient-boost.md
|
||||||
|
- K-d Neighbors Regressor: regressors/kd-neighbors-regressor.md
|
||||||
|
- KNN Regressor: regressors/knn-regressor.md
|
||||||
|
- MLP Regressor: regressors/mlp-regressor.md
|
||||||
|
- Radius Neighbors Regressor: regressors/radius-neighbors-regressor.md
|
||||||
|
- Regression Tree: regressors/regression-tree.md
|
||||||
|
- Ridge: regressors/ridge.md
|
||||||
|
- SVR: regressors/svr.md
|
||||||
|
- Clusterers:
|
||||||
|
- Seeders:
|
||||||
|
- K-MC2: clusterers/seeders/k-mc2.md
|
||||||
|
- Plus Plus: clusterers/seeders/plus-plus.md
|
||||||
|
- Random: clusterers/seeders/random.md
|
||||||
|
- DBSCAN: clusterers/dbscan.md
|
||||||
|
- Fuzzy C Means: clusterers/fuzzy-c-means.md
|
||||||
|
- Gaussian Mixture: clusterers/gaussian-mixture.md
|
||||||
|
- K Means: clusterers/k-means.md
|
||||||
|
- Mean Shift: clusterers/mean-shift.md
|
||||||
|
- Anomaly Detectors:
|
||||||
|
- Gaussian MLE: anomaly-detectors/gaussian-mle.md
|
||||||
|
- Isolation Forest: anomaly-detectors/isolation-forest.md
|
||||||
|
- Loda: anomaly-detectors/loda.md
|
||||||
|
- Local Outlier Factor: anomaly-detectors/local-outlier-factor.md
|
||||||
|
- One Class SVM: anomaly-detectors/one-class-svm.md
|
||||||
|
- Robust Z-Score: anomaly-detectors/robust-z-score.md
|
||||||
|
- Meta Estimators:
|
||||||
|
- Bootstrap Aggregator: bootstrap-aggregator.md
|
||||||
|
- Committee Machine: committee-machine.md
|
||||||
|
- Grid Search: grid-search.md
|
||||||
|
- Persistent Model: persistent-model.md
|
||||||
|
- Pipeline: pipeline.md
|
||||||
|
- Embedders:
|
||||||
|
- API Reference: embedders/api.md
|
||||||
|
- t-SNE: embedders/t-sne.md
|
||||||
|
- Transformers:
|
||||||
|
- API Reference: transformers/api.md
|
||||||
|
- Standardization and Normalization:
|
||||||
|
- L1 Normalizer: transformers/l1-normalizer.md
|
||||||
|
- L2 Normalizer: transformers/l2-normalizer.md
|
||||||
|
- Max Absolute Scaler: transformers/max-absolute-scaler.md
|
||||||
|
- Min Max Normalizer: transformers/min-max-normalizer.md
|
||||||
|
- Robust Standardizer: transformers/robust-standardizer.md
|
||||||
|
- Z Scale Standardizer: transformers/z-scale-standardizer.md
|
||||||
|
- Dimensionality Reduction:
|
||||||
|
- Dense Random Projector: transformers/dense-random-projector.md
|
||||||
|
- Gaussian Random Projector: transformers/gaussian-random-projector.md
|
||||||
|
- Linear Discriminant Analysis: transformers/linear-discriminant-analysis.md
|
||||||
|
- Principal Component Analysis: transformers/principal-component-analysis.md
|
||||||
|
- Sparse Random Projector: transformers/sparse-random-projector.md
|
||||||
|
- Truncated SVD: transformers/truncated-svd.md
|
||||||
|
- Feature Conversion:
|
||||||
|
- Interval Discretizer: transformers/interval-discretizer.md
|
||||||
|
- One Hot Encoder: transformers/one-hot-encoder.md
|
||||||
|
- Numeric String Converter: transformers/numeric-string-converter.md
|
||||||
|
- Boolean Converter: transformers/boolean-converter.md
|
||||||
|
- Feature Selection:
|
||||||
|
- K Best Feature Selector: transformers/k-best-feature-selector.md
|
||||||
|
- Recursive Feature Eliminator: transformers/recursive-feature-eliminator.md
|
||||||
|
- Imputation:
|
||||||
|
- KNN Imputer: transformers/knn-imputer.md
|
||||||
|
- Missing Data Imputer: transformers/missing-data-imputer.md
|
||||||
|
- Random Hot Deck Imputer: transformers/random-hot-deck-imputer.md
|
||||||
|
- Image Transformers:
|
||||||
|
- Image Resizer: transformers/image-resizer.md
|
||||||
|
- Image Vectorizer: transformers/image-vectorizer.md
|
||||||
|
- Text Transformers:
|
||||||
|
- HTML Stripper: transformers/html-stripper.md
|
||||||
|
- Regex Filter: transformers/regex-filter.md
|
||||||
|
- Text Normalizer: transformers/text-normalizer.md
|
||||||
|
- Multibyte Text Normalizer: transformers/multibyte-text-normalizer.md
|
||||||
|
- Stop Word Filter: transformers/stop-word-filter.md
|
||||||
|
- TF-IDF Transformer: transformers/tf-idf-transformer.md
|
||||||
|
- Whitespace Trimmer: transformers/whitespace-trimmer.md
|
||||||
|
- Word Count Vectorizer: transformers/word-count-vectorizer.md
|
||||||
|
- Other:
|
||||||
|
- Polynomial Expander: transformers/polynomial-expander.md
|
||||||
|
- Neural Network:
|
||||||
|
- Hidden Layers:
|
||||||
|
- Activation: neural-network/hidden-layers/activation.md
|
||||||
|
- Batch Norm: neural-network/hidden-layers/batch-norm.md
|
||||||
|
- Dense: neural-network/hidden-layers/dense.md
|
||||||
|
- Dropout: neural-network/hidden-layers/dropout.md
|
||||||
|
- Noise: neural-network/hidden-layers/noise.md
|
||||||
|
- PReLU: neural-network/hidden-layers/prelu.md
|
||||||
|
- Activation Functions:
|
||||||
|
- ELU: neural-network/activation-functions/elu.md
|
||||||
|
- Hyperbolic Tangent: neural-network/activation-functions/hyperbolic-tangent.md
|
||||||
|
- Leaky ReLU: neural-network/activation-functions/leaky-relu.md
|
||||||
|
- ReLU: neural-network/activation-functions/relu.md
|
||||||
|
- SELU: neural-network/activation-functions/selu.md
|
||||||
|
- Sigmoid: neural-network/activation-functions/sigmoid.md
|
||||||
|
- Softmax: neural-network/activation-functions/softmax.md
|
||||||
|
- Soft Plus: neural-network/activation-functions/soft-plus.md
|
||||||
|
- Soft Sign: neural-network/activation-functions/softsign.md
|
||||||
|
- Thresholded ReLU: neural-network/activation-functions/thresholded-relu.md
|
||||||
|
- Cost Functions:
|
||||||
|
- Cross Entropy: neural-network/cost-functions/cross-entropy.md
|
||||||
|
- Huber Loss: neural-network/cost-functions/huber-loss.md
|
||||||
|
- Least Squares: neural-network/cost-functions/least-squares.md
|
||||||
|
- Relative Entropy: neural-network/cost-functions/relative-entropy.md
|
||||||
|
- Initializers:
|
||||||
|
- Constant: neural-network/initializers/constant.md
|
||||||
|
- He: neural-network/initializers/he.md
|
||||||
|
- LeCun: neural-network/initializers/lecun.md
|
||||||
|
- Normal: neural-network/initializers/normal.md
|
||||||
|
- Uniform: neural-network/initializers/uniform.md
|
||||||
|
- Xavier 1: neural-network/initializers/xavier-1.md
|
||||||
|
- Xavier 2: neural-network/initializers/xavier-2.md
|
||||||
|
- Optimizers:
|
||||||
|
- AdaGrad: neural-network/optimizers/adagrad.md
|
||||||
|
- Adam: neural-network/optimizers/adam.md
|
||||||
|
- AdaMax: neural-network/optimizers/adamax.md
|
||||||
|
- Cyclical: neural-network/optimizers/cyclical.md
|
||||||
|
- Momentum: neural-network/optimizers/momentum.md
|
||||||
|
- RMS Prop: neural-network/optimizers/rms-prop.md
|
||||||
|
- Step Decay: neural-network/optimizers/step-decay.md
|
||||||
|
- Stochastic: neural-network/optimizers/stochastic.md
|
||||||
|
- Graph:
|
||||||
|
- Trees:
|
||||||
|
- Ball Tree: graph/trees/ball-tree.md
|
||||||
|
- K-d Tree: graph/trees/k-d-tree.md
|
||||||
|
- Kernels:
|
||||||
|
- Distance:
|
||||||
|
- Canberra: kernels/distance/canberra.md
|
||||||
|
- Cosine: kernels/distance/cosine.md
|
||||||
|
- Diagonal: kernels/distance/diagonal.md
|
||||||
|
- Euclidean: kernels/distance/euclidean.md
|
||||||
|
- Hamming: kernels/distance/hamming.md
|
||||||
|
- Jaccard: kernels/distance/jaccard.md
|
||||||
|
- Manhattan: kernels/distance/manhattan.md
|
||||||
|
- Minkowski: kernels/distance/minkowski.md
|
||||||
|
- Safe Euclidean: kernels/distance/safe-euclidean.md
|
||||||
|
- SVM:
|
||||||
|
- Linear: kernels/svm/linear.md
|
||||||
|
- Polynomial: kernels/svm/polynomial.md
|
||||||
|
- RBF: kernels/svm/rbf.md
|
||||||
|
- Sigmoidal: kernels/svm/sigmoidal.md
|
||||||
|
- Cross Validation:
|
||||||
|
- Metrics:
|
||||||
|
- API Reference: cross-validation/metrics/api.md
|
||||||
|
- Accuracy: cross-validation/metrics/accuracy.md
|
||||||
|
- F Beta: cross-validation/metrics/f-beta.md
|
||||||
|
- Informedness: cross-validation/metrics/informedness.md
|
||||||
|
- MCC: cross-validation/metrics/mcc.md
|
||||||
|
- Mean Absolute Error: cross-validation/metrics/mean-absolute-error.md
|
||||||
|
- Mean Squared Error: cross-validation/metrics/mean-squared-error.md
|
||||||
|
- Median Absolute Error: cross-validation/metrics/median-absolute-error.md
|
||||||
|
- RMSE: cross-validation/metrics/rmse.md
|
||||||
|
- R Squared: cross-validation/metrics/r-squared.md
|
||||||
|
- SMAPE: cross-validation/metrics/smape.md
|
||||||
|
- Completeness: cross-validation/metrics/completeness.md
|
||||||
|
- Homogeneity: cross-validation/metrics/homogeneity.md
|
||||||
|
- Rand Index: cross-validation/metrics/rand-index.md
|
||||||
|
- V Measure: cross-validation/metrics/v-measure.md
|
||||||
|
- Reports:
|
||||||
|
- API Reference: cross-validation/reports/api.md
|
||||||
|
- Aggregate Report: cross-validation/reports/aggregate-report.md
|
||||||
|
- Confusion Matrix: cross-validation/reports/confusion-matrix.md
|
||||||
|
- Contingency Table: cross-validation/reports/contingency-table.md
|
||||||
|
- Error Analysis: cross-validation/reports/error-analysis.md
|
||||||
|
- Multiclass Breakdown: cross-validation/reports/multiclass-breakdown.md
|
||||||
|
- Validators:
|
||||||
|
- API Reference: cross-validation/api.md
|
||||||
|
- Hold Out: cross-validation/hold-out.md
|
||||||
|
- K Fold: cross-validation/k-fold.md
|
||||||
|
- Leave P Out: cross-validation/leave-p-out.md
|
||||||
|
- Monte Carlo: cross-validation/monte-carlo.md
|
||||||
|
- Persisters:
|
||||||
|
- API Reference: persisters/api.md
|
||||||
|
- Filesystem: persisters/filesystem.md
|
||||||
|
- Flysystem: persisters/flysystem.md
|
||||||
|
- Redis DB: persisters/redis-db.md
|
||||||
|
- Serializers:
|
||||||
|
- Gzip: persisters/serializers/gzip.md
|
||||||
|
- Igbinary: persisters/serializers/igbinary.md
|
||||||
|
- Native: persisters/serializers/native.md
|
||||||
|
- RBX: persisters/serializers/rbx.md
|
||||||
|
- Backends:
|
||||||
|
- Amp: backends/amp.md
|
||||||
|
- Serial: backends/serial.md
|
||||||
|
- Other:
|
||||||
|
- Helpers:
|
||||||
|
- Params: other/helpers/params.md
|
||||||
|
- Loggers:
|
||||||
|
- Screen: other/loggers/screen.md
|
||||||
|
- Strategies:
|
||||||
|
- Constant: other/strategies/constant.md
|
||||||
|
- K Most Frequent: other/strategies/k-most-frequent.md
|
||||||
|
- Mean: other/strategies/mean.md
|
||||||
|
- Percentile: other/strategies/percentile.md
|
||||||
|
- Prior: other/strategies/prior.md
|
||||||
|
- Wild Guess: other/strategies/wild-guess.md
|
||||||
|
- Tokenizers:
|
||||||
|
- K-Skip-N-Gram: other/tokenizers/k-skip-n-gram.md
|
||||||
|
- N-Gram: other/tokenizers/n-gram.md
|
||||||
|
- Sentence: other/tokenizers/sentence.md
|
||||||
|
- Skip Gram: other/tokenizers/skip-gram.md
|
||||||
|
- Whitespace: other/tokenizers/whitespace.md
|
||||||
|
- Word: other/tokenizers/word.md
|
||||||
|
- FAQ: faq.md
|
||||||
|
|
||||||
|
extra:
|
||||||
|
version:
|
||||||
|
provider: mike
|
||||||
|
social:
|
||||||
|
- icon: fontawesome/brands/github
|
||||||
|
link: https://github.com/RubixML
|
||||||
|
- icon: fontawesome/brands/telegram
|
||||||
|
link: https://t.me/RubixML
|
||||||
|
- icon: fontawesome/brands/twitter
|
||||||
|
link: https://twitter.com/RubixML
|
||||||
|
- icon: fontawesome/brands/linkedin
|
||||||
|
link: https://www.linkedin.com/groups/8952251/
|
||||||
|
|
||||||
|
use_directory_urls: false
|
||||||
|
|
||||||
|
plugins:
|
||||||
|
- search
|
||||||
|
- git-revision-date
|
||||||
|
|
||||||
|
markdown_extensions:
|
||||||
|
- attr_list
|
||||||
|
- abbr
|
||||||
|
- admonition
|
||||||
|
- pymdownx.highlight:
|
||||||
|
extend_pygments_lang:
|
||||||
|
- name: php
|
||||||
|
lang: php
|
||||||
|
options:
|
||||||
|
startinline: true
|
||||||
|
- pymdownx.superfences
|
||||||
|
- pymdownx.arithmatex:
|
||||||
|
generic: true
|
||||||
|
- toc:
|
||||||
|
permalink: "#"
|
||||||
|
- footnotes
|
||||||
|
|
||||||
|
google_analytics:
|
||||||
|
- UA-136137674-1
|
||||||
|
- auto
|
||||||
|
|
||||||
|
extra_javascript:
|
||||||
|
- https://polyfill.io/v3/polyfill.min.js?features=es6
|
||||||
|
- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
|
||||||
|
- js/custom.js
|
||||||
|
|
||||||
|
extra_css:
|
||||||
|
- css/custom.css
|
||||||
|
|
||||||
|
repo_url: https://github.com/RubixML/ML
|
||||||
|
site_url: https://rubixml.com
|
||||||
|
site_description: 'A high-level machine learning and deep learning library for the PHP language.'
|
||||||
|
|
||||||
|
copyright: '© 2021 Rubix ML'
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
github: [RubixML, andrewdalpino]
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
name: Compile extension
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/ci-ext.*"
|
||||||
|
- "ext/**"
|
||||||
|
- package.xml
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "**"
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/ci-ext.*"
|
||||||
|
- "ext/**"
|
||||||
|
- package.xml
|
||||||
|
tags-ignore:
|
||||||
|
- "**"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
compile:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
image:
|
||||||
|
- php:7.2-cli
|
||||||
|
- php:7.2-cli-alpine
|
||||||
|
- php:7.3-cli
|
||||||
|
- php:7.3-cli-alpine
|
||||||
|
- php:7.4-cli
|
||||||
|
- php:7.4-cli-alpine
|
||||||
|
name: Image ${{ matrix.image }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Pull docker image
|
||||||
|
run: docker pull ${{ matrix.image }}
|
||||||
|
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Compile
|
||||||
|
run: docker run --rm -v "$GITHUB_WORKSPACE:/app" ${{ matrix.image }} /app/.github/workflows/ci-ext.sh
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
name: "Code Checks"
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }}
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
operating-system: [windows-latest, ubuntu-latest, macos-latest]
|
||||||
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
ini-values: memory_limit=-1
|
||||||
|
|
||||||
|
- name: Validate composer.json
|
||||||
|
run: composer validate
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: composer install
|
||||||
|
|
||||||
|
- name: Static Analysis
|
||||||
|
run: composer analyze
|
||||||
|
|
||||||
|
- name: Run Unit Tests
|
||||||
|
run: composer test
|
||||||
|
|
||||||
|
- name: Check Coding Style
|
||||||
|
run: composer check
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
name: "CLA Assistant"
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened, closed, synchronize]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
CLAssistant:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: "CLA Assistant"
|
||||||
|
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
|
||||||
|
uses: cla-assistant/github-action@v2.0.2-alpha
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
PERSONAL_ACCESS_TOKEN : ${{ secrets.CLA_BOT_TOKEN }}
|
||||||
|
with:
|
||||||
|
remote-organization-name: 'RubixML'
|
||||||
|
remote-repository-name: 'Signatures'
|
||||||
|
path-to-document: 'https://github.com/RubixML/Signatures/blob/master/CLA.md'
|
||||||
|
path-to-signatures: 'cla-v1.json'
|
||||||
|
branch: 'master'
|
||||||
|
allowlist: bot*
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
language: php
|
||||||
|
php:
|
||||||
|
- 7.1
|
||||||
|
- 7.2
|
||||||
|
- 7.3
|
||||||
|
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- "$HOME/.composer/cache/files"
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- php --info
|
||||||
|
- composer self-update
|
||||||
|
- composer install
|
||||||
|
|
||||||
@@ -36,6 +36,8 @@ services:
|
|||||||
- "traefik.http.routers.backrest.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.backrest.tls.certresolver=letsencrypt"
|
||||||
- "traefik.http.routers.backrest.middlewares=authelia@docker"
|
- "traefik.http.routers.backrest.middlewares=authelia@docker"
|
||||||
- "traefik.http.services.backrest.loadbalancer.server.port=9898"
|
- "traefik.http.services.backrest.loadbalancer.server.port=9898"
|
||||||
|
- "x-dockge.url=https://backrest.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://backrest.${DOMAIN}"
|
||||||
|
|
||||||
# Duplicati - Backup solution
|
# Duplicati - Backup solution
|
||||||
# Access at: https://duplicati.${DOMAIN}
|
# Access at: https://duplicati.${DOMAIN}
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ services:
|
|||||||
- traefik.http.routers.backrest.tls.certresolver=letsencrypt
|
- traefik.http.routers.backrest.tls.certresolver=letsencrypt
|
||||||
- traefik.http.routers.backrest.middlewares=authelia@docker
|
- traefik.http.routers.backrest.middlewares=authelia@docker
|
||||||
- traefik.http.services.backrest.loadbalancer.server.port=9898
|
- traefik.http.services.backrest.loadbalancer.server.port=9898
|
||||||
|
- "x-dockge.url=https://backrest.${DOMAIN}"
|
||||||
|
- "x-dockge.url=https://backrest.${DOMAIN}"
|
||||||
# Duplicati - Backup solution
|
# Duplicati - Backup solution
|
||||||
# Access at: https://duplicati.${DOMAIN}
|
# Access at: https://duplicati.${DOMAIN}
|
||||||
duplicati:
|
duplicati:
|
||||||
|
|||||||
Reference in New Issue
Block a user