Compare commits
7
Commits
d6254ebd8a
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
82735939f4 | ||
|
|
3d41dafba6 | ||
|
|
e78200500b | ||
|
|
9f3ebe71e8 | ||
|
|
cb4c51b3b2 | ||
|
|
f193130af7 | ||
|
|
e9835ffe07 |
@@ -6,8 +6,8 @@
|
||||
### Linux
|
||||
1. Check the version of linux required by `zfs-linux` in the AUR [https://aur.archlinux.org/packages/zfs-linux](https://aur.archlinux.org/packages/zfs-linux)
|
||||
2. Manually install that version of linux and linux-headers:
|
||||
1. pacman -UDd https://archive.archlinux.org/packages/l/linux/linux-{version}.arch1-1-x86_64.pkg.tar.zst
|
||||
2. pacman -UDd https://archive.archlinux.org/packages/l/linux-headers/linux-headers-{version}.arch1-1-x86_64.pkg.tar.zst
|
||||
1. pacman -Ud https://archive.archlinux.org/packages/l/linux/linux-{version}.arch1-1-x86_64.pkg.tar.zst
|
||||
2. pacman -Ud https://archive.archlinux.org/packages/l/linux-headers/linux-headers-{version}.arch1-1-x86_64.pkg.tar.zst
|
||||
3. Upgrade all other packages `yay`
|
||||
|
||||
### Docker Containers
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
FROM alpine:latest
|
||||
RUN apk add --no-cache rsync tzdata
|
||||
|
||||
COPY backup.sh /usr/local/bin/backup.sh
|
||||
RUN chmod +x /usr/local/bin/backup.sh
|
||||
|
||||
CMD ["crond", "-f", "-l", "2"]
|
||||
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Format the current date
|
||||
NOW=$(date +"%Y-%m-%d")
|
||||
|
||||
# Create the archive directory if it does not exist
|
||||
mkdir -p /backup/archive
|
||||
|
||||
# Run rsync with an exclude file and a backup directory for changed/deleted files
|
||||
rsync -av --delete \
|
||||
--exclude-from=/config/exclude.txt \
|
||||
--backup --backup-dir=/backup/archive/$NOW \
|
||||
/data/ /backup/latest/
|
||||
|
||||
# Find and delete archive directories older than 7 days
|
||||
find /backup/archive/ -mindepth 1 -maxdepth 1 -type d -mtime +7 -exec rm -rf {} +
|
||||
@@ -0,0 +1,2 @@
|
||||
# Run the backup every day at 2:00 AM
|
||||
0 2 * * * /usr/local/bin/backup.sh
|
||||
@@ -0,0 +1,4 @@
|
||||
*.log
|
||||
.backups
|
||||
.DS_Store
|
||||
._*
|
||||
@@ -1,6 +0,0 @@
|
||||
[Unit]
|
||||
Description=Let's Encrypt renewal
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/bin/certbot renew --quiet --agree-tos --deploy-hook "cp /etc/letsencrypt/live/scarif.space-0001/fullchain.pem /opt/ssl/scarif.space.crt && cp /etc/letsencrypt/live/scarif.space-0001/privkey.pem /opt/ssl/scarif.space.key && docker-compose -f /opt/scarif/docker-compose.yml exec nginx nginx -s reload"
|
||||
@@ -1,10 +0,0 @@
|
||||
[Unit]
|
||||
Description=Twice daily renewal of Let's Encrypt's certificates
|
||||
|
||||
[Timer]
|
||||
OnCalendar=0/12:00:00
|
||||
RandomizedDelaySec=1h
|
||||
Persistent=true
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 353 KiB |
@@ -1,51 +0,0 @@
|
||||
[Settings]
|
||||
theme = dark
|
||||
accent = blueGrey
|
||||
background = static/images/backgrounds/scarif.jpg
|
||||
roles = admin
|
||||
home_access_groups = admin_only
|
||||
settings_access_groups = admin_only
|
||||
custom_app_title = Scarif Command
|
||||
sidebar_default = no_sidebar
|
||||
|
||||
[admin]
|
||||
role = admin
|
||||
password =
|
||||
confirm_password =
|
||||
|
||||
[Tower]
|
||||
prefix = https://
|
||||
url = tower.scarif.local
|
||||
icon = static/images/apps/nextcloud.png
|
||||
sidebar_icon = static/images/apps/nextcloud.png
|
||||
description = Imperial data store
|
||||
open_in = this_tab
|
||||
|
||||
[Personel]
|
||||
prefix = https://
|
||||
url = personel.scarif.local
|
||||
icon = static/images/icons/monica.svg
|
||||
sidebar_icon = static/images/icons/monica.svg
|
||||
description = Personel manifest
|
||||
open_in = this_tab
|
||||
|
||||
[Labs]
|
||||
prefix = https://
|
||||
url = labs.scarif.local
|
||||
icon = static/images/apps/gitea.png
|
||||
sidebar_icon = static/images/apps/gitea.png
|
||||
description = Top secret development projects
|
||||
open_in = this_tab
|
||||
|
||||
[weather]
|
||||
platform = weather
|
||||
woeid = 44418
|
||||
temp_unit = c
|
||||
wind_speed_unit = kph
|
||||
air_pressure_unit = mbar
|
||||
visibility_unit = km
|
||||
|
||||
[Conditions]
|
||||
type = custom
|
||||
data_sources = weather
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 106 KiB |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="500" height="500" version="1.1" viewBox="0 0 500 500"><title>Artboard 3.1</title><desc>Created using Figma</desc><g id="Canvas" transform="translate(-2984 68)"><clipPath id="clip-0" clip-rule="evenodd"><path fill="#FFF" d="M 2984 -68L 3484 -68L 3484 432L 2984 432L 2984 -68Z"/></clipPath><g id="Artboard 3.1" clip-path="url(#clip-0)"><g id="Group 2"><g id="Oval"><use fill="#2C2B29" transform="translate(3002.51 -26.4788)" xlink:href="#path0_fill"/></g><g id="Oval"><use fill="#FFF" transform="translate(3047.56 17.3456)" xlink:href="#path1_fill"/></g><g id="Oval 2"><use fill="#2C2B29" transform="translate(2990 -39)" xlink:href="#path2_fill"/></g><g id="Oval 2"><use fill="#2C2B29" transform="matrix(-1 0 0 1 3478 -39)" xlink:href="#path2_fill"/></g><g id="Group"><g id="Oval 4"><use fill="#2B2A28" transform="translate(3265.32 122.647)" xlink:href="#path3_fill"/></g><g id="Oval 3"><use fill="#FFF" transform="translate(3292.63 154.768)" xlink:href="#path4_fill"/></g></g><g id="Group"><g id="Oval 4"><use fill="#2B2A28" transform="matrix(-1 0 0 1 3203.93 122.647)" xlink:href="#path3_fill"/></g><g id="Oval 3"><use fill="#FFF" transform="matrix(-1 0 0 1 3176.62 154.768)" xlink:href="#path4_fill"/></g></g><g id="Oval 5"><use fill="#2C2B29" transform="translate(3200.22 256.501)" xlink:href="#path5_fill"/></g></g></g></g><defs><path id="path0_fill" fill-rule="evenodd" d="M 235.425 429.479C 349.64 429.479 476.369 356.022 460.345 214.739C 444.321 73.4567 349.64 0 235.425 0C 121.21 0 27.2705 64.3949 2.77082 214.739C -21.7289 365.084 121.21 429.479 235.425 429.479Z"/><path id="path1_fill" fill-rule="evenodd" d="M 188.85 344.334C 280.47 344.334 382.128 285.44 369.274 172.167C 356.42 58.8939 280.47 0 188.85 0C 97.2312 0 21.8755 51.6286 2.22266 172.167C -17.4302 292.706 97.2312 344.334 188.85 344.334Z"/><path id="path2_fill" fill-rule="evenodd" d="M 65.5865 165.28C 78.0014 165.322 83.3945 120.9 105.565 100.675C 125.919 82.1083 172.677 75.742 172.677 54.2762C 172.677 9.42729 124.055 0 81.1199 0C 38.1853 0 0 45.4903 0 90.3392C 0 135.188 41.7747 165.201 65.5865 165.28Z"/><path id="path3_fill" fill-rule="evenodd" d="M 69.6 154.572C 102.094 146.823 115.643 133.157 115.643 88.997C 115.643 44.8368 94.944 0 59.3049 0C 23.6657 0 0 31.8863 0 76.0465C 0 120.207 37.106 162.32 69.6 154.572Z"/><path id="path4_fill" fill-rule="evenodd" d="M 30.3863 66.4287C 39.2286 66.4287 41.8586 64.1715 45.8555 59.1037C 50.3374 53.421 53.6797 46.8294 52.5868 33.2144C 50.7608 10.465 41.1736 0 22.4162 0C 3.6587 0 -3.78365e-16 14.4228 0 33.2144C -3.78365e-16 52.0059 11.6288 66.4287 30.3863 66.4287Z"/><path id="path5_fill" fill-rule="evenodd" d="M 35.2906 50.085C 52.9487 50.085 70.0718 24.0956 70.0718 12.9499C 70.0718 1.80416 52.6939 0 35.0359 0C 17.3779 0 0 1.80416 0 12.9499C 0 24.0956 17.6326 50.085 35.2906 50.085Z"/></defs></svg>
|
||||
|
Before Width: | Height: | Size: 2.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 18 KiB |
+480
-148
@@ -5,22 +5,18 @@ x-logging: &logging
|
||||
max-size: "5m"
|
||||
max-file: "2"
|
||||
|
||||
#x-firecrawl-service: &firecrawl-service
|
||||
# image: ghcr.io/mendableai/firecrawl
|
||||
#
|
||||
#x-firecrawl-env: &firecrawl-env
|
||||
# REDIS_URL: redis://redis:6379
|
||||
# REDIS_RATE_LIMIT_URL: redis://redis:6379
|
||||
# PLAYWRIGHT_MICROSERVICE_URL: http://playwright:3000/scrape
|
||||
|
||||
services:
|
||||
|
||||
###################################
|
||||
# FOUNDRY #
|
||||
# https://rec.scarif.space/foundy #
|
||||
###################################
|
||||
foundry:
|
||||
profiles: ["prod"]
|
||||
<<: *logging
|
||||
image: felddy/foundryvtt:release
|
||||
volumes:
|
||||
- /mnt/tower/foundry:/data
|
||||
- /mnt/tower/containers/foundry:/data
|
||||
- ./foundry/patches:/data/patches
|
||||
restart: always
|
||||
environment:
|
||||
@@ -37,12 +33,17 @@ services:
|
||||
- FOUNDRY_UID=1000
|
||||
- FOUNDRY_GID=1000
|
||||
- VIRTUAL_HOST=rec.${DOMAIN}
|
||||
- LETSENCRYPT_HOST=rec.${DOMAIN}
|
||||
- CERT_NAME=${DOMAIN}
|
||||
- VIRTUAL_PORT=30000
|
||||
- VIRTUAL_PATH=/foundry
|
||||
networks:
|
||||
- nginx
|
||||
|
||||
###################################
|
||||
# NEXTCLOUD #
|
||||
# https://tower.scarif.space #
|
||||
###################################
|
||||
nextcloud:
|
||||
profiles: ["prod", "dev"]
|
||||
<<: *logging
|
||||
@@ -53,12 +54,13 @@ services:
|
||||
ports:
|
||||
- 9000:9000
|
||||
volumes:
|
||||
- nextcloud:/var/www/html
|
||||
- /mnt/tower/containers/nextcloud:/var/www/html
|
||||
- ./nextcloud/redis-session.ini:/usr/local/etc/php/conf.d/redis-session.ini
|
||||
- /mnt/tower/stardust:/var/www/html/data
|
||||
- /mnt/tower/foundry:/var/www/foundry
|
||||
environment:
|
||||
- VIRTUAL_HOST=tower.${DOMAIN}
|
||||
- LETSENCRYPT_HOST=tower.${DOMAIN}
|
||||
- CERT_NAME=${DOMAIN}
|
||||
- VIRTUAL_PORT=9000
|
||||
- VIRTUAL_PROTO=fastcgi
|
||||
@@ -99,6 +101,7 @@ services:
|
||||
- MKNOD
|
||||
environment:
|
||||
- VIRTUAL_HOST=office.${DOMAIN}
|
||||
- LETSENCRYPT_HOST=office.${DOMAIN}
|
||||
- CERT_NAME=${DOMAIN}
|
||||
- VIRTUAL_PORT=9980
|
||||
- "DONT_GEN_SSL_CERT=True"
|
||||
@@ -116,12 +119,35 @@ services:
|
||||
- "tower.${DOMAIN}:${LOCAL_IP}"
|
||||
- "office.${DOMAIN}:${LOCAL_IP}"
|
||||
|
||||
###################################
|
||||
# VAULTWARDEN #
|
||||
# https://vault.scarif.space #
|
||||
###################################
|
||||
vaultwarden:
|
||||
image: vaultwarden/server:latest
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- "DOMAIN=https://vault.${DOMAIN}"
|
||||
- VIRTUAL_HOST=vault.${DOMAIN}
|
||||
- LETSENCRYPT_HOST=vault.${DOMAIN}
|
||||
- VIRTUAL_PORT=80
|
||||
- SIGNUPS_ALLOWED=false
|
||||
networks:
|
||||
- nginx
|
||||
volumes:
|
||||
- /mnt/tower/containers/vaultwarden:/data/
|
||||
|
||||
###################################
|
||||
# GITEA #
|
||||
# https://labs.scarif.space #
|
||||
###################################
|
||||
gitea:
|
||||
profiles: ["prod", "dev"]
|
||||
<<: *logging
|
||||
image: gitea/gitea:1
|
||||
environment:
|
||||
- VIRTUAL_HOST=labs.${DOMAIN}
|
||||
- LETSENCRYPT_HOST=labs.${DOMAIN}
|
||||
- CERT_NAME=${DOMAIN}
|
||||
- VIRTUAL_PORT=3000
|
||||
- "APP_NAME=Labs: Where the good stuff happens"
|
||||
@@ -138,7 +164,7 @@ services:
|
||||
- DISABLE_REGISTRATION=true
|
||||
restart: always
|
||||
volumes:
|
||||
- gitea:/data
|
||||
- /mnt/tower/containers/gitea:/data
|
||||
- /mnt/tower/labs:/data/git
|
||||
- /home/git/.ssh/:/data/git/.ssh/
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
@@ -151,20 +177,29 @@ services:
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
###################################
|
||||
# AUDIOBOOKSHELF #
|
||||
# https://echo.scarif.space #
|
||||
###################################
|
||||
audiobookshelf:
|
||||
image: ghcr.io/advplyr/audiobookshelf:latest
|
||||
volumes:
|
||||
- /mnt/tower/stardust/chris/files/Library/Audiobooks:/audiobooks
|
||||
- /mnt/tower/stardust/chris/files/Library/Podcasts:/podcasts
|
||||
- /mnt/tower/stardust/chris/files/Library/Audiobooks/.audiobookshelf/config:/config
|
||||
- /mnt/tower/stardust/chris/files/Library/Audiobooks/.audiobookshelf:/metadata
|
||||
- /mnt/tower/containers/audiobookshelf/config:/config
|
||||
- /mnt/tower/containers/audiobookshelf:/metadata
|
||||
environment:
|
||||
- TZ=Europe/London
|
||||
- VIRTUAL_HOST=echo.${DOMAIN}
|
||||
- LETSENCRYPT_HOST=echo.${DOMAIN}
|
||||
- VIRTUAL_PORT=80
|
||||
networks:
|
||||
- nginx
|
||||
|
||||
###################################
|
||||
# GROCY #
|
||||
# https://supplies.scarif.space #
|
||||
###################################
|
||||
grocy:
|
||||
image: lscr.io/linuxserver/grocy:latest
|
||||
environment:
|
||||
@@ -174,6 +209,7 @@ services:
|
||||
- CURRENCY=GBP
|
||||
- DEFAULT_LOCALE=en_GB
|
||||
- VIRTUAL_HOST=supplies.${DOMAIN}
|
||||
- LETSENCRYPT_HOST=supplies.${DOMAIN}
|
||||
- VIRTUAL_PORT=80
|
||||
volumes:
|
||||
- /mnt/tower/containers/grocy:/config
|
||||
@@ -182,25 +218,32 @@ services:
|
||||
networks:
|
||||
- nginx
|
||||
|
||||
###################################
|
||||
# HOMEBOX #
|
||||
# https://assets.scarif.space #
|
||||
###################################
|
||||
homebox:
|
||||
image: ghcr.io/sysadminsmedia/homebox:latest
|
||||
restart: always
|
||||
environment:
|
||||
- HBOX_LOG_LEVEL=info
|
||||
- HBOX_LOG_FORMAT=text
|
||||
- HBOX_WEB_MAX_UPLOAD_SIZE=10
|
||||
# Please consider allowing analytics to help us improve Homebox (basic computer information, no personal data)
|
||||
- HBOX_WEB_MAX_UPLOAD_SIZE=20
|
||||
- HBOX_OPTIONS_ALLOW_ANALYTICS=false
|
||||
# Use a strong random string for the pepper in production, it will be used to hash API keys and make them more secure
|
||||
- HBOX_AUTH_API_KEY_PEPPER=${HOMEBOX_API_KEY_PEPPER}
|
||||
- HBOX_OPTIONS_ALLOW_REGISTRATION=true
|
||||
- VIRTUAL_HOST=assets.${DOMAIN}
|
||||
- LETSENCRYPT_HOST=assets.${DOMAIN}
|
||||
- VIRTUAL_PORT=7745
|
||||
volumes:
|
||||
- /mnt/tower/containers/homebox:/data/
|
||||
networks:
|
||||
- nginx
|
||||
|
||||
###################################
|
||||
# SEARXNG #
|
||||
# https://holocron.scarif.space #
|
||||
###################################
|
||||
searxng:
|
||||
image: docker.io/searxng/searxng:latest
|
||||
restart: unless-stopped
|
||||
@@ -209,15 +252,19 @@ services:
|
||||
- redis
|
||||
volumes:
|
||||
- ./searxng:/etc/searxng:rw
|
||||
- searxng:/var/cache/searxng:rw
|
||||
- /mnt/tower/containers/searxng:/var/cache/searxng:rw
|
||||
environment:
|
||||
- SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/
|
||||
- SEARXNG_SECRET=${SEARXNG_SECRET_KEY}
|
||||
- VIRTUAL_HOST=holocron.${DOMAIN}
|
||||
- LETSENCRYPT_HOST=holocron.${DOMAIN}
|
||||
- VIRTUAL_PORT=8080
|
||||
- CERT_NAME=${DOMAIN}
|
||||
<<: *logging
|
||||
|
||||
###################################
|
||||
# MINECRAFT #
|
||||
###################################
|
||||
minecraft:
|
||||
profiles: ["prod"]
|
||||
<<: *logging
|
||||
@@ -235,7 +282,7 @@ services:
|
||||
- MOTD="Scarif Minecraft Server"
|
||||
- WHITELIST=${MINECRAFT_WHITELIST}
|
||||
volumes:
|
||||
- minecraft:/data
|
||||
- /mnt/tower/containers/minecraft:/data
|
||||
|
||||
mc-backup:
|
||||
profiles: ["prod"]
|
||||
@@ -253,9 +300,13 @@ services:
|
||||
- PLAYERS_ONLINE_CHECK_INTERVAL=10
|
||||
- PRUNE_BACKUPS_DAYS=30
|
||||
volumes:
|
||||
- minecraft:/data:ro
|
||||
- /mnt/backups/minecraft:/backups
|
||||
- /mnt/tower/containers/minecraft:/data
|
||||
- /mnt/tower/containers/minecraft/backup:/backups
|
||||
|
||||
###################################
|
||||
# NAVIDROME #
|
||||
# https://radio.scarif.space #
|
||||
###################################
|
||||
navidrome:
|
||||
profiles: ["prod"]
|
||||
<<: *logging
|
||||
@@ -263,6 +314,7 @@ services:
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- VIRTUAL_HOST=radio.${DOMAIN}
|
||||
- LETSENCRYPT_HOST=radio.${DOMAIN}
|
||||
- CERT_NAME=${DOMAIN}
|
||||
- VIRTUAL_PORT=4533
|
||||
- ND_SCANSCHEDULE=1h
|
||||
@@ -275,6 +327,10 @@ services:
|
||||
networks:
|
||||
- nginx
|
||||
|
||||
###################################
|
||||
# PIHOLE #
|
||||
# https://net.scarif.space #
|
||||
###################################
|
||||
pihole:
|
||||
profiles: ["prod"]
|
||||
<<: *logging
|
||||
@@ -288,128 +344,325 @@ services:
|
||||
- TZ="Europe/London"
|
||||
- WEBPASSWORD=${PIHOLE_PASSWORD}
|
||||
volumes:
|
||||
- "/docker/pihole/etc-pihole:/etc/pihole"
|
||||
- "/docker/pihole/etc-dnsmasq.d:/etc/dnsmasq.d"
|
||||
- "/mnt/tower/containers/pihole/etc-pihole:/etc/pihole"
|
||||
- "./pihole/etc-dnsmasq.d:/etc/dnsmasq.d"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- nginx
|
||||
|
||||
# jitsi:
|
||||
# profiles: ["prod"]
|
||||
# <<: *logging
|
||||
# image: jitsi/web:stable
|
||||
# restart: unless-stopped
|
||||
# volumes:
|
||||
# - ${CONFIG}/web:/config:Z
|
||||
# - ${CONFIG}/web/crontabs:/var/spool/cron/crontabs:Z
|
||||
# - ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts:Z
|
||||
# environment:
|
||||
# - VIRTUAL_HOST=comms.${DOMAIN}
|
||||
# - VIRTUAL_PORT=80
|
||||
# - CERT_NAME=${DOMAIN}
|
||||
# - ENABLE_AUTH=1
|
||||
# - ENABLE_GUESTS=1
|
||||
# - ENABLE_PREJOIN_PAGE=1
|
||||
# - ENABLE_WELCOME_PAGE=1
|
||||
# - ENABLE_CLOSE_PAGE=1
|
||||
# - ENABLE_NOISY_MIC_DETECTION=1
|
||||
# - ETHERPAD_TITLE="Video Chat"
|
||||
# - ETHERPAD_DEFAULT_PAD_TEXT="Welcome to Web Chat!\n\n"
|
||||
# - ETHERPAD_SKIN_NAME="colibris"
|
||||
# - ETHERPAD_SKIN_VARIANTS="super-light-toolbar super-light-editor light-background full-width-editor"
|
||||
# - XMPP_BOSH_URL_BASE=https://xmpp.meet.jitsi:5280
|
||||
# - XMPP_AUTH_DOMAIN
|
||||
# - XMPP_MUC_DOMAIN
|
||||
# - XMPP_GUEST_DOMAIN
|
||||
# - XMPP_RECORDER_DOMAIN
|
||||
# networks:
|
||||
# nginx:
|
||||
# meet.jitsi:
|
||||
#
|
||||
# prosody:
|
||||
# profiles: ["prod"]
|
||||
# <<: *logging
|
||||
# image: jitsi/prosody:stable
|
||||
# restart: unless-stopped
|
||||
# expose:
|
||||
# - '${XMPP_PORT:-52222}'
|
||||
# - '5347'
|
||||
# - '5280'
|
||||
# volumes:
|
||||
# - ${CONFIG}/prosody/config:/config:Z
|
||||
# - ${CONFIG}/prosody/prosody-plugins-custom:/prosody-plugins-custom:Z
|
||||
# environment:
|
||||
# - ENABLE_NOISY_MIC_DETECTION=1
|
||||
# - ENABLE_AUTH=1
|
||||
# - ENABLE_GUESTS=1
|
||||
# - ENABLE_LOBBY=1
|
||||
# - XMPP_DOMAIN
|
||||
# - XMPP_AUTH_DOMAIN
|
||||
# - XMPP_MUC_DOMAIN
|
||||
# - XMPP_INTERNAL_MUC_DOMAIN
|
||||
# - XMPP_GUEST_DOMAIN
|
||||
# - JVB_AUTH_USER
|
||||
# - JIGASI_XMPP_USER=jigasi
|
||||
# - XMPP_RECORDER_DOMAIN
|
||||
# - JIBRI_RECORDER_USER=recorder
|
||||
# - JIBRI_XMPP_USER=jibri
|
||||
# - JICOFO_AUTH_PASSWORD=
|
||||
# networks:
|
||||
# meet.jitsi:
|
||||
# aliases:
|
||||
# - ${XMPP_SERVER:-xmpp.meet.jitsi}
|
||||
#
|
||||
# # Focus component
|
||||
# jicofo:
|
||||
# profiles: ["prod"]
|
||||
# <<: *logging
|
||||
# image: jitsi/jicofo:stable
|
||||
# restart: unless-stopped
|
||||
# volumes:
|
||||
# - ${CONFIG}/jicofo:/config:Z
|
||||
# depends_on:
|
||||
# - prosody
|
||||
# environment:
|
||||
# - ENABLE_AUTH=1
|
||||
# - XMPP_DOMAIN
|
||||
# - XMPP_MUC_DOMAIN
|
||||
# - XMPP_INTERNAL_MUC_DOMAIN
|
||||
# - JVB_BREWERY_MUC
|
||||
# - JIGASI_BREWERY_MUC=jigasibrewery
|
||||
# - XMPP_RECORDER_DOMAIN
|
||||
# - JIBRI_BREWERY_MUC=jibribrewery
|
||||
# - JIBRI_PENDING_TIMEOUT=90
|
||||
# - JICOFO_AUTH_PASSWORD=
|
||||
# networks:
|
||||
# meet.jitsi:
|
||||
#
|
||||
# # Video bridge
|
||||
# jvb:
|
||||
# profiles: ["prod"]
|
||||
# <<: *logging
|
||||
# image: jitsi/jvb:stable
|
||||
# restart: unless-stopped
|
||||
# ports:
|
||||
# - '${JVB_PORT:-10000}:${JVB_PORT:-10000}/udp'
|
||||
# - '127.0.0.1:${JVB_COLIBRI_PORT:-8080}:8080'
|
||||
# volumes:
|
||||
# - ${CONFIG}/jvb:/config:Z
|
||||
# depends_on:
|
||||
# - prosody
|
||||
# environment:
|
||||
# - DOCKER_HOST_ADDRESS=${LOCAL_IP}
|
||||
# - XMPP_SERVER
|
||||
# - XMPP_AUTH_DOMAIN
|
||||
# - XMPP_INTERNAL_MUC_DOMAIN
|
||||
# - JVB_BREWERY_MUC
|
||||
# - JVB_AUTH_USER
|
||||
# - JVB_STUN_SERVERS=meet-jit-si-turnrelay.jitsi.net:443
|
||||
# - JVB_PORT
|
||||
# networks:
|
||||
# meet.jitsi:
|
||||
# aliases:
|
||||
# - jvb.meet.jitsi
|
||||
###################################
|
||||
# DAWARICH #
|
||||
# https://map.scarif.space #
|
||||
###################################
|
||||
dawarich_app:
|
||||
image: freikin/dawarich:latest
|
||||
volumes:
|
||||
- /mnt/tower/containers/dawarich/public:/var/app/public
|
||||
- /mnt/tower/containers/dawarich/watched:/var/app/tmp/imports/watched
|
||||
- /mnt/tower/containers/dawarich/storage:/var/app/storage
|
||||
- /mnt/tower/containers/dawarich/data:/dawarich_db_data
|
||||
networks:
|
||||
- dawarich
|
||||
- redis
|
||||
- nginx
|
||||
stdin_open: true
|
||||
tty: true
|
||||
entrypoint: web-entrypoint.sh
|
||||
command: ['bin/rails', 'server', '-p', '3000', '-b', '::']
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
VIRTUAL_HOST: maps.${DOMAIN}
|
||||
VIRTUAL_PORT: 3000
|
||||
LETSENCRYPT_HOST: maps.${DOMAIN}
|
||||
RAILS_ENV: ${RAILS_ENV:-production}
|
||||
PUID: ${PUID:-1000}
|
||||
PGID: ${PGID:-1000}
|
||||
REDIS_URL: ${REDIS_URL:-redis://redis:6379}
|
||||
DATABASE_HOST: ${DATABASE_HOST:-dawarich_db}
|
||||
DATABASE_PORT: ${DATABASE_PORT:-5432}
|
||||
DATABASE_USERNAME: ${DATABASE_USERNAME:-postgres}
|
||||
DATABASE_PASSWORD: ${DATABASE_PASSWORD:-password}
|
||||
DATABASE_NAME: ${DATABASE_NAME:-dawarich_development}
|
||||
APPLICATION_HOSTS: maps.${DOMAIN},localhost,::1,127.0.0.1
|
||||
TIME_ZONE: ${TIME_ZONE:-Europe/London}
|
||||
APPLICATION_PROTOCOL: ${APPLICATION_PROTOCOL:-http}
|
||||
PROMETHEUS_EXPORTER_ENABLED: ${PROMETHEUS_EXPORTER_ENABLED:-false}
|
||||
SECRET_KEY_BASE: ${DAWARICH_SECRET_KEY}
|
||||
RAILS_LOG_TO_STDOUT: ${RAILS_LOG_TO_STDOUT:-true}
|
||||
SELF_HOSTED: ${SELF_HOSTED:-true}
|
||||
STORE_GEODATA: ${STORE_GEODATA:-true}
|
||||
WEB_CONCURRENCY: ${WEB_CONCURRENCY:-1}
|
||||
<<: *logging
|
||||
depends_on:
|
||||
- dawarich_db
|
||||
- redis
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: ${APP_CPU_LIMIT:-0.50}
|
||||
memory: ${APP_MEMORY_LIMIT:-4G}
|
||||
|
||||
dawarich_sidekiq:
|
||||
image: freikin/dawarich:latest
|
||||
volumes:
|
||||
- /mnt/tower/containers/dawarich/public:/var/app/public
|
||||
- /mnt/tower/containers/dawarich/watched:/var/app/tmp/imports/watched
|
||||
- /mnt/tower/containers/dawarich/storage:/var/app/storage
|
||||
networks:
|
||||
- dawarich
|
||||
- redis
|
||||
stdin_open: true
|
||||
tty: true
|
||||
entrypoint: sidekiq-entrypoint.sh
|
||||
command: ['sidekiq']
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
RAILS_ENV: ${RAILS_ENV:-production}
|
||||
### To run under a non-root user, set PUID/PGID here (do NOT use `user:`).
|
||||
# PUID: ${PUID:-1000}
|
||||
# PGID: ${PGID:-1000}
|
||||
REDIS_URL: ${REDIS_URL:-redis://redis:6379}
|
||||
DATABASE_HOST: ${DATABASE_HOST:-dawarich_db}
|
||||
DATABASE_PORT: ${DATABASE_PORT:-5432}
|
||||
DATABASE_USERNAME: ${DATABASE_USERNAME:-postgres}
|
||||
DATABASE_PASSWORD: ${DATABASE_PASSWORD:-password}
|
||||
DATABASE_NAME: ${DATABASE_NAME:-dawarich_development}
|
||||
APPLICATION_HOSTS: maps.${DOMAIN},localhost,::1,127.0.0.1
|
||||
BACKGROUND_PROCESSING_CONCURRENCY: ${BACKGROUND_PROCESSING_CONCURRENCY:-3}
|
||||
APPLICATION_PROTOCOL: ${APPLICATION_PROTOCOL:-http}
|
||||
PROMETHEUS_EXPORTER_ENABLED: ${PROMETHEUS_EXPORTER_ENABLED:-false}
|
||||
SECRET_KEY_BASE: ${DAWARICH_SECRET_KEY}
|
||||
RAILS_LOG_TO_STDOUT: ${RAILS_LOG_TO_STDOUT:-true}
|
||||
SELF_HOSTED: ${SELF_HOSTED:-true}
|
||||
STORE_GEODATA: ${STORE_GEODATA:-true}
|
||||
<<: *logging
|
||||
depends_on:
|
||||
- dawarich_db
|
||||
- redis
|
||||
- dawarich_app
|
||||
|
||||
dawarich_db:
|
||||
image: postgis/postgis:17-3.5-alpine
|
||||
shm_size: 1G
|
||||
volumes:
|
||||
- /mnt/tower/containers/dawarich/db:/var/lib/postgresql/data
|
||||
networks:
|
||||
- dawarich
|
||||
<<: *logging
|
||||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-dawarich_development}
|
||||
restart: always
|
||||
|
||||
###################################
|
||||
# SURE #
|
||||
# https://credits.scarif.space #
|
||||
###################################
|
||||
|
||||
sure_app:
|
||||
image: ghcr.io/we-promise/sure:stable
|
||||
volumes:
|
||||
- /mnt/tower/containers/sure:/rails/storage
|
||||
restart: unless-stopped
|
||||
<<: *logging
|
||||
environment:
|
||||
VIRTUAL_HOST: credits.${DOMAIN}
|
||||
VIRTUAL_PORT: 3000
|
||||
LETSENCRYPT_HOST: credits.${DOMAIN}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-sure_user}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-sure_password}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-sure_production}
|
||||
SECRET_KEY_BASE: ${SURE_SECRET_KEY}
|
||||
SELF_HOSTED: "true"
|
||||
RAILS_FORCE_SSL: "false"
|
||||
RAILS_ASSUME_SSL: "false"
|
||||
DB_HOST: sure_db
|
||||
DB_PORT: 5432
|
||||
REDIS_URL: redis://redis:6379/1
|
||||
depends_on:
|
||||
- sure_db
|
||||
- redis
|
||||
networks:
|
||||
- sure
|
||||
- nginx
|
||||
- redis
|
||||
|
||||
sure_worker:
|
||||
image: ghcr.io/we-promise/sure:stable
|
||||
command: bundle exec sidekiq
|
||||
<<: *logging
|
||||
volumes:
|
||||
- /mnt/tower/containers/sure:/rails/storage
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- sure_db
|
||||
- redis
|
||||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER:-sure_user}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-sure_password}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-sure_production}
|
||||
SECRET_KEY_BASE: ${SURE_SECRET_KEY}
|
||||
SELF_HOSTED: "true"
|
||||
RAILS_FORCE_SSL: "false"
|
||||
RAILS_ASSUME_SSL: "false"
|
||||
DB_HOST: sure_db
|
||||
DB_PORT: 5432
|
||||
REDIS_URL: redis://redis:6379/1
|
||||
networks:
|
||||
- sure
|
||||
- redis
|
||||
|
||||
sure_db:
|
||||
image: postgres:16
|
||||
<<: *logging
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /mnt/tower/containers/sure/db:/var/lib/postgresql/data
|
||||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER:-sure_user}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-sure_password}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-sure_production}
|
||||
networks:
|
||||
- sure
|
||||
|
||||
###################################
|
||||
# WOLF #
|
||||
###################################
|
||||
wolf:
|
||||
image: ghcr.io/games-on-whales/wolf:stable
|
||||
<<: *logging
|
||||
environment:
|
||||
- NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol
|
||||
volumes:
|
||||
- /mnt/tower/containers/wolf/etc/wolf/:/etc/wolf:rw
|
||||
- ./wolf/config.toml:/etc/wolf/cfg/config.toml:ro
|
||||
- /var/run/docker.sock:/var/run/docker.sock:rw
|
||||
- /dev/:/dev/:rw
|
||||
- /run/udev:/run/udev:rw
|
||||
- nvidia-driver-vol:/usr/nvidia:rw
|
||||
devices:
|
||||
- /dev/dri
|
||||
- /dev/uinput
|
||||
- /dev/uhid
|
||||
- /dev/nvidia-uvm
|
||||
- /dev/nvidia-uvm-tools
|
||||
- /dev/nvidia-caps/nvidia-cap1
|
||||
- /dev/nvidia-caps/nvidia-cap2
|
||||
- /dev/nvidiactl
|
||||
- /dev/nvidia0
|
||||
- /dev/nvidia-modeset
|
||||
device_cgroup_rules:
|
||||
- 'c 13:* rmw'
|
||||
network_mode: host
|
||||
restart: unless-stopped
|
||||
|
||||
###################################
|
||||
# JELLYFIN #
|
||||
# https://media.scarif.space #
|
||||
###################################
|
||||
jellyfin:
|
||||
image: jellyfin/jellyfin
|
||||
<<: *logging
|
||||
ports:
|
||||
- 8096:8096/tcp
|
||||
- 7359:7359/udp
|
||||
volumes:
|
||||
- ./jellyfin/config:/config
|
||||
- /mnt/tower/containers/jellyfin/cache:/cache
|
||||
- type: bind
|
||||
source: /mnt/tower/stardust/chris/files/Library/Movies
|
||||
target: /movies
|
||||
- type: bind
|
||||
source: /mnt/tower/stardust/chris/files/Library/Shows
|
||||
target: /shows
|
||||
restart: 'unless-stopped'
|
||||
# Optional - alternative address used for autodiscovery
|
||||
environment:
|
||||
- JELLYFIN_PublishedServerUrl=http://media.${DOMAIN}
|
||||
- VIRTUAL_HOST=media.${DOMAIN}
|
||||
- VIRTUAL_PORT=8096
|
||||
- LETSENCRYPT_HOST=media.${DOMAIN}
|
||||
extra_hosts:
|
||||
- 'host.docker.internal:host-gateway'
|
||||
networks:
|
||||
- nginx
|
||||
|
||||
###################################
|
||||
# PHOTOPRISM #
|
||||
# https://holo.scarif.space #
|
||||
###################################
|
||||
photoprism:
|
||||
image: photoprism/photoprism:latest
|
||||
<<: *logging
|
||||
# restart: unless-stopped
|
||||
stop_grace_period: 15s
|
||||
depends_on:
|
||||
- db
|
||||
security_opt:
|
||||
- seccomp:unconfined
|
||||
- apparmor:unconfined
|
||||
ports:
|
||||
- "2342:2342"
|
||||
environment:
|
||||
PHOTOPRISM_ADMIN_USER: "${PHOTOPRISM_USER}"
|
||||
PHOTOPRISM_ADMIN_PASSWORD: "${PHOTOPRISM_PASSWORD}"
|
||||
PHOTOPRISM_AUTH_MODE: "password"
|
||||
PHOTOPRISM_DISABLE_TLS: "true"
|
||||
PHOTOPRISM_DEFAULT_TLS: "false"
|
||||
PHOTOPRISM_SITE_URL: "http://holo.${DOMAIN}"
|
||||
PHOTOPRISM_SITE_TITLE: "Holo"
|
||||
PHOTOPRISM_SITE_CAPTION: "Photo library"
|
||||
PHOTOPRISM_READONLY: "false"
|
||||
PHOTOPRISM_EXPERIMENTAL: "true"
|
||||
PHOTOPRISM_DISABLE_CHOWN: "false"
|
||||
PHOTOPRISM_DISABLE_WEBDAV: "true"
|
||||
PHOTOPRISM_DISABLE_MCP: "true"
|
||||
PHOTOPRISM_SIDECAR_YAML: "true"
|
||||
PHOTOPRISM_BACKUP_ALBUMS: "true"
|
||||
PHOTOPRISM_BACKUP_DATABASE: "false"
|
||||
PHOTOPRISM_INDEX_SCHEDULE: "@every 3h"
|
||||
PHOTOPRISM_UPLOAD_LIMIT: 50000
|
||||
PHOTOPRISM_ORIGINALS_LIMIT: 50000
|
||||
PHOTOPRISM_HTTP_COMPRESSION: "zstd,gzip"
|
||||
PHOTOPRISM_DATABASE_DRIVER: "sqlite"
|
||||
PHOTOPRISM_INIT: "https tensorflow"
|
||||
OLLAMA_BASE_URL: "http://ollama:11434"
|
||||
OLLAMA_API_KEY: ""
|
||||
PHOTOPRISM_FFMPEG_ENCODER: "nvidia"
|
||||
PHOTOPRISM_FFMPEG_BITRATE: "64"
|
||||
NVIDIA_VISIBLE_DEVICES: "all"
|
||||
NVIDIA_DRIVER_CAPABILITIES: "all"
|
||||
PHOTOPRISM_UID: 1000
|
||||
PHOTOPRISM_GID: 1000
|
||||
PHOTOPRISM_UMASK: 0000
|
||||
VIRTUAL_HOST: "holo.${DOMAIN}"
|
||||
VIRTUAL_PORT: 2342
|
||||
LETSENCRYPT_HOST: "holo.${DOMAIN}"
|
||||
user: "1000:1000"
|
||||
devices:
|
||||
- "/dev/dri:/dev/dri"
|
||||
working_dir: "/photoprism" # do not change or remove
|
||||
volumes:
|
||||
- "/mnt/tower/stardust/chris/files/Memories:/photoprism/originals"
|
||||
- "/mnt/tower/stardust/chris/files/Unsorted/Memories:/photoprism/import"
|
||||
- "/mnt/tower/containers/photoprism/storage:/photoprism/storage"
|
||||
- "./photoprism/vision.yml:/photoprism/storage/config/vision.yml:ro"
|
||||
networks:
|
||||
- nginx
|
||||
- db
|
||||
- ollama
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
devices:
|
||||
- driver: "nvidia"
|
||||
capabilities: [ gpu ]
|
||||
count: "all"
|
||||
|
||||
###################################
|
||||
# UTILITIES #
|
||||
###################################
|
||||
db:
|
||||
profiles: ["prod", "dev"]
|
||||
<<: *logging
|
||||
@@ -420,7 +673,7 @@ services:
|
||||
- MYSQL_USER=${DB_USER}
|
||||
- MYSQL_PASSWORD=${DB_PASSWORD}
|
||||
volumes:
|
||||
- db:/var/lib/mysql
|
||||
- /mnt/tower/containers/db:/var/lib/mysql
|
||||
- ./db/init:/docker-entrypoint-initdb.d
|
||||
restart: always
|
||||
networks:
|
||||
@@ -435,18 +688,73 @@ services:
|
||||
- redis
|
||||
|
||||
mongodb:
|
||||
<<: *logging
|
||||
profiles: ["prod", "dev"]
|
||||
image: mongo
|
||||
restart: always
|
||||
volumes:
|
||||
- mongodb:/data/db
|
||||
- /mnt/tower/containers/mongodb:/data/db
|
||||
command: mongod
|
||||
networks:
|
||||
- db
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=${DB_USER}
|
||||
- MONGO_INITDB_ROOT_PASSWORD=${DB_PASSWORD}
|
||||
|
||||
rsync-backup:
|
||||
<<: *logging
|
||||
build: ./backup
|
||||
volumes:
|
||||
- /mnt/tower:/data:ro
|
||||
- /mnt/backup/tower:/backup
|
||||
- ./backup/crontab.txt:/etc/crontabs/root:ro
|
||||
- ./backup/exclude.txt:/config/exclude.txt:ro
|
||||
restart: unless-stopped
|
||||
|
||||
## Ollama Large-Language Model Runner (optional)
|
||||
## run "ollama pull [name]:[version]" to download a vision model
|
||||
## listed at <https://ollama.com/search?c=vision>, for example:
|
||||
## docker compose exec ollama ollama pull gemma4:latest
|
||||
ollama:
|
||||
image: ollama/ollama:latest
|
||||
<<: *logging
|
||||
restart: unless-stopped
|
||||
stop_grace_period: 15s
|
||||
# ports:
|
||||
# - "11434:11434"
|
||||
environment:
|
||||
OLLAMA_HOST: "0.0.0.0:11434"
|
||||
OLLAMA_MODELS: "/root/.ollama"
|
||||
OLLAMA_MAX_QUEUE: "100"
|
||||
OLLAMA_NUM_PARALLEL: "1"
|
||||
OLLAMA_MAX_LOADED_MODELS: "1"
|
||||
OLLAMA_LOAD_TIMEOUT: "5m"
|
||||
OLLAMA_KEEP_ALIVE: "5m"
|
||||
OLLAMA_CONTEXT_LENGTH: "4096"
|
||||
OLLAMA_MULTIUSER_CACHE: "false"
|
||||
OLLAMA_NOPRUNE: "false"
|
||||
OLLAMA_NOHISTORY: "true"
|
||||
OLLAMA_FLASH_ATTENTION: "true"
|
||||
OLLAMA_KV_CACHE_TYPE: "f16"
|
||||
OLLAMA_SCHED_SPREAD: "false"
|
||||
DO_NOT_TRACK: "true"
|
||||
HF_HUB_DISABLE_TELEMETRY: "1"
|
||||
OLLAMA_NO_CLOUD: "1" # uncomment to disable Ollama Cloud models/features
|
||||
## NVIDIA GPU Hardware Acceleration (see https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html):
|
||||
NVIDIA_VISIBLE_DEVICES: "all"
|
||||
NVIDIA_DRIVER_CAPABILITIES: "compute,utility"
|
||||
volumes:
|
||||
- "ollama:/root/.ollama"
|
||||
networks:
|
||||
- ollama
|
||||
## NVIDIA GPU Hardware Acceleration (see https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html):
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
devices:
|
||||
- driver: "nvidia"
|
||||
capabilities: [ gpu ]
|
||||
count: "all"
|
||||
|
||||
nginx:
|
||||
<<: *logging
|
||||
@@ -456,20 +764,43 @@ services:
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
labels:
|
||||
- "com.github.nginx-proxy.nginx"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/tmp/docker.sock:ro
|
||||
- /opt/ssl:/etc/nginx/certs:ro
|
||||
- html:/usr/share/nginx/html
|
||||
- vhost:/etc/nginx/vhost.d
|
||||
- ./nginx/vhost.d/labs_location:/etc/nginx/vhost.d/labs.${DOMAIN}_location:ro
|
||||
- ./nginx/vhost.d/office:/etc/nginx/vhost.d/office.${DOMAIN}:ro
|
||||
- ./nginx/vhost.d/rec:/etc/nginx/vhost.d/rec.${DOMAIN}:ro
|
||||
- ./nginx/vhost.d/tower_location_override:/etc/nginx/vhost.d/tower.${DOMAIN}_location_override:ro
|
||||
- ./nginx/vhost.d/tower:/etc/nginx/vhost.d/tower.${DOMAIN}:ro
|
||||
- ./nginx/vhost.d/assets:/etc/nginx/vhost.d/assets.${DOMAIN}:ro
|
||||
- ./nginx/conf.d/custom_proxy.conf:/etc/nginx/conf.d/custom_proxy.conf:ro
|
||||
- nextcloud:/var/www/html/nextcloud:ro
|
||||
- /mnt/tower/containers/nextcloud:/var/www/html/nextcloud:ro
|
||||
- ./christmas:/var/www/html/christmas:ro
|
||||
networks:
|
||||
- nginx
|
||||
|
||||
acme-companion:
|
||||
<<: *logging
|
||||
profiles: ["prod"]
|
||||
image: nginxproxy/acme-companion
|
||||
restart: always
|
||||
environment:
|
||||
- DEFAULT_EMAIL=stoffles@gmail.com
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- /opt/ssl:/etc/nginx/certs:rw
|
||||
- acme:/etc/acme.sh
|
||||
- vhost:/etc/nginx/vhost.d:rw
|
||||
- html:/usr/share/nginx/html:rw
|
||||
depends_on:
|
||||
- nginx
|
||||
networks:
|
||||
- nginx
|
||||
|
||||
certs:
|
||||
profiles: ["dev"]
|
||||
image: paulczar/omgwtfssl
|
||||
@@ -484,18 +815,19 @@ services:
|
||||
- SSL_CERT=/certs/${DOMAIN}.crt
|
||||
|
||||
volumes:
|
||||
db:
|
||||
gitea:
|
||||
nextcloud:
|
||||
foundry:
|
||||
minecraft:
|
||||
change:
|
||||
mongodb:
|
||||
searxng:
|
||||
html:
|
||||
vhost:
|
||||
acme:
|
||||
ollama:
|
||||
nvidia-driver-vol:
|
||||
external: true
|
||||
|
||||
networks:
|
||||
db:
|
||||
nginx:
|
||||
redis:
|
||||
sure:
|
||||
dawarich:
|
||||
meet.jitsi:
|
||||
ollama:
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
# set max upload size and increase upload timeout:
|
||||
client_max_body_size 10G;
|
||||
client_body_timeout 300s;
|
||||
fastcgi_buffers 64 4K;
|
||||
@@ -0,0 +1,22 @@
|
||||
Models:
|
||||
- Type: caption
|
||||
Model: qwen3.5:9b
|
||||
Engine: ollama
|
||||
Run: auto
|
||||
Options:
|
||||
Temperature: 0.05
|
||||
Service:
|
||||
Uri: http://ollama:11434/api/generate
|
||||
Think: "false"
|
||||
- Type: labels
|
||||
Model: qwen3.5:9b
|
||||
Engine: ollama
|
||||
Run: auto
|
||||
Service:
|
||||
Uri: http://ollama:11434/api/generate
|
||||
Think: "false"
|
||||
Thresholds:
|
||||
Confidence: 10
|
||||
Topicality: 0
|
||||
NSFW: 75
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
address=/scarif.space/192.168.2.158
|
||||
@@ -0,0 +1,533 @@
|
||||
config_version = 7
|
||||
hostname = 'Wolf'
|
||||
uuid = '9a0c0dc9-1bf3-43b6-a6aa-a12e504177ad'
|
||||
|
||||
[gstreamer.audio]
|
||||
default_audio_params = 'queue max-size-buffers=3 leaky=downstream ! audiorate ! audioconvert'
|
||||
default_opus_encoder = 'opusenc bitrate={bitrate} bitrate-type=cbr frame-size={packet_duration} bandwidth=fullband audio-type=restricted-lowdelay max-payload-size=1400'
|
||||
default_sink = '''queue ! rtpmoonlightpay_audio name=moonlight_pay packet_duration={packet_duration} encrypt={encrypt} aes_key="{aes_key}" aes_iv="{aes_iv}" !
|
||||
appsink name=wolf_udp_sink'''
|
||||
default_source = 'interpipesrc name=interpipesrc_{}_audio listen-to={session_id}_audio is-live=true stream-sync=restart-ts max-bytes=0 max-buffers=3 block=false'
|
||||
|
||||
[gstreamer.video]
|
||||
default_sink = '''queue ! rtpmoonlightpay_video name=moonlight_pay payload_size={payload_size} fec_percentage={fec_percentage} min_required_fec_packets={min_required_fec_packets} !
|
||||
appsink sync=false max-buffers=1 drop=true name=wolf_udp_sink
|
||||
'''
|
||||
default_source = 'interpipesrc name=interpipesrc_{}_video listen-to={session_id}_video is-live=true stream-sync=restart-ts max-bytes=0 max-buffers=1 leaky-type=downstream'
|
||||
|
||||
[gstreamer.video.defaults.nvcodec]
|
||||
video_params = '''cudaupload !
|
||||
cudaconvertscale add-borders=true !
|
||||
video/x-raw(memory:CUDAMemory), width={width}, height={height}, chroma-site={color_range}, format=NV12, colorimetry={color_space}, pixel-aspect-ratio=1/1'''
|
||||
video_params_zero_copy = '''cudaupload !
|
||||
cudaconvertscale add-borders=true !
|
||||
video/x-raw(memory:CUDAMemory),format=NV12, width={width}, height={height}, pixel-aspect-ratio=1/1
|
||||
'''
|
||||
|
||||
[gstreamer.video.defaults.qsv]
|
||||
video_params = '''videoconvertscale !
|
||||
video/x-raw, chroma-site={color_range}, width={width}, height={height}, format=NV12,
|
||||
colorimetry={color_space}, pixel-aspect-ratio=1/1'''
|
||||
video_params_zero_copy = '''vapostproc add-borders=true !
|
||||
video/x-raw(memory:VAMemory), format=NV12, width={width}, height={height}, pixel-aspect-ratio=1/1'''
|
||||
|
||||
[gstreamer.video.defaults.va]
|
||||
video_params = '''vapostproc add-borders=true !
|
||||
video/x-raw, chroma-site={color_range}, width={width}, height={height}, format=NV12,
|
||||
colorimetry={color_space}, pixel-aspect-ratio=1/1'''
|
||||
video_params_zero_copy = '''vapostproc add-borders=true !
|
||||
video/x-raw(memory:VAMemory), format=NV12, width={width}, height={height}, pixel-aspect-ratio=1/1'''
|
||||
|
||||
[[gstreamer.video.av1_encoders]]
|
||||
check_elements = [ 'nvav1enc', 'cudaconvertscale', 'cudaupload' ]
|
||||
encoder_pipeline = '''nvav1enc gop-size=-1 bitrate={bitrate} vbv-buffer-size={vbv_buffer_size} rc-mode=cbr zerolatency=true preset=p1 tune=ultra-low-latency multi-pass=two-pass-quarter !
|
||||
av1parse !
|
||||
video/x-av1, stream-format=obu-stream, alignment=frame, profile=main'''
|
||||
plugin_name = 'nvcodec'
|
||||
|
||||
[[gstreamer.video.av1_encoders]]
|
||||
check_elements = [ 'vaav1enc', 'vapostproc' ]
|
||||
encoder_pipeline = '''vaav1enc ref-frames=1 bitrate={bitrate} cpb-size={vbv_buffer_size} key-int-max=1024 rate-control=cbr min-qp=20 target-usage=6 !
|
||||
av1parse !
|
||||
video/x-av1, stream-format=obu-stream, alignment=frame, profile=main'''
|
||||
plugin_name = 'va'
|
||||
|
||||
[[gstreamer.video.av1_encoders]]
|
||||
check_elements = [ 'vaav1lpenc', 'vapostproc' ]
|
||||
encoder_pipeline = '''vaav1lpenc ref-frames=1 bitrate={bitrate} cpb-size={vbv_buffer_size} key-int-max=1024 rate-control=cbr min-qp=20 target-usage=6 !
|
||||
av1parse !
|
||||
video/x-av1, stream-format=obu-stream, alignment=frame, profile=main'''
|
||||
plugin_name = 'va'
|
||||
|
||||
[[gstreamer.video.av1_encoders]]
|
||||
check_elements = [ 'qsvav1enc', 'vapostproc' ]
|
||||
encoder_pipeline = '''qsvav1enc gop-size=0 ref-frames=1 bitrate={bitrate} rate-control=cbr low-latency=1 target-usage=6 !
|
||||
av1parse !
|
||||
video/x-av1, stream-format=obu-stream, alignment=frame, profile=main'''
|
||||
plugin_name = 'qsv'
|
||||
|
||||
[[gstreamer.video.av1_encoders]]
|
||||
check_elements = [ 'av1enc' ]
|
||||
encoder_pipeline = '''av1enc usage-profile=realtime end-usage=vbr target-bitrate={bitrate} !
|
||||
av1parse !
|
||||
video/x-av1, stream-format=obu-stream, alignment=frame, profile=main'''
|
||||
plugin_name = 'aom'
|
||||
video_params = '''videoconvertscale !
|
||||
videorate !
|
||||
video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420,
|
||||
chroma-site={color_range}, colorimetry={color_space}'''
|
||||
video_params_zero_copy = '''videoconvertscale !
|
||||
videorate !
|
||||
video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420,
|
||||
chroma-site={color_range}, colorimetry={color_space}'''
|
||||
|
||||
[[gstreamer.video.h264_encoders]]
|
||||
check_elements = [ 'nvh264enc', 'cudaconvertscale', 'cudaupload' ]
|
||||
encoder_pipeline = '''nvh264enc preset=low-latency-hq zerolatency=true gop-size=0 rc-mode=cbr-ld-hq bitrate={bitrate} vbv-buffer-size={vbv_buffer_size} aud=false !
|
||||
h264parse !
|
||||
video/x-h264, profile=main, stream-format=byte-stream'''
|
||||
plugin_name = 'nvcodec'
|
||||
|
||||
[[gstreamer.video.h264_encoders]]
|
||||
check_elements = [ 'vah264enc', 'vapostproc' ]
|
||||
encoder_pipeline = '''vah264enc aud=false b-frames=0 ref-frames=1 num-slices={slices_per_frame} bitrate={bitrate} cpb-size={vbv_buffer_size} min-qp=20 key-int-max=1024 rate-control=cbr target-usage=6 !
|
||||
h264parse !
|
||||
video/x-h264, profile=main, stream-format=byte-stream'''
|
||||
plugin_name = 'va'
|
||||
|
||||
[[gstreamer.video.h264_encoders]]
|
||||
check_elements = [ 'vah264lpenc', 'vapostproc' ]
|
||||
encoder_pipeline = '''vah264lpenc aud=false b-frames=0 ref-frames=1 num-slices={slices_per_frame} bitrate={bitrate} cpb-size={vbv_buffer_size} min-qp=20 key-int-max=1024 rate-control=cbr target-usage=6 !
|
||||
h264parse !
|
||||
video/x-h264, profile=main, stream-format=byte-stream'''
|
||||
plugin_name = 'va'
|
||||
|
||||
[[gstreamer.video.h264_encoders]]
|
||||
check_elements = [ 'qsvh264enc', 'vapostproc' ]
|
||||
encoder_pipeline = '''qsvh264enc b-frames=0 gop-size=0 idr-interval=1 ref-frames=1 bitrate={bitrate} rate-control=cbr target-usage=6 !
|
||||
h264parse !
|
||||
video/x-h264, profile=main, stream-format=byte-stream'''
|
||||
plugin_name = 'qsv'
|
||||
|
||||
[[gstreamer.video.h264_encoders]]
|
||||
check_elements = [ 'x264enc' ]
|
||||
encoder_pipeline = '''x264enc pass=qual tune=zerolatency speed-preset=superfast b-adapt=false bframes=0 ref=1
|
||||
sliced-threads=true threads={slices_per_frame} option-string="slices={slices_per_frame}:keyint=infinite:open-gop=0"
|
||||
b-adapt=false bitrate={bitrate} aud=false !
|
||||
video/x-h264, profile=high, stream-format=byte-stream'''
|
||||
plugin_name = 'x264'
|
||||
|
||||
[[gstreamer.video.hevc_encoders]]
|
||||
check_elements = [ 'nvh265enc', 'cudaconvertscale', 'cudaupload' ]
|
||||
encoder_pipeline = '''nvh265enc gop-size=-1 bitrate={bitrate} vbv-buffer-size={vbv_buffer_size} aud=false rc-mode=cbr zerolatency=true preset=p1 tune=ultra-low-latency multi-pass=two-pass-quarter !
|
||||
h265parse !
|
||||
video/x-h265, profile=main, stream-format=byte-stream'''
|
||||
plugin_name = 'nvcodec'
|
||||
|
||||
[[gstreamer.video.hevc_encoders]]
|
||||
check_elements = [ 'vah265enc', 'vapostproc' ]
|
||||
encoder_pipeline = '''vah265enc aud=false b-frames=0 ref-frames=1 num-slices={slices_per_frame} bitrate={bitrate} cpb-size={vbv_buffer_size} min-qp=20 key-int-max=1024 rate-control=cbr target-usage=6 !
|
||||
h265parse !
|
||||
video/x-h265, profile=main, stream-format=byte-stream'''
|
||||
plugin_name = 'va'
|
||||
|
||||
[[gstreamer.video.hevc_encoders]]
|
||||
check_elements = [ 'qsvh265enc', 'vapostproc' ]
|
||||
encoder_pipeline = '''qsvh265enc b-frames=0 gop-size=0 idr-interval=1 ref-frames=1 bitrate={bitrate} rate-control=cbr low-latency=1 target-usage=6 !
|
||||
h265parse !
|
||||
video/x-h265, profile=main, stream-format=byte-stream'''
|
||||
plugin_name = 'qsv'
|
||||
|
||||
[[gstreamer.video.hevc_encoders]]
|
||||
check_elements = [ 'vah265lpenc', 'vapostproc' ]
|
||||
encoder_pipeline = '''vah265lpenc aud=false b-frames=0 ref-frames=1 num-slices={slices_per_frame} bitrate={bitrate} cpb-size={vbv_buffer_size} min-qp=20 key-int-max=1024 rate-control=cbr target-usage=6 !
|
||||
h265parse !
|
||||
video/x-h265, profile=main, stream-format=byte-stream'''
|
||||
plugin_name = 'va'
|
||||
|
||||
[[gstreamer.video.hevc_encoders]]
|
||||
check_elements = [ 'x265enc' ]
|
||||
encoder_pipeline = '''x265enc tune=zerolatency speed-preset=superfast bitrate={bitrate}
|
||||
option-string="info=0:keyint=-1:qp=28:repeat-headers=1:slices={slices_per_frame}:aud=0:annexb=1:log-level=3:open-gop=0:bframes=0:intra-refresh=0" !
|
||||
video/x-h265, profile=main, stream-format=byte-stream'''
|
||||
plugin_name = 'x265'
|
||||
video_params = '''videoconvertscale !
|
||||
videorate !
|
||||
video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420,
|
||||
chroma-site={color_range}, colorimetry={color_space}'''
|
||||
video_params_zero_copy = '''videoconvertscale !
|
||||
videorate !
|
||||
video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420,
|
||||
chroma-site={color_range}, colorimetry={color_space}'''
|
||||
|
||||
[[paired_clients]]
|
||||
app_state_folder = '4253397947964014983'
|
||||
client_cert = '''-----BEGIN CERTIFICATE-----
|
||||
MIICvzCCAaegAwIBAgIBADANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDDBhOVklE
|
||||
SUEgR2FtZVN0cmVhbSBDbGllbnQwHhcNMjYwOTExMjI0NzU0WhcNNDYwOTA2MjI0
|
||||
NzU0WjAjMSEwHwYDVQQDDBhOVklESUEgR2FtZVN0cmVhbSBDbGllbnQwggEiMA0G
|
||||
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJon8BGgFYZQGYAFbhkBI30aAt0HXV
|
||||
vSPoDko+fzr+AKDACLtOIlk0I5rYzCxO0egTq4TtODABOcSCAIhVwhlnm4D8vGeC
|
||||
HyMqt2XhxCraGhq/cntyS38FLCD4/3kCbTFGswYNsma7r53DEMs1G0HMhvmKWaXm
|
||||
CJEnZu1/Q/WltRyWgW+J9GHpz5c65WDmdPfUQZBgPiA+v6jOcztEpMSc8yPo/mdB
|
||||
Rj/otWZp8gJUWMDj37lNX3xZXBx2W1WD6DLaYx3AQxaEJlE2cxsMHV6pWLbaFye5
|
||||
dPScERWBXW8ScOc71lmZ6zfxICGK38m1t9SCRFFEW74e6R6UYwcaoguPAgMBAAEw
|
||||
DQYJKoZIhvcNAQELBQADggEBAEeN9/B9kl/oObF7HlDId6ijMpEPaKws4sHp3H09
|
||||
oI3uObLS56Y+MP/jwHldxL5yzY5sAzXRblgwIFj/5xwPohKzCJM+q7UEHlLkNUO/
|
||||
gpCBdUDxMcw428YgJzvLLiTBO6pQJuY2GfeR99JNGr2em3q4waDQzZpC6mLbMJAi
|
||||
ZQHQJntN0yv2AtK5mTMLWB3+yI4MLLqvTYKAQLS1Gsoedq+w5l8nkyugWkQNtUup
|
||||
iVFFuHxyRk+72tfjxOWoziCJ67YIcC5foSDzJvEopUN6xzVRH0iZhEN3PzXqAM/a
|
||||
xgimS4jRyDQ4Y8UeT2T4stEDz1+fqwosq/kpbBcXctx38ac=
|
||||
-----END CERTIFICATE-----
|
||||
'''
|
||||
|
||||
[paired_clients.settings]
|
||||
controllers_override = []
|
||||
h_scroll_acceleration = 1.0
|
||||
motion_controller_override = 'AUTO'
|
||||
mouse_acceleration = 1.0
|
||||
run_gid = 1000
|
||||
run_uid = 1000
|
||||
v_scroll_acceleration = 1.0
|
||||
|
||||
[[paired_clients]]
|
||||
app_state_folder = '832565367026934083'
|
||||
client_cert = '''-----BEGIN CERTIFICATE-----
|
||||
MIICxjCCAa6gAwIBAgIIUYQpYpwoyMwwDQYJKoZIhvcNAQELBQAwIzEhMB8GA1UE
|
||||
AwwYTlZJRElBIEdhbWVTdHJlYW0gQ2xpZW50MB4XDTI2MDkxMTIzMDI1MFoXDTQ2
|
||||
MDkxMTIzMDI1MFowIzEhMB8GA1UEAwwYTlZJRElBIEdhbWVTdHJlYW0gQ2xpZW50
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArddXC2/Uu2FTVmfTaTBJ
|
||||
kB2v5MFkgQ0MY3cxQWZ9oHyR0f5YTR1IJEs5MoLJ4jH8wnVK/HcB5rlhzUVTU/1r
|
||||
3eXZX9umXZzhq6UmUaqRdHG4SqHiYElIRr50a8Z/Hc9NlyM8xKPWhjPGtp4hoyBE
|
||||
UreyPVvnswhz7tIjikomfTIWgo+X2MFMMM03niavYyrrOIiOFweYMuv+tgVgdWsu
|
||||
cTleev6SDWajw7YBuoPQZBa+/W+DD887rv5aYKfTobE56FsUyzCmXKv01rZhUQ08
|
||||
AJTGProNqUUD84zUk078Du6LQ9jcIeRg0En9WeSeAuDfQ+viRidyGNJ1WQi4v6OI
|
||||
HwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAfebSCETh109HJ6p1gw3aNOY14fulm
|
||||
JTjxsUmWSEhvZvgNSkWU0VavILzI0LYTDM1M3uCkEuEOXPebAqYTp90l6l9eq2xj
|
||||
hNm1H5I8LHUmqfvXG5eCHECKBlZPjWdWCl9PX1orqKyv4NF3+J3IkYE/qGCTb+Vl
|
||||
xjYzea40uXL9zZtLBr/iymDjZhwdowJZqx/b23um/7rLdA0/7ouMbKEeYIpGKrga
|
||||
TgGXxifbnL5CaJdZmJKyaM0gbfq4+AyU0BG2tRphcakdYtCYIjLI6qiJGy8a4e37
|
||||
5aY1ioMHJOQB1nEUiCUdEBdG7aTkizg7TmR8aTK2xz4Ww7S1eEKpGULn
|
||||
-----END CERTIFICATE-----
|
||||
'''
|
||||
|
||||
[paired_clients.settings]
|
||||
controllers_override = []
|
||||
h_scroll_acceleration = 1.0
|
||||
motion_controller_override = 'AUTO'
|
||||
mouse_acceleration = 1.0
|
||||
run_gid = 1000
|
||||
run_uid = 1000
|
||||
v_scroll_acceleration = 1.0
|
||||
|
||||
[[paired_clients]]
|
||||
app_state_folder = '4148551118029650770'
|
||||
client_cert = '''-----BEGIN CERTIFICATE-----
|
||||
MIICvzCCAaegAwIBAgIBADANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDDBhOVklE
|
||||
SUEgR2FtZVN0cmVhbSBDbGllbnQwHhcNMjYwOTEyMDYzOTE1WhcNNDYwOTA3MDYz
|
||||
OTE1WjAjMSEwHwYDVQQDDBhOVklESUEgR2FtZVN0cmVhbSBDbGllbnQwggEiMA0G
|
||||
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBM8aFF4g0XVJ8MLhk0NmWzUB01Hts
|
||||
m/OSzYTryXP/FYikoosml1oVE4LylSOKfjqPUeF8p19TQe22zqDTAOt4y11sqySX
|
||||
CjQw3lChtWO3ifeFtTPXxsa1yuGPa09dUC+rbjG58tExSRrxbAZ0qbuVRO3I2gRh
|
||||
7q5aWLEE5r26WPhGCLWdsnmwSg86lH3zkfGhDBzBnxT6snbEOTaZ6xnK5MaNlKmQ
|
||||
B2Ou8Tw6ZGkmNQw4NL3AIeV9cVR29bawoCio0xpg5TIxxWSDREhWgiPoZKoXFVwB
|
||||
y5ofWQ336JxAQpaZuHTYy2Ag092K4IvUNlZ+JNTMjQELoA+OA3q8tMHrAgMBAAEw
|
||||
DQYJKoZIhvcNAQELBQADggEBABtbpKpW7NjWQIDwzPJcUFyevkLVFFxQTfcs+ACX
|
||||
m3eJKU7JI2SraOELalenYpf3gG+0wgJfF4uVDS7F1SjhAMlKV9qxsmpOrIms/9JF
|
||||
8eTGHau4E4GtOKdiy5OX+y4P/fcsK/RlNCWqSvkHupZcfyzUJsD6N4ZNtB9YRvNs
|
||||
Ukr59LVJFo7a4L75zjMAHwuZypJC+l53YZPmCNo/szhetMpEsmEub0dcBMRi3V9j
|
||||
rxvyvHgSsIpIBPjUsvszV70G1+r/IhohjAHML6g5f67Z5loinEgpDBvtfEnodOc4
|
||||
BGSCR6i1K5ZKmGmlZj8MFlOvhwFo3TqQ565HBlnVQthp6Cc=
|
||||
-----END CERTIFICATE-----
|
||||
'''
|
||||
|
||||
[paired_clients.settings]
|
||||
controllers_override = []
|
||||
h_scroll_acceleration = 1.0
|
||||
motion_controller_override = 'AUTO'
|
||||
mouse_acceleration = 1.0
|
||||
run_gid = 1000
|
||||
run_uid = 1000
|
||||
v_scroll_acceleration = 1.0
|
||||
|
||||
[[paired_clients]]
|
||||
app_state_folder = '1973283391930839926'
|
||||
client_cert = '''-----BEGIN CERTIFICATE-----
|
||||
MIICxjCCAa6gAwIBAgIIRowDEPfuiYgwDQYJKoZIhvcNAQELBQAwIzEhMB8GA1UE
|
||||
AwwYTlZJRElBIEdhbWVTdHJlYW0gQ2xpZW50MB4XDTI2MDkxMjA3MTQ0MloXDTQ2
|
||||
MDkxMjA4MTQ0MlowIzEhMB8GA1UEAwwYTlZJRElBIEdhbWVTdHJlYW0gQ2xpZW50
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ZAwIlh4qbJAkIcby2us
|
||||
CRLKHycxhmk3Nl5ZQFGX682O25u3F91dMNvXD+3r4U7/fG0speoq4vEMYVEjinZs
|
||||
CRnew7JDZsHsFxnlLc9tWb99vATdDQKNCjRhAiVAJK7U7fBcq7YKEE4uZD1raBFz
|
||||
R5lnODsUWFgA6niijrn5SPyjJdMLN3z7H+A3cI1qpBQS1Oufv9eHDqDyFyEQIGuH
|
||||
dQviIPPeETvs1m3qaD2HPIqYyZne4AnwPizzdWI54FPzpJzbM/pdUIUAigwToQor
|
||||
aUaBCEuolX60KDVnj/uXBvVGTrmopH4ppNghyuVp9pPdD+8WYLFuKjIIaj6WZPSs
|
||||
0QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAjBOuHAi31Sj0mnp+7iBjYFWZw9T3h
|
||||
C6EJwX8990VTywRpa8cDpyVqI1Y5Zo+ZQ2lM9fTyFn6AHgko478RWyTyoWazUYZ+
|
||||
yJ2C1h69wM9JDlY0Qwn67wLx/+4I1jMpxMiNFJTbKUtuOYuQpLa2gOIo316njgLW
|
||||
FrqyjdL93A8jy+kaRCuVh085SQ+Vt3hY37w0zKREACxP/pYR7yasXZWf9HUEoJW4
|
||||
9Nn1GGwK2j06hBfaCAURryhIN3N5FDW3eJsrx+iFhL4pAv28LvZNcHo+XoDJ3xFR
|
||||
QgpG1CD/h9NmhUPn7VRUlPoxWvkcbuc49BiEhW8SGXNWSBnEH4IXJtB4
|
||||
-----END CERTIFICATE-----
|
||||
'''
|
||||
|
||||
[paired_clients.settings]
|
||||
controllers_override = []
|
||||
h_scroll_acceleration = 1.0
|
||||
motion_controller_override = 'AUTO'
|
||||
mouse_acceleration = 1.0
|
||||
run_gid = 1000
|
||||
run_uid = 1000
|
||||
v_scroll_acceleration = 1.0
|
||||
|
||||
[[paired_clients]]
|
||||
app_state_folder = '13843269076185421004'
|
||||
client_cert = '''-----BEGIN CERTIFICATE-----
|
||||
MIICvzCCAaegAwIBAgIBADANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDDBhOVklE
|
||||
SUEgR2FtZVN0cmVhbSBDbGllbnQwHhcNMjYwOTEyMDcxMTU4WhcNNDYwOTA3MDcx
|
||||
MTU4WjAjMSEwHwYDVQQDDBhOVklESUEgR2FtZVN0cmVhbSBDbGllbnQwggEiMA0G
|
||||
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6tHRbbkjPilFN+MhroO71BbF0JMQ7
|
||||
Nzf9rfihPdDDpyPEwKR/11ozJ/Hu6SrAR0hZTKMpPF0vtVG2ceQY99/rfAwgIdXa
|
||||
FpL5neEedRpLAS41qx9RNBXSBbFekSoNIx1/LBGtQyetOZrv4UeWwivb3Q/ClFUa
|
||||
z005wcD7qQRNVBjbjgOhbL7tREeMdgkZwUzIVwCuWQhHJ5CZjhFLGq8kSGSkc2eZ
|
||||
/VtQ+Ou6TbD7aZUQQfGykEaiy71aMoEwnmCCDAkhqBvu0zP1CEf1tZKUbUIm5lj1
|
||||
P8uWbdp/GuHYALnAAzrvhYhxVU3PSDGy4YxsE9IR/aj8SAugPd2LE1zLAgMBAAEw
|
||||
DQYJKoZIhvcNAQELBQADggEBAE7xMQllGhw44ea+QFuo23ZsGSb/soGQ84J0dnjQ
|
||||
yOasQVNSHTsax3uLMTh1Ar9cL2wQWugPe42fEGwj84KQ6+stArhSmbvJ95BVjAec
|
||||
tdg4gwAATjCie+UYLGu60HxGXJsz3VhijRUh5W7Blssv0EX8qwDupKfHZv9HvSPo
|
||||
0Pqu0oULPfKXtv0thNFo8F0YT9YQgNnz4WU20zbiB5eS0eh1meCblMcRhdW8dNng
|
||||
ZCez0e3GQRbpF6nuo0dgAQQ9c+/gvs01qZ9dFaorJwmO7uEydje6j0FpPWkrYx7L
|
||||
556HrbC4pKmAvCNcZXbyGC5HTHPtf0pGthhPkB6UCCzlLkQ=
|
||||
-----END CERTIFICATE-----
|
||||
'''
|
||||
|
||||
[paired_clients.settings]
|
||||
controllers_override = []
|
||||
h_scroll_acceleration = 1.0
|
||||
motion_controller_override = 'AUTO'
|
||||
mouse_acceleration = 1.0
|
||||
run_gid = 1000
|
||||
run_uid = 1000
|
||||
v_scroll_acceleration = 1.0
|
||||
|
||||
[[profiles]]
|
||||
id = 'moonlight-profile-id'
|
||||
|
||||
[[profiles.apps]]
|
||||
icon_png_path = 'https://raw.githubusercontent.com/games-on-whales/wolf-ui/refs/heads/main/src/Icons/wolf_ui_icon.png'
|
||||
start_virtual_compositor = true
|
||||
title = 'Wolf UI'
|
||||
|
||||
[profiles.apps.runner]
|
||||
base_create_json = '''{
|
||||
"HostConfig": {
|
||||
"IpcMode": "host",
|
||||
"CapAdd": ["NET_RAW", "MKNOD", "NET_ADMIN", "SYS_ADMIN", "SYS_NICE"],
|
||||
"Privileged": false,
|
||||
"DeviceCgroupRules": ["c 13:* rmw", "c 244:* rmw"]
|
||||
}
|
||||
}'''
|
||||
devices = []
|
||||
env = [
|
||||
'GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*',
|
||||
'WOLF_SOCKET_PATH=/var/run/wolf/wolf.sock',
|
||||
'WOLF_UI_AUTOUPDATE=False',
|
||||
'LOGLEVEL=INFO'
|
||||
]
|
||||
image = 'ghcr.io/games-on-whales/wolf-ui:main'
|
||||
mounts = [ '/var/run/wolf/wolf.sock:/var/run/wolf/wolf.sock' ]
|
||||
name = 'Wolf-UI'
|
||||
ports = []
|
||||
type = 'docker'
|
||||
|
||||
[[profiles]]
|
||||
id = 'user'
|
||||
name = 'Chris'
|
||||
|
||||
[[profiles.apps]]
|
||||
icon_png_path = 'https://games-on-whales.github.io/wildlife/apps/steam/assets/icon.png'
|
||||
start_virtual_compositor = true
|
||||
title = 'Steam'
|
||||
|
||||
[profiles.apps.runner]
|
||||
base_create_json = '''{
|
||||
"HostConfig": {
|
||||
"IpcMode": "host",
|
||||
"CapAdd": ["SYS_ADMIN", "SYS_NICE", "SYS_PTRACE", "NET_RAW", "MKNOD", "NET_ADMIN"],
|
||||
"SecurityOpt": ["seccomp=unconfined", "apparmor=unconfined"],
|
||||
"Ulimits": [{"Name":"nofile", "Hard":10240, "Soft":10240}],
|
||||
"Privileged": false,
|
||||
"DeviceCgroupRules": ["c 13:* rmw", "c 244:* rmw"]
|
||||
}
|
||||
}
|
||||
'''
|
||||
devices = []
|
||||
env = [ 'PROTON_LOG=1', 'RUN_SWAY=true', 'GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*' ]
|
||||
image = 'ghcr.io/games-on-whales/steam:edge'
|
||||
mounts = [ '/mnt/games/:/mnt/games:rw' ]
|
||||
name = 'WolfSteam'
|
||||
ports = []
|
||||
type = 'docker'
|
||||
|
||||
# [[profiles.apps]]
|
||||
# icon_png_path = 'https://games-on-whales.github.io/wildlife/apps/firefox/assets/icon.png'
|
||||
# start_virtual_compositor = true
|
||||
# title = 'Firefox'
|
||||
#
|
||||
# [profiles.apps.runner]
|
||||
# base_create_json = '''{
|
||||
# "HostConfig": {
|
||||
# "IpcMode": "host",
|
||||
# "Privileged": false,
|
||||
# "CapAdd": ["NET_RAW", "MKNOD", "NET_ADMIN"],
|
||||
# "DeviceCgroupRules": ["c 13:* rmw", "c 244:* rmw"]
|
||||
# }
|
||||
# }
|
||||
# '''
|
||||
# devices = []
|
||||
# env = [ 'RUN_SWAY=1', 'MOZ_ENABLE_WAYLAND=1', 'GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*' ]
|
||||
# image = 'ghcr.io/games-on-whales/firefox:edge'
|
||||
# mounts = []
|
||||
# name = 'WolfFirefox'
|
||||
# ports = []
|
||||
# type = 'docker'
|
||||
#
|
||||
# [[profiles.apps]]
|
||||
# icon_png_path = 'https://games-on-whales.github.io/wildlife/apps/retroarch/assets/icon.png'
|
||||
# start_virtual_compositor = true
|
||||
# title = 'RetroArch'
|
||||
#
|
||||
# [profiles.apps.runner]
|
||||
# base_create_json = '''{
|
||||
# "HostConfig": {
|
||||
# "IpcMode": "host",
|
||||
# "CapAdd": ["NET_RAW", "MKNOD", "NET_ADMIN", "SYS_ADMIN", "SYS_NICE"],
|
||||
# "Privileged": false,
|
||||
# "DeviceCgroupRules": ["c 13:* rmw", "c 244:* rmw"]
|
||||
# }
|
||||
# }
|
||||
# '''
|
||||
# devices = []
|
||||
# env = [ 'RUN_SWAY=true', 'GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*' ]
|
||||
# image = 'ghcr.io/games-on-whales/retroarch:edge'
|
||||
# mounts = []
|
||||
# name = 'WolfRetroarch'
|
||||
# ports = []
|
||||
# type = 'docker'
|
||||
|
||||
# [[profiles.apps]]
|
||||
# icon_png_path = 'https://games-on-whales.github.io/wildlife/apps/pegasus/assets/icon.png'
|
||||
# start_virtual_compositor = true
|
||||
# title = 'Pegasus'
|
||||
#
|
||||
# [profiles.apps.runner]
|
||||
# base_create_json = '''{
|
||||
# "HostConfig": {
|
||||
# "IpcMode": "host",
|
||||
# "CapAdd": ["NET_RAW", "MKNOD", "NET_ADMIN", "SYS_ADMIN", "SYS_NICE"],
|
||||
# "Privileged": false,
|
||||
# "DeviceCgroupRules": ["c 13:* rmw", "c 244:* rmw"]
|
||||
# }
|
||||
# }
|
||||
# '''
|
||||
# devices = []
|
||||
# env = [ 'RUN_SWAY=1', 'GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*' ]
|
||||
# image = 'ghcr.io/games-on-whales/pegasus:edge'
|
||||
# mounts = []
|
||||
# name = 'WolfPegasus'
|
||||
# ports = []
|
||||
# type = 'docker'
|
||||
#
|
||||
# [[profiles.apps]]
|
||||
# icon_png_path = 'https://games-on-whales.github.io/wildlife/apps/lutris/assets/icon.png'
|
||||
# start_virtual_compositor = true
|
||||
# title = 'Lutris'
|
||||
#
|
||||
# [profiles.apps.runner]
|
||||
# base_create_json = '''{
|
||||
# "HostConfig": {
|
||||
# "IpcMode": "host",
|
||||
# "CapAdd": ["SYS_ADMIN", "SYS_NICE", "SYS_PTRACE", "NET_RAW", "MKNOD", "NET_ADMIN"],
|
||||
# "SecurityOpt": ["seccomp=unconfined", "apparmor=unconfined"],
|
||||
# "Ulimits": [{"Name":"nofile", "Hard":524288, "Soft":524288}],
|
||||
# "Privileged": false,
|
||||
# "DeviceCgroupRules": ["c 13:* rmw", "c 244:* rmw"]
|
||||
# }
|
||||
# }
|
||||
# '''
|
||||
# devices = []
|
||||
# env = [ 'RUN_SWAY=1', 'GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia* /var/lutris/' ]
|
||||
# image = 'ghcr.io/games-on-whales/lutris:edge'
|
||||
# mounts = [ 'lutris:/var/lutris/:rw' ]
|
||||
# name = 'WolfLutris'
|
||||
# ports = []
|
||||
# type = 'docker'
|
||||
#
|
||||
# [[profiles.apps]]
|
||||
# icon_png_path = 'https://games-on-whales.github.io/wildlife/apps/prismlauncher/assets/icon.png'
|
||||
# start_virtual_compositor = true
|
||||
# title = 'Prismlauncher'
|
||||
#
|
||||
# [profiles.apps.runner]
|
||||
# base_create_json = '''{
|
||||
# "HostConfig": {
|
||||
# "IpcMode": "host",
|
||||
# "CapAdd": ["NET_RAW", "MKNOD", "NET_ADMIN", "SYS_ADMIN", "SYS_NICE"],
|
||||
# "Privileged": false,
|
||||
# "DeviceCgroupRules": ["c 13:* rmw", "c 244:* rmw"]
|
||||
# }
|
||||
# }
|
||||
# '''
|
||||
# devices = []
|
||||
# env = [ 'RUN_SWAY=1', 'GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia* /var/lutris/' ]
|
||||
# image = 'ghcr.io/games-on-whales/prismlauncher:edge'
|
||||
# mounts = []
|
||||
# name = 'Prismlauncher'
|
||||
# ports = []
|
||||
# type = 'docker'
|
||||
#
|
||||
# [[profiles.apps]]
|
||||
# icon_png_path = 'https://games-on-whales.github.io/wildlife/apps/xfce/assets/icon.png'
|
||||
# title = 'Desktop (xfce)'
|
||||
#
|
||||
# [profiles.apps.runner]
|
||||
# base_create_json = '''{
|
||||
# "HostConfig": {
|
||||
# "IpcMode": "host",
|
||||
# "Privileged": false,
|
||||
# "CapAdd": ["SYS_ADMIN", "SYS_NICE", "SYS_PTRACE", "NET_RAW", "MKNOD", "NET_ADMIN"],
|
||||
# "SecurityOpt": ["seccomp=unconfined", "apparmor=unconfined"],
|
||||
# "DeviceCgroupRules": ["c 13:* rmw", "c 244:* rmw"]
|
||||
# }
|
||||
# }
|
||||
# '''
|
||||
# devices = []
|
||||
# env = [ 'GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*' ]
|
||||
# image = 'ghcr.io/games-on-whales/xfce:edge'
|
||||
# mounts = []
|
||||
# name = 'WolfXFCE'
|
||||
# ports = []
|
||||
# type = 'docker'
|
||||
#
|
||||
# [[profiles.apps]]
|
||||
# icon_png_path = 'https://games-on-whales.github.io/wildlife/apps/es-de/assets/icon.png'
|
||||
# title = 'EmulationStation'
|
||||
#
|
||||
# [profiles.apps.runner]
|
||||
# base_create_json = '''{
|
||||
# "HostConfig": {
|
||||
# "IpcMode": "host",
|
||||
# "Privileged": false,
|
||||
# "CapAdd": ["NET_RAW", "MKNOD", "NET_ADMIN"],
|
||||
# "DeviceCgroupRules": ["c 13:* rmw", "c 244:* rmw"]
|
||||
# }
|
||||
# }
|
||||
# '''
|
||||
# devices = []
|
||||
# env = [ 'RUN_SWAY=1', 'MOZ_ENABLE_WAYLAND=1', 'GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*' ]
|
||||
# image = 'ghcr.io/games-on-whales/es-de:edge'
|
||||
# mounts = []
|
||||
# name = 'WolfES-DE'
|
||||
# ports = []
|
||||
# type = 'docker'
|
||||
|
||||
Reference in New Issue
Block a user