diff --git a/README.md b/README.md index 7583add..5763e82 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,12 @@

+

+ GitHub Release + Mastodon Follow + GitHub Sponsors + Gitea Issues +

@@ -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