2021-12-17 09:38:07 -07:00
|
|
|
version: "3.8"
|
|
|
|
services:
|
|
|
|
traefik:
|
|
|
|
image: traefik
|
|
|
|
environment:
|
|
|
|
TRAEFIK_API: "true"
|
|
|
|
TRAEFIK_API_INSECURE: "true"
|
|
|
|
TRAEFIK_ENTRYPOINTS_WEB_ADDRESS: :80
|
|
|
|
TRAEFIK_ENTRYPOINTS_WEB_HTTP_REDIRECTIONS_ENTRYPOINT_TO: websecure
|
|
|
|
TRAEFIK_ENTRYPOINTS_WEB_HTTP_REDIRECTIONS_ENTRYPOINT_SCHEME: https
|
|
|
|
TRAEFIK_ENTRYPOINTS_WEBSECURE_ADDRESS: :443
|
|
|
|
TRAEFIK_ENTRYPOINTS_WEBSECURE_HTTP_TLS_CERTRESOLVER: letsencrypt
|
|
|
|
TRAEFIK_CERTIFICATESRESOLVERS_LETSENCYRPT_ACME_EMAIL: neale@woozle.org
|
|
|
|
TRAEFIK_CERTIFICATESRESOLVERS_LETSENCRYPT_ACME_STORAGE: /acme.json
|
|
|
|
XXX_TRAEFIK_CERTIFICATESRESOLVERS_LETSENCRYPT_ACME_HTTPCHALLENGE_ENTRYPOINT: web
|
|
|
|
TRAEFIK_CERTIFICATESRESOLVERS_LETSENCRYPT_ACME_TLSCHALLENGE: "true"
|
|
|
|
TRAEFIK_PROVIDERS_DOCKER_SWARMMODE: "true"
|
2022-02-28 17:27:13 -07:00
|
|
|
TRAEFIK_PROVIDERS_DOCKER_EXPOSEDBYDEFAULT: "true"
|
2021-12-17 09:38:07 -07:00
|
|
|
ports:
|
|
|
|
- target: 443
|
|
|
|
published: 443
|
|
|
|
mode: host
|
|
|
|
- target: 80
|
|
|
|
published: 80
|
|
|
|
mode: host
|
|
|
|
volumes:
|
|
|
|
- type: bind
|
|
|
|
source: /var/run/docker.sock
|
|
|
|
target: /var/run/docker.sock
|
|
|
|
read_only: true
|
|
|
|
- type: bind
|
2022-01-02 16:43:23 -07:00
|
|
|
source: /srv/ext/sys/traefik/acme.json
|
2021-12-17 09:38:07 -07:00
|
|
|
target: /acme.json
|
|
|
|
deploy:
|
|
|
|
labels:
|
|
|
|
# XXX: This HSTS stuff doesn't seem to be working
|
|
|
|
traefik.frontend.headers.STSSeconds: "31536000"
|
|
|
|
traefik.frontend.headers.STSPreload: "true"
|
2022-02-28 17:27:13 -07:00
|
|
|
traefik.http.routers.dashboard.rule: "Host(`$FQDN`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
|
2021-12-17 09:38:07 -07:00
|
|
|
traefik.http.routers.dashboard.tls.certresolver: letsencrypt
|
|
|
|
traefik.http.routers.dashboard.middlewares: forward-auth
|
|
|
|
traefik.http.routers.dashboard.service: api@internal
|
|
|
|
traefik.http.middlewares.forward-auth.forwardauth.address: http://simpleauth:8080/
|
|
|
|
traefik.http.services.traefik.loadbalancer.server.port: "1"
|
2022-03-05 20:27:07 -07:00
|
|
|
|
2021-12-17 09:38:07 -07:00
|
|
|
simpleauth:
|
|
|
|
image: ghcr.io/nealey/simpleauth
|
|
|
|
secrets:
|
|
|
|
- password
|
|
|
|
deploy:
|
|
|
|
labels:
|
2022-03-05 20:27:07 -07:00
|
|
|
traefik.http.routers.simpleauth.rule: "Host(`$FQDN`) && Path(`/`)"
|
2021-12-17 09:38:07 -07:00
|
|
|
traefik.http.services.simpleauth.loadbalancer.server.port: "8080"
|
2022-02-28 17:27:13 -07:00
|
|
|
|
2021-12-17 09:38:07 -07:00
|
|
|
plex:
|
2022-06-10 14:35:17 -06:00
|
|
|
image: ghcr.io/linuxserver/plex:1.26.2
|
2021-12-17 09:38:07 -07:00
|
|
|
networks:
|
|
|
|
- hostnet
|
|
|
|
environment:
|
|
|
|
TZ: US/Mountain
|
|
|
|
volumes:
|
|
|
|
- type: bind
|
2022-01-02 16:43:23 -07:00
|
|
|
source: /srv/ext/sys/plex
|
2021-12-17 09:38:07 -07:00
|
|
|
target: /config
|
|
|
|
- type: bind
|
2022-01-02 16:43:23 -07:00
|
|
|
source: /srv
|
|
|
|
target: /srv
|
2021-12-22 18:45:26 -07:00
|
|
|
read_only: true
|
2021-12-17 09:38:07 -07:00
|
|
|
bind:
|
|
|
|
propagation: rslave
|
2021-12-22 18:45:26 -07:00
|
|
|
|
2022-06-10 14:35:17 -06:00
|
|
|
## Can't bind mount /dev/sr0, apparently
|
|
|
|
#sucker:
|
|
|
|
#image: registry.gitlab.com/dartcatcher/media-sucker/media-sucker
|
|
|
|
#ports:
|
|
|
|
#- published: 5880
|
|
|
|
#target: 8080
|
|
|
|
#volumes:
|
|
|
|
#- type: bind
|
|
|
|
#source: /srv/ext/incoming
|
|
|
|
#target: /incoming
|
|
|
|
#- type: bind
|
|
|
|
#source: /dev/sr0
|
|
|
|
#target: /dev/sr0
|
|
|
|
|
2021-12-17 09:38:07 -07:00
|
|
|
transmission:
|
|
|
|
image: ghcr.io/linuxserver/transmission
|
|
|
|
networks:
|
|
|
|
- hostnet
|
|
|
|
volumes:
|
|
|
|
- type: bind
|
2022-01-02 16:43:23 -07:00
|
|
|
source: /srv/ext/sys/transmission
|
2021-12-17 09:38:07 -07:00
|
|
|
target: /config
|
|
|
|
- type: bind
|
2022-01-02 16:43:23 -07:00
|
|
|
source: /srv/ext/incoming
|
|
|
|
target: /srv/ext/incoming
|
2021-12-17 09:38:07 -07:00
|
|
|
deploy:
|
|
|
|
labels:
|
2022-02-28 17:27:13 -07:00
|
|
|
# This isn't going to work, because transmission binds to the host network.
|
2022-06-10 14:35:17 -06:00
|
|
|
traefik.http.routers.transmission.rule: "PathPrefix(`/transmission`)"
|
2021-12-17 09:38:07 -07:00
|
|
|
traefik.http.services.transmission.loadbalancer.server.port: "9091"
|
2022-02-28 17:27:13 -07:00
|
|
|
|
2021-12-17 09:38:07 -07:00
|
|
|
nextcloud:
|
2022-02-28 17:27:13 -07:00
|
|
|
image: ghcr.io/linuxserver/nextcloud:23.0.2
|
2021-12-17 09:38:07 -07:00
|
|
|
environment:
|
|
|
|
OVERWRITEPROTOCOL: https
|
|
|
|
volumes:
|
|
|
|
- type: bind
|
2022-01-02 16:43:23 -07:00
|
|
|
source: /srv/ext/sys/nextcloud
|
2021-12-17 09:38:07 -07:00
|
|
|
target: /config
|
|
|
|
- type: bind
|
2022-02-27 10:32:35 -07:00
|
|
|
source: /srv/ext/nextcloud
|
2021-12-17 09:38:07 -07:00
|
|
|
target: /data
|
|
|
|
- type: bind
|
2022-01-02 16:43:23 -07:00
|
|
|
source: /srv/ext
|
|
|
|
target: /srv/ext
|
2021-12-17 09:38:07 -07:00
|
|
|
read_only: true
|
|
|
|
bind:
|
|
|
|
propagation: rslave
|
2022-01-02 16:43:23 -07:00
|
|
|
- type: bind
|
|
|
|
source: /srv/ext/incoming
|
|
|
|
target: /srv/ext/incoming
|
2021-12-17 09:38:07 -07:00
|
|
|
deploy:
|
|
|
|
labels:
|
|
|
|
traefik.http.routers.nextcloud.rule: "Host(`drive.woozle.org`) || PathPrefix(`/nextcloud`)"
|
|
|
|
traefik.http.routers.nextcloud.tls: "true"
|
|
|
|
traefik.http.routers.nextcloud.tls.certresolver: letsencrypt
|
2021-12-26 20:40:04 -07:00
|
|
|
traefik.http.routers.nextcloud.middlewares: nextcloud-caldav@docker,sts
|
2021-12-17 09:38:07 -07:00
|
|
|
traefik.http.middlewares.nextcloud-caldav.redirectregex.permanent: "true"
|
|
|
|
traefik.http.middlewares.nextcloud-caldav.redirectregex.regex: ^https://(.*)/.well-known/(card|cal)dav
|
|
|
|
traefik.http.middlewares.nextcloud-caldav.redirectregex.replacement: https://$${1}/remote.php/dav/
|
2021-12-26 20:40:04 -07:00
|
|
|
traefik.http.middlewares.sts.headers.stsincludesubdomains: "false"
|
|
|
|
traefik.http.middlewares.sts.headers.stspreload: "true"
|
|
|
|
traefik.http.middlewares.sts.headers.stsseconds: "31536000"
|
2021-12-17 09:38:07 -07:00
|
|
|
traefik.http.services.nextcloud.loadbalancer.server.port: "80"
|
|
|
|
redis:
|
|
|
|
image: redis
|
|
|
|
volumes:
|
|
|
|
- type: bind
|
2022-01-02 16:43:23 -07:00
|
|
|
source: /srv/ext/sys/redis
|
2021-12-17 09:38:07 -07:00
|
|
|
target: /var/lib/redis
|
|
|
|
|
2022-06-10 14:35:17 -06:00
|
|
|
gitea:
|
|
|
|
image: gitea/gitea:1
|
|
|
|
environment:
|
|
|
|
USER_UID: 1000
|
|
|
|
USER_GID: 1000
|
|
|
|
volumes:
|
|
|
|
- type: bind
|
|
|
|
source: /srv/ext/sys/gitea
|
|
|
|
target: /data
|
|
|
|
- type: bind
|
|
|
|
source: /etc/timezone
|
|
|
|
target: /etc/timezone
|
|
|
|
read_only: true
|
|
|
|
- type: bind
|
|
|
|
source: /etc/localtime
|
|
|
|
target: /etc/localtime
|
|
|
|
read_only: true
|
|
|
|
deploy:
|
|
|
|
labels:
|
|
|
|
traefik.http.routers.gitea.rule: "Host(`git.woozle.org`)"
|
|
|
|
traefik.http.routers.gitea.middlewares: gitea-striparoo
|
|
|
|
traefik.http.middlewares.gitea-striparoo.stripprefix.prefixes: "/gitea"
|
|
|
|
traefik.http.services.gitea.loadbalancer.server.port: "3000"
|
|
|
|
|
2021-12-26 12:02:07 -07:00
|
|
|
atlas:
|
2021-12-26 20:40:04 -07:00
|
|
|
image: ctassisf/ripe-atlas-alpine:arm64v8
|
2021-12-26 12:02:07 -07:00
|
|
|
volumes:
|
|
|
|
- type: bind
|
2022-01-02 16:43:23 -07:00
|
|
|
source: /srv/ext/sys/atlas/etc
|
2021-12-26 12:02:07 -07:00
|
|
|
target: /var/atlas-probe/etc
|
|
|
|
- type: bind
|
2022-01-02 16:43:23 -07:00
|
|
|
source: /srv/ext/sys/atlas/status
|
2021-12-26 12:02:07 -07:00
|
|
|
target: /var/atlas-probe/status
|
2021-12-26 20:40:04 -07:00
|
|
|
networks:
|
|
|
|
- hostnet
|
2021-12-26 12:02:07 -07:00
|
|
|
|
2022-02-28 18:35:10 -07:00
|
|
|
## Drop this in to get a netdata container.
|
|
|
|
## It uses a lot of RAM and causes my machine to swap.
|
|
|
|
## Granted, it's a lot more lightweight than nextcloud.
|
|
|
|
## But I can live without netdata.
|
|
|
|
# netdata:
|
|
|
|
# image: netdata/netdata
|
|
|
|
# hostname: $HOSTNAME
|
|
|
|
# volumes:
|
|
|
|
# - type: bind
|
|
|
|
# source: /
|
|
|
|
# target: /host
|
|
|
|
# read_only: true
|
|
|
|
# configs:
|
|
|
|
# - source: netdata.conf
|
|
|
|
# target: /etc/netdata/netdata.conf
|
|
|
|
# deploy:
|
|
|
|
# labels:
|
|
|
|
# traefik.http.routers.netdata.rule: "PathPrefix(`/netdata`)"
|
|
|
|
# traefik.http.middlewares.netdata-striparoo.stripprefix.prefixes: "/netdata"
|
|
|
|
# traefik.http.routers.netdata.middlewares: netdata-striparoo
|
|
|
|
# traefik.http.services.netdata.loadbalancer.server.port: "19999"
|
2022-02-28 18:01:25 -07:00
|
|
|
|
2022-03-05 20:27:07 -07:00
|
|
|
geneweb:
|
|
|
|
image: ravermeister/geneweb
|
|
|
|
volumes:
|
|
|
|
- type: bind
|
|
|
|
source: /srv/ext/sys/geneweb/etc
|
|
|
|
target: /usr/local/share/geneweb/etc
|
|
|
|
- type: bind
|
|
|
|
source: /srv/ext/sys/geneweb/share/data
|
|
|
|
target: /usr/local/share/geneweb/share/data
|
|
|
|
- type: bind
|
|
|
|
source: /srv/ext/sys/geneweb/log
|
|
|
|
target: /usr/local/share/geneweb/log
|
|
|
|
deploy:
|
|
|
|
labels:
|
|
|
|
traefik.http.routers.gwsetup.rule: "PathPrefix(`/gwsetup`)"
|
|
|
|
traefik.http.middlewares.gwsetup-striparoo.stripprefix.prefixes: "/gwsetup"
|
|
|
|
traefik.http.routers.gwsetup.middlewares: gwsetup-striparoo,forward-auth
|
|
|
|
traefik.http.routers.gwsetup.service: gwsetup
|
|
|
|
traefik.http.services.gwsetup.loadbalancer.server.port: "2316"
|
|
|
|
|
2022-03-13 17:07:46 -06:00
|
|
|
traefik.http.routers.geneweb.rule: "Host(`ancestry.woozle.org`)"
|
2022-03-05 20:27:07 -07:00
|
|
|
traefik.http.routers.geneweb.service: geneweb
|
|
|
|
traefik.http.services.geneweb.loadbalancer.server.port: "2317"
|
|
|
|
|
2022-02-27 10:32:35 -07:00
|
|
|
samba:
|
|
|
|
image: dperson/samba
|
|
|
|
volumes:
|
|
|
|
- type: bind
|
|
|
|
source: /srv/ext
|
|
|
|
target: /srv/ext
|
2022-02-28 16:09:57 -07:00
|
|
|
bind:
|
|
|
|
propagation: rslave
|
2022-02-27 10:32:35 -07:00
|
|
|
environment:
|
|
|
|
NMBD: enable
|
|
|
|
RECYCLE: disable
|
2022-02-28 16:09:57 -07:00
|
|
|
USERID: 911
|
|
|
|
GROUPID: 911
|
2022-02-27 10:32:35 -07:00
|
|
|
# name;path;browse;readonly;guest
|
|
|
|
SHARE1: storage;/srv/ext/storage;yes;no;no
|
|
|
|
SHARE2: media;/srv/ext/media;yes;no;no
|
|
|
|
SHARE3: software;/srv/ext/software;yes;no;no
|
|
|
|
SHARE4: backups;/srv/ext/backups;yes;no;no
|
2022-02-28 16:09:57 -07:00
|
|
|
SHARE4: incoming;/srv/ext/incoming;yes;no;no
|
2022-02-27 10:32:35 -07:00
|
|
|
env_file:
|
|
|
|
- samba-users.env
|
|
|
|
ports:
|
|
|
|
- published: 139
|
|
|
|
target: 139
|
|
|
|
- published: 445
|
|
|
|
target: 445
|
|
|
|
|
2022-03-13 17:07:46 -06:00
|
|
|
public:
|
|
|
|
image: busybox
|
|
|
|
volumes:
|
|
|
|
- type: bind
|
|
|
|
source: /srv/ext/storage/public
|
|
|
|
target: /srv/ext/storage/public
|
|
|
|
command: [ "httpd", "-f", "-h", "/srv/ext/storage" ]
|
|
|
|
deploy:
|
|
|
|
labels:
|
|
|
|
traefik.http.routers.public.rule: "PathPrefix(`/public`)"
|
|
|
|
traefik.http.services.public.loadbalancer.server.port: "80"
|
2022-02-27 10:32:35 -07:00
|
|
|
|
2022-02-28 18:01:25 -07:00
|
|
|
configs:
|
|
|
|
netdata.conf:
|
|
|
|
file: netdata.conf
|
|
|
|
name: netdata.conf-v4
|
2022-02-27 10:32:35 -07:00
|
|
|
|
2021-12-17 09:38:07 -07:00
|
|
|
secrets:
|
|
|
|
password:
|
|
|
|
file: password
|
|
|
|
name: password-v1
|
|
|
|
|
|
|
|
networks:
|
|
|
|
hostnet:
|
|
|
|
external: true
|
|
|
|
name: host
|