diff --git a/README.md b/README.md
index 7583add..5763e82 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,12 @@
+
+
+
+
+
+
@@ -47,24 +53,25 @@ You'll find my setup below.
-| | Device | Image/Where to Buy (Click the Image) |
-| --- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
-| | | |
-| | Used NUCs | [![nucs]](https://www.ebay.com/itm/285116201597?var=586979484256) |
-| | Intel NUC | [![ha-nuc]](https://www.amazon.com/gp/product/B09DCZQFF2/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
-| | UniFi Dream Machine Pro | [![udm-pro]](https://store.ui.com/us/en/pro/category/all-unifi-cloud-gateways/products/udm-pro) |
-| | UniFi Flex HD AP | [![unifi-flex-hd]](https://www.amazon.com/gp/product/B07YQ87QBF) |
-| | TP-Link (T1600G-18TS) 16 Port Managed Switch | [![tp-link-T1600G-18TS-switch]](https://www.amazon.com/gp/product/B0797KPRPK/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
-| | Echogear Server Rack | [![rack]](https://www.amazon.com/gp/product/B07YYJMCNV/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
-| | Generic NUC 1U Rack | [![nuc-rack]](https://www.amazon.com/gp/product/B09BJ5WBHB/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
-| | Cyberpower power strip 12 outlets | [![cyberpower-strip-12]](https://www.amazon.com/gp/product/B00077INZU/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
-| | Cyberpower power strip 18 outlets | [![cyberpower-strip-18]](https://www.amazon.com/gp/product/B004K1YG1Y/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
-| | Synology DS920+ NAS | [![synology-9120]](https://www.amazon.com/gp/product/B087Z34F3R/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
-| | Deco X55 Router | [![deco-x55]](https://www.amazon.com/gp/product/B09PRB1MZM/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
-| | Navepoint 12U Closet Rack | [![navepoint-12u-closet-rack]](https://www.amazon.com/gp/product/B072BXSTY8/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
-| | Beelink NUC | [![beelink-nuc]](https://www.amazon.com/gp/product/B0BVLPCDVW/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
-| | CyberPower LCD UPS System 2U Rack/Tower | [![cyber-power-ups]](https://www.amazon.com/gp/product/B00HDODQYS?th=1) |
-| | Raspberry Pi 4 B 8gb RAM | [![raspberry-pi-4]](https://www.amazon.com/gp/product/B08R87H4RR/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
+| | Device | Image/Where to Buy (Click the Image) |
+| --- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| | | |
+| | Used NUCs | [![nucs]](https://www.ebay.com/itm/285116201597?var=586979484256) |
+| | Intel NUC | [![ha-nuc]](https://www.amazon.com/gp/product/B09DCZQFF2/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
+| | UniFi Dream Machine Pro | [![udm-pro]](https://store.ui.com/us/en/pro/category/all-unifi-cloud-gateways/products/udm-pro) |
+| | UniFi Flex HD AP | [![unifi-flex-hd]](https://www.amazon.com/gp/product/B07YQ87QBF) |
+| | TP-Link (T1600G-18TS) 16 Port Managed Switch | [![tp-link-T1600G-18TS-switch]](https://www.amazon.com/gp/product/B0797KPRPK/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
+| | Echogear Server Rack | [![rack]](https://www.amazon.com/gp/product/B07YYJMCNV/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
+| | Generic NUC 1U Rack | [![nuc-rack]](https://www.amazon.com/gp/product/B09BJ5WBHB/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
+| | Cyberpower power strip 12 outlets | [![cyberpower-strip-12]](https://www.amazon.com/gp/product/B00077INZU/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
+| | Cyberpower power strip 18 outlets | [![cyberpower-strip-18]](https://www.amazon.com/gp/product/B004K1YG1Y/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
+| | Synology DS920+ NAS | [![synology-9120]](https://www.amazon.com/gp/product/B087Z34F3R/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
+| | Deco X55 Router | [![deco-x55]](https://www.amazon.com/gp/product/B09PRB1MZM/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
+| | Navepoint 12U Closet Rack | [![navepoint-12u-closet-rack]](https://www.amazon.com/gp/product/B072BXSTY8/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
+| | Beelink NUC | [![beelink-nuc]](https://www.amazon.com/gp/product/B0BVLPCDVW/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
+| | CyberPower LCD UPS System 2U Rack/Tower | [![cyber-power-ups]](https://www.amazon.com/gp/product/B00HDODQYS?th=1) |
+| | Raspberry Pi 4 B 8gb RAM | [![raspberry-pi-4]](https://www.amazon.com/gp/product/B08R87H4RR/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) |
+| | Beelink S12 Pro Mini PC, Intel 12th Gen Alder Lake- N100 | [![beelink-s12-pro-nucs]](https://www.amazon.com/dp/B0CRKD4YQL?th=1) |
[☝️ Top](#table-of-contents)
@@ -89,4 +96,5 @@ Some of the software running on the servers in my home lab.
[raspberry-pi-3B+]: assets/rpi-3bp.png
[raspberry-pi-2]: assets/rpi-2.png
[beelink-nuc]: assets/beelink.png
+ [beelink-s12-pro-nucs]: assets/beelink-pros.png
[cyber-power-ups]: assets/ups.png
\ No newline at end of file
diff --git a/assets/Friday, 26 Jul 2024 19:06:55.png b/assets/Friday, 26 Jul 2024 19:06:55.png
new file mode 100644
index 0000000..4caa8b1
Binary files /dev/null and b/assets/Friday, 26 Jul 2024 19:06:55.png differ
diff --git a/assets/Saturday, 27 Jul 2024 16:05:06.png b/assets/Saturday, 27 Jul 2024 16:05:06.png
new file mode 100644
index 0000000..8d1f79d
Binary files /dev/null and b/assets/Saturday, 27 Jul 2024 16:05:06.png differ
diff --git a/assets/Wednesday, 24 Jul 2024 19:03:21.png b/assets/Wednesday, 24 Jul 2024 19:03:21.png
new file mode 100644
index 0000000..295842a
Binary files /dev/null and b/assets/Wednesday, 24 Jul 2024 19:03:21.png differ
diff --git a/assets/Wednesday, 24 Jul 2024 19:03:36.png b/assets/Wednesday, 24 Jul 2024 19:03:36.png
new file mode 100644
index 0000000..c21b7d1
Binary files /dev/null and b/assets/Wednesday, 24 Jul 2024 19:03:36.png differ
diff --git a/assets/Wednesday, 24 Jul 2024 19:03:52.png b/assets/Wednesday, 24 Jul 2024 19:03:52.png
new file mode 100644
index 0000000..ac6dab0
Binary files /dev/null and b/assets/Wednesday, 24 Jul 2024 19:03:52.png differ
diff --git a/assets/Wednesday, 24 Jul 2024 19:04:06.png b/assets/Wednesday, 24 Jul 2024 19:04:06.png
new file mode 100644
index 0000000..b5bb551
Binary files /dev/null and b/assets/Wednesday, 24 Jul 2024 19:04:06.png differ
diff --git a/assets/audobookshelf.png b/assets/audobookshelf.png
new file mode 100644
index 0000000..c193884
Binary files /dev/null and b/assets/audobookshelf.png differ
diff --git a/assets/beelink-pros.png b/assets/beelink-pros.png
new file mode 100644
index 0000000..0ea1569
Binary files /dev/null and b/assets/beelink-pros.png differ
diff --git a/assets/beelink-s12-pro-nucs.png b/assets/beelink-s12-pro-nucs.png
new file mode 100644
index 0000000..fb7f7be
Binary files /dev/null and b/assets/beelink-s12-pro-nucs.png differ
diff --git a/assets/bookstack.png b/assets/bookstack.png
new file mode 100644
index 0000000..976a928
Binary files /dev/null and b/assets/bookstack.png differ
diff --git a/assets/freshrss.png b/assets/freshrss.png
new file mode 100644
index 0000000..723e023
Binary files /dev/null and b/assets/freshrss.png differ
diff --git a/assets/grafana.png b/assets/grafana.png
new file mode 100644
index 0000000..e0905e9
Binary files /dev/null and b/assets/grafana.png differ
diff --git a/assets/n100-beelinks.png b/assets/n100-beelinks.png
new file mode 100644
index 0000000..c3ae781
Binary files /dev/null and b/assets/n100-beelinks.png differ
diff --git a/assets/pihole.png b/assets/pihole.png
new file mode 100644
index 0000000..d8bd859
Binary files /dev/null and b/assets/pihole.png differ
diff --git a/docker/audiobookshelf/docker-compose.yml b/docker/audiobookshelf/docker-compose.yml
new file mode 100644
index 0000000..72920b2
--- /dev/null
+++ b/docker/audiobookshelf/docker-compose.yml
@@ -0,0 +1,14 @@
+
+---
+services:
+ audiobookshelf:
+ image: ghcr.io/advplyr/audiobookshelf:latest
+ ports:
+ - 13378:80
+ volumes:
+ - /audiobooks:/audiobooks
+ - /podcasts:/podcasts
+ - /config:/config
+ - /metadata>:/metadata
+ environment:
+ - TZ=America/New_York
diff --git a/proxmox/homepage/README.md b/docker/immich/README.md
similarity index 100%
rename from proxmox/homepage/README.md
rename to docker/immich/README.md
diff --git a/docker/immich/docker-compose.yml b/docker/immich/docker-compose.yml
new file mode 100644
index 0000000..0362d5b
--- /dev/null
+++ b/docker/immich/docker-compose.yml
@@ -0,0 +1,68 @@
+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
+ ports:
+ - 2283:3001
+ depends_on:
+ - redis
+ - database
+ restart: always
+
+ immich-microservices:
+ container_name: immich_microservices
+ image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
+ # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/hardware-transcoding
+ # file: hwaccel.transcoding.yml
+ # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
+ command: ['start.sh', 'microservices']
+ volumes:
+ - ${UPLOAD_LOCATION}:/usr/src/app/upload
+ - /etc/localtime:/etc/localtime:ro
+ env_file:
+ - .env
+ depends_on:
+ - redis
+ - database
+ restart: always
+
+ immich-machine-learning:
+ container_name: immich_machine_learning
+ # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
+ # Example tag: ${IMMICH_VERSION:-release}-cuda
+ image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
+ # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
+ # file: hwaccel.ml.yml
+ # service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
+ volumes:
+ - model-cache:/cache
+ env_file:
+ - .env
+ restart: always
+
+ redis:
+ container_name: immich_redis
+ image: registry.hub.docker.com/library/redis:6.2-alpine@sha256:84882e87b54734154586e5f8abd4dce69fe7311315e2fc6d67c29614c8de2672
+ restart: always
+
+ database:
+ container_name: immich_postgres
+ image: registry.hub.docker.com/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
+ environment:
+ POSTGRES_PASSWORD: ${DB_PASSWORD}
+ POSTGRES_USER: ${DB_USERNAME}
+ POSTGRES_DB: ${DB_DATABASE_NAME}
+ volumes:
+ - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
+ restart: always
+
+volumes:
+ model-cache:
\ No newline at end of file
diff --git a/docker/piped/docker-compose.yml b/docker/piped/docker-compose.yml
new file mode 100644
index 0000000..d73f991
--- /dev/null
+++ b/docker/piped/docker-compose.yml
@@ -0,0 +1,71 @@
+---
+services:
+ piped-frontend:
+ image: 1337kavin/piped-frontend:latest
+ restart: unless-stopped
+ depends_on:
+ - piped
+ environment:
+ BACKEND_HOSTNAME: pipedapi.tifflabs.cfd
+ container_name: piped-frontend
+ piped-proxy:
+ image: 1337kavin/piped-proxy:latest
+ restart: unless-stopped
+ environment:
+ - UDS=1
+ volumes:
+ - piped-proxy:/app/socket
+ container_name: piped-proxy
+ piped:
+ image: 1337kavin/piped:latest
+ restart: unless-stopped
+ volumes:
+ - ./config/config.properties:/app/config.properties:ro
+ depends_on:
+ - postgres
+ container_name: piped-backend
+ nginx:
+ image: nginx:mainline-alpine
+ restart: unless-stopped
+ ports:
+ - "8080:80"
+ volumes:
+ - ./config/nginx.conf:/etc/nginx/nginx.conf:ro
+ - ./config/pipedapi.conf:/etc/nginx/conf.d/pipedapi.conf:ro
+ - ./config/pipedproxy.conf:/etc/nginx/conf.d/pipedproxy.conf:ro
+ - ./config/pipedfrontend.conf:/etc/nginx/conf.d/pipedfrontend.conf:ro
+ - ./config/ytproxy.conf:/etc/nginx/snippets/ytproxy.conf:ro
+ - piped-proxy:/var/run/ytproxy
+ container_name: nginx
+ depends_on:
+ - piped
+ - piped-proxy
+ - pipedfrontend
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.piped.rule=Host(`FRONTEND_HOSTNAME`, `BACKEND_HOSTNAME`, `PROXY_HOSTNAME`)"
+ - "traefik.http.routers.piped.entrypoints=websecure"
+ - "traefik.http.services.piped.loadbalancer.server.port=8080"
+ postgres:
+ image: postgres:15
+ restart: unless-stopped
+ volumes:
+ - ./data/db:/var/lib/postgresql/data
+ environment:
+ - POSTGRES_DB=piped
+ - POSTGRES_USER=piped
+ - POSTGRES_PASSWORD=changeme
+ container_name: postgres
+ watchtower:
+ image: containrrr/watchtower
+ restart: always
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - /etc/timezone:/etc/timezone:ro
+ environment:
+ - WATCHTOWER_CLEANUP=true
+ - WATCHTOWER_INCLUDE_RESTARTING=true
+ container_name: watchtower
+ command: piped-frontend piped-backend piped-proxy varnish nginx postgres watchtower
+volumes:
+ piped-proxy: null
\ No newline at end of file
diff --git a/proxmox/qbittorrent/README.md b/docker/portainer/README.md
similarity index 100%
rename from proxmox/qbittorrent/README.md
rename to docker/portainer/README.md
diff --git a/proxmox/ubuntu/docker/portainer/docker-compose.yml b/docker/portainer/docker-compose.yml
similarity index 100%
rename from proxmox/ubuntu/docker/portainer/docker-compose.yml
rename to docker/portainer/docker-compose.yml
diff --git a/proxmox/ubuntu/README.md b/docker/traefik/README.md
similarity index 100%
rename from proxmox/ubuntu/README.md
rename to docker/traefik/README.md
diff --git a/docker/traefik/docker-compose.yml b/docker/traefik/docker-compose.yml
new file mode 100644
index 0000000..4b24a5e
--- /dev/null
+++ b/docker/traefik/docker-compose.yml
@@ -0,0 +1,16 @@
+version: '3'
+
+services:
+ reverse-proxy:
+ # The official v3 Traefik docker image
+ image: traefik:v3.0
+ # Enables the web UI and tells Traefik to listen to docker
+ command: --api.insecure=true --providers.docker
+ ports:
+ # The HTTP port
+ - "80:80"
+ # The Web UI (enabled by --api.insecure=true)
+ - "8080:8080"
+ volumes:
+ # So that Traefik can listen to the Docker events
+ - /var/run/docker.sock:/var/run/docker.sock
\ No newline at end of file
diff --git a/proxmox/ubuntu/docker/portainer/README.md b/kubernetes/README.md
similarity index 100%
rename from proxmox/ubuntu/docker/portainer/README.md
rename to kubernetes/README.md
diff --git a/kubernetes/prometheus/README.md b/kubernetes/prometheus/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/pikapods/audiobookshelf/docker-compose.yaml b/pikapods/audiobookshelf/docker-compose.yaml
new file mode 100644
index 0000000..e84a662
--- /dev/null
+++ b/pikapods/audiobookshelf/docker-compose.yaml
@@ -0,0 +1,12 @@
+services:
+ audiobookshelf:
+ image: ghcr.io/advplyr/audiobookshelf:latest
+ ports:
+ - 13378:80
+ volumes:
+ - ./audiobooks:/audiobooks
+ - ./podcasts:/podcasts
+ - ./config:/config
+ - ./metadata:/metadata
+ environment:
+ - TZ=America/New_York
\ No newline at end of file
diff --git a/portainer/README.md b/portainer/README.md
index 67fdcfb..5c0c257 100644
--- a/portainer/README.md
+++ b/portainer/README.md
@@ -3,4 +3,8 @@
> [!NOTE]\
> This is a work in progress. I will be placing configs and yaml files and docker compose files, etc in here once I get a better feel for Portainer and how it works.
-
+
+> [!WARNING]\
+> **I AM NO LONGER USING PORTAINER**
+>
+> Portainer, while easy to use, is not a good option once you get your feet wet. Learn how to use Docker Compose and the command line. Trust me, it will be beneficial to you in the long run.
\ No newline at end of file
diff --git a/proxmox/actualbudget/README.md b/proxmox/actualbudget/README.md
new file mode 100644
index 0000000..d8d0c6c
--- /dev/null
+++ b/proxmox/actualbudget/README.md
@@ -0,0 +1,2 @@
+# ActualBudget lxc
+
diff --git a/proxmox/cloudflared/README.md b/proxmox/cloudflared/README.md
index e69de29..72b9cea 100644
--- a/proxmox/cloudflared/README.md
+++ b/proxmox/cloudflared/README.md
@@ -0,0 +1 @@
+# Cloudflared lxcs
\ No newline at end of file
diff --git a/proxmox/flaresolverr/README.md b/proxmox/flaresolverr/README.md
new file mode 100644
index 0000000..84f8403
--- /dev/null
+++ b/proxmox/flaresolverr/README.md
@@ -0,0 +1 @@
+# Flaresolverr lxc
\ No newline at end of file
diff --git a/proxmox/forgejo/README.md b/proxmox/forgejo/README.md
new file mode 100644
index 0000000..8c78f2c
--- /dev/null
+++ b/proxmox/forgejo/README.md
@@ -0,0 +1 @@
+# Forgejo lxc
\ No newline at end of file
diff --git a/proxmox/influxdb/README.md b/proxmox/influxdb/README.md
new file mode 100644
index 0000000..8df731c
--- /dev/null
+++ b/proxmox/influxdb/README.md
@@ -0,0 +1 @@
+# InfluxDB lxc
\ No newline at end of file
diff --git a/proxmox/pihole/README.md b/proxmox/pihole/README.md
new file mode 100644
index 0000000..44308e1
--- /dev/null
+++ b/proxmox/pihole/README.md
@@ -0,0 +1 @@
+# Pi-hole lxc
\ No newline at end of file
diff --git a/proxmox/prometheus/README.md b/proxmox/prometheus/README.md
new file mode 100644
index 0000000..fb4fd07
--- /dev/null
+++ b/proxmox/prometheus/README.md
@@ -0,0 +1 @@
+# Prometheus lxc
\ No newline at end of file
diff --git a/proxmox/umami/README.md b/proxmox/umami/README.md
new file mode 100644
index 0000000..0e2bc1a
--- /dev/null
+++ b/proxmox/umami/README.md
@@ -0,0 +1 @@
+# Umami lxc
\ No newline at end of file
diff --git a/proxmox/wastebin/README.md b/proxmox/wastebin/README.md
new file mode 100644
index 0000000..097566a
--- /dev/null
+++ b/proxmox/wastebin/README.md
@@ -0,0 +1 @@
+# Wastebin lxc
\ No newline at end of file
diff --git a/proxmox/whoogle/README.md b/proxmox/whoogle/README.md
new file mode 100644
index 0000000..a5bfbe3
--- /dev/null
+++ b/proxmox/whoogle/README.md
@@ -0,0 +1 @@
+# Whoogle lxc
diff --git a/proxmox/wikijs/README.md b/proxmox/wikijs/README.md
deleted file mode 100644
index 532e8fa..0000000
--- a/proxmox/wikijs/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Wiki.js Script
-
-> [!WARNING]\
-> Always make sure you vet the scripts you install from anywhere on the internet!
-
-You can install the script directly from this link:
-
-- [Proxmox VE Helper Scripts](https://tteck.github.io/Proxmox/)
\ No newline at end of file
diff --git a/proxmox/wikijs/wiki-js.sh b/proxmox/wikijs/wiki-js.sh
deleted file mode 100644
index 48a10ee..0000000
--- a/proxmox/wikijs/wiki-js.sh
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/env bash
-
-# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
-
-source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
-color
-verb_ip6
-catch_errors
-setting_up_container
-network_check
-update_os
-
-msg_info "Installing Dependencies"
-$STD apt-get install -y curl
-$STD apt-get install -y sudo
-$STD apt-get install -y mc
-$STD apt-get install -y git
-$STD apt-get install -y ca-certificates
-$STD apt-get install -y gnupg
-msg_ok "Installed Dependencies"
-
-msg_info "Setting up Node.js Repository"
-mkdir -p /etc/apt/keyrings
-curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
-echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
-msg_ok "Set up Node.js Repository"
-
-msg_info "Installing Node.js"
-$STD apt-get update
-$STD apt-get install -y nodejs
-msg_ok "Installed Node.js"
-
-msg_info "Installing Wiki.js"
-mkdir -p /opt/wikijs
-cd /opt/wikijs
-$STD wget https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz
-tar xzf wiki-js.tar.gz
-rm wiki-js.tar.gz
-
-cat </opt/wikijs/config.yml
-bindIP: 0.0.0.0
-port: 3000
-db:
- type: sqlite
- storage: /opt/wikijs/db.sqlite
-logLevel: info
-logFormat: default
-dataPath: /opt/wikijs/data
-bodyParserLimit: 5mb
-EOF
-$STD npm rebuild sqlite3
-msg_ok "Installed Wiki.js"
-
-msg_info "Creating Service"
-service_path="/etc/systemd/system/wikijs.service"
-
-echo "[Unit]
-Description=Wiki.js
-After=network.target
-
-[Service]
-Type=simple
-ExecStart=/usr/bin/node server
-Restart=always
-User=root
-Environment=NODE_ENV=production
-WorkingDirectory=/opt/wikijs
-
-[Install]
-WantedBy=multi-user.target" >$service_path
-$STD systemctl enable --now wikijs
-msg_ok "Created Service"
-
-motd_ssh
-customize
-
-msg_info "Cleaning up"
-$STD apt-get autoremove
-$STD apt-get autoclean
-msg_ok "Cleaned"
\ No newline at end of file
diff --git a/ubuntu/README.md b/ubuntu/README.md
new file mode 100644
index 0000000..eca6821
--- /dev/null
+++ b/ubuntu/README.md
@@ -0,0 +1,9 @@
+# Ubuntu VMs Inside of Proxmox
+
+These days, I have figured out that if I need privileged access to a container, an LXC is not the best choice. For instance, if I want to add storage to a container, it is almost impossible to do so with an LXC without making the container a privleged container which comes with security implications that I don't want to manage.
+
+So now I run mission-critical services in Ubuntu VMs on Proxmox. I do not use the tteck's scripts for this; I download an ISO file and upload it to storage on Proxmox and create the VM from scratch.
+
+## Difficult to manage publically shared services
+
+For services I want to share publicly that are a real pita to setup and run on my home server, I use [PikaPods](https://pikapods.com). Yes, it costs money, but I've been running Audiobookshelf for a month now on an initial $5 top up. It's a pittance for such a wonderful service, and each "Pod" has a different price for usage. They don't keep your data and the funds go directly to the open source developers apps you are using.
\ No newline at end of file
diff --git a/proxmox/ubuntu/docker/README.md b/ubuntu/docker/README.md
similarity index 100%
rename from proxmox/ubuntu/docker/README.md
rename to ubuntu/docker/README.md
diff --git a/ubuntu/docker/authentik/.env.example b/ubuntu/docker/authentik/.env.example
new file mode 100644
index 0000000..763c07e
--- /dev/null
+++ b/ubuntu/docker/authentik/.env.example
@@ -0,0 +1 @@
+# You environment variables go here
\ No newline at end of file
diff --git a/ubuntu/docker/authentik/docker-compose.yml b/ubuntu/docker/authentik/docker-compose.yml
new file mode 100644
index 0000000..572be32
--- /dev/null
+++ b/ubuntu/docker/authentik/docker-compose.yml
@@ -0,0 +1,86 @@
+---
+version: "3.4"
+
+services:
+ postgresql:
+ image: docker.io/library/postgres:12-alpine
+ restart: unless-stopped
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
+ start_period: 20s
+ interval: 30s
+ retries: 5
+ timeout: 5s
+ volumes:
+ - database:/var/lib/postgresql/data
+ environment:
+ POSTGRES_PASSWORD: ${PG_PASS:?database password required}
+ POSTGRES_USER: ${PG_USER:-authentik}
+ POSTGRES_DB: ${PG_DB:-authentik}
+ env_file:
+ - .env
+ redis:
+ image: docker.io/library/redis:alpine
+ command: --save 60 1 --loglevel warning
+ restart: unless-stopped
+ healthcheck:
+ test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
+ start_period: 20s
+ interval: 30s
+ retries: 5
+ timeout: 3s
+ volumes:
+ - redis:/data
+ server:
+ image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.2.2}
+ restart: unless-stopped
+ command: server
+ environment:
+ AUTHENTIK_REDIS__HOST: redis
+ AUTHENTIK_POSTGRESQL__HOST: postgresql
+ AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
+ AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
+ AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
+ volumes:
+ - ./media:/media
+ - ./custom-templates:/templates
+ env_file:
+ - .env
+ ports:
+ - "${COMPOSE_PORT_HTTP:-9000}:9000"
+ - "${COMPOSE_PORT_HTTPS:-9443}:9443"
+ depends_on:
+ - postgresql
+ - redis
+ worker:
+ image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.2.2}
+ restart: unless-stopped
+ command: worker
+ environment:
+ AUTHENTIK_REDIS__HOST: redis
+ AUTHENTIK_POSTGRESQL__HOST: postgresql
+ AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
+ AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
+ AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
+ # `user: root` and the docker socket volume are optional.
+ # See more for the docker socket integration here:
+ # https://goauthentik.io/docs/outposts/integrations/docker
+ # Removing `user: root` also prevents the worker from fixing the permissions
+ # on the mounted folders, so when removing this make sure the folders have the correct UID/GID
+ # (1000:1000 by default)
+ user: root
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - ./media:/media
+ - ./certs:/certs
+ - ./custom-templates:/templates
+ env_file:
+ - .env
+ depends_on:
+ - postgresql
+ - redis
+volumes:
+ database:
+ driver: local
+ redis:
+ driver: local
diff --git a/proxmox/ubuntu/docker/haproxy/Dockerfile b/ubuntu/docker/haproxy/Dockerfile
similarity index 100%
rename from proxmox/ubuntu/docker/haproxy/Dockerfile
rename to ubuntu/docker/haproxy/Dockerfile
diff --git a/proxmox/ubuntu/docker/haproxy/README.md b/ubuntu/docker/haproxy/README.md
similarity index 100%
rename from proxmox/ubuntu/docker/haproxy/README.md
rename to ubuntu/docker/haproxy/README.md
diff --git a/ubuntu/docker/homepage/README.md b/ubuntu/docker/homepage/README.md
new file mode 100644
index 0000000..88191c0
--- /dev/null
+++ b/ubuntu/docker/homepage/README.md
@@ -0,0 +1 @@
+# Homepage
\ No newline at end of file
diff --git a/ubuntu/docker/homepage/config/bookmarks.yaml b/ubuntu/docker/homepage/config/bookmarks.yaml
new file mode 100644
index 0000000..bc68588
--- /dev/null
+++ b/ubuntu/docker/homepage/config/bookmarks.yaml
@@ -0,0 +1,92 @@
+---
+- Repositories:
+ - Homelab:
+ - icon: si-github-#FFFFFF
+ href: https://github.com/twhite96/homelab-config
+ description: Homelab config
+ - Homelab Docs:
+ - icon: si-github-#FFFFFF
+ href: https://github.com/twhite96/tifflabs
+ description: Homelab repo
+
+- Selfhosted Projects:
+ - tiff labs:
+ - icon: /icons/tifflabsgit.png
+ href: https://tifflabs-software.org
+ description: Labs software hosting
+ - cyber:
+ - icon: /icons/htbavatar.png
+ href: https://projects.0x8c.run
+ description: '0x8c project hosting'
+
+- Cloud Platforms:
+ - Linode:
+ - icon: /icons/linode.png
+ href: https://cloud.linode.com/linodes
+ description: Linode
+ - Hetzner:
+ - icon: si-hetzner-#D50C2D
+ href: https://accounts.hetzner.com/login
+ description: Hetzner
+
+- Hosting Platforms:
+ - Vercel:
+ - icon: si-vercel-#000000
+ href: https://vercel.com/dashboard
+ description: Vercel
+ - Cloudron:
+ - icon: si-cloudron-#03A9F4
+ href: https://console.cloudron.io/
+ description: Cloudron
+
+- Documentation:
+ - Docs site:
+ - icon: si-materialformkdocs-#ff0000
+ href: https://docs.tifflabs.org
+ description: Smart home docs
+ - labs.network:
+ - icon: si-bookstack-#B91C1C
+ href: https://presto-horn.tifflabs.org
+ description: Network wiki
+
+- Public Projects:
+ - Homelab Config:
+ - icon: /icons/tifflabs.svg
+ href: https://homelab.tiff.tools
+ description: Homelab Config
+ - Forgejo Homelab Projects:
+ - icon: si-forgejo-#FB923C
+ href: https://tifflabs-software.org/explore
+ description: Public personal projects
+
+- Cyber Learning:
+ - Hack The Box:
+ - icon: si-hackthebox-#9FEF00
+ href: https://academy.hackthebox.com
+ description: HTB Academy
+ - TryHackMe:
+ - icon: si-tryhackme-#88CC15
+ href: https://tryhackme.com/
+ description: TryHackMe
+
+- Productivity:
+ - Email:
+ - icon: si-protonmail-#6D4AFF
+ href: https://mail.proton.me/
+ description: Email
+ - Calendar:
+ - icon: si-protoncalendar-#50B0E9
+ href: https://calendar.proton.me
+ description: Calendar
+
+- Public Notes and Writeups:
+ - Notes:
+ - icon: si-obsidian-#7C3AED
+ href: https://notes.0x8c.org
+ description: Public Notes
+ - Wiki:
+ icon: si-gitbook-#BBDDE5
+ href: https://app.gitbook.com/?source=pwa
+ description: Write-ups
+
+
diff --git a/ubuntu/docker/homepage/config/custom.css b/ubuntu/docker/homepage/config/custom.css
new file mode 100644
index 0000000..e69de29
diff --git a/ubuntu/docker/homepage/config/custom.js b/ubuntu/docker/homepage/config/custom.js
new file mode 100644
index 0000000..e69de29
diff --git a/ubuntu/docker/homepage/config/docker.yaml b/ubuntu/docker/homepage/config/docker.yaml
new file mode 100644
index 0000000..e69de29
diff --git a/ubuntu/docker/homepage/config/kubernetes.yaml b/ubuntu/docker/homepage/config/kubernetes.yaml
new file mode 100644
index 0000000..e69de29
diff --git a/ubuntu/docker/homepage/config/services.yaml b/ubuntu/docker/homepage/config/services.yaml
new file mode 100644
index 0000000..c3ccff1
--- /dev/null
+++ b/ubuntu/docker/homepage/config/services.yaml
@@ -0,0 +1,107 @@
+---
+- Infrastructure and Data:
+ - Proxmox:
+ href: {{proxmox-url}}
+ icon: proxmox.svg
+ description: prx-prod-2
+ siteMonitor: {{proxmox-url}}
+ widget:
+ type: proxmox
+ url: {{proxmox-url}}
+ username: {{HOMEPAGE_VAR_PROXMOX_USERNAME}}
+ password: {{HOMEPAGE_VAR_PROXMOX_PASSWORD}}
+
+ - Authentik:
+ icon: authentik.png
+ showStats: true
+ href: {{url}}
+ widget:
+ type: authentik
+ fields: ["users"]
+ url: {{url}}
+ key: {{HOMEPAGE_VAR_AUTHENTIK_KEY}}
+
+- Monitoring:
+ - UptimeKuma:
+ icon: uptime-kuma.svg
+ href: https://uptime.tifflabs.org
+ widget:
+ description: uptime on pve main
+ fields: ["up", "down", "uptime", "incident"]
+ icon: uptime-kuma.svg
+ type: uptimekuma
+ url: {{url}}
+ slug: lab
+ - Pi-hole:
+ icon: pi-hole.svg
+ siteMonitor: {{url}}
+ widget:
+ type: pihole
+ fields: ["queries", "blocked", "blocked_percent", "gravity"]
+ url: {{url}} # required if running v6 or higher, defaults to 5
+ key: {{HOMEPAGE_VAR_PIHOLE_TOKEN}}
+ - Grafana:
+ icon: grafana.svg
+ siteMonitor: {{url}}
+ widget:
+ type: grafana
+ fields: ["dashboards", "datasources", "totalalerts", "alertstriggered"]
+ url: {{url}}
+ username: tifflabs
+ password: {{HOMEPAGE_VAR_GRAFANA_PASSWORD}}
+ - Tailscale:
+ icon: tailscale.svg
+ showStats: true
+ widget:
+ type: tailscale
+ fields: ["address", "last_seen", "expires"]
+ deviceid: {{device-id}}
+ key: {{key}}
+
+- Media:
+ - Jellyfin:
+ icon: jellyfin.svg
+ description: tailnet jellyfin
+ widget:
+ type: jellyfin
+ url: {{url}}
+ fields: ["movies", "series", "episodes", "songs"]
+ key: {{HOMEPAGE_VAR_JELLYFIN_KEY}}
+ enableBlocks: true # optional, defaults to false
+ enableNowPlaying: true # optional, defaults to true
+ enableUser: true # optional, defaults to false
+ showEpisodeNumber: true # optional, defaults to false
+ expandOneStreamToTwoRows: false # optional, defaults to true
+ - Calibre:
+ icon: calibre.svg
+ siteMonitor: https://books.tiffs.app
+ href: 'https://books.tiffs.app'
+ widget:
+ type: calibreweb
+ url: https://books.tiffs.app
+ fields: ["books", "authors", "categories", "series"]
+ username: {{username}}
+ password: {{password}}
+ - FreshRSS:
+ icon: freshrss.svg
+ description: RSS Feed
+ href: https://rss.tifflabs.dev
+ showStats: true
+ widget:
+ type: freshrss
+ url: https://rss.tifflabs.dev
+ fields: ["subscriptions", "unread"]
+ username: {{username}}
+ password: {{password}}
+
+ - Audiobookshelf:
+ icon: audiobookshelf.svg
+ siteMonitor: https://audiobooks.tiffs.app
+ href: https://audiobooks.tiffs.app
+ description: Audiobook Library
+ showStats: true
+ widget:
+ type: audiobookshelf
+ fields: ["podcasts", "podcastsDuration", "books", "booksDuration"]
+ url: https://audiobooks.tiffs.app
+ key: {{HOMEPAGE_VAR_AUDIOBOOKSHELF_KEY}}
diff --git a/ubuntu/docker/homepage/config/settings.yaml b/ubuntu/docker/homepage/config/settings.yaml
new file mode 100644
index 0000000..90a107d
--- /dev/null
+++ b/ubuntu/docker/homepage/config/settings.yaml
@@ -0,0 +1,74 @@
+---
+title: Dash
+headerStyle: clean
+
+background:
+ blur: xl
+ brightness: 90
+ opacity: 60
+
+cardBlur: sm
+
+useEqualHeights: true
+
+providers:
+
+
+quicklaunch:
+ searchDescriptions: true
+ hideInternetSearch: true
+ showSearchSuggestions: true
+ hideVisitURL: true
+
+layout:
+ - Services:
+ Infrastructure and Data:
+ icon: proxmox.svg
+ style: row
+ columns: 2
+ Monitoring:
+ icon: grafana.svg
+ style: row
+ columns: 4
+ Media:
+ icon: jellyfin.svg
+ style: row
+ columns: 4
+
+ - Bookmarks:
+ Repositories:
+ icon: github.svg
+ style: row
+ columns: 2
+ Selfhosted Projects:
+ icon: codeberg.svg
+ style: row
+ columns: 2
+ Cloud Platforms:
+ icon: hetzner.svg
+ style: row
+ columns: 2
+ Hosting Platforms:
+ icon: cloudron.svg
+ style: row
+ columns: 2
+ Documentation:
+ icon: bookstack.svg
+ style: row
+ columns: 2
+ Public Projects:
+ icon: forgejo.svg
+ style: row
+ columns: 2
+ Cyber Learning:
+ icon: hackthebox.svg
+ style: row
+ columns: 2
+ Productivity:
+ icon: protonmail.svg
+ style: row
+ columns: 2
+ Public Notes and Writeups:
+ icon: obsidian.svg
+ style: row
+ columns: 2
\ No newline at end of file
diff --git a/ubuntu/docker/homepage/config/widgets.yaml b/ubuntu/docker/homepage/config/widgets.yaml
new file mode 100644
index 0000000..a98fa4f
--- /dev/null
+++ b/ubuntu/docker/homepage/config/widgets.yaml
@@ -0,0 +1,26 @@
+---
+- resources:
+ cpu: true
+ memory: true
+ disk: /
+
+- search:
+ provider: custom
+ url: # whoogle # google, duckduckgo, bing, baidu, brave or custom
+ focus: true
+ target: _blank # One of _self, _blank, _parent or _top
+
+- openweathermap:
+ latitude: {{long}}
+ longitude: {{lat}}
+ units: imperial # or imperial
+ provider: openweathermap
+ cache: 5 # Time in minutes to cache API responses, to stay within limits
+ format: # optional, Intl.NumberFormat options
+ maximumFractionDigits: 0
+
+- datetime:
+ text_size: m
+ format:
+ timeStyle: short
+ hourCycle: h12
\ No newline at end of file
diff --git a/ubuntu/docker/homepage/docker-compose.yaml b/ubuntu/docker/homepage/docker-compose.yaml
new file mode 100644
index 0000000..158f008
--- /dev/null
+++ b/ubuntu/docker/homepage/docker-compose.yaml
@@ -0,0 +1,14 @@
+---
+services:
+ homepage:
+ image: ghcr.io/gethomepage/homepage:latest
+ container_name: homepage-prod-1
+ ports:
+ - 3000:3000
+ env_file:
+ - ".env.example"
+ volumes:
+ - ./config:/app/config # Make sure your local config directory exists
+ - ./images:/app/public/images
+ - ./icons:/app/public/icons
+ restart: unless-stopped
\ No newline at end of file
diff --git a/proxmox/homepage/homepage.sh b/ubuntu/docker/homepage/homepage.sh
similarity index 100%
rename from proxmox/homepage/homepage.sh
rename to ubuntu/docker/homepage/homepage.sh
diff --git a/ubuntu/docker/photoprism/docker-compose.yml b/ubuntu/docker/photoprism/docker-compose.yml
new file mode 100644
index 0000000..b591d24
--- /dev/null
+++ b/ubuntu/docker/photoprism/docker-compose.yml
@@ -0,0 +1,166 @@
+# 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:
+ # traefik:
+ # image: traefik:v2.11
+ # restart: unless-stopped
+ # ports:
+ # - "80:80"
+ # - "443:443"
+ # volumes:
+ # - "./traefik.yaml:/etc/traefik/traefik.yaml"
+ # - "./traefik/data:/data"
+ # - "/var/run/docker.sock:/var/run/docker.sock"
+ 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
+ ## Server port mapping in the format "Host:Container". To use a different port, change the host port on
+ ## the left-hand side and keep the container port, e.g. "80:2342" (for HTTP) or "443:2342 (for HTTPS):
+ ports:
+ - "2342:2342"
+ # labels:
+ # - "traefik.http.routers.photoprism.rule=Host(`photos.tiff.ws`)"
+ # - "traefik.http.routers.photoprism.tls=true"
+ # - "traefik.http.routers.photoprism.tls.certresolver=myresolver"
+ ## Before you start the service, please check the following config options (and change them as needed):
+ ## https://docs.photoprism.app/getting-started/config-options/
+ environment:
+ PHOTOPRISM_ADMIN_USER: "admin" # admin login username
+ PHOTOPRISM_ADMIN_PASSWORD: # initial admin password (8-72 characters)
+ PHOTOPRISM_AUTH_MODE: "password" # authentication mode (public, password)
+ PHOTOPRISM_SITE_URL: # 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_SIDECAR_YAML: "true" # creates YAML sidecar files to back up picture metadata
+ PHOTOPRISM_BACKUP_ALBUMS: "true" # creates YAML files to back up album metadata
+ PHOTOPRISM_BACKUP_DATABASE: "true" # creates regular backups based on the configured schedule
+ PHOTOPRISM_BACKUP_SCHEDULE: "daily" # backup SCHEDULE in cron format (e.g. "0 12 * * *" for daily at noon) or at a random time (daily, weekly)
+ PHOTOPRISM_INDEX_SCHEDULE: "" # indexing SCHEDULE in cron format (e.g. "@every 3h" for every 3 hours; "" to disable)
+ PHOTOPRISM_AUTO_INDEX: 300 # delay before automatically indexing files in SECONDS when uploading via WebDAV (-1 to disable)
+ PHOTOPRISM_AUTO_IMPORT: -1 # delay before automatically importing files in SECONDS when uploading via WebDAV (-1 to disable)
+ 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 does not require a separate database server
+ PHOTOPRISM_DATABASE_DRIVER: "mysql" # MariaDB 10.5.12+ (MySQL successor) offers significantly better performance compared to SQLite
+ PHOTOPRISM_DATABASE_SERVER: "mariadb:3306" # MariaDB database server (hostname:port)
+ PHOTOPRISM_DATABASE_NAME: "photoprism" # MariaDB database schema name
+ PHOTOPRISM_DATABASE_USER: "photoprism" # MariaDB database user name
+ PHOTOPRISM_DATABASE_PASSWORD: # MariaDB database user password
+ PHOTOPRISM_SITE_CAPTION: #your caption goes here
+ 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 ffmpeg 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
+ - "./photos:/photoprism/originals" # Original media files (DO NOT REMOVE)
+ # - "/example/family:/photoprism/originals/family" # *Additional* media folders can be mounted like this
+ - "./storage.usb:/photoprism/import" # *Optional* base folder from which files can be imported to originals
+ - "./storage:/photoprism/storage" # *Writable* storage folder for cache, database, and sidecar files (DO NOT REMOVE)
+
+ ## MariaDB Database Server (recommended)
+ ## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql
+ mariadb:
+ image: mariadb: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: --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:
+ - "./database:/var/lib/mysql" # DO NOT REMOVE
+ environment:
+ MARIADB_AUTO_UPGRADE: "1"
+ MARIADB_INITDB_SKIP_TZINFO: "1"
+ MARIADB_DATABASE: "photoprism"
+ MARIADB_USER: "photoprism"
+ MARIADB_PASSWORD: "x!rPM.jTjcKLPuhLHdGs78A9W"
+ MARIADB_ROOT_PASSWORD: "WkDdnDehFdALm*N@EUqE6e7MC"
+
+ ## Watchtower upgrades services automatically (optional)
+ ## see https://docs.photoprism.app/getting-started/updates/#watchtower
+ ## activate via "COMPOSE_PROFILES=update docker compose up -d"
+ watchtower:
+ restart: unless-stopped
+ image: containrrr/watchtower
+ profiles: ["update"]
+ environment:
+ WATCHTOWER_CLEANUP: "true"
+ WATCHTOWER_POLL_INTERVAL: 7200 # checks for updates every two hours
+ volumes:
+ - "/var/run/docker.sock:/var/run/docker.sock"
+ - "~/.docker/config.json:/config.json" # optional, for authentication if you have a Docker Hub account
diff --git a/ubuntu/docker/qbittorrent/README.md b/ubuntu/docker/qbittorrent/README.md
new file mode 100644
index 0000000..5e6ad6c
--- /dev/null
+++ b/ubuntu/docker/qbittorrent/README.md
@@ -0,0 +1,10 @@
+# qBittorent Web Ui Install
+
+> [!NOTE]\
+> This gist is taken from an article on Linux Babe which is linked in the Gist. If curious now, you can find the article here: [Linux Babe How to Install qBIttorent Web UI on Ubuntu 18.04 Desktip or Server](https://www.linuxbabe.com/ubuntu/install-qbittorrent-ubuntu-18-04-desktop-server)
+>
+>
+
+
+
+
diff --git a/proxmox/qbittorrent/qbittorrent.sh b/ubuntu/docker/qbittorrent/qbittorrent.sh
similarity index 100%
rename from proxmox/qbittorrent/qbittorrent.sh
rename to ubuntu/docker/qbittorrent/qbittorrent.sh
diff --git a/ubuntu/servarr/README.md b/ubuntu/servarr/README.md
new file mode 100644
index 0000000..cbd0ff7
--- /dev/null
+++ b/ubuntu/servarr/README.md
@@ -0,0 +1,3 @@
+# *arr Apps
+
+The apps you use when you want to keep track of the ISO files you get.
\ No newline at end of file
diff --git a/proxmox/ubuntu/ubuntu.sh b/ubuntu/ubuntu.sh
similarity index 100%
rename from proxmox/ubuntu/ubuntu.sh
rename to ubuntu/ubuntu.sh
diff --git a/vps/README.md b/vps/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/vps/server-1/README.md b/vps/server-1/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/vps/server-1/coolify/README.md b/vps/server-1/coolify/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/vps/server-2/README.md b/vps/server-2/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/vps/server-2/docker/README.md b/vps/server-2/docker/README.md
new file mode 100644
index 0000000..e69de29