Compare commits
10 commits
a3f3d147cb
...
9e2c30af22
| Author | SHA1 | Date | |
|---|---|---|---|
| 9e2c30af22 | |||
| 8c0277c8f3 | |||
| 6e972b90b6 | |||
| fe8ab95f12 | |||
| d3108f3388 | |||
| 894bc8fc41 | |||
| f545157606 | |||
| badbdc991c | |||
| 36e47ef722 | |||
| 16e879db78 |
62 changed files with 8945 additions and 305 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -965,3 +965,5 @@ FodyWeavers.xsd
|
||||||
# Additional files built by Visual Studio
|
# Additional files built by Visual Studio
|
||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/vim,node,data,emacs,python,pycharm,executable,sublimetext,visualstudio,visualstudiocode
|
# End of https://www.toptal.com/developers/gitignore/api/vim,node,data,emacs,python,pycharm,executable,sublimetext,visualstudio,visualstudiocode
|
||||||
|
traefik
|
||||||
|
frigate/config
|
||||||
|
|
|
||||||
6
active
Normal file
6
active
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
traefik
|
||||||
|
portainer
|
||||||
|
pihole
|
||||||
|
librespeed
|
||||||
|
syncthing
|
||||||
|
home-gallery
|
||||||
1352
argo/install.yaml
Normal file
1352
argo/install.yaml
Normal file
File diff suppressed because it is too large
Load diff
45
authelia/configmap-inspector.yml
Normal file
45
authelia/configmap-inspector.yml
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: configmap-inspector
|
||||||
|
namespace: authelia
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: registry.wayl.one/devtainer:slim
|
||||||
|
name: pvc-inspector
|
||||||
|
command: ["sleep", "300"]
|
||||||
|
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /configmap
|
||||||
|
name: configmap
|
||||||
|
- mountPath: /config
|
||||||
|
name: config
|
||||||
|
volumes:
|
||||||
|
- name: configmap
|
||||||
|
projected:
|
||||||
|
sources:
|
||||||
|
- configMap:
|
||||||
|
name: configuration
|
||||||
|
- configMap:
|
||||||
|
name: users
|
||||||
|
|
||||||
|
- name: config
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: config
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: config
|
||||||
|
name: config
|
||||||
|
namespace: authelia
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
132
authelia/deployment.yaml
Normal file
132
authelia/deployment.yaml
Normal file
|
|
@ -0,0 +1,132 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n authelia
|
||||||
|
kompose.service.expose: auth.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: authelia
|
||||||
|
name: authelia
|
||||||
|
namespace: authelia
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: "9091"
|
||||||
|
port: 9091
|
||||||
|
targetPort: 9091
|
||||||
|
- name: 9091-tcp
|
||||||
|
port: 9091
|
||||||
|
targetPort: 9091
|
||||||
|
selector:
|
||||||
|
io.kompose.service: authelia
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
name: authelia
|
||||||
|
namespace: authelia
|
||||||
|
spec: {}
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n authelia
|
||||||
|
kompose.service.expose: auth.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: authelia
|
||||||
|
name: authelia
|
||||||
|
namespace: authelia
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
io.kompose.service: authelia
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n authelia
|
||||||
|
kompose.service.expose: auth.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.network/authelia-default: "true"
|
||||||
|
io.kompose.service: authelia
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- env:
|
||||||
|
- name: TZ
|
||||||
|
value: America/Chicago
|
||||||
|
image: authelia/authelia
|
||||||
|
name: authelia
|
||||||
|
ports:
|
||||||
|
- containerPort: 9091
|
||||||
|
protocol: TCP
|
||||||
|
resources: {}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /config
|
||||||
|
name: config
|
||||||
|
restartPolicy: Always
|
||||||
|
volumes:
|
||||||
|
- name: config
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: config
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n authelia
|
||||||
|
kompose.service.expose: auth.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: authelia
|
||||||
|
name: authelia
|
||||||
|
namespace: authelia
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: auth.wayl.one
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: authelia
|
||||||
|
port:
|
||||||
|
number: 9091
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: config
|
||||||
|
name: config
|
||||||
|
namespace: authelia
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
21
authelia/docker-compose.yml
Normal file
21
authelia/docker-compose.yml
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
authelia:
|
||||||
|
image: authelia/authelia
|
||||||
|
container_name: authelia
|
||||||
|
volumes:
|
||||||
|
- config:/config
|
||||||
|
ports:
|
||||||
|
- 9091
|
||||||
|
|
||||||
|
expose:
|
||||||
|
- 9091
|
||||||
|
environment:
|
||||||
|
- TZ=America/Chicago
|
||||||
|
healthcheck:
|
||||||
|
disable: true
|
||||||
|
labels:
|
||||||
|
kompose.service.expose: auth.wayl.one
|
||||||
|
# kompose.volume.type: configMap
|
||||||
|
volumes:
|
||||||
|
config:
|
||||||
31
authelia/justfile
Normal file
31
authelia/justfile
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
default: cred convert deploy viz
|
||||||
|
update: convert patch
|
||||||
|
|
||||||
|
create-ns:
|
||||||
|
kubectl create ns authelia
|
||||||
|
cred:
|
||||||
|
kubectl get secret -n default regcred --output=yaml -o yaml | sed 's/namespace: default/namespace: authelia/' | kubectl apply -n authelia -f - && echo deployed secret || echo secret exists
|
||||||
|
convert:
|
||||||
|
kompose convert -o deployment.yaml -n authelia
|
||||||
|
deploy:
|
||||||
|
kubectl apply -f deployment.yaml
|
||||||
|
delete:
|
||||||
|
kubectl delete all --all -n authelia --timeout=0s
|
||||||
|
viz:
|
||||||
|
k8sviz -n authelia --kubeconfig $KUBECONFIG -t png -o authelia-k8s.png
|
||||||
|
restart:
|
||||||
|
kubectl rollout restart -n authelia deployment/authelia
|
||||||
|
|
||||||
|
patch:
|
||||||
|
kubectl patch -f deployment.yaml
|
||||||
|
describe:
|
||||||
|
kubectl get deployment -n authelia
|
||||||
|
kubectl get rs -n authelia
|
||||||
|
kubectl get pod -n authelia
|
||||||
|
kubectl get svc -n authelia
|
||||||
|
kubectl get ing -n authelia
|
||||||
|
|
||||||
|
describe-pod:
|
||||||
|
kubectl describe pod -n authelia
|
||||||
|
logs:
|
||||||
|
kubectl logs --all-containers -l io.kompose.service=authelia-wayl-one -n authelia -f
|
||||||
16
authelia/middleware.yaml
Normal file
16
authelia/middleware.yaml
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
apiVersion: traefik.containo.us/v1alpha1
|
||||||
|
kind: Middleware
|
||||||
|
metadata:
|
||||||
|
name: forwardauth-authelia
|
||||||
|
namespace: authelia
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/instance: authelia
|
||||||
|
app.kubernetes.io/name: authelia
|
||||||
|
spec:
|
||||||
|
forwardAuth:
|
||||||
|
address: http://authelia.authelia.svc/api/verify?rd=https%3A%2F%2Fwww.wayl.one%2F
|
||||||
|
authResponseHeaders:
|
||||||
|
- Remote-User
|
||||||
|
- Remote-Name
|
||||||
|
- Remote-Email
|
||||||
|
- Remote-Groups
|
||||||
1471
authelia/users_configmap.yaml
Normal file
1471
authelia/users_configmap.yaml
Normal file
File diff suppressed because it is too large
Load diff
59
cal/docker-compose.yml
Normal file
59
cal/docker-compose.yml
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
# Use postgres/example user/password credentials
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
database-data:
|
||||||
|
|
||||||
|
services:
|
||||||
|
caldb:
|
||||||
|
container_name: caldb
|
||||||
|
image: postgres
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- database-data:/var/lib/postgresql/data/
|
||||||
|
env_file: .env
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
environment:
|
||||||
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||||
|
|
||||||
|
calcom:
|
||||||
|
container_name: calcom
|
||||||
|
image: calcom.docker.scarf.sh/calcom/cal.com
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
args:
|
||||||
|
NEXT_PUBLIC_WEBAPP_URL: ${NEXT_PUBLIC_WEBAPP_URL}
|
||||||
|
NEXT_PUBLIC_LICENSE_CONSENT: ${NEXT_PUBLIC_LICENSE_CONSENT}
|
||||||
|
CALCOM_TELEMETRY_DISABLED: ${CALCOM_TELEMETRY_DISABLED}
|
||||||
|
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
|
||||||
|
CALENDSO_ENCRYPTION_KEY: ${CALENDSO_ENCRYPTION_KEY}
|
||||||
|
DATABASE_URL: ${DATABASE_URL}
|
||||||
|
network: proxy
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
env_file: .env
|
||||||
|
environment:
|
||||||
|
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@tcp(caldb)/${POSTGRES_DB}
|
||||||
|
depends_on:
|
||||||
|
- caldb
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.cal.entrypoints=http"
|
||||||
|
- "traefik.http.routers.cal.rule=Host(`cal.${URL}`)"
|
||||||
|
- "traefik.http.middlewares.cal-https-redirect.redirectscheme.scheme=https"
|
||||||
|
- "traefik.http.routers.cal.middlewares=cal-https-redirect"
|
||||||
|
- "traefik.http.routers.cal-secure.entrypoints=https"
|
||||||
|
- "traefik.http.routers.cal-secure.rule=Host(`cal.${URL}`)"
|
||||||
|
- "traefik.http.routers.cal-secure.tls=true"
|
||||||
|
- "traefik.http.routers.cal-secure.service=cal"
|
||||||
|
- "traefik.http.services.cal.loadbalancer.server.port=3000"
|
||||||
|
- "traefik.docker.network=proxy"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
6
cams.sh
Normal file
6
cams.sh
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
ffplay rtsp://localhost:8554/back-yard-cam &
|
||||||
|
ffplay rtsp://localhost:8554/printer &
|
||||||
|
ffplay rtsp://localhost:8554/basement &
|
||||||
|
ffplay rtsp://localhost:8554/art-room &
|
||||||
|
ffplay rtsp://localhost:8554/aylas-room &
|
||||||
|
ffplay rtsp://localhost:8554/kitchen-cam &
|
||||||
|
|
@ -17,6 +17,7 @@ services:
|
||||||
- code-server-data:/config
|
- code-server-data:/config
|
||||||
labels:
|
labels:
|
||||||
kompose.service.expose: code-server.wayl.one
|
kompose.service.expose: code-server.wayl.one
|
||||||
|
# traefik.ingress.kubernetes.io/router.middlewares: default-forwardauth-authelia@kubernetescrd
|
||||||
ports:
|
ports:
|
||||||
- 8443
|
- 8443
|
||||||
volumes:
|
volumes:
|
||||||
|
|
|
||||||
16
code-server/middleware.yml
Normal file
16
code-server/middleware.yml
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
apiVersion: traefik.containo.us/v1alpha1
|
||||||
|
kind: Middleware
|
||||||
|
metadata:
|
||||||
|
name: forwardauth-authelia
|
||||||
|
namespace: code-server
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/instance: authelia
|
||||||
|
app.kubernetes.io/name: authelia
|
||||||
|
spec:
|
||||||
|
forwardAuth:
|
||||||
|
address: http://auth.wayl.one/api/verify?rd=https%3A%2F%2Fcode-server.wayl.one%2F
|
||||||
|
authResponseHeaders:
|
||||||
|
- Remote-User
|
||||||
|
- Remote-Name
|
||||||
|
- Remote-Email
|
||||||
|
- Remote-Groups
|
||||||
111
docker-compose.yml.bak
Normal file
111
docker-compose.yml.bak
Normal file
|
|
@ -0,0 +1,111 @@
|
||||||
|
version: "3.5"
|
||||||
|
services:
|
||||||
|
|
||||||
|
traefik:
|
||||||
|
image: docker.io/traefik:latest
|
||||||
|
container_name: traefik
|
||||||
|
restart: unless-stopped
|
||||||
|
security_opt:
|
||||||
|
- no-new-privileges:true
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
ports:
|
||||||
|
- 80:80
|
||||||
|
- 443:443
|
||||||
|
environment:
|
||||||
|
- CF_API_EMAIL=${CF_API_EMAIL}
|
||||||
|
- CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
|
||||||
|
# - CF_API_KEY=YOUR_API_KEY
|
||||||
|
# be sure to use the correct one depending on if you are using a token or key
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
# - /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
- ${PWD}/traefik/data/traefik.yml:/traefik.yml:ro
|
||||||
|
- ${PWD}/traefik/data/acme.json:/acme.json
|
||||||
|
- ${PWD}/traefik/data/config.yml:/config.yml:ro
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.traefik.entrypoints=http"
|
||||||
|
- "traefik.http.routers.traefik.rule=Host(`traefik-dashboard.${URL}`)"
|
||||||
|
- "traefik.http.middlewares.traefik-auth.basicauth.users=${TRAEFIK_USERNAME}:${TRAEFIK_PASSWORD}"
|
||||||
|
- "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
|
||||||
|
- "traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https"
|
||||||
|
- "traefik.http.routers.traefik.middlewares=traefik-https-redirect"
|
||||||
|
- "traefik.http.routers.traefik-secure.entrypoints=https"
|
||||||
|
- "traefik.http.routers.traefik-secure.rule=Host(`traefik-dashboard.${URL}`)"
|
||||||
|
- "traefik.http.routers.traefik-secure.middlewares=traefik-auth"
|
||||||
|
- "traefik.http.routers.traefik-secure.tls=true"
|
||||||
|
- "traefik.http.routers.traefik-secure.tls.certresolver=cloudflare"
|
||||||
|
- "traefik.http.routers.traefik-secure.tls.domains[0].main=${URL}"
|
||||||
|
- "traefik.http.routers.traefik-secure.tls.domains[0].sans=*.${URL}"
|
||||||
|
- "traefik.http.routers.traefik-secure.service=api@internal"
|
||||||
|
|
||||||
|
|
||||||
|
portainer:
|
||||||
|
image: docker.io/portainer/portainer-ce
|
||||||
|
container_name: portainer
|
||||||
|
restart: unless-stopped
|
||||||
|
security_opt:
|
||||||
|
- no-new-privileges:true
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
- ${PWD}/portainer/data:/data
|
||||||
|
ports:
|
||||||
|
- 9000:9000
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.portainer.entrypoints=http"
|
||||||
|
- "traefik.http.routers.portainer.rule=Host(`portainer.${URL}`)"
|
||||||
|
- "traefik.http.middlewares.portainer-https-redirect.redirectscheme.scheme=https"
|
||||||
|
- "traefik.http.routers.portainer.middlewares=portainer-https-redirect"
|
||||||
|
- "traefik.http.routers.portainer-secure.entrypoints=https"
|
||||||
|
- "traefik.http.routers.portainer-secure.rule=Host(`portainer.${URL}`)"
|
||||||
|
- "traefik.http.routers.portainer-secure.tls=true"
|
||||||
|
- "traefik.http.routers.portainer-secure.service=portainer"
|
||||||
|
- "traefik.http.services.portainer.loadbalancer.server.port=9000"
|
||||||
|
- "traefik.docker.network=proxy"
|
||||||
|
jellyfin:
|
||||||
|
image: docker.io/jellyfin/jellyfin
|
||||||
|
container_name: jellyfin
|
||||||
|
restart: unless-stopped
|
||||||
|
security_opt:
|
||||||
|
- no-new-privileges:true
|
||||||
|
|
||||||
|
stdin_open: true # docker run -i
|
||||||
|
tty: true # docker run -t
|
||||||
|
# network_mode: "host"
|
||||||
|
# networks:
|
||||||
|
# - proxy
|
||||||
|
# user: uid:gid
|
||||||
|
ports:
|
||||||
|
- 0.0.0.0:8096:8096
|
||||||
|
volumes:
|
||||||
|
- /tank/jellyfin/config:/config
|
||||||
|
- /tank/jellyfin/cache:/cache
|
||||||
|
- /tank/jellyfin/media:/media
|
||||||
|
- /tank/jellyfin/media2:/media2:ro
|
||||||
|
# Optional - alternative address used for autodiscovery
|
||||||
|
environment:
|
||||||
|
- JELLYFIN_PublishedServerUrl=https://jellyfin.${URL}
|
||||||
|
# Optional - may be necessary for docker healthcheck to pass if running in host network mode
|
||||||
|
# extra_hosts:
|
||||||
|
# - "host.docker.internal:host-gateway"
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.jellyfin.entrypoints=http"
|
||||||
|
- "traefik.http.routers.jellyfin.rule=Host(`jellyfin.${URL}`)"
|
||||||
|
- "traefik.http.middlewares.jellyfin-https-redirect.redirectscheme.scheme=https"
|
||||||
|
- "traefik.http.routers.jellyfin.middlewares=jellyfin-https-redirect"
|
||||||
|
- "traefik.http.routers.jellyfin-secure.entrypoints=https"
|
||||||
|
- "traefik.http.routers.jellyfin-secure.rule=Host(`jellyfin.${URL}`)"
|
||||||
|
- "traefik.http.routers.jellyfin-secure.tls=true"
|
||||||
|
- "traefik.http.routers.jellyfin-secure.service=jellyfin"
|
||||||
|
- "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
|
||||||
|
- "traefik.docker.network=proxy"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
30
frigate/docker-compose.yml
Normal file
30
frigate/docker-compose.yml
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
version: "3.9"
|
||||||
|
services:
|
||||||
|
frigate:
|
||||||
|
container_name: frigate
|
||||||
|
privileged: true # this may not be necessary for all setups
|
||||||
|
image: ghcr.io/blakeblackshear/frigate:stable
|
||||||
|
shm_size: "64mb" # update for your cameras based on calculation above
|
||||||
|
devices:
|
||||||
|
- /dev/bus/usb:/dev/bus/usb # Passes the USB Coral, needs to be modified for other versions
|
||||||
|
- /dev/apex_0:/dev/apex_0 # Passes a PCIe Coral, follow driver instructions here https://coral.ai/docs/m2/get-started/#2a-on-linux
|
||||||
|
- /dev/video11:/dev/video11 # For Raspberry Pi 4B
|
||||||
|
- /dev/dri/renderD128:/dev/dri/renderD128 # For intel hwaccel, needs to be updated for your hardware
|
||||||
|
volumes:
|
||||||
|
- ./config:/config
|
||||||
|
- storage:/media/frigate
|
||||||
|
- type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
|
||||||
|
target: /tmp/cache
|
||||||
|
tmpfs:
|
||||||
|
size: 1000000000
|
||||||
|
ports:
|
||||||
|
- "5050:5000"
|
||||||
|
- "8654:8554" # RTSP feeds
|
||||||
|
- "8555:8555/tcp" # WebRTC over tcp
|
||||||
|
- "8555:8555/udp" # WebRTC over udp
|
||||||
|
environment:
|
||||||
|
- FRIGATE_RTSP_PASSWORD="password"
|
||||||
|
- TZ=America/Chicago
|
||||||
|
volumes:
|
||||||
|
config:
|
||||||
|
storage:
|
||||||
166
frigate/frigate.yaml
Normal file
166
frigate/frigate.yaml
Normal file
|
|
@ -0,0 +1,166 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace frigate -o frigate.yaml
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: frigate
|
||||||
|
name: frigate
|
||||||
|
namespace: frigate
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: "5000"
|
||||||
|
port: 5000
|
||||||
|
targetPort: 5000
|
||||||
|
- name: "8554"
|
||||||
|
port: 8554
|
||||||
|
targetPort: 8554
|
||||||
|
- name: "8555"
|
||||||
|
port: 8555
|
||||||
|
targetPort: 8555
|
||||||
|
- name: 8555-udp
|
||||||
|
port: 8555
|
||||||
|
protocol: UDP
|
||||||
|
targetPort: 8555
|
||||||
|
selector:
|
||||||
|
io.kompose.service: frigate
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
name: frigate
|
||||||
|
namespace: frigate
|
||||||
|
spec: {}
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace frigate -o frigate.yaml
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: frigate
|
||||||
|
name: frigate
|
||||||
|
namespace: frigate
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
io.kompose.service: frigate
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace frigate -o frigate.yaml
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.network/frigate-default: "true"
|
||||||
|
io.kompose.service: frigate
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- env:
|
||||||
|
- name: FRIGATE_RTSP_PASSWORD
|
||||||
|
value: '"password"'
|
||||||
|
- name: TZ
|
||||||
|
value: America/Chicago
|
||||||
|
image: ghcr.io/blakeblackshear/frigate:stable
|
||||||
|
name: frigate
|
||||||
|
ports:
|
||||||
|
- containerPort: 5000
|
||||||
|
hostPort: 5000
|
||||||
|
protocol: TCP
|
||||||
|
- containerPort: 8554
|
||||||
|
hostPort: 8554
|
||||||
|
protocol: TCP
|
||||||
|
- containerPort: 8555
|
||||||
|
hostPort: 8555
|
||||||
|
protocol: TCP
|
||||||
|
- containerPort: 8555
|
||||||
|
hostPort: 8555
|
||||||
|
protocol: UDP
|
||||||
|
resources: {}
|
||||||
|
securityContext:
|
||||||
|
privileged: true
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /config
|
||||||
|
name: config
|
||||||
|
- mountPath: /media/frigate
|
||||||
|
name: storage
|
||||||
|
- mountPath: /tmp/cache
|
||||||
|
name: frigate-claim2
|
||||||
|
restartPolicy: Always
|
||||||
|
volumes:
|
||||||
|
- name: config
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: config
|
||||||
|
- name: storage
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: storage
|
||||||
|
- name: frigate-claim2
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: frigate-claim2
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: config
|
||||||
|
name: config
|
||||||
|
namespace: frigate
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: storage
|
||||||
|
name: storage
|
||||||
|
namespace: frigate
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: frigate-claim2
|
||||||
|
name: frigate-claim2
|
||||||
|
namespace: frigate
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
1
generate_example_env.sh
Normal file
1
generate_example_env.sh
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
cat .env | sed 's/\=.*/\=/' > .env.example
|
||||||
17
home-assistant/docker-compose.yml
Normal file
17
home-assistant/docker-compose.yml
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
homeassistant:
|
||||||
|
container_name: homeassistant
|
||||||
|
image: "ghcr.io/home-assistant/home-assistant:stable"
|
||||||
|
volumes:
|
||||||
|
- config:/config
|
||||||
|
# - /run/dbus:/run/dbus:ro
|
||||||
|
restart: unless-stopped
|
||||||
|
privileged: true
|
||||||
|
network_mode: host
|
||||||
|
environment:
|
||||||
|
TZ: "America/Chicago"
|
||||||
|
ports:
|
||||||
|
- "8123:8123"
|
||||||
|
volumes:
|
||||||
|
config:
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
FROM nginx:alpine
|
FROM docker.io/nginx:alpine
|
||||||
COPY ./site /usr/share/nginx/html
|
COPY ./site /usr/share/nginx/html
|
||||||
COPY ./config/nginx.conf /etc/nginx/conf.d/default.conf
|
COPY ./config/default.conf /etc/nginx/conf.d/default.conf
|
||||||
|
|
|
||||||
47
home/config/default.conf
Normal file
47
home/config/default.conf
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
server_name localhost;
|
||||||
|
|
||||||
|
#access_log /var/log/nginx/host.access.log main;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html index.htm;
|
||||||
|
add_header 'Cache-Control' "public, max-age=604800";
|
||||||
|
add_header stale-while-revalidate 900;
|
||||||
|
add_header stale-if-error 2592000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#error_page 404 /404.html;
|
||||||
|
|
||||||
|
# redirect server error pages to the static page /50x.html
|
||||||
|
#
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
location = /50x.html {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
}
|
||||||
|
|
||||||
|
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
|
||||||
|
#
|
||||||
|
#location ~ \.php$ {
|
||||||
|
# proxy_pass http://127.0.0.1;
|
||||||
|
#}
|
||||||
|
|
||||||
|
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
|
||||||
|
#
|
||||||
|
#location ~ \.php$ {
|
||||||
|
# root html;
|
||||||
|
# fastcgi_pass 127.0.0.1:9000;
|
||||||
|
# fastcgi_index index.php;
|
||||||
|
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
|
||||||
|
# include fastcgi_params;
|
||||||
|
#}
|
||||||
|
|
||||||
|
# deny access to .htaccess files, if Apache's document root
|
||||||
|
# concurs with nginx's one
|
||||||
|
#
|
||||||
|
#location ~ /\.ht {
|
||||||
|
# deny all;
|
||||||
|
#}
|
||||||
|
}
|
||||||
|
|
@ -1,40 +0,0 @@
|
||||||
|
|
||||||
user nginx;
|
|
||||||
worker_processes auto;
|
|
||||||
|
|
||||||
error_log /var/log/nginx/error.log notice;
|
|
||||||
pid /var/run/nginx.pid;
|
|
||||||
|
|
||||||
|
|
||||||
events {
|
|
||||||
worker_connections 1024;
|
|
||||||
}
|
|
||||||
|
|
||||||
location / {
|
|
||||||
add_header Cache-Control "max-age=604800";
|
|
||||||
add_header stale-while-revalidate 900;
|
|
||||||
add_header stale-if-error 2592000;
|
|
||||||
root /usr/share/nginx/html;
|
|
||||||
index index.html index.htm;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
http {
|
|
||||||
include /etc/nginx/mime.types;
|
|
||||||
default_type application/octet-stream;
|
|
||||||
|
|
||||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
|
||||||
'$status $body_bytes_sent "$http_referer" '
|
|
||||||
'"$http_user_agent" "$http_x_forwarded_for"';
|
|
||||||
|
|
||||||
access_log /var/log/nginx/access.log main;
|
|
||||||
|
|
||||||
sendfile on;
|
|
||||||
#tcp_nopush on;
|
|
||||||
|
|
||||||
keepalive_timeout 65;
|
|
||||||
|
|
||||||
#gzip on;
|
|
||||||
|
|
||||||
include /etc/nginx/conf.d/*.conf;
|
|
||||||
}
|
|
||||||
|
|
@ -65,7 +65,7 @@ spec:
|
||||||
io.kompose.service: wayl-one
|
io.kompose.service: wayl-one
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- image: registry.wayl.one/wayl-one:5d491f5
|
- image: registry.wayl.one/wayl-one:8c0277c
|
||||||
name: wayl-one
|
name: wayl-one
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 80
|
- containerPort: 80
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,9 @@
|
||||||
version: "3"
|
version: "3"
|
||||||
services:
|
services:
|
||||||
wayl-one:
|
wayl-one:
|
||||||
image: registry.wayl.one/wayl-one:763cce3
|
image: registry.wayl.one/wayl-one:8c0277c
|
||||||
ports:
|
ports:
|
||||||
- 80
|
- 80
|
||||||
labels:
|
labels:
|
||||||
kompose.service.expose: www.wayl.one
|
kompose.service.expose: www.wayl.one
|
||||||
kompose.image-pull-secret: regcred
|
kompose.image-pull-secret: regcred
|
||||||
# traefik.ingress.kubernetes.io/router.entryPoints: websecure
|
|
||||||
# traefik.ingress.kubernetes.io/router.middlewares: default-forwardauth-authelia@kubernetescrd
|
|
||||||
|
|
|
||||||
|
|
@ -3,16 +3,16 @@ default: convert deploy viz
|
||||||
regcred:
|
regcred:
|
||||||
kubectl get secret -n default regcred --output=yaml -o yaml | sed 's/namespace: default/namespace: wayl-one/' | kubectl apply -n wayl-one -f - && echo deployed secret || echo secret exists
|
kubectl get secret -n default regcred --output=yaml -o yaml | sed 's/namespace: default/namespace: wayl-one/' | kubectl apply -n wayl-one -f - && echo deployed secret || echo secret exists
|
||||||
build:
|
build:
|
||||||
docker build -t registry.wayl.one/wayl-one -f Dockerfile .
|
podman build -t waylonwalker/wayl-one -f Dockerfile .
|
||||||
tag:
|
tag:
|
||||||
docker tag registry.wayl.one/wayl-one registry.wayl.one/wayl-one:$(git rev-parse --short HEAD)
|
podman tag waylonwalker/wayl-one waylonwalker/wayl-one:v1
|
||||||
test:
|
test:
|
||||||
docker run -p 5556:80 registry.wayl.one/wayl-one
|
podman run -p 5556:80 waylonwalker/wayl-one
|
||||||
push:
|
push:
|
||||||
docker push registry.wayl.one/wayl-one:$(git rev-parse --short HEAD)
|
podman push waylonwalker/wayl-one:v1
|
||||||
docker push registry.wayl.one/wayl-one:latest
|
podman push waylonwalker/wayl-one:latest
|
||||||
set-image:
|
set-image:
|
||||||
kubectl set image deployment/shot-wayl-one --namespace shot shot-wayl-one=registry.wayl.one/wayl-one:$(git rev-parse --short HEAD)
|
kubectl set image deployment/shot-wayl-one --namespace shot shot-wayl-one=waylonwalker/wayl-one:v1
|
||||||
|
|
||||||
convert:
|
convert:
|
||||||
kompose convert -o deployment.yaml -n wayl-one
|
kompose convert -o deployment.yaml -n wayl-one
|
||||||
|
|
|
||||||
BIN
home/site/8bitcc.ico
Normal file
BIN
home/site/8bitcc.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
|
|
@ -5,26 +5,27 @@
|
||||||
<title>Home Lab</title>
|
<title>Home Lab</title>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="icon" href="8bitcc.ico" type="image/x-icon" />
|
||||||
<link rel="stylesheet" href="app.css" />
|
<link rel="stylesheet" href="app.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body
|
<body
|
||||||
class="bg-zinc-900 h-screen flex flex-col items-center justify-center bg-[url('bg-transformed.webp')] bg-no-repeat bg-cover w-screen h-screen overflow-hidden">
|
class="bg-zinc-900 h-screen flex flex-col items-center justify-center bg-[url('bg-transformed.webp')] bg-no-repeat bg-cover w-screen h-screen overflow-hidden">
|
||||||
<div
|
<div
|
||||||
class="flex flex-col items-center justify-center bg-zinc-950/70 p-8 md:px-64 md:py-8 rounded-xl shadow-2xl shadow-pink-800 ring-8 ring-zinc-800/10 backdrop-blur overflow-hidden max-w-screen max-h-screen md:max-w-6xl">
|
class="flex overflow-hidden flex-col justify-center items-center p-8 max-h-screen rounded-xl ring-8 shadow-2xl md:py-8 md:px-64 md:max-w-6xl bg-zinc-950/70 shadow-pink-800 ring-zinc-800/10 backdrop-blur max-w-screen">
|
||||||
<h1
|
<h1
|
||||||
class='mx-auto text-6xl font-black bg-gradient-to-r from-pink-600 via-indigo-500 to-cyan-400 inline-block text-transparent bg-clip-text text-shadow-xl text-shadow-zinc-950 drop-shadow-[0_2.4px_2.4px_rgba(0,0,0,0.8)]'>
|
class='mx-auto text-6xl font-black bg-gradient-to-r from-pink-600 via-indigo-500 to-cyan-400 inline-block text-transparent bg-clip-text text-shadow-xl text-shadow-zinc-950 drop-shadow-[0_2.4px_2.4px_rgba(0,0,0,0.8)]'>
|
||||||
Welcome to the Lab
|
Welcome to the Lab
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
<ul class="mt-4 space-y-2 list-none flex flex-row flex-wrap w-full justify-center items-center">
|
<ul class="flex flex-row flex-wrap justify-center items-center mt-4 space-y-2 w-full list-none">
|
||||||
<!-- registry -->
|
<!-- registry -->
|
||||||
<li>
|
<li>
|
||||||
<a href="https://registry-ui.wayl.one"
|
<a href="https://registry-ui.wayl.one"
|
||||||
class="flex items-center space-x-2 hover:bg-zinc-800 hover:text-white px-4 py-1 h-12 w-32">
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
stroke="currentColor" class="w-6 h-6 mr-2">
|
stroke="currentColor" class="mr-2 w-6 h-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
d="M7.875 14.25l1.214 1.942a2.25 2.25 0 001.908 1.058h2.006c.776 0 1.497-.4 1.908-1.058l1.214-1.942M2.41 9h4.636a2.25 2.25 0 011.872 1.002l.164.246a2.25 2.25 0 001.872 1.002h2.092a2.25 2.25 0 001.872-1.002l.164-.246A2.25 2.25 0 0116.954 9h4.636M2.41 9a2.25 2.25 0 00-.16.832V12a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 12V9.832c0-.287-.055-.57-.16-.832M2.41 9a2.25 2.25 0 01.382-.632l3.285-3.832a2.25 2.25 0 011.708-.786h8.43c.657 0 1.281.287 1.709.786l3.284 3.832c.163.19.291.404.382.632M4.5 20.25h15A2.25 2.25 0 0021.75 18v-2.625c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125V18a2.25 2.25 0 002.25 2.25z" />
|
d="M7.875 14.25l1.214 1.942a2.25 2.25 0 001.908 1.058h2.006c.776 0 1.497-.4 1.908-1.058l1.214-1.942M2.41 9h4.636a2.25 2.25 0 011.872 1.002l.164.246a2.25 2.25 0 001.872 1.002h2.092a2.25 2.25 0 001.872-1.002l.164-.246A2.25 2.25 0 0116.954 9h4.636M2.41 9a2.25 2.25 0 00-.16.832V12a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 12V9.832c0-.287-.055-.57-.16-.832M2.41 9a2.25 2.25 0 01.382-.632l3.285-3.832a2.25 2.25 0 011.708-.786h8.43c.657 0 1.281.287 1.709.786l3.284 3.832c.163.19.291.404.382.632M4.5 20.25h15A2.25 2.25 0 0021.75 18v-2.625c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125V18a2.25 2.25 0 002.25 2.25z" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -32,10 +33,10 @@
|
||||||
</li>
|
</li>
|
||||||
<!-- minio -->
|
<!-- minio -->
|
||||||
<li>
|
<li>
|
||||||
<a href="https://minio.wayl.one"
|
<a href="https://minio-ui.wayl.one"
|
||||||
class="flex items-center space-x-2 hover:bg-zinc-800 hover:text-white px-4 py-1 h-12 w-32">
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
stroke="currentColor" class="w-6 h-6 mr-2">
|
stroke="currentColor" class="mr-2 w-6 h-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
d="M20.25 7.5l-.625 10.632a2.25 2.25 0 01-2.247 2.118H6.622a2.25 2.25 0 01-2.247-2.118L3.75 7.5M10 11.25h4M3.375 7.5h17.25c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z" />
|
d="M20.25 7.5l-.625 10.632a2.25 2.25 0 01-2.247 2.118H6.622a2.25 2.25 0 01-2.247-2.118L3.75 7.5M10 11.25h4M3.375 7.5h17.25c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125z" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -44,9 +45,9 @@
|
||||||
<!-- shots -->
|
<!-- shots -->
|
||||||
<li>
|
<li>
|
||||||
<a href="https://shots.wayl.one"
|
<a href="https://shots.wayl.one"
|
||||||
class="flex items-center space-x-2 hover:bg-zinc-800 hover:text-white px-4 py-1 h-12 w-32">
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
stroke="currentColor" class="w-6 h-6 mr-2">
|
stroke="currentColor" class="mr-2 w-6 h-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
d="M2.25 15.75l5.159-5.159a2.25 2.25 0 013.182 0l5.159 5.159m-1.5-1.5l1.409-1.409a2.25 2.25 0 013.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 001.5-1.5V6a1.5 1.5 0 00-1.5-1.5H3.75A1.5 1.5 0 002.25 6v12a1.5 1.5 0 001.5 1.5zm10.5-11.25h.008v.008h-.008V8.25zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z" />
|
d="M2.25 15.75l5.159-5.159a2.25 2.25 0 013.182 0l5.159 5.159m-1.5-1.5l1.409-1.409a2.25 2.25 0 013.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 001.5-1.5V6a1.5 1.5 0 00-1.5-1.5H3.75A1.5 1.5 0 002.25 6v12a1.5 1.5 0 001.5 1.5zm10.5-11.25h.008v.008h-.008V8.25zm.375 0a.375.375 0 11-.75 0 .375.375 0 01.75 0z" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -56,9 +57,9 @@
|
||||||
<!-- status -->
|
<!-- status -->
|
||||||
<li>
|
<li>
|
||||||
<a href="https://status.wayl.one"
|
<a href="https://status.wayl.one"
|
||||||
class="flex items-center space-x-2 hover:bg-zinc-800 hover:text-white px-4 py-1 h-12 w-32">
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
stroke="currentColor" class="w-6 h-6 mr-2">
|
stroke="currentColor" class="mr-2 w-6 h-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
d="M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z" />
|
d="M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -68,9 +69,9 @@
|
||||||
<!-- ntfy -->
|
<!-- ntfy -->
|
||||||
<li>
|
<li>
|
||||||
<a href="https://ntfy.wayl.one"
|
<a href="https://ntfy.wayl.one"
|
||||||
class="flex items-center space-x-2 hover:bg-zinc-800 hover:text-white px-4 py-1 h-12 w-32">
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
stroke="currentColor" class="w-6 h-6 mr-2">
|
stroke="currentColor" class="mr-2 w-6 h-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
d="M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0M3.124 7.5A8.969 8.969 0 015.292 3m13.416 0a8.969 8.969 0 012.168 4.5" />
|
d="M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0M3.124 7.5A8.969 8.969 0 015.292 3m13.416 0a8.969 8.969 0 012.168 4.5" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -80,9 +81,9 @@
|
||||||
<!-- jf -->
|
<!-- jf -->
|
||||||
<li>
|
<li>
|
||||||
<a href="https://jf.wayl.one"
|
<a href="https://jf.wayl.one"
|
||||||
class="flex items-center space-x-2 hover:bg-zinc-800 hover:text-white px-4 py-1 h-12 w-32">
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
stroke="currentColor" class="w-6 h-6 mr-2">
|
stroke="currentColor" class="mr-2 w-6 h-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
d="M5.25 5.653c0-.856.917-1.398 1.667-.986l11.54 6.348a1.125 1.125 0 010 1.971l-11.54 6.347a1.125 1.125 0 01-1.667-.985V5.653z" />
|
d="M5.25 5.653c0-.856.917-1.398 1.667-.986l11.54 6.348a1.125 1.125 0 010 1.971l-11.54 6.347a1.125 1.125 0 01-1.667-.985V5.653z" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -92,9 +93,9 @@
|
||||||
<!-- matrix -->
|
<!-- matrix -->
|
||||||
<li>
|
<li>
|
||||||
<a href="https://matrix.wayl.one"
|
<a href="https://matrix.wayl.one"
|
||||||
class="flex items-center space-x-2 hover:bg-zinc-800 hover:text-white px-4 py-1 h-12 w-32">
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
stroke="currentColor" class="w-6 h-6 mr-2">
|
stroke="currentColor" class="mr-2 w-6 h-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
d="M20.25 8.511c.884.284 1.5 1.128 1.5 2.097v4.286c0 1.136-.847 2.1-1.98 2.193-.34.027-.68.052-1.02.072v3.091l-3-3c-1.354 0-2.694-.055-4.02-.163a2.115 2.115 0 01-.825-.242m9.345-8.334a2.126 2.126 0 00-.476-.095 48.64 48.64 0 00-8.048 0c-1.131.094-1.976 1.057-1.976 2.192v4.286c0 .837.46 1.58 1.155 1.951m9.345-8.334V6.637c0-1.621-1.152-3.026-2.76-3.235A48.455 48.455 0 0011.25 3c-2.115 0-4.198.137-6.24.402-1.608.209-2.76 1.614-2.76 3.235v6.226c0 1.621 1.152 3.026 2.76 3.235.577.075 1.157.14 1.74.194V21l4.155-4.155" />
|
d="M20.25 8.511c.884.284 1.5 1.128 1.5 2.097v4.286c0 1.136-.847 2.1-1.98 2.193-.34.027-.68.052-1.02.072v3.091l-3-3c-1.354 0-2.694-.055-4.02-.163a2.115 2.115 0 01-.825-.242m9.345-8.334a2.126 2.126 0 00-.476-.095 48.64 48.64 0 00-8.048 0c-1.131.094-1.976 1.057-1.976 2.192v4.286c0 .837.46 1.58 1.155 1.951m9.345-8.334V6.637c0-1.621-1.152-3.026-2.76-3.235A48.455 48.455 0 0011.25 3c-2.115 0-4.198.137-6.24.402-1.608.209-2.76 1.614-2.76 3.235v6.226c0 1.621 1.152 3.026 2.76 3.235.577.075 1.157.14 1.74.194V21l4.155-4.155" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -104,9 +105,9 @@
|
||||||
<!-- code-server -->
|
<!-- code-server -->
|
||||||
<li>
|
<li>
|
||||||
<a href="https://code-server.wayl.one"
|
<a href="https://code-server.wayl.one"
|
||||||
class="flex items-center space-x-2 hover:bg-zinc-800 hover:text-white px-4 py-1 h-12 w-32">
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
stroke="currentColor" class="w-6 h-6 mr-2">
|
stroke="currentColor" class="mr-2 w-6 h-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
d="M17.25 6.75L22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3l-4.5 16.5" />
|
d="M17.25 6.75L22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3l-4.5 16.5" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -116,9 +117,9 @@
|
||||||
<!-- jupyter -->
|
<!-- jupyter -->
|
||||||
<li>
|
<li>
|
||||||
<a href="https://jupyter.wayl.one"
|
<a href="https://jupyter.wayl.one"
|
||||||
class="flex items-center space-x-2 hover:bg-zinc-800 hover:text-white px-4 py-1 h-12 w-32">
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
stroke="currentColor" class="w-6 h-6 mr-2">
|
stroke="currentColor" class="mr-2 w-6 h-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25M9 16.5v.75m3-3v3M15 12v5.25m-4.5-15H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" />
|
d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25M9 16.5v.75m3-3v3M15 12v5.25m-4.5-15H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -128,9 +129,9 @@
|
||||||
<!-- photoview -->
|
<!-- photoview -->
|
||||||
<li>
|
<li>
|
||||||
<a href="https://photoview.wayl.one"
|
<a href="https://photoview.wayl.one"
|
||||||
class="flex items-center space-x-2 hover:bg-zinc-800 hover:text-white px-4 py-1 h-12 w-32">
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
stroke="currentColor" class="w-6 h-6 mr-2">
|
stroke="currentColor" class="mr-2 w-6 h-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
d="M6.827 6.175A2.31 2.31 0 015.186 7.23c-.38.054-.757.112-1.134.175C2.999 7.58 2.25 8.507 2.25 9.574V18a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9.574c0-1.067-.75-1.994-1.802-2.169a47.865 47.865 0 00-1.134-.175 2.31 2.31 0 01-1.64-1.055l-.822-1.316a2.192 2.192 0 00-1.736-1.039 48.774 48.774 0 00-5.232 0 2.192 2.192 0 00-1.736 1.039l-.821 1.316z" />
|
d="M6.827 6.175A2.31 2.31 0 015.186 7.23c-.38.054-.757.112-1.134.175C2.999 7.58 2.25 8.507 2.25 9.574V18a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9.574c0-1.067-.75-1.994-1.802-2.169a47.865 47.865 0 00-1.134-.175 2.31 2.31 0 01-1.64-1.055l-.822-1.316a2.192 2.192 0 00-1.736-1.039 48.774 48.774 0 00-5.232 0 2.192 2.192 0 00-1.736 1.039l-.821 1.316z" />
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
|
@ -142,9 +143,9 @@
|
||||||
<!-- syncthing -->
|
<!-- syncthing -->
|
||||||
<li>
|
<li>
|
||||||
<a href="https://syncthing.wayl.one"
|
<a href="https://syncthing.wayl.one"
|
||||||
class="flex items-center space-x-2 hover:bg-zinc-800 hover:text-white px-4 py-1 h-12 w-32">
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
stroke="currentColor" class="w-6 h-6 mr-2">
|
stroke="currentColor" class="mr-2 w-6 h-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
d="M19.5 12c0-1.232-.046-2.453-.138-3.662a4.006 4.006 0 00-3.7-3.7 48.678 48.678 0 00-7.324 0 4.006 4.006 0 00-3.7 3.7c-.017.22-.032.441-.046.662M19.5 12l3-3m-3 3l-3-3m-12 3c0 1.232.046 2.453.138 3.662a4.006 4.006 0 003.7 3.7 48.656 48.656 0 007.324 0 4.006 4.006 0 003.7-3.7c.017-.22.032-.441.046-.662M4.5 12l3 3m-3-3l-3 3" />
|
d="M19.5 12c0-1.232-.046-2.453-.138-3.662a4.006 4.006 0 00-3.7-3.7 48.678 48.678 0 00-7.324 0 4.006 4.006 0 00-3.7 3.7c-.017.22-.032.441-.046.662M19.5 12l3-3m-3 3l-3-3m-12 3c0 1.232.046 2.453.138 3.662a4.006 4.006 0 003.7 3.7 48.656 48.656 0 007.324 0 4.006 4.006 0 003.7-3.7c.017-.22.032-.441.046-.662M4.5 12l3 3m-3-3l-3 3" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
@ -154,27 +155,52 @@
|
||||||
<!-- librespeed -->
|
<!-- librespeed -->
|
||||||
<li>
|
<li>
|
||||||
<a href="https://librespeed.wayl.one"
|
<a href="https://librespeed.wayl.one"
|
||||||
class="flex items-center space-x-2 hover:bg-zinc-800 hover:text-white px-4 py-1 h-12 w-32">
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
stroke="currentColor" class="w-6 h-6 mr-2">
|
stroke="currentColor" class="mr-2 w-6 h-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
d="M8.288 15.038a5.25 5.25 0 017.424 0M5.106 11.856c3.807-3.808 9.98-3.808 13.788 0M1.924 8.674c5.565-5.565 14.587-5.565 20.152 0M12.53 18.22l-.53.53-.53-.53a.75.75 0 011.06 0z" />
|
d="M8.288 15.038a5.25 5.25 0 017.424 0M5.106 11.856c3.807-3.808 9.98-3.808 13.788 0M1.924 8.674c5.565-5.565 14.587-5.565 20.152 0M12.53 18.22l-.53.53-.53-.53a.75.75 0 011.06 0z" />
|
||||||
</svg>
|
</svg>
|
||||||
librespeed
|
librespeed
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<!-- pihole -->
|
||||||
<li>
|
<li>
|
||||||
<a href="https://pihole.wayl.one"
|
<a href="https://pihole.wayl.one/admin"
|
||||||
class="flex items-center space-x-2 hover:bg-zinc-800 hover:text-white px-4 py-1 h-12 w-32">
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
stroke="currentColor" class="w-6 h-6 mr-2">
|
stroke="currentColor" class="mr-2 w-6 h-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round"
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
d="M3.98 8.223A10.477 10.477 0 001.934 12C3.226 16.338 7.244 19.5 12 19.5c.993 0 1.953-.138 2.863-.395M6.228 6.228A10.45 10.45 0 0112 4.5c4.756 0 8.773 3.162 10.065 7.498a10.523 10.523 0 01-4.293 5.774M6.228 6.228L3 3m3.228 3.228l3.65 3.65m7.894 7.894L21 21m-3.228-3.228l-3.65-3.65m0 0a3 3 0 10-4.243-4.243m4.242 4.242L9.88 9.88" />
|
d="M3.98 8.223A10.477 10.477 0 001.934 12C3.226 16.338 7.244 19.5 12 19.5c.993 0 1.953-.138 2.863-.395M6.228 6.228A10.45 10.45 0 0112 4.5c4.756 0 8.773 3.162 10.065 7.498a10.523 10.523 0 01-4.293 5.774M6.228 6.228L3 3m3.228 3.228l3.65 3.65m7.894 7.894L21 21m-3.228-3.228l-3.65-3.65m0 0a3 3 0 10-4.243-4.243m4.242 4.242L9.88 9.88" />
|
||||||
</svg>
|
</svg>
|
||||||
pihole
|
pihole
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<!-- play-outside -->
|
||||||
|
<li>
|
||||||
|
<a href="https://play-outside.wayl.one"
|
||||||
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
|
stroke="currentColor" class="w-6 h-6">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z" />
|
||||||
|
</svg>
|
||||||
|
play-outside
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<!-- reader -->
|
||||||
|
<li>
|
||||||
|
<a href="https://reader.waylonwalker.com"
|
||||||
|
class="flex items-center py-1 px-4 space-x-2 w-32 h-12 hover:text-white hover:bg-zinc-800">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
|
||||||
|
stroke="currentColor" class="w-6 h-6">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round"
|
||||||
|
d="M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25" />
|
||||||
|
</svg>
|
||||||
|
reader
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
||||||
BIN
home/wayl-one-k8s.png
Normal file
BIN
home/wayl-one-k8s.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 92 KiB |
98
immich/docker-compose.yml
Normal file
98
immich/docker-compose.yml
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
name: immich
|
||||||
|
|
||||||
|
services:
|
||||||
|
immich-server:
|
||||||
|
container_name: immich_server
|
||||||
|
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
|
||||||
|
command: [ "start.sh", "immich" ]
|
||||||
|
volumes:
|
||||||
|
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
- database
|
||||||
|
- typesense
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
immich-microservices:
|
||||||
|
container_name: immich_microservices
|
||||||
|
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
|
||||||
|
# extends:
|
||||||
|
# file: hwaccel.yml
|
||||||
|
# service: hwaccel
|
||||||
|
command: [ "start.sh", "microservices" ]
|
||||||
|
volumes:
|
||||||
|
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
- database
|
||||||
|
- typesense
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
immich-machine-learning:
|
||||||
|
container_name: immich_machine_learning
|
||||||
|
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
|
||||||
|
volumes:
|
||||||
|
- model-cache:/cache
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
immich-web:
|
||||||
|
container_name: immich_web
|
||||||
|
image: ghcr.io/immich-app/immich-web:${IMMICH_VERSION:-release}
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
typesense:
|
||||||
|
container_name: immich_typesense
|
||||||
|
image: typesense/typesense:0.24.1@sha256:9bcff2b829f12074426ca044b56160ca9d777a0c488303469143dd9f8259d4dd
|
||||||
|
environment:
|
||||||
|
- TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
|
||||||
|
- TYPESENSE_DATA_DIR=/data
|
||||||
|
# remove this to get debug messages
|
||||||
|
- GLOG_minloglevel=1
|
||||||
|
volumes:
|
||||||
|
- tsdata:/data
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
redis:
|
||||||
|
container_name: immich_redis
|
||||||
|
image: redis:6.2-alpine@sha256:3995fe6ea6a619313e31046bd3c8643f9e70f8f2b294ff82659d409b47d06abb
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
database:
|
||||||
|
container_name: immich_postgres
|
||||||
|
image: postgres:14-alpine@sha256:874f566dd512d79cf74f59754833e869ae76ece96716d153b0fa3e64aec88d92
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
environment:
|
||||||
|
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||||
|
POSTGRES_USER: ${DB_USERNAME}
|
||||||
|
POSTGRES_DB: ${DB_DATABASE_NAME}
|
||||||
|
volumes:
|
||||||
|
- pgdata:/var/lib/postgresql/data
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
immich-proxy:
|
||||||
|
container_name: immich_proxy
|
||||||
|
image: ghcr.io/immich-app/immich-proxy:${IMMICH_VERSION:-release}
|
||||||
|
ports:
|
||||||
|
- 2283:8080
|
||||||
|
depends_on:
|
||||||
|
- immich-server
|
||||||
|
- immich-web
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
pgdata:
|
||||||
|
model-cache:
|
||||||
|
tsdata:
|
||||||
145
jellyfin/deployment.yaml
Normal file
145
jellyfin/deployment.yaml
Normal file
|
|
@ -0,0 +1,145 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
service: jellyfin
|
||||||
|
name: jellyfin
|
||||||
|
namespace: jellyfin
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: "8096"
|
||||||
|
port: 8096
|
||||||
|
targetPort: 8096
|
||||||
|
selector:
|
||||||
|
service: jellyfin
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: jellyfin
|
||||||
|
namespace: jellyfin
|
||||||
|
spec: {}
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
service: jellyfin
|
||||||
|
name: jellyfin
|
||||||
|
namespace: jellyfin
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
service: jellyfin
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
service: jellyfin
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- env:
|
||||||
|
- name: JELLYFIN_PublishedServerUrl
|
||||||
|
value: https://jellyfin.
|
||||||
|
image: docker.io/jellyfin/jellyfin
|
||||||
|
name: jellyfin
|
||||||
|
ports:
|
||||||
|
- containerPort: 8096
|
||||||
|
hostIP: 0.0.0.0
|
||||||
|
hostPort: 8096
|
||||||
|
protocol: TCP
|
||||||
|
resources: {}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /config
|
||||||
|
name: jellyfin-config
|
||||||
|
- mountPath: /cache
|
||||||
|
name: jellyfin-cache
|
||||||
|
- mountPath: /media
|
||||||
|
name: jellyfin-media
|
||||||
|
readOnly: true
|
||||||
|
restartPolicy: Always
|
||||||
|
volumes:
|
||||||
|
- name: jellyfin-config
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: jellyfin-config
|
||||||
|
- name: jellyfin-cache
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: jellyfin-cache
|
||||||
|
- name: jellyfin-media
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: jellyfin-media
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
service: jellyfin-config
|
||||||
|
name: jellyfin-config
|
||||||
|
namespace: jellyfin
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
service: jellyfin-cache
|
||||||
|
name: jellyfin-cache
|
||||||
|
namespace: jellyfin
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
service: jellyfin-media
|
||||||
|
name: jellyfin-media
|
||||||
|
namespace: jellyfin
|
||||||
|
|
||||||
|
spec:
|
||||||
|
storageClassName: manual
|
||||||
|
volumeName: jellyfin-media
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 3000Gi
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: jellyfin-media
|
||||||
|
labels:
|
||||||
|
type: local
|
||||||
|
spec:
|
||||||
|
storageClassName: manual
|
||||||
|
capacity:
|
||||||
|
storage: 3000Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
hostPath:
|
||||||
|
path: /mnt/vault
|
||||||
1
justfile
1
justfile
|
|
@ -14,4 +14,5 @@ viz:
|
||||||
k8sviz -n installer --kubeconfig $KUBECONFIG -t png -o kubeviz/installer.png
|
k8sviz -n installer --kubeconfig $KUBECONFIG -t png -o kubeviz/installer.png
|
||||||
k8sviz -n vault --kubeconfig $KUBECONFIG -t png -o kubeviz/vault.png
|
k8sviz -n vault --kubeconfig $KUBECONFIG -t png -o kubeviz/vault.png
|
||||||
k8sviz -n jobrunner --kubeconfig $KUBECONFIG -t png -o kubeviz/jobrunner.png
|
k8sviz -n jobrunner --kubeconfig $KUBECONFIG -t png -o kubeviz/jobrunner.png
|
||||||
|
convert kubeviz/*.png -append kubeviz/all.png
|
||||||
# convert image1.png image2.png image3.png -append result/result-sprite.png
|
# convert image1.png image2.png image3.png -append result/result-sprite.png
|
||||||
|
|
|
||||||
BIN
k8s.png
Normal file
BIN
k8s.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
232
matrix/deployment.yaml
Normal file
232
matrix/deployment.yaml
Normal file
|
|
@ -0,0 +1,232 @@
|
||||||
|
# namespace: matrix
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: matrix
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n matrix
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: db
|
||||||
|
name: db
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: "5432"
|
||||||
|
port: 5432
|
||||||
|
targetPort: 5432
|
||||||
|
selector:
|
||||||
|
io.kompose.service: db
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n matrix
|
||||||
|
kompose.service.expose: dev-matrix.wayl.one,matrix.k.waylonwalker.com
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: synapse
|
||||||
|
name: synapse
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: "8008"
|
||||||
|
port: 8008
|
||||||
|
targetPort: 8008
|
||||||
|
selector:
|
||||||
|
io.kompose.service: synapse
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
name: matrix
|
||||||
|
namespace: matrix
|
||||||
|
spec: {}
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n matrix
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: db
|
||||||
|
name: db
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
io.kompose.service: db
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n matrix
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.network/matrix-default: "true"
|
||||||
|
io.kompose.service: db
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- env:
|
||||||
|
- name: POSTGRES_INITDB_ARGS
|
||||||
|
value: --encoding=UTF-8 --lc-collate=C --lc-ctype=C
|
||||||
|
- name: POSTGRES_PASSWORD
|
||||||
|
value: synapse
|
||||||
|
- name: POSTGRES_USER
|
||||||
|
value: synapse
|
||||||
|
image: docker.io/postgres:12-alpine
|
||||||
|
name: synapse-db
|
||||||
|
ports:
|
||||||
|
- containerPort: 5432
|
||||||
|
protocol: TCP
|
||||||
|
resources: {}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /var/lib/postgresql/data
|
||||||
|
name: schemas
|
||||||
|
restartPolicy: Always
|
||||||
|
volumes:
|
||||||
|
- name: schemas
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: schemas
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: schemas
|
||||||
|
name: schemas
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n matrix
|
||||||
|
kompose.service.expose: dev-matrix.wayl.one,matrix.k.waylonwalker.com
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: synapse
|
||||||
|
name: synapse
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
io.kompose.service: synapse
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n matrix
|
||||||
|
kompose.service.expose: dev-matrix.wayl.one,matrix.k.waylonwalker.com
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.network/matrix-default: "true"
|
||||||
|
io.kompose.service: synapse
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: docker.io/matrixdotorg/synapse:latest
|
||||||
|
name: synapse
|
||||||
|
ports:
|
||||||
|
- containerPort: 8008
|
||||||
|
protocol: TCP
|
||||||
|
resources: {}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /data
|
||||||
|
name: synapse-data
|
||||||
|
restartPolicy: Always
|
||||||
|
volumes:
|
||||||
|
- name: synapse-data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: synapse-data
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n matrix
|
||||||
|
kompose.service.expose: dev-matrix.wayl.one,matrix.k.waylonwalker.com
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: synapse
|
||||||
|
name: synapse
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: dev-matrix.wayl.one
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: synapse
|
||||||
|
port:
|
||||||
|
number: 8008
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
- host: matrix.k.waylonwalker.com
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: synapse
|
||||||
|
port:
|
||||||
|
number: 8008
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: synapse-data
|
||||||
|
name: synapse-data
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
@ -8,44 +8,49 @@ services:
|
||||||
synapse:
|
synapse:
|
||||||
image: docker.io/matrixdotorg/synapse:latest
|
image: docker.io/matrixdotorg/synapse:latest
|
||||||
container_name: synapse
|
container_name: synapse
|
||||||
restart: unless-stopped
|
|
||||||
networks:
|
networks:
|
||||||
- proxy
|
- proxy
|
||||||
security_opt:
|
security_opt:
|
||||||
- no-new-privileges:true
|
- no-new-privileges:true
|
||||||
volumes:
|
volumes:
|
||||||
- ${PWD}/matrix/synapse-data:/data
|
# - ${PWD}/matrix/synapse-data:/data
|
||||||
depends_on:
|
- synapse-data:/data
|
||||||
- db
|
# depends_on:
|
||||||
|
# - db
|
||||||
ports:
|
ports:
|
||||||
- 8448:8448/tcp
|
- 8448:8448/tcp
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
kompose.service.expose: m2.wayl.one
|
||||||
- "traefik.http.routers.synapse.entrypoints=http"
|
# - "traefik.enable=true"
|
||||||
- "traefik.http.routers.synapse.rule=Host(`matrix.${URL}`)"
|
# - "traefik.http.routers.synapse.entrypoints=http"
|
||||||
- "traefik.http.middlewares.synapse-https-redirect.redirectscheme.scheme=https"
|
# - "traefik.http.routers.synapse.rule=Host(`matrix.${URL}`)"
|
||||||
- "traefik.http.routers.synapse.middlewares=synapse-https-redirect"
|
# - "traefik.http.middlewares.synapse-https-redirect.redirectscheme.scheme=https"
|
||||||
- "traefik.http.routers.synapse-secure.entrypoints=https"
|
# - "traefik.http.routers.synapse.middlewares=synapse-https-redirect"
|
||||||
- "traefik.http.routers.synapse-secure.rule=Host(`matrix.${URL}`)"
|
# - "traefik.http.routers.synapse-secure.entrypoints=https"
|
||||||
- "traefik.http.routers.synapse-secure.tls=true"
|
# - "traefik.http.routers.synapse-secure.rule=Host(`matrix.${URL}`)"
|
||||||
- "traefik.http.routers.synapse-secure.service=synapse"
|
# - "traefik.http.routers.synapse-secure.tls=true"
|
||||||
- "traefik.http.services.synapse.loadbalancer.server.port=8008"
|
# - "traefik.http.routers.synapse-secure.service=synapse"
|
||||||
- "traefik.docker.network=proxy"
|
# - "traefik.http.services.synapse.loadbalancer.server.port=8008"
|
||||||
db:
|
# - "traefik.docker.network=proxy"
|
||||||
image: docker.io/postgres:12-alpine
|
# db:
|
||||||
container_name: synapse-db
|
# image: docker.io/postgres:12-alpine
|
||||||
# Change that password, of course!
|
# container_name: synapse-db
|
||||||
environment:
|
# # Change that password, of course!
|
||||||
- POSTGRES_USER=${SYNAPSE_POSTGRES_USER:-synapse}
|
# environment:
|
||||||
- POSTGRES_PASSWORD=${SYNAPSE_POSTGRES_PASSWORD:-synapse}
|
# - POSTGRES_USER=${SYNAPSE_POSTGRES_USER:-synapse}
|
||||||
# ensure the database gets created correctly
|
# - POSTGRES_PASSWORD=${SYNAPSE_POSTGRES_PASSWORD:-synapse}
|
||||||
# https://matrix-org.github.io/synapse/latest/postgres.html#set-up-database
|
# # ensure the database gets created correctly
|
||||||
- POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
|
# # https://matrix-org.github.io/synapse/latest/postgres.html#set-up-database
|
||||||
|
# - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
|
||||||
|
# volumes:
|
||||||
|
# # You may store the database tables in a local folder..
|
||||||
|
# - ${PWD}/matrix/schemas:/var/lib/postgresql/data
|
||||||
|
# # .. or store them on some high performance storage for better results
|
||||||
|
# # - /path/to/ssd/storage:/var/lib/postgresql/data
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
# You may store the database tables in a local folder..
|
synapse-data: {}
|
||||||
- ${PWD}/matrix/schemas:/var/lib/postgresql/data
|
|
||||||
# .. or store them on some high performance storage for better results
|
|
||||||
# - /path/to/ssd/storage:/var/lib/postgresql/data
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
proxy:
|
proxy:
|
||||||
|
|
|
||||||
54
matrix/generate.yaml
Normal file
54
matrix/generate.yaml
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: matrix
|
||||||
|
---
|
||||||
|
apiVersion: batch/v1
|
||||||
|
kind: Job
|
||||||
|
metadata:
|
||||||
|
name: synapse-generate
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
ttlSecondsAfterFinished: 100
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: docker.io/matrixdotorg/synapse:latest
|
||||||
|
name: synapse
|
||||||
|
command: ["generate"]
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /data
|
||||||
|
name: synapse-data
|
||||||
|
volumes:
|
||||||
|
- name: synapse-data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: synapse-data
|
||||||
|
# template:
|
||||||
|
# spec:
|
||||||
|
# containers:
|
||||||
|
# - image: docker.io/matrixdotorg/synapse:latest
|
||||||
|
# name: synapse
|
||||||
|
# command: ["generate"]
|
||||||
|
# volumeMounts:
|
||||||
|
# - mountPath: /data
|
||||||
|
# name: synapse-data
|
||||||
|
# volumes:
|
||||||
|
# - name: synapse-data
|
||||||
|
# persistentVolumeClaim:
|
||||||
|
# claimName: synapse-data
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: synapse-data
|
||||||
|
name: synapse-data
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
9
matrix/justfile
Normal file
9
matrix/justfile
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
default: convert deploy viz
|
||||||
|
convert:
|
||||||
|
kompose convert -o deployment.yaml -n matrix
|
||||||
|
deploy:
|
||||||
|
kubectl apply -f deployment.yaml
|
||||||
|
viz:
|
||||||
|
k8sviz -n matrix --kubeconfig $KUBECONFIG -t png -o matrix-k8s.png
|
||||||
|
restart:
|
||||||
|
kubectl rollout restart -n matrix deployment/matrix
|
||||||
BIN
matrix/kui
Normal file
BIN
matrix/kui
Normal file
Binary file not shown.
BIN
matrix/matrix-k8s.png
Normal file
BIN
matrix/matrix-k8s.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 113 KiB |
127
matrix/matrix.yaml
Normal file
127
matrix/matrix.yaml
Normal file
|
|
@ -0,0 +1,127 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace matrix -o matrix.yaml
|
||||||
|
kompose.service.expose: m2.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: synapse
|
||||||
|
name: synapse
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: "8448"
|
||||||
|
port: 8448
|
||||||
|
targetPort: 8448
|
||||||
|
selector:
|
||||||
|
io.kompose.service: synapse
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
name: matrix
|
||||||
|
namespace: matrix
|
||||||
|
spec: {}
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace matrix -o matrix.yaml
|
||||||
|
kompose.service.expose: m2.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: synapse
|
||||||
|
name: synapse
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
io.kompose.service: synapse
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace matrix -o matrix.yaml
|
||||||
|
kompose.service.expose: m2.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.network/proxy: "true"
|
||||||
|
io.kompose.service: synapse
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: docker.io/matrixdotorg/synapse:latest
|
||||||
|
name: synapse
|
||||||
|
ports:
|
||||||
|
- containerPort: 8448
|
||||||
|
hostPort: 8448
|
||||||
|
protocol: TCP
|
||||||
|
resources: {}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /data
|
||||||
|
name: synapse-data
|
||||||
|
restartPolicy: Always
|
||||||
|
volumes:
|
||||||
|
- name: synapse-data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: synapse-data
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace matrix -o matrix.yaml
|
||||||
|
kompose.service.expose: m2.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: synapse
|
||||||
|
name: synapse
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: m2.wayl.one
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: synapse
|
||||||
|
port:
|
||||||
|
number: 8448
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: synapse-data
|
||||||
|
name: synapse-data
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
45
matrix/pvc-inspector.yaml
Normal file
45
matrix/pvc-inspector.yaml
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: matrix
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: pvc-inspector
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: docker.io/matrixdotorg/synapse:latest
|
||||||
|
name: pvc-inspector
|
||||||
|
command: ["sleep", "infinity"]
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /data
|
||||||
|
name: synapse-data
|
||||||
|
- image: docker.io/matrixdotorg/synapse:latest
|
||||||
|
name: pvc-inspector-synapse
|
||||||
|
command: ["sleep", "infinity"]
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /data
|
||||||
|
name: synapse-data
|
||||||
|
volumes:
|
||||||
|
- name: synapse-data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: synapse-data
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: synapse-data
|
||||||
|
name: synapse-data
|
||||||
|
namespace: matrix
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
@ -1,107 +0,0 @@
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
annotations:
|
|
||||||
kompose.cmd: kompose convert -o deployment.yaml -n minio --replicas 3
|
|
||||||
kompose.version: 1.31.2 (a92241f79)
|
|
||||||
creationTimestamp: null
|
|
||||||
labels:
|
|
||||||
io.kompose.service: sandcrawler
|
|
||||||
name: sandcrawler
|
|
||||||
namespace: minio
|
|
||||||
spec:
|
|
||||||
ports:
|
|
||||||
- name: "9000"
|
|
||||||
port: 9000
|
|
||||||
targetPort: 9000
|
|
||||||
- name: "9001"
|
|
||||||
port: 9001
|
|
||||||
targetPort: 9001
|
|
||||||
selector:
|
|
||||||
io.kompose.service: sandcrawler
|
|
||||||
status:
|
|
||||||
loadBalancer: {}
|
|
||||||
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
creationTimestamp: null
|
|
||||||
name: minio
|
|
||||||
namespace: minio
|
|
||||||
spec: {}
|
|
||||||
status: {}
|
|
||||||
|
|
||||||
---
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
annotations:
|
|
||||||
kompose.cmd: kompose convert -o deployment.yaml -n minio --replicas 3
|
|
||||||
kompose.version: 1.31.2 (a92241f79)
|
|
||||||
creationTimestamp: null
|
|
||||||
labels:
|
|
||||||
io.kompose.service: sandcrawler
|
|
||||||
name: sandcrawler
|
|
||||||
namespace: minio
|
|
||||||
spec:
|
|
||||||
replicas: 3
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
io.kompose.service: sandcrawler
|
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
annotations:
|
|
||||||
kompose.cmd: kompose convert -o deployment.yaml -n minio --replicas 3
|
|
||||||
kompose.version: 1.31.2 (a92241f79)
|
|
||||||
creationTimestamp: null
|
|
||||||
labels:
|
|
||||||
io.kompose.network/minio-default: "true"
|
|
||||||
io.kompose.service: sandcrawler
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- args:
|
|
||||||
- server
|
|
||||||
- --console-address
|
|
||||||
- :9001
|
|
||||||
- /data
|
|
||||||
image: minio/minio
|
|
||||||
name: sandcrawler
|
|
||||||
ports:
|
|
||||||
- containerPort: 9000
|
|
||||||
protocol: TCP
|
|
||||||
- containerPort: 9001
|
|
||||||
protocol: TCP
|
|
||||||
resources: {}
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /data
|
|
||||||
name: minio-storage
|
|
||||||
envFrom:
|
|
||||||
- secretRef:
|
|
||||||
name: minio-secret
|
|
||||||
restartPolicy: Always
|
|
||||||
volumes:
|
|
||||||
- name: minio-storage
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: minio-storage
|
|
||||||
|
|
||||||
status: {}
|
|
||||||
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
creationTimestamp: null
|
|
||||||
labels:
|
|
||||||
io.kompose.service: minio-storage
|
|
||||||
name: minio-storage
|
|
||||||
namespace: minio
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 100Mi
|
|
||||||
status: {}
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
apiVersion: v1
|
|
||||||
kind: Secret
|
|
||||||
metadata:
|
|
||||||
name: minio-secret
|
|
||||||
data:
|
|
||||||
MINIO_ROOT_USER: "d2F5bG9uCg=="
|
|
||||||
MINIO_ROOT_PASSWORD: "TnpwWTRIKllCMnVncSQK"
|
|
||||||
19
nextcloud/docker-compose.yml
Normal file
19
nextcloud/docker-compose.yml
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
services:
|
||||||
|
nextcloud:
|
||||||
|
image: lscr.io/linuxserver/nextcloud:latest
|
||||||
|
container_name: nextcloud
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ="America/Chicago"
|
||||||
|
volumes:
|
||||||
|
- appdata:/config
|
||||||
|
- data:/data
|
||||||
|
ports:
|
||||||
|
- 443
|
||||||
|
labels:
|
||||||
|
kompose.service.expose: nextcloud.wayl.one
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
appdata:
|
||||||
|
data:
|
||||||
155
nextcloud/nextcloud.yaml
Normal file
155
nextcloud/nextcloud.yaml
Normal file
|
|
@ -0,0 +1,155 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace nextcloud -o nextcloud.yaml
|
||||||
|
kompose.service.expose: nextcloud.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: nextcloud
|
||||||
|
name: nextcloud
|
||||||
|
namespace: nextcloud
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: "443"
|
||||||
|
port: 443
|
||||||
|
targetPort: 443
|
||||||
|
selector:
|
||||||
|
io.kompose.service: nextcloud
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
name: nextcloud
|
||||||
|
namespace: nextcloud
|
||||||
|
spec: {}
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace nextcloud -o nextcloud.yaml
|
||||||
|
kompose.service.expose: nextcloud.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: nextcloud
|
||||||
|
name: nextcloud
|
||||||
|
namespace: nextcloud
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
io.kompose.service: nextcloud
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace nextcloud -o nextcloud.yaml
|
||||||
|
kompose.service.expose: nextcloud.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.network/nextcloud-default: "true"
|
||||||
|
io.kompose.service: nextcloud
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- env:
|
||||||
|
- name: PGID
|
||||||
|
value: "1000"
|
||||||
|
- name: PUID
|
||||||
|
value: "1000"
|
||||||
|
- name: TZ
|
||||||
|
value: '"America/Chicago"'
|
||||||
|
image: lscr.io/linuxserver/nextcloud:latest
|
||||||
|
name: nextcloud
|
||||||
|
ports:
|
||||||
|
- containerPort: 443
|
||||||
|
protocol: TCP
|
||||||
|
resources: {}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /config
|
||||||
|
name: appdata
|
||||||
|
- mountPath: /data
|
||||||
|
name: data
|
||||||
|
restartPolicy: Always
|
||||||
|
volumes:
|
||||||
|
- name: appdata
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: appdata
|
||||||
|
- name: data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: data
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace nextcloud -o nextcloud.yaml
|
||||||
|
kompose.service.expose: nextcloud.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: nextcloud
|
||||||
|
name: nextcloud
|
||||||
|
namespace: nextcloud
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: nextcloud.wayl.one
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: nextcloud
|
||||||
|
port:
|
||||||
|
number: 443
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: appdata
|
||||||
|
name: appdata
|
||||||
|
namespace: nextcloud
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: data
|
||||||
|
name: data
|
||||||
|
namespace: nextcloud
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
563
nextcloud/values.yaml
Normal file
563
nextcloud/values.yaml
Normal file
|
|
@ -0,0 +1,563 @@
|
||||||
|
## Official nextcloud image version
|
||||||
|
## ref: https://hub.docker.com/r/library/nextcloud/tags/
|
||||||
|
##
|
||||||
|
image:
|
||||||
|
repository: nextcloud
|
||||||
|
flavor: apache
|
||||||
|
# default is generated by flavor and appVersion
|
||||||
|
tag:
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
# pullSecrets:
|
||||||
|
# - myRegistrKeySecretName
|
||||||
|
|
||||||
|
nameOverride: ""
|
||||||
|
fullnameOverride: ""
|
||||||
|
podAnnotations: {}
|
||||||
|
deploymentAnnotations: {}
|
||||||
|
deploymentLabels: {}
|
||||||
|
|
||||||
|
# Number of replicas to be deployed
|
||||||
|
replicaCount: 1
|
||||||
|
|
||||||
|
## Allowing use of ingress controllers
|
||||||
|
## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/
|
||||||
|
##
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
|
# className: nginx
|
||||||
|
annotations: {}
|
||||||
|
# nginx.ingress.kubernetes.io/proxy-body-size: 4G
|
||||||
|
# kubernetes.io/tls-acme: "true"
|
||||||
|
# cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||||
|
# # Keep this in sync with the README.md:
|
||||||
|
# nginx.ingress.kubernetes.io/server-snippet: |-
|
||||||
|
# server_tokens off;
|
||||||
|
# proxy_hide_header X-Powered-By;
|
||||||
|
# rewrite ^/.well-known/webfinger /index.php/.well-known/webfinger last;
|
||||||
|
# rewrite ^/.well-known/nodeinfo /index.php/.well-known/nodeinfo last;
|
||||||
|
# rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
|
||||||
|
# rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json;
|
||||||
|
# location = /.well-known/carddav {
|
||||||
|
# return 301 $scheme://$host/remote.php/dav;
|
||||||
|
# }
|
||||||
|
# location = /.well-known/caldav {
|
||||||
|
# return 301 $scheme://$host/remote.php/dav;
|
||||||
|
# }
|
||||||
|
# location = /robots.txt {
|
||||||
|
# allow all;
|
||||||
|
# log_not_found off;
|
||||||
|
# access_log off;
|
||||||
|
# }
|
||||||
|
# location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
|
||||||
|
# deny all;
|
||||||
|
# }
|
||||||
|
# location ~ ^/(?:autotest|occ|issue|indie|db_|console) {
|
||||||
|
# deny all;
|
||||||
|
# }
|
||||||
|
# tls:
|
||||||
|
# - secretName: nextcloud-tls
|
||||||
|
# hosts:
|
||||||
|
# - nextcloud.kube.home
|
||||||
|
labels: {}
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
|
||||||
|
|
||||||
|
# Allow configuration of lifecycle hooks
|
||||||
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/
|
||||||
|
lifecycle: {}
|
||||||
|
# postStartCommand: []
|
||||||
|
# preStopCommand: []
|
||||||
|
|
||||||
|
phpClientHttpsFix:
|
||||||
|
enabled: false
|
||||||
|
protocol: https
|
||||||
|
|
||||||
|
nextcloud:
|
||||||
|
host: nextcloud.wayl.one
|
||||||
|
username: admin
|
||||||
|
password: changeme
|
||||||
|
## Use an existing secret
|
||||||
|
existingSecret:
|
||||||
|
enabled: false
|
||||||
|
# secretName: nameofsecret
|
||||||
|
usernameKey: nextcloud-username
|
||||||
|
passwordKey: nextcloud-password
|
||||||
|
tokenKey: nextcloud-token
|
||||||
|
smtpUsernameKey: smtp-username
|
||||||
|
smtpPasswordKey: smtp-password
|
||||||
|
smtpHostKey: smtp-host
|
||||||
|
update: 0
|
||||||
|
# If web server is not binding default port, you can define it
|
||||||
|
containerPort: 80
|
||||||
|
datadir: /var/www/html/data
|
||||||
|
persistence:
|
||||||
|
subPath:
|
||||||
|
mail:
|
||||||
|
enabled: false
|
||||||
|
fromAddress: user
|
||||||
|
domain: domain.com
|
||||||
|
smtp:
|
||||||
|
host: domain.com
|
||||||
|
secure: ssl
|
||||||
|
port: 465
|
||||||
|
authtype: LOGIN
|
||||||
|
name: user
|
||||||
|
password: pass
|
||||||
|
# PHP Configuration files
|
||||||
|
# Will be injected in /usr/local/etc/php/conf.d for apache image and in /usr/local/etc/php-fpm.d when nginx.enabled: true
|
||||||
|
phpConfigs: {}
|
||||||
|
# Default config files
|
||||||
|
# IMPORTANT: Will be used only if you put extra configs, otherwise default will come from nextcloud itself
|
||||||
|
# Default confgurations can be found here: https://github.com/nextcloud/docker/tree/master/16.0/apache/config
|
||||||
|
defaultConfigs:
|
||||||
|
# To protect /var/www/html/config
|
||||||
|
.htaccess: true
|
||||||
|
# Redis default configuration
|
||||||
|
redis.config.php: true
|
||||||
|
# Apache configuration for rewrite urls
|
||||||
|
apache-pretty-urls.config.php: true
|
||||||
|
# Define APCu as local cache
|
||||||
|
apcu.config.php: true
|
||||||
|
# Apps directory configs
|
||||||
|
apps.config.php: true
|
||||||
|
# Used for auto configure database
|
||||||
|
autoconfig.php: true
|
||||||
|
# SMTP default configuration
|
||||||
|
smtp.config.php: true
|
||||||
|
# Extra config files created in /var/www/html/config/
|
||||||
|
# ref: https://docs.nextcloud.com/server/15/admin_manual/configuration_server/config_sample_php_parameters.html#multiple-config-php-file
|
||||||
|
configs: {}
|
||||||
|
|
||||||
|
# For example, to use S3 as primary storage
|
||||||
|
# ref: https://docs.nextcloud.com/server/13/admin_manual/configuration_files/primary_storage.html#simple-storage-service-s3
|
||||||
|
#
|
||||||
|
# configs:
|
||||||
|
# s3.config.php: |-
|
||||||
|
# <?php
|
||||||
|
# $CONFIG = array (
|
||||||
|
# 'objectstore' => array(
|
||||||
|
# 'class' => '\\OC\\Files\\ObjectStore\\S3',
|
||||||
|
# 'arguments' => array(
|
||||||
|
# 'bucket' => 'my-bucket',
|
||||||
|
# 'autocreate' => true,
|
||||||
|
# 'key' => 'xxx',
|
||||||
|
# 'secret' => 'xxx',
|
||||||
|
# 'region' => 'us-east-1',
|
||||||
|
# 'use_ssl' => true
|
||||||
|
# )
|
||||||
|
# )
|
||||||
|
# );
|
||||||
|
|
||||||
|
# Hooks for auto configuration
|
||||||
|
# Here you could write small scripts which are placed in `/docker-entrypoint-hooks.d/<hook-name>/helm.sh`
|
||||||
|
# ref: https://github.com/nextcloud/docker?tab=readme-ov-file#auto-configuration-via-hook-folders
|
||||||
|
hooks:
|
||||||
|
pre-installation:
|
||||||
|
post-installation:
|
||||||
|
pre-upgrade:
|
||||||
|
post-upgrade:
|
||||||
|
before-starting:
|
||||||
|
|
||||||
|
## Strategy used to replace old pods
|
||||||
|
## IMPORTANT: use with care, it is suggested to leave as that for upgrade purposes
|
||||||
|
## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
# type: RollingUpdate
|
||||||
|
# rollingUpdate:
|
||||||
|
# maxSurge: 1
|
||||||
|
# maxUnavailable: 0
|
||||||
|
|
||||||
|
##
|
||||||
|
## Extra environment variables
|
||||||
|
extraEnv:
|
||||||
|
# - name: SOME_SECRET_ENV
|
||||||
|
# valueFrom:
|
||||||
|
# secretKeyRef:
|
||||||
|
# name: nextcloud
|
||||||
|
# key: secret_key
|
||||||
|
|
||||||
|
# Extra init containers that runs before pods start.
|
||||||
|
extraInitContainers: []
|
||||||
|
# - name: do-something
|
||||||
|
# image: busybox
|
||||||
|
# command: ['do', 'something']
|
||||||
|
|
||||||
|
# Extra sidecar containers.
|
||||||
|
extraSidecarContainers: []
|
||||||
|
# - name: nextcloud-logger
|
||||||
|
# image: busybox
|
||||||
|
# command: [/bin/sh, -c, 'while ! test -f "/run/nextcloud/data/nextcloud.log"; do sleep 1; done; tail -n+1 -f /run/nextcloud/data/nextcloud.log']
|
||||||
|
# volumeMounts:
|
||||||
|
# - name: nextcloud-data
|
||||||
|
# mountPath: /run/nextcloud/data
|
||||||
|
|
||||||
|
# Extra mounts for the pods. Example shown is for connecting a legacy NFS volume
|
||||||
|
# to NextCloud pods in Kubernetes. This can then be configured in External Storage
|
||||||
|
extraVolumes:
|
||||||
|
# - name: nfs
|
||||||
|
# nfs:
|
||||||
|
# server: "10.0.0.1"
|
||||||
|
# path: "/nextcloud_data"
|
||||||
|
# readOnly: false
|
||||||
|
extraVolumeMounts:
|
||||||
|
# - name: nfs
|
||||||
|
# mountPath: "/legacy_data"
|
||||||
|
|
||||||
|
# Set securityContext parameters for the nextcloud CONTAINER only (will not affect nginx container).
|
||||||
|
# For example, you may need to define runAsNonRoot directive
|
||||||
|
securityContext: {}
|
||||||
|
# runAsUser: 33
|
||||||
|
# runAsGroup: 33
|
||||||
|
# runAsNonRoot: true
|
||||||
|
# readOnlyRootFilesystem: false
|
||||||
|
|
||||||
|
# Set securityContext parameters for the entire pod. For example, you may need to define runAsNonRoot directive
|
||||||
|
podSecurityContext: {}
|
||||||
|
# runAsUser: 33
|
||||||
|
# runAsGroup: 33
|
||||||
|
# runAsNonRoot: true
|
||||||
|
# readOnlyRootFilesystem: false
|
||||||
|
|
||||||
|
nginx:
|
||||||
|
## You need to set an fpm version of the image for nextcloud if you want to use nginx!
|
||||||
|
enabled: false
|
||||||
|
image:
|
||||||
|
repository: nginx
|
||||||
|
tag: alpine
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
containerPort: 80
|
||||||
|
|
||||||
|
config:
|
||||||
|
# This generates the default nginx config as per the nextcloud documentation
|
||||||
|
default: true
|
||||||
|
# custom: |-
|
||||||
|
# worker_processes 1;..
|
||||||
|
|
||||||
|
resources: {}
|
||||||
|
|
||||||
|
# Set nginx container securityContext parameters. For example, you may need to define runAsNonRoot directive
|
||||||
|
securityContext: {}
|
||||||
|
# the nginx alpine container default user is 82
|
||||||
|
# runAsUser: 82
|
||||||
|
# runAsGroup: 33
|
||||||
|
# runAsNonRoot: true
|
||||||
|
# readOnlyRootFilesystem: true
|
||||||
|
|
||||||
|
internalDatabase:
|
||||||
|
enabled: true
|
||||||
|
name: nextcloud
|
||||||
|
|
||||||
|
##
|
||||||
|
## External database configuration
|
||||||
|
##
|
||||||
|
externalDatabase:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
## Supported database engines: mysql or postgresql
|
||||||
|
type: mysql
|
||||||
|
|
||||||
|
## Database host
|
||||||
|
host:
|
||||||
|
|
||||||
|
## Database user
|
||||||
|
user: nextcloud
|
||||||
|
|
||||||
|
## Database password
|
||||||
|
password: ""
|
||||||
|
|
||||||
|
## Database name
|
||||||
|
database: nextcloud
|
||||||
|
|
||||||
|
## Use a existing secret
|
||||||
|
existingSecret:
|
||||||
|
enabled: false
|
||||||
|
# secretName: nameofsecret
|
||||||
|
usernameKey: db-username
|
||||||
|
passwordKey: db-password
|
||||||
|
# hostKey: db-hostname-or-ip
|
||||||
|
# databaseKey: db-name
|
||||||
|
|
||||||
|
##
|
||||||
|
## MariaDB chart configuration
|
||||||
|
## ref: https://github.com/bitnami/charts/tree/main/bitnami/mariadb
|
||||||
|
##
|
||||||
|
mariadb:
|
||||||
|
## Whether to deploy a mariadb server from the bitnami mariab db helm chart
|
||||||
|
# to satisfy the applications database requirements. if you want to deploy this bitnami mariadb, set this and externalDatabase to true
|
||||||
|
# To use an ALREADY DEPLOYED mariadb database, set this to false and configure the externalDatabase parameters
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
auth:
|
||||||
|
database: nextcloud
|
||||||
|
username: nextcloud
|
||||||
|
password: changeme
|
||||||
|
# Use existing secret (auth.rootPassword, auth.password, and auth.replicationPassword will be ignored).
|
||||||
|
# secret must contain the keys mariadb-root-password, mariadb-replication-password and mariadb-password
|
||||||
|
existingSecret: ""
|
||||||
|
|
||||||
|
architecture: standalone
|
||||||
|
|
||||||
|
## Enable persistence using Persistent Volume Claims
|
||||||
|
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||||
|
##
|
||||||
|
primary:
|
||||||
|
persistence:
|
||||||
|
enabled: false
|
||||||
|
# Use an existing Persistent Volume Claim (must be created ahead of time)
|
||||||
|
# existingClaim: ""
|
||||||
|
# storageClass: ""
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 8Gi
|
||||||
|
|
||||||
|
##
|
||||||
|
## PostgreSQL chart configuration
|
||||||
|
## for more options see https://github.com/bitnami/charts/tree/main/bitnami/postgresql
|
||||||
|
##
|
||||||
|
postgresql:
|
||||||
|
enabled: false
|
||||||
|
global:
|
||||||
|
postgresql:
|
||||||
|
# global.postgresql.auth overrides postgresql.auth
|
||||||
|
auth:
|
||||||
|
username: nextcloud
|
||||||
|
password: changeme
|
||||||
|
database: nextcloud
|
||||||
|
# Name of existing secret to use for PostgreSQL credentials.
|
||||||
|
# auth.postgresPassword, auth.password, and auth.replicationPassword will be ignored and picked up from this secret.
|
||||||
|
# secret might also contains the key ldap-password if LDAP is enabled.
|
||||||
|
# ldap.bind_password will be ignored and picked from this secret in this case.
|
||||||
|
existingSecret: ""
|
||||||
|
# Names of keys in existing secret to use for PostgreSQL credentials
|
||||||
|
secretKeys:
|
||||||
|
adminPasswordKey: ""
|
||||||
|
userPasswordKey: ""
|
||||||
|
replicationPasswordKey: ""
|
||||||
|
primary:
|
||||||
|
persistence:
|
||||||
|
enabled: false
|
||||||
|
# Use an existing Persistent Volume Claim (must be created ahead of time)
|
||||||
|
# existingClaim: ""
|
||||||
|
# storageClass: ""
|
||||||
|
|
||||||
|
##
|
||||||
|
## Redis chart configuration
|
||||||
|
## for more options see https://github.com/bitnami/charts/tree/main/bitnami/redis
|
||||||
|
##
|
||||||
|
|
||||||
|
redis:
|
||||||
|
enabled: false
|
||||||
|
auth:
|
||||||
|
enabled: true
|
||||||
|
password: 'changeme'
|
||||||
|
# name of an existing secret with Redis® credentials (instead of auth.password), must be created ahead of time
|
||||||
|
existingSecret: ""
|
||||||
|
# Password key to be retrieved from existing secret
|
||||||
|
existingSecretPasswordKey: ""
|
||||||
|
|
||||||
|
|
||||||
|
## Cronjob to execute Nextcloud background tasks
|
||||||
|
## ref: https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html#cron
|
||||||
|
##
|
||||||
|
cronjob:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
## Cronjob sidecar resource requests and limits
|
||||||
|
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||||
|
##
|
||||||
|
resources: {}
|
||||||
|
|
||||||
|
# Allow configuration of lifecycle hooks
|
||||||
|
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/
|
||||||
|
lifecycle: {}
|
||||||
|
# postStartCommand: []
|
||||||
|
# preStopCommand: []
|
||||||
|
# Set securityContext parameters. For example, you may need to define runAsNonRoot directive
|
||||||
|
securityContext: {}
|
||||||
|
# runAsUser: 33
|
||||||
|
# runAsGroup: 33
|
||||||
|
# runAsNonRoot: true
|
||||||
|
# readOnlyRootFilesystem: true
|
||||||
|
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 8080
|
||||||
|
loadBalancerIP: ""
|
||||||
|
nodePort: nil
|
||||||
|
|
||||||
|
## Enable persistence using Persistent Volume Claims
|
||||||
|
## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||||
|
##
|
||||||
|
persistence:
|
||||||
|
# Nextcloud Data (/var/www/html)
|
||||||
|
enabled: false
|
||||||
|
annotations: {}
|
||||||
|
## nextcloud data Persistent Volume Storage Class
|
||||||
|
## If defined, storageClassName: <storageClass>
|
||||||
|
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||||
|
## If undefined (the default) or set to null, no storageClassName spec is
|
||||||
|
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||||
|
## GKE, AWS & OpenStack)
|
||||||
|
##
|
||||||
|
# storageClass: "-"
|
||||||
|
|
||||||
|
## A manually managed Persistent Volume and Claim
|
||||||
|
## Requires persistence.enabled: true
|
||||||
|
## If defined, PVC must be created manually before volume will be bound
|
||||||
|
# existingClaim:
|
||||||
|
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 8Gi
|
||||||
|
|
||||||
|
## Use an additional pvc for the data directory rather than a subpath of the default PVC
|
||||||
|
## Useful to store data on a different storageClass (e.g. on slower disks)
|
||||||
|
nextcloudData:
|
||||||
|
enabled: false
|
||||||
|
subPath:
|
||||||
|
annotations: {}
|
||||||
|
# storageClass: "-"
|
||||||
|
# existingClaim:
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 8Gi
|
||||||
|
|
||||||
|
resources: {}
|
||||||
|
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||||
|
# choice for the user. This also increases chances charts run on environments with little
|
||||||
|
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||||
|
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||||
|
# limits:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
# requests:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
|
||||||
|
## Liveness and readiness probe values
|
||||||
|
## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
|
||||||
|
##
|
||||||
|
livenessProbe:
|
||||||
|
enabled: true
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
failureThreshold: 3
|
||||||
|
successThreshold: 1
|
||||||
|
readinessProbe:
|
||||||
|
enabled: true
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
failureThreshold: 3
|
||||||
|
successThreshold: 1
|
||||||
|
startupProbe:
|
||||||
|
enabled: false
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
failureThreshold: 30
|
||||||
|
successThreshold: 1
|
||||||
|
|
||||||
|
|
||||||
|
## Enable pod autoscaling using HorizontalPodAutoscaler
|
||||||
|
## ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
|
||||||
|
##
|
||||||
|
hpa:
|
||||||
|
enabled: false
|
||||||
|
cputhreshold: 60
|
||||||
|
minPods: 1
|
||||||
|
maxPods: 10
|
||||||
|
|
||||||
|
nodeSelector: {}
|
||||||
|
|
||||||
|
tolerations: []
|
||||||
|
|
||||||
|
affinity: {}
|
||||||
|
|
||||||
|
|
||||||
|
## Prometheus Exporter / Metrics
|
||||||
|
##
|
||||||
|
metrics:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
replicaCount: 1
|
||||||
|
# The metrics exporter needs to know how you serve Nextcloud either http or https
|
||||||
|
https: false
|
||||||
|
# Use API token if set, otherwise fall back to password authentication
|
||||||
|
# https://github.com/xperimental/nextcloud-exporter#token-authentication
|
||||||
|
# Currently you still need to set the token manually in your nextcloud install
|
||||||
|
token: ""
|
||||||
|
timeout: 5s
|
||||||
|
# if set to true, exporter skips certificate verification of Nextcloud server.
|
||||||
|
tlsSkipVerify: false
|
||||||
|
|
||||||
|
image:
|
||||||
|
repository: xperimental/nextcloud-exporter
|
||||||
|
tag: 0.6.2
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
# pullSecrets:
|
||||||
|
# - myRegistrKeySecretName
|
||||||
|
|
||||||
|
## Metrics exporter resource requests and limits
|
||||||
|
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||||
|
##
|
||||||
|
# resources: {}
|
||||||
|
|
||||||
|
## Metrics exporter pod Annotation and Labels
|
||||||
|
# podAnnotations: {}
|
||||||
|
|
||||||
|
# podLabels: {}
|
||||||
|
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
## Use serviceLoadBalancerIP to request a specific static IP,
|
||||||
|
## otherwise leave blank
|
||||||
|
# loadBalancerIP:
|
||||||
|
annotations:
|
||||||
|
prometheus.io/scrape: "true"
|
||||||
|
prometheus.io/port: "9205"
|
||||||
|
labels: {}
|
||||||
|
|
||||||
|
## Prometheus Operator ServiceMonitor configuration
|
||||||
|
##
|
||||||
|
serviceMonitor:
|
||||||
|
## @param metrics.serviceMonitor.enabled Create ServiceMonitor Resource for scraping metrics using PrometheusOperator
|
||||||
|
##
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
## @param metrics.serviceMonitor.namespace Namespace in which Prometheus is running
|
||||||
|
##
|
||||||
|
namespace: ""
|
||||||
|
|
||||||
|
## @param metrics.serviceMonitor.namespaceSelector The selector of the namespace where the target service is located (defaults to the release namespace)
|
||||||
|
namespaceSelector:
|
||||||
|
|
||||||
|
## @param metrics.serviceMonitor.jobLabel The name of the label on the target service to use as the job name in prometheus.
|
||||||
|
##
|
||||||
|
jobLabel: ""
|
||||||
|
|
||||||
|
## @param metrics.serviceMonitor.interval Interval at which metrics should be scraped
|
||||||
|
## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
|
||||||
|
##
|
||||||
|
interval: 30s
|
||||||
|
|
||||||
|
## @param metrics.serviceMonitor.scrapeTimeout Specify the timeout after which the scrape is ended
|
||||||
|
## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint
|
||||||
|
##
|
||||||
|
scrapeTimeout: ""
|
||||||
|
|
||||||
|
## @param metrics.serviceMonitor.labels Extra labels for the ServiceMonitor
|
||||||
|
##
|
||||||
|
labels: {}
|
||||||
|
|
||||||
|
|
||||||
|
rbac:
|
||||||
|
enabled: false
|
||||||
|
serviceaccount:
|
||||||
|
create: true
|
||||||
|
name: nextcloud-serviceaccount
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
|
|
||||||
|
## @param securityContext for nextcloud pod @deprecated Use `nextcloud.podSecurityContext` instead
|
||||||
|
securityContext: {}
|
||||||
319
photoprism/deployment.yaml
Normal file
319
photoprism/deployment.yaml
Normal file
|
|
@ -0,0 +1,319 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n photoprism
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: mariadb
|
||||||
|
name: mariadb
|
||||||
|
namespace: photoprism
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: "3306"
|
||||||
|
port: 3306
|
||||||
|
targetPort: 3306
|
||||||
|
selector:
|
||||||
|
io.kompose.service: mariadb
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n photoprism
|
||||||
|
kompose.service.expose: photoprism.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: photoprism
|
||||||
|
name: photoprism
|
||||||
|
namespace: photoprism
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: "2342"
|
||||||
|
port: 2342
|
||||||
|
targetPort: 2342
|
||||||
|
selector:
|
||||||
|
io.kompose.service: photoprism
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
name: photoprism
|
||||||
|
namespace: photoprism
|
||||||
|
spec: {}
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n photoprism
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: mariadb
|
||||||
|
name: mariadb
|
||||||
|
namespace: photoprism
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
io.kompose.service: mariadb
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n photoprism
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.network/photoprism-default: "true"
|
||||||
|
io.kompose.service: mariadb
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- args:
|
||||||
|
- mariadbd
|
||||||
|
- --innodb-buffer-pool-size=512M
|
||||||
|
- --transaction-isolation=READ-COMMITTED
|
||||||
|
- --character-set-server=utf8mb4
|
||||||
|
- --collation-server=utf8mb4_unicode_ci
|
||||||
|
- --max-connections=512
|
||||||
|
- --innodb-rollback-on-timeout=OFF
|
||||||
|
- --innodb-lock-wait-timeout=120
|
||||||
|
env:
|
||||||
|
- name: MARIADB_AUTO_UPGRADE
|
||||||
|
value: "1"
|
||||||
|
- name: MARIADB_DATABASE
|
||||||
|
value: photoprism
|
||||||
|
- name: MARIADB_INITDB_SKIP_TZINFO
|
||||||
|
value: "1"
|
||||||
|
- name: MARIADB_PASSWORD
|
||||||
|
value: insecure
|
||||||
|
- name: MARIADB_ROOT_PASSWORD
|
||||||
|
value: insecure
|
||||||
|
- name: MARIADB_USER
|
||||||
|
value: photoprism
|
||||||
|
image: mariadb:10.11
|
||||||
|
name: mariadb
|
||||||
|
ports:
|
||||||
|
- containerPort: 3306
|
||||||
|
protocol: TCP
|
||||||
|
resources: {}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /var/lib/mysql
|
||||||
|
name: photoprism-db
|
||||||
|
restartPolicy: Always
|
||||||
|
terminationGracePeriodSeconds: 5
|
||||||
|
volumes:
|
||||||
|
- name: photoprism-db
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: photoprism-db
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: photoprism-db
|
||||||
|
name: photoprism-db
|
||||||
|
namespace: photoprism
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n photoprism
|
||||||
|
kompose.service.expose: photoprism.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: photoprism
|
||||||
|
name: photoprism
|
||||||
|
namespace: photoprism
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
io.kompose.service: photoprism
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n photoprism
|
||||||
|
kompose.service.expose: photoprism.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.network/photoprism-default: "true"
|
||||||
|
io.kompose.service: photoprism
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- env:
|
||||||
|
- name: PHOTOPRISM_ADMIN_PASSWORD
|
||||||
|
value: insecure
|
||||||
|
- name: PHOTOPRISM_ADMIN_USER
|
||||||
|
value: admin
|
||||||
|
- name: PHOTOPRISM_AUTH_MODE
|
||||||
|
value: password
|
||||||
|
- name: PHOTOPRISM_DATABASE_DRIVER
|
||||||
|
value: mysql
|
||||||
|
- name: PHOTOPRISM_DATABASE_NAME
|
||||||
|
value: photoprism
|
||||||
|
- name: PHOTOPRISM_DATABASE_PASSWORD
|
||||||
|
value: insecure
|
||||||
|
- name: PHOTOPRISM_DATABASE_SERVER
|
||||||
|
value: mariadb:3306
|
||||||
|
- name: PHOTOPRISM_DATABASE_USER
|
||||||
|
value: photoprism
|
||||||
|
- name: PHOTOPRISM_DEFAULT_TLS
|
||||||
|
value: "true"
|
||||||
|
- name: PHOTOPRISM_DETECT_NSFW
|
||||||
|
value: "false"
|
||||||
|
- name: PHOTOPRISM_DISABLE_CHOWN
|
||||||
|
value: "false"
|
||||||
|
- name: PHOTOPRISM_DISABLE_CLASSIFICATION
|
||||||
|
value: "false"
|
||||||
|
- name: PHOTOPRISM_DISABLE_FACES
|
||||||
|
value: "false"
|
||||||
|
- name: PHOTOPRISM_DISABLE_RAW
|
||||||
|
value: "false"
|
||||||
|
- name: PHOTOPRISM_DISABLE_SETTINGS
|
||||||
|
value: "false"
|
||||||
|
- name: PHOTOPRISM_DISABLE_TENSORFLOW
|
||||||
|
value: "false"
|
||||||
|
- name: PHOTOPRISM_DISABLE_TLS
|
||||||
|
value: "false"
|
||||||
|
- name: PHOTOPRISM_DISABLE_VECTORS
|
||||||
|
value: "false"
|
||||||
|
- name: PHOTOPRISM_DISABLE_WEBDAV
|
||||||
|
value: "false"
|
||||||
|
- name: PHOTOPRISM_EXPERIMENTAL
|
||||||
|
value: "false"
|
||||||
|
- name: PHOTOPRISM_HTTP_COMPRESSION
|
||||||
|
value: gzip
|
||||||
|
- name: PHOTOPRISM_JPEG_QUALITY
|
||||||
|
value: "85"
|
||||||
|
- name: PHOTOPRISM_LOG_LEVEL
|
||||||
|
value: info
|
||||||
|
- name: PHOTOPRISM_ORIGINALS_LIMIT
|
||||||
|
value: "5000"
|
||||||
|
- name: PHOTOPRISM_RAW_PRESETS
|
||||||
|
value: "false"
|
||||||
|
- name: PHOTOPRISM_READONLY
|
||||||
|
value: "false"
|
||||||
|
- name: PHOTOPRISM_SITE_AUTHOR
|
||||||
|
- name: PHOTOPRISM_SITE_CAPTION
|
||||||
|
value: AI-Powered Photos App
|
||||||
|
- name: PHOTOPRISM_SITE_DESCRIPTION
|
||||||
|
- name: PHOTOPRISM_SITE_URL
|
||||||
|
value: https://photoprism.wayl.one
|
||||||
|
- name: PHOTOPRISM_UPLOAD_NSFW
|
||||||
|
value: "true"
|
||||||
|
image: photoprism/photoprism:latest
|
||||||
|
name: photoprism
|
||||||
|
ports:
|
||||||
|
- containerPort: 2342
|
||||||
|
protocol: TCP
|
||||||
|
resources: {}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /photoprism/originals
|
||||||
|
name: photoprism-originals
|
||||||
|
- mountPath: /photoprism/storage
|
||||||
|
name: photoprism-storage
|
||||||
|
workingDir: /photoprism
|
||||||
|
restartPolicy: Always
|
||||||
|
terminationGracePeriodSeconds: 10
|
||||||
|
volumes:
|
||||||
|
- name: photoprism-originals
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: photoprism-originals
|
||||||
|
- name: photoprism-storage
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: photoprism-storage
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n photoprism
|
||||||
|
kompose.service.expose: photoprism.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: photoprism
|
||||||
|
name: photoprism
|
||||||
|
namespace: photoprism
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: photoprism.wayl.one
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: photoprism
|
||||||
|
port:
|
||||||
|
number: 2342
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: photoprism-originals
|
||||||
|
name: photoprism-originals
|
||||||
|
namespace: photoprism
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: photoprism-storage
|
||||||
|
name: photoprism-storage
|
||||||
|
namespace: photoprism
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
140
photoprism/docker-compose.yml
Normal file
140
photoprism/docker-compose.yml
Normal file
|
|
@ -0,0 +1,140 @@
|
||||||
|
version: "3.5"
|
||||||
|
|
||||||
|
# Example Docker Compose config file for PhotoPrism (Linux / AMD64)
|
||||||
|
#
|
||||||
|
# Note:
|
||||||
|
# - Running PhotoPrism on a server with less than 4 GB of swap space or setting a memory/swap limit can cause unexpected
|
||||||
|
# restarts ("crashes"), for example, when the indexer temporarily needs more memory to process large files.
|
||||||
|
# - If you install PhotoPrism on a public server outside your home network, please always run it behind a secure
|
||||||
|
# HTTPS reverse proxy such as Traefik or Caddy. Your files and passwords will otherwise be transmitted
|
||||||
|
# in clear text and can be intercepted by anyone, including your provider, hackers, and governments:
|
||||||
|
# https://docs.photoprism.app/getting-started/proxies/traefik/
|
||||||
|
#
|
||||||
|
# Setup Guides:
|
||||||
|
# - https://docs.photoprism.app/getting-started/docker-compose/
|
||||||
|
# - https://docs.photoprism.app/getting-started/raspberry-pi/
|
||||||
|
# - https://www.photoprism.app/kb/activation
|
||||||
|
#
|
||||||
|
# Troubleshooting Checklists:
|
||||||
|
# - https://docs.photoprism.app/getting-started/troubleshooting/
|
||||||
|
# - https://docs.photoprism.app/getting-started/troubleshooting/docker/
|
||||||
|
# - https://docs.photoprism.app/getting-started/troubleshooting/mariadb/
|
||||||
|
#
|
||||||
|
# CLI Commands:
|
||||||
|
# - https://docs.photoprism.app/getting-started/docker-compose/#command-line-interface
|
||||||
|
#
|
||||||
|
# All commands may have to be prefixed with "sudo" when not running as root.
|
||||||
|
# This will point the home directory shortcut ~ to /root in volume mounts.
|
||||||
|
|
||||||
|
services:
|
||||||
|
photoprism:
|
||||||
|
## Use photoprism/photoprism:preview for testing preview builds:
|
||||||
|
image: photoprism/photoprism:latest
|
||||||
|
## Don't enable automatic restarts until PhotoPrism has been properly configured and tested!
|
||||||
|
## If the service gets stuck in a restart loop, this points to a memory, filesystem, network, or database issue:
|
||||||
|
## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors
|
||||||
|
# restart: unless-stopped
|
||||||
|
stop_grace_period: 10s
|
||||||
|
depends_on:
|
||||||
|
- mariadb
|
||||||
|
security_opt:
|
||||||
|
- seccomp:unconfined
|
||||||
|
- apparmor:unconfined
|
||||||
|
ports:
|
||||||
|
- 2342 # HTTP port (host:container)
|
||||||
|
environment:
|
||||||
|
PHOTOPRISM_ADMIN_USER: "admin" # admin login username
|
||||||
|
PHOTOPRISM_ADMIN_PASSWORD: "insecure" # initial admin password (8-72 characters)
|
||||||
|
PHOTOPRISM_AUTH_MODE: "password" # authentication mode (public, password)
|
||||||
|
PHOTOPRISM_SITE_URL: "https://photoprism.wayl.one" # server URL in the format "http(s)://domain.name(:port)/(path)"
|
||||||
|
PHOTOPRISM_DISABLE_TLS: "false" # disables HTTPS/TLS even if the site URL starts with https:// and a certificate is available
|
||||||
|
PHOTOPRISM_DEFAULT_TLS: "true" # defaults to a self-signed HTTPS/TLS certificate if no other certificate is available
|
||||||
|
PHOTOPRISM_ORIGINALS_LIMIT: 5000 # file size limit for originals in MB (increase for high-res video)
|
||||||
|
PHOTOPRISM_HTTP_COMPRESSION: "gzip" # improves transfer speed and bandwidth utilization (none or gzip)
|
||||||
|
PHOTOPRISM_LOG_LEVEL: "info" # log level: trace, debug, info, warning, error, fatal, or panic
|
||||||
|
PHOTOPRISM_READONLY: "false" # do not modify originals directory (reduced functionality)
|
||||||
|
PHOTOPRISM_EXPERIMENTAL: "false" # enables experimental features
|
||||||
|
PHOTOPRISM_DISABLE_CHOWN: "false" # disables updating storage permissions via chmod and chown on startup
|
||||||
|
PHOTOPRISM_DISABLE_WEBDAV: "false" # disables built-in WebDAV server
|
||||||
|
PHOTOPRISM_DISABLE_SETTINGS: "false" # disables settings UI and API
|
||||||
|
PHOTOPRISM_DISABLE_TENSORFLOW: "false" # disables all features depending on TensorFlow
|
||||||
|
PHOTOPRISM_DISABLE_FACES: "false" # disables face detection and recognition (requires TensorFlow)
|
||||||
|
PHOTOPRISM_DISABLE_CLASSIFICATION: "false" # disables image classification (requires TensorFlow)
|
||||||
|
PHOTOPRISM_DISABLE_VECTORS: "false" # disables vector graphics support
|
||||||
|
PHOTOPRISM_DISABLE_RAW: "false" # disables indexing and conversion of RAW images
|
||||||
|
PHOTOPRISM_RAW_PRESETS: "false" # enables applying user presets when converting RAW images (reduces performance)
|
||||||
|
PHOTOPRISM_JPEG_QUALITY: 85 # a higher value increases the quality and file size of JPEG images and thumbnails (25-100)
|
||||||
|
PHOTOPRISM_DETECT_NSFW: "false" # automatically flags photos as private that MAY be offensive (requires TensorFlow)
|
||||||
|
PHOTOPRISM_UPLOAD_NSFW: "true" # allows uploads that MAY be offensive (no effect without TensorFlow)
|
||||||
|
# PHOTOPRISM_DATABASE_DRIVER: "sqlite" # SQLite is an embedded database that doesn't require a server
|
||||||
|
PHOTOPRISM_DATABASE_DRIVER: "mysql" # use MariaDB 10.5+ or MySQL 8+ instead of SQLite for improved performance
|
||||||
|
PHOTOPRISM_DATABASE_SERVER: "mariadb:3306" # MariaDB or MySQL database server (hostname:port)
|
||||||
|
PHOTOPRISM_DATABASE_NAME: "photoprism" # MariaDB or MySQL database schema name
|
||||||
|
PHOTOPRISM_DATABASE_USER: "photoprism" # MariaDB or MySQL database user name
|
||||||
|
PHOTOPRISM_DATABASE_PASSWORD: "insecure" # MariaDB or MySQL database user password
|
||||||
|
PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App"
|
||||||
|
PHOTOPRISM_SITE_DESCRIPTION: "" # meta site description
|
||||||
|
PHOTOPRISM_SITE_AUTHOR: "" # meta site author
|
||||||
|
## Video Transcoding (https://docs.photoprism.app/getting-started/advanced/transcoding/):
|
||||||
|
# PHOTOPRISM_FFMPEG_ENCODER: "software" # H.264/AVC encoder (software, intel, nvidia, apple, raspberry, or vaapi)
|
||||||
|
# PHOTOPRISM_FFMPEG_SIZE: "1920" # video size limit in pixels (720-7680) (default: 3840)
|
||||||
|
# PHOTOPRISM_FFMPEG_BITRATE: "32" # video bitrate limit in Mbit/s (default: 50)
|
||||||
|
## Run/install on first startup (options: update https gpu tensorflow davfs clitools clean):
|
||||||
|
# PHOTOPRISM_INIT: "https gpu tensorflow"
|
||||||
|
## Run as a non-root user after initialization (supported: 0, 33, 50-99, 500-600, and 900-1200):
|
||||||
|
# PHOTOPRISM_UID: 1000
|
||||||
|
# PHOTOPRISM_GID: 1000
|
||||||
|
# PHOTOPRISM_UMASK: 0000
|
||||||
|
## Start as non-root user before initialization (supported: 0, 33, 50-99, 500-600, and 900-1200):
|
||||||
|
# user: "1000:1000"
|
||||||
|
## Share hardware devices with FFmpeg and TensorFlow (optional):
|
||||||
|
# devices:
|
||||||
|
# - "/dev/dri:/dev/dri" # Intel QSV
|
||||||
|
# - "/dev/nvidia0:/dev/nvidia0" # Nvidia CUDA
|
||||||
|
# - "/dev/nvidiactl:/dev/nvidiactl"
|
||||||
|
# - "/dev/nvidia-modeset:/dev/nvidia-modeset"
|
||||||
|
# - "/dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl"
|
||||||
|
# - "/dev/nvidia-uvm:/dev/nvidia-uvm"
|
||||||
|
# - "/dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools"
|
||||||
|
# - "/dev/video11:/dev/video11" # Video4Linux Video Encode Device (h264_v4l2m2m)
|
||||||
|
working_dir: "/photoprism" # do not change or remove
|
||||||
|
## Storage Folders: "~" is a shortcut for your home directory, "." for the current directory
|
||||||
|
volumes:
|
||||||
|
# "/host/folder:/photoprism/folder" # Example
|
||||||
|
- "photoprism-originals:/photoprism/originals" # Original media files (DO NOT REMOVE)
|
||||||
|
# - "/example/family:/photoprism/originals/family" # *Additional* media folders can be mounted like this
|
||||||
|
# - "~/Import:/photoprism/import" # *Optional* base folder from which files can be imported to originals
|
||||||
|
- "photoprism-storage:/photoprism/storage" # *Writable* storage folder for cache, database, and sidecar files (DO NOT REMOVE)
|
||||||
|
|
||||||
|
labels:
|
||||||
|
kompose.service.expose: photoprism.wayl.one
|
||||||
|
|
||||||
|
## Database Server (recommended)
|
||||||
|
## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql
|
||||||
|
mariadb:
|
||||||
|
image: mariadb:10.11
|
||||||
|
## If MariaDB gets stuck in a restart loop, this points to a memory or filesystem issue:
|
||||||
|
## https://docs.photoprism.app/getting-started/troubleshooting/#fatal-server-errors
|
||||||
|
# restart: unless-stopped
|
||||||
|
stop_grace_period: 5s
|
||||||
|
security_opt: # see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239
|
||||||
|
- seccomp:unconfined
|
||||||
|
- apparmor:unconfined
|
||||||
|
command: mariadbd --innodb-buffer-pool-size=512M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
|
||||||
|
## Never store database files on an unreliable device such as a USB flash drive, an SD card, or a shared network folder:
|
||||||
|
volumes:
|
||||||
|
- "photoprism-db:/var/lib/mysql" # DO NOT REMOVE
|
||||||
|
ports:
|
||||||
|
- 3306
|
||||||
|
environment:
|
||||||
|
MARIADB_AUTO_UPGRADE: "1"
|
||||||
|
MARIADB_INITDB_SKIP_TZINFO: "1"
|
||||||
|
MARIADB_DATABASE: "photoprism"
|
||||||
|
MARIADB_USER: "photoprism"
|
||||||
|
MARIADB_PASSWORD: "insecure"
|
||||||
|
MARIADB_ROOT_PASSWORD: "insecure"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
photoprism-originals: {}
|
||||||
|
photoprism-storage: {}
|
||||||
|
photoprism-db: {}
|
||||||
31
photoprism/justfile
Normal file
31
photoprism/justfile
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
default: cred convert deploy viz
|
||||||
|
update: convert patch
|
||||||
|
|
||||||
|
create-ns:
|
||||||
|
kubectl create ns photoprism
|
||||||
|
cred:
|
||||||
|
kubectl get secret -n default regcred --output=yaml -o yaml | sed 's/namespace: default/namespace: photoprism/' | kubectl apply -n photoprism -f - && echo deployed secret || echo secret exists
|
||||||
|
convert:
|
||||||
|
kompose convert -o deployment.yaml -n photoprism
|
||||||
|
deploy:
|
||||||
|
kubectl apply -f deployment.yaml
|
||||||
|
delete:
|
||||||
|
kubectl delete all --all -n photoprism --timeout=0s
|
||||||
|
viz:
|
||||||
|
k8sviz -n photoprism --kubeconfig $KUBECONFIG -t png -o photoprism-k8s.png
|
||||||
|
restart:
|
||||||
|
kubectl rollout restart -n photoprism deployment/photoprism
|
||||||
|
|
||||||
|
patch:
|
||||||
|
kubectl patch -f deployment.yaml
|
||||||
|
describe:
|
||||||
|
kubectl get deployment -n photoprism
|
||||||
|
kubectl get rs -n photoprism
|
||||||
|
kubectl get pod -n photoprism
|
||||||
|
kubectl get svc -n photoprism
|
||||||
|
kubectl get ing -n photoprism
|
||||||
|
|
||||||
|
describe-pod:
|
||||||
|
kubectl describe pod -n photoprism
|
||||||
|
logs:
|
||||||
|
kubectl logs --all-containers -l io.kompose.service=photoprism-wayl-one -n photoprism -f
|
||||||
2788
pihole/basic-install.sh
Normal file
2788
pihole/basic-install.sh
Normal file
File diff suppressed because it is too large
Load diff
157
pihole/deployment.yaml
Normal file
157
pihole/deployment.yaml
Normal file
|
|
@ -0,0 +1,157 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n pihole
|
||||||
|
kompose.service.expose: pihole.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: pihole
|
||||||
|
name: pihole
|
||||||
|
namespace: pihole
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: "80"
|
||||||
|
port: 80
|
||||||
|
targetPort: 80
|
||||||
|
selector:
|
||||||
|
io.kompose.service: pihole
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
name: pihole
|
||||||
|
namespace: pihole
|
||||||
|
spec: {}
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n pihole
|
||||||
|
kompose.service.expose: pihole.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: pihole
|
||||||
|
name: pihole
|
||||||
|
namespace: pihole
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
io.kompose.service: pihole
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n pihole
|
||||||
|
kompose.service.expose: pihole.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.network/pihole-default: "true"
|
||||||
|
io.kompose.service: pihole
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- env:
|
||||||
|
- name: TZ
|
||||||
|
value: America/Chicago
|
||||||
|
- name: WEBPASSWORD
|
||||||
|
value: password
|
||||||
|
image: pihole/pihole:latest
|
||||||
|
name: pihole
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
protocol: TCP
|
||||||
|
resources: {}
|
||||||
|
securityContext:
|
||||||
|
capabilities:
|
||||||
|
add:
|
||||||
|
- NET_ADMIN
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /etc/pihole
|
||||||
|
name: pihole
|
||||||
|
- mountPath: /etc/dnsmasq.d
|
||||||
|
name: dnsmasq
|
||||||
|
restartPolicy: Always
|
||||||
|
volumes:
|
||||||
|
- name: pihole
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: pihole
|
||||||
|
- name: dnsmasq
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: dnsmasq
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n pihole
|
||||||
|
kompose.service.expose: pihole.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: pihole
|
||||||
|
name: pihole
|
||||||
|
namespace: pihole
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: pihole.wayl.one
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: pihole
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: pihole
|
||||||
|
name: pihole
|
||||||
|
namespace: pihole
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: dnsmasq
|
||||||
|
name: dnsmasq
|
||||||
|
namespace: pihole
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
|
@ -4,67 +4,23 @@ services:
|
||||||
pihole:
|
pihole:
|
||||||
image: pihole/pihole:latest
|
image: pihole/pihole:latest
|
||||||
container_name: pihole
|
container_name: pihole
|
||||||
restart: unless-stopped
|
|
||||||
security_opt:
|
|
||||||
- no-new-privileges:true
|
|
||||||
networks:
|
|
||||||
- proxy
|
|
||||||
# Volumes store your data between container upgrades
|
# Volumes store your data between container upgrades
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- pihole:/etc/pihole/
|
||||||
- ${PWD}/pihole/data/etc-pihole/:/etc/pihole/
|
- dnsmasq:/etc/dnsmasq.d/
|
||||||
- ${PWD}/pihole/data/etc-dnsmasq.d/:/etc/dnsmasq.d/
|
ports:
|
||||||
# ports:
|
- 80
|
||||||
# - "8080:80/tcp"
|
|
||||||
# - "53:53/tcp"
|
|
||||||
# - "53:53/udp"
|
|
||||||
# - "67:67/udp"
|
|
||||||
environment:
|
environment:
|
||||||
# TZ: "America/Chicago"
|
TZ: "America/Chicago"
|
||||||
WEBPASSWORD: "${PIHOLE_PASSWORD}"
|
WEBPASSWORD: password
|
||||||
# Recommended but not required (DHCP needs NET_ADMIN)
|
# Recommended but not required (DHCP needs NET_ADMIN)
|
||||||
# https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
|
# https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
|
||||||
cap_add:
|
cap_add:
|
||||||
- NET_ADMIN
|
- NET_ADMIN
|
||||||
|
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
kompose.service.expose: pihole.wayl.one
|
||||||
- "traefik.http.routers.pihole.entrypoints=http"
|
|
||||||
- "traefik.http.routers.pihole.rule=Host(`pihole.${URL}`)"
|
|
||||||
- "traefik.http.middlewares.pihole-https-redirect.redirectscheme.scheme=https"
|
|
||||||
- "traefik.http.routers.pihole.middlewares=pihole-https-redirect"
|
|
||||||
- "traefik.http.routers.pihole-secure.entrypoints=https"
|
|
||||||
- "traefik.http.routers.pihole-secure.rule=Host(`pihole.${URL}`)"
|
|
||||||
- "traefik.http.routers.pihole-secure.tls=true"
|
|
||||||
- "traefik.http.routers.pihole-secure.service=pihole"
|
|
||||||
- "traefik.http.services.pihole.loadbalancer.server.port=80"
|
|
||||||
- "traefik.docker.network=proxy"
|
|
||||||
|
|
||||||
networks:
|
volumes:
|
||||||
proxy:
|
pihole:
|
||||||
external: true
|
dnsmasq:
|
||||||
#
|
|
||||||
# version: "3"
|
|
||||||
|
|
||||||
# # More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
|
|
||||||
# services:
|
|
||||||
# pihole:
|
|
||||||
# container_name: pihole
|
|
||||||
# image: pihole/pihole:latest
|
|
||||||
# # For DHCP it is recommended to remove these ports and instead add: network_mode: "host"
|
|
||||||
# ports:
|
|
||||||
# # - "53:53/tcp"
|
|
||||||
# # - "53:53/udp"
|
|
||||||
# # - "67:67/udp" # Only required if you are using Pi-hole as your DHCP server
|
|
||||||
# - "8080:80/tcp"
|
|
||||||
# environment:
|
|
||||||
# TZ: "America/Chicago"
|
|
||||||
# # WEBPASSWORD: 'set a secure password here or it will be random'
|
|
||||||
# # Volumes store your data between container upgrades
|
|
||||||
# volumes:
|
|
||||||
# - "./etc-pihole:/etc/pihole"
|
|
||||||
# - "./etc-dnsmasq.d:/etc/dnsmasq.d"
|
|
||||||
# # https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
|
|
||||||
# cap_add:
|
|
||||||
# - NET_ADMIN # Required if you are using Pi-hole as your DHCP server, else not needed
|
|
||||||
# restart: unless-stopped
|
|
||||||
|
|
|
||||||
10
pihole/justfile
Normal file
10
pihole/justfile
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
default: convert deploy viz
|
||||||
|
|
||||||
|
convert:
|
||||||
|
kompose convert -o deployment.yaml -n pihole
|
||||||
|
deploy:
|
||||||
|
kubectl apply -f deployment.yaml
|
||||||
|
viz:
|
||||||
|
k8sviz -n pihole --kubeconfig $KUBECONFIG -t png -o pihole-k8s.png
|
||||||
|
restart:
|
||||||
|
kubectl rollout restart -n pihole deployment/pihole
|
||||||
|
|
@ -5,7 +5,7 @@ metadata:
|
||||||
namespace: registry
|
namespace: registry
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- image: registry.wayl.one/devtainer:slim
|
- image: registry.fokais.com/devtainer:slim
|
||||||
name: pvc-inspector
|
name: pvc-inspector
|
||||||
command: ["sleep", "300"]
|
command: ["sleep", "300"]
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
|
|
@ -15,6 +15,8 @@ spec:
|
||||||
name: pvc-registry-auth
|
name: pvc-registry-auth
|
||||||
- mountPath: /pvc-registry-config
|
- mountPath: /pvc-registry-config
|
||||||
name: pvc-registry-config
|
name: pvc-registry-config
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: fokais-regcred
|
||||||
volumes:
|
volumes:
|
||||||
- name: pvc-registry
|
- name: pvc-registry
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
|
|
|
||||||
2
registry-ui/registry.password
Normal file
2
registry-ui/registry.password
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
waylon:$2y$05$wj/1a88SL14RJc28rO5aHO7pFDnLNdKLO8t13WO58ZceiBagD0Swm
|
||||||
|
|
||||||
2
registry/auth/htpasswd
Normal file
2
registry/auth/htpasswd
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
waylon:$2y$05$wj/1a88SL14RJc28rO5aHO7pFDnLNdKLO8t13WO58ZceiBagD0Swm
|
||||||
|
|
||||||
30
registry/certs/tls.crt
Normal file
30
registry/certs/tls.crt
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIFMTCCAxmgAwIBAgIUNuf5H7FDNdMjTIL/gOSJxToTH04wDQYJKoZIhvcNAQEL
|
||||||
|
BQAwGjEYMBYGA1UEAwwPZG9ja2VyLXJlZ2lzdHJ5MB4XDTIzMTEwNTAwMzk1MFoX
|
||||||
|
DTI0MTEwNDAwMzk1MFowGjEYMBYGA1UEAwwPZG9ja2VyLXJlZ2lzdHJ5MIICIjAN
|
||||||
|
BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApY8EqeK74ryv8YSa+xYWLuzDCn3t
|
||||||
|
geuKpHhHv+BkL9XmPe/TaHFuUMV2KbnVbYhfBHe5TP2YkMz2a0KcGt8Fxdqxvj6b
|
||||||
|
GvtAhTRrWuPEJgCNDB8Ei9pW0aw+AWltXBDXnHLzzTouMC+WonCEfT8RQYK1rKTV
|
||||||
|
S9gnv8TFkjVBHRekbGogOUsXCt8H1mNyaeyWRCn4Qdiz8T6vew4TYZlxeJrxfRdZ
|
||||||
|
Oj75BbLfQcddYPfPFRwE+r1+mJV7i9mE+aWlqLK0X2vqf/qgMtLP6NqAWaRDzw7v
|
||||||
|
BdGQDnua3CwA+RL6yRQUtwE9kZmnohJFrXAyV12TKS0JqjN1KTSUpoAXcE6szkkS
|
||||||
|
eu4JTtwfMsC+xD61tKeTW/gxk1BXTJY/gI07DLDGSv4ZTrXmw17u9DHmWhOoVs/F
|
||||||
|
XxTjr+9RM0TXMj3JVwHgw7l60vsxjhcIS30NQ6T5yB555sGZ0qMO4rfA/zq0ulos
|
||||||
|
uiglj9ivSf3Y9PYdKAM07fPSyUtAupsLOcchX62CL2UfZA4kOfMTJKxbxZPZauTD
|
||||||
|
HPNLFLCnodY0+iN1UtliumAKVVcGZfXwQQjBIxMUbGue5QIVyFCbD95MoCVUOXsa
|
||||||
|
IskLSqB1r1BBK5+qxnYgZwsoezoQYnjO9V7rIcEXkHSpFinxXiS7JSGHED9r97A3
|
||||||
|
zGm0SMpUNWYrjlkCAwEAAaNvMG0wHQYDVR0OBBYEFAeSIweAbq4nDyEaCZroFpnx
|
||||||
|
rHSzMB8GA1UdIwQYMBaAFAeSIweAbq4nDyEaCZroFpnxrHSzMA8GA1UdEwEB/wQF
|
||||||
|
MAMBAf8wGgYDVR0RBBMwEYIPZG9ja2VyLXJlZ2lzdHJ5MA0GCSqGSIb3DQEBCwUA
|
||||||
|
A4ICAQCg9gwgTSkp0UdDMTS5iHdtEFsw60LEXR4E3EQaJLn3CizJ2UCIX/uNGe7q
|
||||||
|
E99+BjIhXWj+a3/79ZPqwyui7J9Vd7dhLio+daTcrM7gbbeVxIulhJatfGuLfpxW
|
||||||
|
tDC3MAw8vDigNNG7yGgt3b1uTw2QxBxtXFFP+ki5YA8nUq2Mw1/Fzyq0hOwS5Wnh
|
||||||
|
IpmYa626G9A6mbQmH/28HDYJd/12ARAhZJVY7wTSRkwZjXmzj+wo65ez7Mq1uS8K
|
||||||
|
VK3NiM5gxCMrr8jcwP2u3gehljajGRK0gzUWWe3i0pmwwh3SMrfBeiVqJ6p2Dg0G
|
||||||
|
mWeas1fDWYWA19QaNEKdj3KNzfa3QHHHWD4AWCxfLWMYg7cJn3hb2wv4Oso2J3Wh
|
||||||
|
MM6Ddnjj4bus0wqZ5tWr0YL0TZnmiS5Cv6ibdXhgMXmpgPWCKMEOXnh6OlDw9H13
|
||||||
|
IVdowxURR/khuVCUtr9Cx9D1o+nz5Fpp6FotmsRjRWyDt/Fo0ijLoxKXMPrmpHF1
|
||||||
|
Wt/Jgr46p+0SaIV2ANnacSFzaj53pM+h7kmv3FyODhThumBYkIToNV0XFmpiHrab
|
||||||
|
oAN3/TEjEhxOaXSdeb8H7Yw9xgdb02h8kf7oYD8m1joKlDOnE7q2MQNkXKdQPz66
|
||||||
|
96PIWjLLrgzjfwjbfAOJ0kbB2jgzJfCaCv5MiNnPn7RyXYIRQQ==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
12
registry/registry-volume.yaml
Normal file
12
registry/registry-volume.yaml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: docker-repo-pvc
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Gi
|
||||||
|
limits:
|
||||||
|
storage: 500Gi
|
||||||
96
sshx-server/deployment.yaml
Normal file
96
sshx-server/deployment.yaml
Normal file
|
|
@ -0,0 +1,96 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n sshx-server
|
||||||
|
kompose.image-pull-secret: regcred
|
||||||
|
kompose.service.expose: sshx.wayl.one
|
||||||
|
kompose.service.type: loadbalancer
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: sshx-server-tcp
|
||||||
|
name: sshx-server-tcp
|
||||||
|
namespace: sshx-server
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: "8051"
|
||||||
|
port: 8051
|
||||||
|
targetPort: 8051
|
||||||
|
selector:
|
||||||
|
io.kompose.service: sshx-server
|
||||||
|
type: LoadBalancer
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
name: sshx-server
|
||||||
|
namespace: sshx-server
|
||||||
|
spec: {}
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n sshx-server
|
||||||
|
kompose.image-pull-secret: regcred
|
||||||
|
kompose.service.expose: sshx.wayl.one
|
||||||
|
kompose.service.type: loadbalancer
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: sshx-server
|
||||||
|
name: sshx-server
|
||||||
|
namespace: sshx-server
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
io.kompose.service: sshx-server
|
||||||
|
strategy: {}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert -o deployment.yaml -n sshx-server
|
||||||
|
kompose.image-pull-secret: regcred
|
||||||
|
kompose.service.expose: sshx.wayl.one
|
||||||
|
kompose.service.type: loadbalancer
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.network/sshx-server-default: "true"
|
||||||
|
io.kompose.service: sshx-server
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- args:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- './sshx-server --listen :: --host "https://sshx.wayl.one" --secret=hello'
|
||||||
|
image: registry.wayl.one/sshx-server
|
||||||
|
name: sshx-server
|
||||||
|
ports:
|
||||||
|
- containerPort: 8051
|
||||||
|
protocol: TCP
|
||||||
|
resources: {}
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: regcred
|
||||||
|
restartPolicy: Always
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: TLSOption
|
||||||
|
metadata:
|
||||||
|
name: default
|
||||||
|
namespace: default
|
||||||
|
|
||||||
|
spec:
|
||||||
|
alpnProtocols:
|
||||||
|
- http/1.1
|
||||||
|
- h2
|
||||||
11
sshx-server/docker-compose.yml
Normal file
11
sshx-server/docker-compose.yml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
sshx-server:
|
||||||
|
image: registry.wayl.one/sshx-server
|
||||||
|
command: ["sh", "-c", './sshx-server --listen :: --host "https://sshx.wayl.one" --secret=hello']
|
||||||
|
ports:
|
||||||
|
- 8051
|
||||||
|
labels:
|
||||||
|
kompose.service.expose: sshx.wayl.one
|
||||||
|
kompose.image-pull-secret: regcred
|
||||||
|
kompose.service.type: loadbalancer
|
||||||
BIN
status/85om9u.gif
Normal file
BIN
status/85om9u.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 MiB |
|
|
@ -1,4 +1,3 @@
|
||||||
---
|
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
|
|
@ -62,13 +61,21 @@ spec:
|
||||||
io.kompose.service: vault-server
|
io.kompose.service: vault-server
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
|
# run vault server as the command
|
||||||
|
|
||||||
- env:
|
- env:
|
||||||
|
# - name: VAULT_LOCAL_CONFIG
|
||||||
|
# value: '{"storage": {"file": {"path": "/vault/file"}}, "listener": [{"tcp": {"address": "0.0.0.0:8200", "tls_disable": true}}], "default_lease_ttl": "168h", "max_lease_ttl": "720h", "ui": true}'
|
||||||
- name: VAULT_ADDR
|
- name: VAULT_ADDR
|
||||||
value: http://0.0.0.0:8200
|
value: http://0.0.0.0:8200
|
||||||
- name: VAULT_DEV_ROOT_TOKEN_ID
|
# - name: VAULT_DEV_ROOT_TOKEN_ID
|
||||||
value: vault-plaintext-root-token
|
# valueFrom:
|
||||||
|
# secretKeyRef:
|
||||||
|
# key: VAULT_DEV_ROOT_TOKEN_ID
|
||||||
|
# name: vault-dev-root-token-id
|
||||||
image: hashicorp/vault
|
image: hashicorp/vault
|
||||||
name: vault-server
|
name: vault-server
|
||||||
|
command: ["vault", "server", "-config=/vault/config/vault.hcl"]
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 8200
|
- containerPort: 8200
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
|
|
@ -77,6 +84,19 @@ spec:
|
||||||
capabilities:
|
capabilities:
|
||||||
add:
|
add:
|
||||||
- IPC_LOCK
|
- IPC_LOCK
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /vault/data
|
||||||
|
name: vault-data
|
||||||
|
- name: vault-config
|
||||||
|
mountPath: /vault/config
|
||||||
|
volumes:
|
||||||
|
- name: vault-data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: vault-data
|
||||||
|
- name: vault-config
|
||||||
|
configMap:
|
||||||
|
name: vault-config
|
||||||
|
|
||||||
restartPolicy: Always
|
restartPolicy: Always
|
||||||
status: {}
|
status: {}
|
||||||
|
|
||||||
|
|
@ -108,3 +128,39 @@ spec:
|
||||||
status:
|
status:
|
||||||
loadBalancer: {}
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: vault
|
||||||
|
name: vault-data
|
||||||
|
namespace: vault
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: vault-config
|
||||||
|
namespace: vault
|
||||||
|
data:
|
||||||
|
vault.hcl: |-
|
||||||
|
disable_mlock = true
|
||||||
|
ui = true
|
||||||
|
|
||||||
|
listener "tcp" {
|
||||||
|
tls_disable = 1
|
||||||
|
address = "[::]:8200"
|
||||||
|
cluster_address = "[::]:8201"
|
||||||
|
}
|
||||||
|
storage "file" {
|
||||||
|
path = "/vault/data"
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,12 @@ services:
|
||||||
wyze-bridge:
|
wyze-bridge:
|
||||||
image: mrlt8/wyze-bridge:latest
|
image: mrlt8/wyze-bridge:latest
|
||||||
container_name: wyze-bridge
|
container_name: wyze-bridge
|
||||||
restart: unless-stopped
|
|
||||||
security_opt:
|
security_opt:
|
||||||
- no-new-privileges:true
|
- no-new-privileges:true
|
||||||
networks:
|
ports:
|
||||||
- proxy
|
- 5000:5000
|
||||||
|
- 8554:8554
|
||||||
|
- 8888:8888
|
||||||
environment:
|
environment:
|
||||||
- QUALITY=SD30
|
- QUALITY=SD30
|
||||||
- WYZE_EMAIL=${WYZE_EMAIL}
|
- WYZE_EMAIL=${WYZE_EMAIL}
|
||||||
|
|
@ -18,23 +19,23 @@ services:
|
||||||
- TZ=America/Chicago
|
- TZ=America/Chicago
|
||||||
- RECORD_ALL=True
|
- RECORD_ALL=True
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- img:/img
|
||||||
- ${PWD}/wyze-bridge/data/cams/img:/img
|
- record:/record
|
||||||
- ${PWD}/wyze-bridge/data/record:/record
|
|
||||||
|
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
kompose.service.expose: cams.wayl.one
|
||||||
- "traefik.http.routers.cams.entrypoints=http"
|
# labels:
|
||||||
- "traefik.http.routers.cams.rule=Host(`cams.${URL}`)"
|
# - "traefik.enable=true"
|
||||||
- "traefik.http.middlewares.cams-https-redirect.redirectscheme.scheme=https"
|
# - "traefik.http.routers.cams.entrypoints=http"
|
||||||
- "traefik.http.routers.cams.middlewares=cams-https-redirect"
|
# - "traefik.http.routers.cams.rule=Host(`cams.${URL}`)"
|
||||||
- "traefik.http.routers.cams-secure.entrypoints=https"
|
# - "traefik.http.middlewares.cams-https-redirect.redirectscheme.scheme=https"
|
||||||
- "traefik.http.routers.cams-secure.rule=Host(`cams.${URL}`)"
|
# - "traefik.http.routers.cams.middlewares=cams-https-redirect"
|
||||||
- "traefik.http.routers.cams-secure.tls=true"
|
# - "traefik.http.routers.cams-secure.entrypoints=https"
|
||||||
- "traefik.http.routers.cams-secure.service=cams"
|
# - "traefik.http.routers.cams-secure.rule=Host(`cams.${URL}`)"
|
||||||
- "traefik.http.services.cams.loadbalancer.server.port=5000"
|
# - "traefik.http.routers.cams-secure.tls=true"
|
||||||
- "traefik.docker.network=proxy"
|
# - "traefik.http.routers.cams-secure.service=cams"
|
||||||
|
# - "traefik.http.services.cams.loadbalancer.server.port=5000"
|
||||||
|
# - "traefik.docker.network=proxy"
|
||||||
|
|
||||||
networks:
|
volumes:
|
||||||
proxy:
|
img:
|
||||||
external: true
|
record:
|
||||||
|
|
|
||||||
174
wyze-bridge/wyze-bridge.yaml
Normal file
174
wyze-bridge/wyze-bridge.yaml
Normal file
|
|
@ -0,0 +1,174 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace wyze-bridge -o wyze-bridge.yaml
|
||||||
|
kompose.service.expose: cams.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: wyze-bridge
|
||||||
|
name: wyze-bridge
|
||||||
|
namespace: wyze-bridge
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: "5000"
|
||||||
|
port: 5000
|
||||||
|
targetPort: 5000
|
||||||
|
- name: "8554"
|
||||||
|
port: 8554
|
||||||
|
targetPort: 8554
|
||||||
|
- name: "8888"
|
||||||
|
port: 8888
|
||||||
|
targetPort: 8888
|
||||||
|
selector:
|
||||||
|
io.kompose.service: wyze-bridge
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
name: wyze-bridge
|
||||||
|
namespace: wyze-bridge
|
||||||
|
spec: {}
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace wyze-bridge -o wyze-bridge.yaml
|
||||||
|
kompose.service.expose: cams.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: wyze-bridge
|
||||||
|
name: wyze-bridge
|
||||||
|
namespace: wyze-bridge
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
io.kompose.service: wyze-bridge
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace wyze-bridge -o wyze-bridge.yaml
|
||||||
|
kompose.service.expose: cams.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.network/wyze-bridge-default: "true"
|
||||||
|
io.kompose.service: wyze-bridge
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- env:
|
||||||
|
- name: IMG_DIR
|
||||||
|
value: /img/
|
||||||
|
- name: QUALITY
|
||||||
|
value: SD30
|
||||||
|
- name: RECORD_ALL
|
||||||
|
value: "True"
|
||||||
|
- name: SNAPSHOT
|
||||||
|
value: RTSP1
|
||||||
|
- name: TZ
|
||||||
|
value: America/Chicago
|
||||||
|
- name: WYZE_EMAIL
|
||||||
|
- name: WYZE_PASSWORD
|
||||||
|
image: mrlt8/wyze-bridge:latest
|
||||||
|
name: wyze-bridge
|
||||||
|
ports:
|
||||||
|
- containerPort: 5000
|
||||||
|
hostPort: 5000
|
||||||
|
protocol: TCP
|
||||||
|
- containerPort: 8554
|
||||||
|
hostPort: 8554
|
||||||
|
protocol: TCP
|
||||||
|
- containerPort: 8888
|
||||||
|
hostPort: 8888
|
||||||
|
protocol: TCP
|
||||||
|
resources: {}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /img
|
||||||
|
name: img
|
||||||
|
- mountPath: /record
|
||||||
|
name: record
|
||||||
|
restartPolicy: Always
|
||||||
|
volumes:
|
||||||
|
- name: img
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: img
|
||||||
|
- name: record
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: record
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
kompose.cmd: kompose convert --namespace wyze-bridge -o wyze-bridge.yaml
|
||||||
|
kompose.service.expose: cams.wayl.one
|
||||||
|
kompose.version: 1.31.2 (a92241f79)
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: wyze-bridge
|
||||||
|
name: wyze-bridge
|
||||||
|
namespace: wyze-bridge
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: cams.wayl.one
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: wyze-bridge
|
||||||
|
port:
|
||||||
|
number: 5000
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
status:
|
||||||
|
loadBalancer: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: img
|
||||||
|
name: img
|
||||||
|
namespace: wyze-bridge
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.kompose.service: record
|
||||||
|
name: record
|
||||||
|
namespace: wyze-bridge
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 100Mi
|
||||||
|
status: {}
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue