diff --git a/beszel-agent/docker-compose.yaml b/beszel-agent/docker-compose.yaml new file mode 100644 index 0000000..e2dc65e --- /dev/null +++ b/beszel-agent/docker-compose.yaml @@ -0,0 +1,21 @@ +services: + beszel-agent: + image: henrygd/beszel-agent:latest + container_name: beszel-agent + restart: unless-stopped + network_mode: host + volumes: + - beszel_agent_data:/var/lib/beszel-agent + - beszel_socket:/beszel_socket + - /var/run/docker.sock:/var/run/docker.sock:ro + environment: + LISTEN: /beszel_socket/beszel.sock + HUB_URL: http://192.168.12.151:8091 + TOKEN: EvrIZdupNHXJyEFdMpAa + KEY: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHK3ckn/gTe88kj1KLkRyYr4rX765k0d8nFDrVvJnXUF" + +volumes: + beszel_agent_data: + beszel_socket: + external: True + name: beszel_beszel_socket diff --git a/beszel/docker-compose.yaml b/beszel/docker-compose.yaml new file mode 100644 index 0000000..76d54e9 --- /dev/null +++ b/beszel/docker-compose.yaml @@ -0,0 +1,14 @@ +services: + beszel: + image: henrygd/beszel:latest + container_name: beszel + restart: unless-stopped + ports: + - 8091:8090 + volumes: + - beszel_data:/beszel_data + - beszel_socket:/beszel_socket + +volumes: + beszel_data: + beszel_socket: diff --git a/calibre/docker-compose.yaml b/calibre/docker-compose.yaml new file mode 100644 index 0000000..e8fba90 --- /dev/null +++ b/calibre/docker-compose.yaml @@ -0,0 +1,20 @@ +services: + calibre-web: + image: lscr.io/linuxserver/calibre-web:latest + container_name: calibre-web + environment: + - PUID=1000 + - PGID=1000 + - TZ=Etc/UTC + - OAUTHLIB_RELAX_TOKEN_SCOPE=1 #optional + volumes: + - calibre_web_config:/config + - ebooks_library:/books + ports: + - 8083:8083 + restart: unless-stopped + +volumes: + calibre_web_config: + ebooks_library: + external: True diff --git a/dashy/config.yml b/dashy/config.yml new file mode 100644 index 0000000..4635559 --- /dev/null +++ b/dashy/config.yml @@ -0,0 +1,294 @@ +pageInfo: + title: TheoCloud Services + description: Embrace privacy & live like a duck! + navLinks: + - title: Personal Github + path: https://github.com/ + target: newtab + - title: Dashy Documentation + path: https://dashy.to/docs + target: newtab + footerText: Ducks also live a dangerous life! +appConfig: + theme: dashy-docs + layout: auto + iconSize: large + startingView: default + defaultOpeningMethod: newtab + statusCheck: false + statusCheckInterval: 0 + faviconApi: duckduckgo + routingMode: history + enableMultiTasking: false + widgetsAlwaysUseProxy: false + webSearch: + disableWebSearch: false + searchEngine: duckduckgo + openingMethod: newtab + searchBangs: {} + enableFontAwesome: true + enableMaterialDesignIcons: false + hideComponents: + hideHeading: false + hideNav: false + hideSearch: false + hideSettings: false + hideFooter: false + auth: + enableGuestAccess: false + users: + - user: theo + hash: 0475924e1769394a501610b4070face6ad35f760c53f093569825054693adf05 + type: admin + enableOidc: false + oidc: + adminRole: 'false' + adminGroup: 'false' + enableHeaderAuth: false + headerAuth: + userHeader: REMOTE_USER + proxyWhitelist: [] + enableKeycloak: false + showSplashScreen: true + preventWriteToDisk: false + preventLocalSave: false + disableConfiguration: false + disableConfigurationForNonAdmin: false + allowConfigEdit: true + enableServiceWorker: false + disableContextMenu: false + disableUpdateChecks: false + disableSmartSort: false + enableErrorReporting: false +sections: + - name: Server Management + icon: si-docker + items: + - title: Portainer + description: Docker Management Tool for Containerization and Deployment + icon: >- + https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,c_fill,w_100/https%3A%2F%2Fapi.charmhub.io%2Fapi%2Fv1%2Fmedia%2Fdownload%2Fcharm_cMu7M9K6a65FsKZvrLZOZwyQradwbs7E_icon_5cef79c2d18f67464f39c8f2cf2d7ebb815b0071f04d3ffbb94f49fddd3ab666.png + url: https://192.168.12.151:9443 + target: newtab + id: 0_1684_portainer + - title: BESZEL Monitoring + description: System Usage Monitor + icon: >- + https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/beszel-light.svg + url: https://monitoring.theocloud.dev/ + target: newtab + id: 1_1684_beszelmonitoring + - title: Cloudflare Tunnel DNS + description: DNS Management for Domain + icon: >- + https://img.icons8.com/external-tal-revivo-color-tal-revivo/96/external-cloudflare-provides-content-delivery-network-services-ddos-mitigation-logo-color-tal-revivo.png + url: >- + https://one.dash.cloudflare.com/c2b08d3c0457044067683295a304bd0c/networks/tunnels/cfd_tunnel/ab494eb6-8d03-4fb2-b127-9b48bfe95487/edit?tab=publicHostname + target: newtab + id: 2_1684_cloudflaretunneldns + - title: Uptime Kuma + description: Uptime Monitoring of services + icon: >- + https://raw.githubusercontent.com/louislam/uptime-kuma/refs/heads/master/public/icon.svg + url: https://uptime.theocloud.dev/dashboard + target: newtab + id: 3_1684_uptimekuma + - title: Adguard DNS + description: DNS Server with Adblock + icon: >- + https://user-images.githubusercontent.com/4099637/55673103-35487300-5871-11e9-837d-8e8b1e785bed.png + url: http://192.168.12.151/ + target: newtab + id: 4_1684_adguarddns + - title: Git + description: Private Forgejo Git instance + icon: >- + https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/forgejo.svg + url: https://git.theocloud.dev/ + target: newtab + id: 5_1684_git + - title: Duplicati + description: Backup Management + icon: >- + https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/duplicati.svg + url: https://duplicati.theocloud.dev/ + target: newtab + id: 6_1684_duplicati + displayData: + sortBy: default + rows: 2 + cols: 1 + collapsed: false + hideForGuests: false + - name: File Storage & Management + icon: si-thunderstore + displayData: + sortBy: default + rows: 1 + cols: 1 + collapsed: false + hideForGuests: false + items: + - title: Filebrowser + description: File Management Server + icon: https://filebrowser.org/static/logo.png + url: https://drive.theocloud.dev/ + target: newtab + id: 0_2264_filebrowser + - title: Immich + description: Backup your photos and videos! + icon: >- + data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2028.3.0,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Flower'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20792%20792'%20style='enable-background:new%200%200%20792%20792;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill:%23FA2921;}%20.st1{fill:%23ED79B5;}%20.st2{fill:%23FFB400;}%20.st3{fill:%231E83F7;}%20.st4{fill:%2318C249;}%20%3c/style%3e%3cg%20id='Flower_00000077325900055813483940000000694823054982625702_'%3e%3cpath%20class='st0'%20d='M375.48,267.63c38.64,34.21,69.78,70.87,89.82,105.42c34.42-61.56,57.42-134.71,57.71-181.3%20c0-0.33,0-0.63,0-0.91c0-68.94-68.77-95.77-128.01-95.77s-128.01,26.83-128.01,95.77c0,0.94,0,2.2,0,3.72%20C300.01,209.24,339.15,235.47,375.48,267.63z'/%3e%3cpath%20class='st1'%20d='M164.7,455.63c24.15-26.87,61.2-55.99,103.01-80.61c44.48-26.18,88.97-44.47,128.02-52.84%20c-47.91-51.76-110.37-96.24-154.6-110.91c-0.31-0.1-0.6-0.19-0.86-0.28c-65.57-21.3-112.34,35.81-130.64,92.15%20c-18.3,56.34-14.04,130.04,51.53,151.34C162.05,454.77,163.25,455.16,164.7,455.63z'/%3e%3cpath%20class='st2'%20d='M681.07,302.19c-18.3-56.34-65.07-113.45-130.64-92.15c-0.9,0.29-2.1,0.68-3.54,1.15%20c-3.75,35.93-16.6,81.27-35.96,125.76c-20.59,47.32-45.84,88.27-72.51,118c69.18,13.72,145.86,12.98,190.26-1.14%20c0.31-0.1,0.6-0.2,0.86-0.28C695.11,432.22,699.37,358.52,681.07,302.19z'/%3e%3cpath%20class='st3'%20d='M336.54,510.71c-11.15-50.39-14.8-98.36-10.7-138.08c-64.03,29.57-125.63,75.23-153.26,112.76%20c-0.19,0.26-0.37,0.51-0.53,0.73c-40.52,55.78-0.66,117.91,47.27,152.72c47.92,34.82,119.33,53.54,159.86-2.24%20c0.56-0.76,1.3-1.78,2.19-3.01C363.28,602.32,347.02,558.08,336.54,510.71z'/%3e%3cpath%20class='st4'%20d='M617.57,482.52c-35.33,7.54-82.42,9.33-130.72,4.66c-51.37-4.96-98.11-16.32-134.63-32.5%20c8.33,70.03,32.73,142.73,59.88,180.6c0.19,0.26,0.37,0.51,0.53,0.73c40.52,55.78,111.93,37.06,159.86,2.24%20c47.92-34.82,87.79-96.95,47.27-152.72C619.2,484.77,618.46,483.75,617.57,482.52z'/%3e%3c/g%3e%3c/svg%3e + url: https://immich.theocloud.dev/ + target: newtab + id: 1_2264_immich + - title: StirlingPDF + description: Private PDF tools + icon: >- + https://raw.githubusercontent.com/Stirling-Tools/Stirling-PDF/main/docs/stirling.png + url: https://pdf.theocloud.dev/?lang=en_US + target: newtab + id: 2_2264_stirlingpdf + - title: PrivateBin + description: Pastebin tool + icon: https://avatars.githubusercontent.com/u/20367028?s=200&v=4 + url: https://privatebin.theocloud.dev/ + target: newtab + id: 3_2264_privatebin + - name: Media Automation + icon: si-jellyfin + displayData: + sortBy: last-used + rows: 1 + cols: 1 + collapsed: false + hideForGuests: false + items: + - title: Jellyseerr + description: Media Requests + icon: >- + https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/jellyseerr.svg + url: https://jellyseerr.theocloud.dev/ + target: newtab + id: 0_1569_jellyseerr + - title: Jellyfin + description: Media Library + icon: >- + https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/jellyfin.svg + url: https://jellyfin.theocloud.dev/ + target: newtab + id: 1_1569_jellyfin + - title: Sonarr + description: TV Show Management + icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/sonarr.svg + url: http://192.168.12.151:8989/ + target: newtab + id: 2_1569_sonarr + - title: Radarr + description: Movie Management + icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/radarr.svg + url: http://192.168.12.151:7878/ + target: newtab + id: 3_1569_radarr + - title: Prowlarr + description: Indexer Management + icon: >- + https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/prowlarr.svg + url: http://192.168.12.151:9696/ + target: newtab + id: 4_1569_prowlarr + - title: Bazarr + description: Subtitle Management + icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/bazarr.svg + url: http://192.168.12.151:6767/ + target: newtab + id: 5_1569_bazarr + - title: NZBGet + description: Usenet Download Client + icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nzbget.svg + url: http://192.168.12.151:6789/ + target: newtab + id: 6_1569_nzbget + - title: qBittorrent + description: Torrent Download Client + icon: >- + https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/qbittorrent.svg + url: http://192.168.12.151:8181/ + target: newtab + id: 7_1569_qbittorrent + - title: SceneNZB + description: Usenet Indexer + icon: >- + https://img.house-of-usenet.com/fd4bd542330506d41778e81860f29435c7f8795a7bbefbd9d297b7d79d5a067b.webp + url: https://scenenzbs.com/ + target: newtab + id: 8_1569_scenenzb + - name: Useful Tools + icon: si-framework + displayData: + sortBy: default + rows: 1 + cols: 1 + collapsed: false + hideForGuests: false + items: + - title: Overleaf + description: Latex Editor + icon: >- + https://images.ctfassets.net/nrgyaltdicpt/3nesOc6iRhdzatUCC5OKWo/ea0fc03647a5f6a903a9aacc357481b2/overleaf-o-logo-primary.jpg + url: https://overleaf.theocloud.dev/ + target: newtab + id: 0_1189_overleaf + - title: OpenChat + description: Ollama Chat UI + icon: >- + https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/open-webui-light.svg + url: https://chat.theocloud.dev/ + target: newtab + id: 1_1189_openchat + - title: Mealie + description: Cooking recipes management + icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mealie.svg + url: https://mealie.theocloud.dev/ + target: newtab + id: 2_1189_mealie + - title: n8n + description: Workflow Management for Automation + icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/n8n.svg + url: https://n8n.theocloud.dev/ + target: newtab + id: 3_1189_nn + - title: Glance + description: Dashboard for News and Media + icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glance.svg + url: https://home.theocloud.dev/ + target: newtab + id: 4_1189_glance + - title: Toolbox + description: Tool collection + icon: >- + https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/tooljet-dark.svg + url: https://toolbox.theocloud.dev/ + target: newtab + id: 5_1189_toolbox + - name: Online Media + icon: si-pcgamingwiki + displayData: + sortBy: default + rows: 1 + cols: 1 + collapsed: false + hideForGuests: false + items: + - title: Kavita + description: Read ebooks online + icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/kavita.svg + url: https://read.theocloud.dev + target: newtab + id: 0_1125_kavita + - title: Retro Emulator + description: Retro Games Emulator with games! + icon: https://icon-library.com/images/arcade-icon/arcade-icon-2.jpg + url: https://retro.theocloud.dev/ + target: newtab + id: 1_1125_retroemulator diff --git a/dashy/docker-compose.yaml b/dashy/docker-compose.yaml new file mode 100644 index 0000000..c82e364 --- /dev/null +++ b/dashy/docker-compose.yaml @@ -0,0 +1,22 @@ +services: + dashy: + image: lissy93/dashy:latest + container_name: dashy + volumes: + - ./config.yml:/app/user-data/conf.yml + ports: + - 9999:8080 + environment: + - NODE_ENV=production + # Specify your user ID and group ID. You can find this by running `id -u` and `id -g` + - UID=1000 + - GID=1000 + # Specify restart policy + restart: unless-stopped + # Configure healthchecks + healthcheck: + test: ['CMD', 'node', '/app/services/healthcheck'] + interval: 1m30s + timeout: 10s + retries: 3 + start_period: 40s diff --git a/dockploy/install-chatgpt.sh b/dockploy/install-chatgpt.sh new file mode 100644 index 0000000..8997c86 --- /dev/null +++ b/dockploy/install-chatgpt.sh @@ -0,0 +1,107 @@ +#!/bin/bash + +install_dokploy() { + if [ "$(id -u)" != "0" ]; then + echo "This script must be run as root" >&2 + exit 1 + fi + + if [ "$(uname)" = "Darwin" ]; then + echo "This script must be run on Linux" >&2 + exit 1 + fi + + if [ -f /.dockerenv ]; then + echo "This script must be run on Linux" >&2 + exit 1 + fi + + command_exists() { + command -v "$@" > /dev/null 2>&1 + } + + if command_exists docker; then + echo "Docker already installed" + else + curl -sSL https://get.docker.com | sh + fi + + if command_exists docker compose; then + echo "Docker Compose already installed" + else + echo "Installing Docker Compose..." + curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + chmod +x /usr/local/bin/docker-compose + fi + + mkdir -p /etc/dokploy + chmod 777 /etc/dokploy + + cat < /etc/dokploy/docker-compose.yml +services: + postgres: + image: postgres:16 + container_name: dokploy-postgres + environment: + POSTGRES_USER: dokploy + POSTGRES_DB: dokploy + POSTGRES_PASSWORD: amukds4wi9001583845717ad2 + volumes: + - dokploy-postgres-database:/var/lib/postgresql/data + restart: unless-stopped + + redis: + image: redis:7 + container_name: dokploy-redis + volumes: + - redis-data-volume:/data + restart: unless-stopped + + dokploy: + image: dokploy/dokploy:latest + container_name: dokploy + ports: + - "3000:3000" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /etc/dokploy:/etc/dokploy + - dokploy-docker-config:/root/.docker + environment: + - ADVERTISE_ADDR=\${ADVERTISE_ADDR} + restart: unless-stopped + +volumes: + dokploy-postgres-database: + redis-data-volume: + dokploy-docker-config: +EOF + + export ADVERTISE_ADDR=$(hostname -I | awk '{print $1}') + echo "Using advertise address: $ADVERTISE_ADDR" + + cd /etc/dokploy + docker compose up -d + + GREEN="\033[0;32m" + YELLOW="\033[1;33m" + BLUE="\033[0;34m" + NC="\033[0m" + + echo "" + printf "${GREEN}Congratulations, Dokploy is installed using Docker Compose!${NC}\n" + printf "${YELLOW}Please go to http://localhost:3000 or http://:3000${NC}\n\n" +} + +update_dokploy() { + echo "Updating Dokploy..." + cd /etc/dokploy + docker compose pull dokploy + docker compose up -d + echo "Dokploy has been updated to the latest version." +} + +if [ "$1" = "update" ]; then + update_dokploy +else + install_dokploy +fi diff --git a/dockploy/install.sh b/dockploy/install.sh new file mode 100644 index 0000000..331df8b --- /dev/null +++ b/dockploy/install.sh @@ -0,0 +1,201 @@ +#!/bin/bash +install_dokploy() { + if [ "$(id -u)" != "0" ]; then + echo "This script must be run as root" >&2 + exit 1 + fi + + # check if is Mac OS + if [ "$(uname)" = "Darwin" ]; then + echo "This script must be run on Linux" >&2 + exit 1 + fi + + # check if is running inside a container + if [ -f /.dockerenv ]; then + echo "This script must be run on Linux" >&2 + exit 1 + fi + + # check if something is running on port 80 +# if ss -tulnp | grep ':80 ' >/dev/null; then +# echo "Error: something is already running on port 80" >&2 +# exit 1 +# fi + + command_exists() { + command -v "$@" > /dev/null 2>&1 + } + + if command_exists docker; then + echo "Docker already installed" + else + curl -sSL https://get.docker.com | sh + fi + + docker swarm leave --force 2>/dev/null + + get_ip() { + local ip="" + + # Try IPv4 first + # First attempt: ifconfig.io + ip=$(curl -4s --connect-timeout 5 https://ifconfig.io 2>/dev/null) + + # Second attempt: icanhazip.com + if [ -z "$ip" ]; then + ip=$(curl -4s --connect-timeout 5 https://icanhazip.com 2>/dev/null) + fi + + # Third attempt: ipecho.net + if [ -z "$ip" ]; then + ip=$(curl -4s --connect-timeout 5 https://ipecho.net/plain 2>/dev/null) + fi + + # If no IPv4, try IPv6 + if [ -z "$ip" ]; then + # Try IPv6 with ifconfig.io + ip=$(curl -6s --connect-timeout 5 https://ifconfig.io 2>/dev/null) + + # Try IPv6 with icanhazip.com + if [ -z "$ip" ]; then + ip=$(curl -6s --connect-timeout 5 https://icanhazip.com 2>/dev/null) + fi + + # Try IPv6 with ipecho.net + if [ -z "$ip" ]; then + ip=$(curl -6s --connect-timeout 5 https://ipecho.net/plain 2>/dev/null) + fi + fi + + if [ -z "$ip" ]; then + echo "Error: Could not determine server IP address automatically (neither IPv4 nor IPv6)." >&2 + echo "Please set the ADVERTISE_ADDR environment variable manually." >&2 + echo "Example: export ADVERTISE_ADDR=" >&2 + exit 1 + fi + + echo "$ip" + } + + get_private_ip() { + ip addr show | grep -E "inet (192\.168\.|10\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[0-1]\.)" | head -n1 | awk '{print $2}' | cut -d/ -f1 + } + + advertise_addr="${ADVERTISE_ADDR:-$(get_private_ip)}" + + if [ -z "$advertise_addr" ]; then + echo "ERROR: We couldn't find a private IP address." + echo "Please set the ADVERTISE_ADDR environment variable manually." + echo "Example: export ADVERTISE_ADDR=192.168.1.100" + exit 1 + fi + echo "Using advertise address: $advertise_addr" + + docker swarm init --advertise-addr $advertise_addr + + if [ $? -ne 0 ]; then + echo "Error: Failed to initialize Docker Swarm" >&2 + exit 1 + fi + + echo "Swarm initialized" + + docker network rm -f dokploy-network 2>/dev/null + docker network create --driver overlay --attachable dokploy-network + + echo "Network created" + + mkdir -p /etc/dokploy + + chmod 777 /etc/dokploy + + docker service create \ + --name dokploy-postgres \ + --constraint 'node.role==manager' \ + --network dokploy-network \ + --env POSTGRES_USER=dokploy \ + --env POSTGRES_DB=dokploy \ + --env POSTGRES_PASSWORD=amukds4wi9001583845717ad2 \ + --mount type=volume,source=dokploy-postgres-database,target=/var/lib/postgresql/data \ + postgres:16 + + docker service create \ + --name dokploy-redis \ + --constraint 'node.role==manager' \ + --network dokploy-network \ + --mount type=volume,source=redis-data-volume,target=/data \ + redis:7 + + # Installation + docker service create \ + --name dokploy \ + --replicas 1 \ + --network dokploy-network \ + --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \ + --mount type=bind,source=/etc/dokploy,target=/etc/dokploy \ + --mount type=volume,source=dokploy-docker-config,target=/root/.docker \ + --publish published=3000,target=3000,mode=host \ + --update-parallelism 1 \ + --update-order stop-first \ + --constraint 'node.role == manager' \ + -e ADVERTISE_ADDR=$advertise_addr \ + dokploy/dokploy:latest + + sleep 4 + + # Optional: Use docker service create instead of docker run + # docker service create \ + # --name dokploy-traefik \ + # --constraint 'node.role==manager' \ + # --network dokploy-network \ + # --mount type=bind,source=/etc/dokploy/traefik/traefik.yml,target=/etc/traefik/traefik.yml \ + # --mount type=bind,source=/etc/dokploy/traefik/dynamic,target=/etc/dokploy/traefik/dynamic \ + # --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \ + # --publish mode=host,published=443,target=443 \ + # --publish mode=host,published=80,target=80 \ + # --publish mode=host,published=443,target=443,protocol=udp \ + # traefik:v3.1.2 + + GREEN="\033[0;32m" + YELLOW="\033[1;33m" + BLUE="\033[0;34m" + NC="\033[0m" # No Color + + format_ip_for_url() { + local ip="$1" + if echo "$ip" | grep -q ':'; then + # IPv6 + echo "[${ip}]" + else + # IPv4 + echo "${ip}" + fi + } + + public_ip="${ADVERTISE_ADDR:-$(get_ip)}" + formatted_addr=$(format_ip_for_url "$public_ip") + echo "" + printf "${GREEN}Congratulations, Dokploy is installed!${NC}\n" + printf "${BLUE}Wait 15 seconds for the server to start${NC}\n" + printf "${YELLOW}Please go to http://${formatted_addr}:3000${NC}\n\n" +} + +update_dokploy() { + echo "Updating Dokploy..." + + # Pull the latest image + docker pull dokploy/dokploy:latest + + # Update the service + docker service update --image dokploy/dokploy:latest dokploy + + echo "Dokploy has been updated to the latest version." +} + +# Main script execution +if [ "$1" = "update" ]; then + update_dokploy +else + install_dokploy +fi diff --git a/filebrowser/docker-compose.yaml b/filebrowser/docker-compose.yaml new file mode 100644 index 0000000..82e1e7f --- /dev/null +++ b/filebrowser/docker-compose.yaml @@ -0,0 +1,21 @@ +services: + filebrowser: + image: filebrowser/filebrowser + container_name: filebrowser + user: "1000:1000" + ports: + - 8080:80 + command: ["--port", "80", "--database", "/database/filebrowser.db", "--address", "0.0.0.0"] + volumes: + - samba_data:/samba + - filebrowser_db:/database + - filebrowser_settings:/config/settings.json + restart: unless-stopped + +volumes: + samba_data: + external: True + filebrowser_db: + filebrowser_settings: + external: True + name: filebrowser_filebrowser_settings diff --git a/glance/assets/filebrowser.png b/glance/assets/filebrowser.png new file mode 100644 index 0000000..2222560 Binary files /dev/null and b/glance/assets/filebrowser.png differ diff --git a/glance/assets/forgejo.svg b/glance/assets/forgejo.svg new file mode 100644 index 0000000..9c46d82 --- /dev/null +++ b/glance/assets/forgejo.svg @@ -0,0 +1,40 @@ + + + + + Forgejo logo + Caesar Schinas + + + + + + + + + + + + + diff --git a/glance/assets/immich.png b/glance/assets/immich.png new file mode 100644 index 0000000..07712f0 Binary files /dev/null and b/glance/assets/immich.png differ diff --git a/glance/assets/jellyfin.svg b/glance/assets/jellyfin.svg new file mode 100644 index 0000000..d4d7f01 --- /dev/null +++ b/glance/assets/jellyfin.svg @@ -0,0 +1,24 @@ + + + + + + + + + + icon-transparent + + + + + diff --git a/glance/assets/jellyseerr.svg b/glance/assets/jellyseerr.svg new file mode 100644 index 0000000..cda2394 --- /dev/null +++ b/glance/assets/jellyseerr.svg @@ -0,0 +1,118 @@ + +AAAsdGp1bWIAAAAeanVtZGMycGEAEQAQgAAAqgA4m3EDYzJwYQAAACxOanVtYgAAAEdqdW1kYzJtYQARABCAAACqADibcQN1cm46dXVpZDpjOGFmZTAwYS1iN2JiLTRkNTUtYmUwZi1iN2Y2Mzc4NzRlYTUAAAABtGp1bWIAAAApanVtZGMyYXMAEQAQgAAAqgA4m3EDYzJwYS5hc3NlcnRpb25zAAAAANdqdW1iAAAAJmp1bWRjYm9yABEAEIAAAKoAOJtxA2MycGEuYWN0aW9ucwAAAACpY2JvcqFnYWN0aW9uc4GjZmFjdGlvbmtjMnBhLmVkaXRlZG1zb2Z0d2FyZUFnZW50bUFkb2JlIEZpcmVmbHlxZGlnaXRhbFNvdXJjZVR5cGV4U2h0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvY29tcG9zaXRlV2l0aFRyYWluZWRBbGdvcml0aG1pY01lZGlhAAAArGp1bWIAAAAoanVtZGNib3IAEQAQgAAAqgA4m3EDYzJwYS5oYXNoLmRhdGEAAAAAfGNib3KlamV4Y2x1c2lvbnOBomVzdGFydBjuZmxlbmd0aBk7SGRuYW1lbmp1bWJmIG1hbmlmZXN0Y2FsZ2ZzaGEyNTZkaGFzaFggrnb/Z0LL/KWPpqmjemYRvQg3RH4cxUsaxZtMKj493SpjcGFkSQAAAAAAAAAAAAAAAgtqdW1iAAAAJGp1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0AAAAB32Nib3KoaGRjOnRpdGxlb0dlbmVyYXRlZCBJbWFnZWlkYzpmb3JtYXRtaW1hZ2Uvc3ZnK3htbGppbnN0YW5jZUlEeCx4bXA6aWlkOjJmMzZiOTBiLTUyNTctNGIzMi05NjIyLTExOGUyYjY1NTJmZW9jbGFpbV9nZW5lcmF0b3J4NkFkb2JlX0lsbHVzdHJhdG9yLzI4LjQgYWRvYmVfYzJwYS8wLjcuNiBjMnBhLXJzLzAuMjUuMnRjbGFpbV9nZW5lcmF0b3JfaW5mb4G/ZG5hbWVxQWRvYmUgSWxsdXN0cmF0b3JndmVyc2lvbmQyOC40/2lzaWduYXR1cmV4GXNlbGYjanVtYmY9YzJwYS5zaWduYXR1cmVqYXNzZXJ0aW9uc4KiY3VybHg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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2WQEAcNiFxc4R79ozvFI3cymplwVvAWDIKFyiBFAYVnZ4u3HEcPLDTfIt9X7Nd1vyzbJIZpVE6NOicYEaRwt+uauSMcSPsX9PHUJgyWALEQ6RHudtr57nbNIgmioCefdyEtzGbCylEalKZNWNlzjT2rgZFB1shhJ3hhVHDBPaKX2KxL3C8utMK2iBREKaVCatCmw4JVECUjwN7Qn3V347tiBf5wbCt/a+q382311bbBSW57XWiNjoek/xXArl25l6pWZSkTcShpTPT7ynjoFFRwCewR5+xU+2LKETQ4wrV3n5nK6RayHlThKGkqv3GuPOMk8ogRGaHezj/nphLuUsoIjpNA== + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/glance/assets/mealie.png b/glance/assets/mealie.png new file mode 100644 index 0000000..458d2ac Binary files /dev/null and b/glance/assets/mealie.png differ diff --git a/glance/assets/portainer.png b/glance/assets/portainer.png new file mode 100644 index 0000000..891a133 Binary files /dev/null and b/glance/assets/portainer.png differ diff --git a/glance/assets/user.css b/glance/assets/user.css new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/glance/assets/user.css @@ -0,0 +1 @@ + diff --git a/glance/config/glance.yml b/glance/config/glance.yml new file mode 100644 index 0000000..1426a2a --- /dev/null +++ b/glance/config/glance.yml @@ -0,0 +1,20 @@ +server: + assets-path: /app/assets + +theme: + light: true + background-color: 0 0 95 + primary-color: 0 0 10 + negative-color: 0 90 50 + custom-css-file: /assets/user.css + +pages: + # It's not necessary to create a new file for each page and include it, you can simply + # put its contents here, though multiple pages are easier to manage when separated + - $include: home.yml + +auth: + secret-key: yffGo2FyXMSBqkp/joG30AUCwnP+eF16P3Y0A3+0Jp22P+BjQ0/B+rQzLI+hXqQKPAVYdHdF4TBJ0gWZ6jirRw== # this must be set to a random value generated using the secret:make CLI command + users: + admin: + password: HgU0P9dEvjQ%nXw0ZMFz diff --git a/glance/config/home.yml b/glance/config/home.yml new file mode 100644 index 0000000..b1db666 --- /dev/null +++ b/glance/config/home.yml @@ -0,0 +1,244 @@ +- name: Home + # Optionally, if you only have a single page you can hide the desktop navigation for a cleaner look + # hide-desktop-navigation: true + columns: + - size: small + widgets: + - type: bookmarks + groups: + - links: + - title: Youtube + url: https://www.youtube.com/ + - title: Github + url: https://github.com + - title: Monkeytype + url: https://monkeytype.com/ + - title: Awesome Homelab + url: https://www.awesome-homelab.com/ + - title: Homelab + color: 100 100 50 + links: + - title: Portainer + url: https://192.168.12.151:9443/#!/home + - title: AdGuard DNS + url: http://192.168.12.151/ + - title: Filebrowser + url: https://drive.theocloud.dev/ + - title: Immich + url: https://immich.theocloud.dev/ + - title: Git + url: https://git.theocloud.dev/ + - title: Open WebUI + url: https://chat.theocloud.dev/ + - title: n8n + url: https://n8n.theocloud.dev/ + - title: Mealie + url: https://mealie.theocloud.dev/ + - title: Uptime Kuma + url: https://uptime.theocloud.dev/ + - title: Overleaf + url: https://overleaf.theocloud.dev/project/ + - title: Media Automation + color: 200 50 50 + links: + - title: Jellyfin + url: https://jellyfin.theocloud.dev/ + - title: Jellyseerr + url: https://jellyseerr.theocloud.dev/ + - title: HWR + color: 10 70 50 + links: + - title: WebMail + url: https://webmail.stud.hwr-berlin.de/appsuite/ + - title: SAM + url: https://sam.hwr-berlin.de/de/ + - title: Moodle + url: https://moodle.hwr-berlin.de/ + - title: Studenplan + url: https://moodle.hwr-berlin.de/fb2-stundenplan/stundenplan.php + + - type: to-do + + - size: full + widgets: + - type: split-column + widgets: + - type: weather + location: Berlin, Germany + units: metric # alternatively "imperial" + hour-format: 24h # alternatively "24h" + # Optionally hide the location from being displayed in the widget + # hide-location: true + + - type: dns-stats + collapse-after: 3 + service: adguard + url: http://192.168.12.151/ + username: theo + password: 58201928alsk + + - type: rss + title: News + style: horizontal-cards + feeds: + - url: https://www.tagesschau.de/infoservices/alle-meldungen-100~rss2.xml + title: Tagesschau + - url: https://www.bundesregierung.de/service/rss/breg-de/1151242/feed.xml + title: Bundesregierung + - url: https://www.bmi.bund.de/DE/service/rss-newsfeed/function/rssnewsfeed-neue-inhalte.xml + title: BMI Neue Inhalte + - url: https://www.bmi.bund.de/DE/service/rss-newsfeed/function/rssnewsfeed-pressemitteilungen.xml + title: BMI Pressemitteilungen + - url: https://www.bmi.bund.de/DE/service/rss-newsfeed/function/rssnewsfeed-kurzmeldungen.xml + title: BMI Kurzmeldungen + - url: https://feeds.bbci.co.uk/news/rss.xml + title: BBC + + - type: rss + title: Tech + style: detailed-list + feeds: + - url: https://www.wired.com/feed/rss + title: WIRED + - url: https://thedecisionlab.com/feed/ + title: The Decision Lab + - url: https://nesslabs.com/feed/ + title: Ness Labs + - url: http://www.fastcodesign.com/rss.xml + title: FastCo Design + - url: https://medium.com/feed/medium-eng/ + title: Medium Engineering + - url: https://developer.atlassian.com/blog/feed.xml + title: Atlassian Developer Blog + - url: https://stripe.com/blog/feed.rss + title: Stripe Blog + - url: https://blog.cloudflare.com/rss/ + title: Cloudflare Blog + - url: https://deepmind.com/blog/feed/basic/ + title: DeepMind Blog + - url: http://news.mit.edu/rss/topic/artificial-intelligence2 + title: MIT AI News + - url: https://blog.openai.com/rss/ + title: OpenAI Blog + - url: https://uxplanet.org/feed + title: UX Planet + - url: http://feeds.feedburner.com/uxmovement + title: UX Movement + + - size: small + widgets: + - type: monitor + cache: 1m + title: Services + sites: + - title: Jellyfin + url: https://jellyfin.theocloud.dev + icon: /assets/jellyfin.svg + - title: Jellyseerr + url: https://jellyseerr.theocloud.dev/ + icon: /assets/jellyseerr.svg + - title: Forgejo Git + url: https://git.theocloud.dev + icon: /assets/forgejo.svg + - title: Immich + url: https://immich.theocloud.dev + icon: /assets/immich.png + - title: Filebrowser + url: https://drive.theocloud.dev + icon: /assets/filebrowser.png + - title: Mealie + url: https://mealie.theocloud.dev + icon: /assets/mealie.png + + - type: markets + markets: + - symbol: SPY + name: S&P 500 + - symbol: BTC-USD + name: Bitcoin + - symbol: NVDA + name: NVIDIA + - symbol: AAPL + name: Apple + - symbol: MSFT + name: Microsoft + - symbol: URTH + name: MSCI World (URTH) + - symbol: NFLX + name: Netflix + - symbol: QQQ + name: Nasdaq 100 ETF + - symbol: VTI + name: Vanguard Total Stock Market ETF + - symbol: IEMG + name: Emerging Markets ETF + - symbol: ARKK + name: ARK Innovation ETF + - symbol: META + name: Meta (Facebook) + - symbol: AMZN + name: Amazon + - symbol: TSLA + name: Tesla + + +- name: Entertainment + columns: + - size: small + widgets: + - type: twitch-channels + channels: + - HandOfBlood + - maxim + - sascha + - fritz_meinecke + - RPICloud + - Roffle + - Jodarum + - iii_Initiative + - RealCivilEngineer + + - type: twitch-top-games + exclude: + - just-chatting + - pools-hot-tubs-and-beaches + - music + - art + - asmr + - counter-strike + - league-of-legends + - valorant + - dota-2 + + - size: full + widgets: + - type: videos + style: grid-cards + channels: + - UC5iYuXSliCgk_mtUJa25eoQ # MATTIN + - UCeosQoJubf3KzYRtjBNGoag # Nicky Lyan + - UC6biysICWOJ-C3P4Tyeggzg # LowLevel + - UCcpIdXCr3MjAQEWSEjpGUNg # Joelemz + - UCR-DXc1voovS8nhAvccRZhg # Jeff Geerling + - UCsBjURrPoezykLs9EqgamOA # Fireship + - UCGRb1WmL-v6AxZRLbcdXD_Q # Fritz Meinecke Live + - UCzH549YlZhdhIqhtvz7XHmQ # AlexiBexi + - UC9YTp5M6yYgSd6t0SeL2GQw # HandofBlood + - UCCJ-NJtqLQRxuaxHZA9q6zg # HandofUncut + - UCiHTnZis5R1bmrqQcYd7zWw # Sacha Hellinger + - UCXDi1F7Q-cJQ4mGGavtfYRQ # Inscope21 + - UC-4Tzd5lIRU7lcv7_5OO01Q # UnsymphatischTV + - UC6C1dyHHOMVIBAze8dWfqCw # Gamestar + - UCyQAraT4FYcXgnUTLOj796Q # Survival Mattin + - UCZXW8E1__d5tZb-wLFOt8TQ # Bog + - UCFgBYlz5LwymPSWBX-G6hBA # 2 Bored Guys + - UCOuGATIAbd2DvzJmUgXn2IQ # Network Chuck 2 + - UC9x0AN7BWHpCDHSm9NiJFJQ # Network Chuck + - UCgHGPOxUMfWsiy1ZyR-tLVw # Livakiva + - UCI7kKmUuSQOHUvSWIYFDf1Q # Eliminate + - UCHj7VElFb0_sxhI5KHduM7A # HardwareDealz + - UCREHHX2Lk_BYGS9R0ia7DDQ # Rantoni + - UC8butISFwT-Wl7EV0hUK0BQ # FreeCodeCamp + - UC4JX40jDee_tINbkjycV4Sg # Tech With Tim + - UCOk-gHyjcWZNj3Br4oxwh0A # Techno Tim + - UC_76XFUys5fTO7u_HqrD7aA # RPI Cloud diff --git a/glance/docker-compose.yml b/glance/docker-compose.yml new file mode 100644 index 0000000..e643dbe --- /dev/null +++ b/glance/docker-compose.yml @@ -0,0 +1,20 @@ +services: + glance: + container_name: glance + image: glanceapp/glance + restart: unless-stopped + volumes: + - glance_config:/app/config + - glance_assets:/app/assets + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + ports: + - 8383:8080 + env_file: .env + +volumes: + glance_config: + external: True + glance_assets: + external: True diff --git a/kavita/docker-compose.yaml b/kavita/docker-compose.yaml new file mode 100644 index 0000000..f197096 --- /dev/null +++ b/kavita/docker-compose.yaml @@ -0,0 +1,19 @@ +services: + kavita: + image: lscr.io/linuxserver/kavita:latest + container_name: kavita + environment: + - PUID=1000 + - PGID=1000 + - TZ=Etc/UTC + volumes: + - kavita_config:/config + - ebooks_library:/data + ports: + - 5000:5000 + restart: unless-stopped + +volumes: + kavita_config: + ebooks_library: + external: True diff --git a/n8n-automation/.env b/n8n-automation/.env new file mode 100644 index 0000000..88f1d61 --- /dev/null +++ b/n8n-automation/.env @@ -0,0 +1,14 @@ +# n8n Settings +DOMAIN_NAME=theocloud.dev +SUBDOMAIN=n8n +GENERIC_TIMEZONE=Europe/Berlin +N8N_HOST=n8n.theocloud.dev +N8N_PROTOCOL=https +WEBHOOK_URL=https://n8n.theocloud.dev/ +N8N_SECURE_COOKIE=false +NODE_ENV=production + +# PostgreSQL +POSTGRES_DB=n8n +POSTGRES_USER=n8n +POSTGRES_PASSWORD=58201928alsk diff --git a/n8n-automation/docker-compose.yaml b/n8n-automation/docker-compose.yaml new file mode 100644 index 0000000..430be8c --- /dev/null +++ b/n8n-automation/docker-compose.yaml @@ -0,0 +1,25 @@ +services: + n8n: + image: n8nio/n8n:latest + restart: always + ports: + - "5678:5678" + env_file: + - .env + volumes: + - n8n_data:/home/node/.n8n + - n8n_files:/files + depends_on: + - postgres + postgres: + image: postgres:15 + restart: always + env_file: + - .env + volumes: + - n8n_postgres_data:/var/lib/postgresql/data + +volumes: + n8n_data: + n8n_files: + n8n_postgres_data: diff --git a/pocketbase/Dockerfile b/pocketbase/Dockerfile new file mode 100644 index 0000000..c8bfa24 --- /dev/null +++ b/pocketbase/Dockerfile @@ -0,0 +1,22 @@ +FROM alpine:latest + +ARG PB_VERSION=0.28.4 + +RUN apk add --no-cache \ + unzip \ + ca-certificates + +# download and unzip PocketBase +ADD https://github.com/pocketbase/pocketbase/releases/download/v${PB_VERSION}/pocketbase_${PB_VERSION}_linux_amd64.zip /tmp/pb.zip +RUN unzip /tmp/pb.zip -d /pb/ + +# uncomment to copy the local pb_migrations dir into the image +# COPY ./pb_migrations /pb/pb_migrations + +# uncomment to copy the local pb_hooks dir into the image +# COPY ./pb_hooks /pb/pb_hooks + +EXPOSE 8080 + +# start PocketBase +CMD ["/pb/pocketbase", "serve", "--http=0.0.0.0:8080"] diff --git a/pocketbase/docker-compose.yml b/pocketbase/docker-compose.yml new file mode 100644 index 0000000..fc4a9a6 --- /dev/null +++ b/pocketbase/docker-compose.yml @@ -0,0 +1,16 @@ +services: + pocketbase: + build: + context: . + dockerfile: Dockerfile + args: + PB_VERSION: 0.28.4 + container_name: pocketbase + volumes: + - pb_data:/pb/pb_data + ports: + - "8090:8080" + restart: unless-stopped + +volumes: + pb_data: diff --git a/privatebin/docker-compose.yaml b/privatebin/docker-compose.yaml new file mode 100644 index 0000000..3b627e5 --- /dev/null +++ b/privatebin/docker-compose.yaml @@ -0,0 +1,14 @@ +services: + privatebin: + image: privatebin/nginx-fpm-alpine + container_name: privatebin + restart: always + read_only: true + user: "1000:1000" # Run the container with the UID:GID of your Docker user + ports: + - "8888:8080" + volumes: + - data:/srv/data + +volumes: + data: diff --git a/satisfactory/docker-compose.yaml b/satisfactory-tailscaled/docker-compose.yaml similarity index 52% rename from satisfactory/docker-compose.yaml rename to satisfactory-tailscaled/docker-compose.yaml index b9fedbd..a04b9d6 100644 --- a/satisfactory/docker-compose.yaml +++ b/satisfactory-tailscaled/docker-compose.yaml @@ -1,11 +1,8 @@ services: satisfactory-server: container_name: 'satisfactory-server' - hostname: 'drachenschanze-reloaded' image: 'wolveix/satisfactory-server:latest' - ports: - - '7777:7777/udp' - - '7777:7777/tcp' + network_mode: 'service:tailscale' volumes: - satisfactory_config:/config environment: @@ -21,6 +18,25 @@ services: reservations: memory: 8G + tailscale: + image: tailscale/tailscale:stable + container_name: satisfactory-tailscaled + ports: + - '7777:7777/udp' + - '7777:7777/tcp' + - '8888:8888/udp' + - '8888:8888/tcp' + volumes: + - tailscale_data:/var/lib + - /dev/net/tun:/dev/net/tun + cap_add: + - NET_ADMIN + - NET_RAW + environment: + - TS_AUTHKEY=tskey-auth-kCkP76DtH121CNTRL-umazeDHVETVzu1JBrFyeSVazWSYBrx476 + - TS_HOSTNAME=Satisfactory-Server + volumes: + tailscale_data: satisfactory_config: external: true diff --git a/stirling-pdf/docker-compose.yaml b/stirling-pdf/docker-compose.yaml new file mode 100644 index 0000000..d099e89 --- /dev/null +++ b/stirling-pdf/docker-compose.yaml @@ -0,0 +1,22 @@ +services: + stirling-pdf: + container_name: stirling-pdf + image: docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest + ports: + - 8184:8080 + volumes: + - stirlingpdf_trainingData:/usr/share/tessdata # Required for extra OCR languages + - stirlingpdf_extraConfigs:/configs + - stirlingpdf_customFiles:/customFiles/ + - stirlingpdf_logs:/logs/ + - stirlingpdf_pipeline:/pipeline/ + environment: + - DISABLE_ADDITIONAL_FEATURES=false + - LANGS=en_GB + +volumes: + stirlingpdf_trainingData: + stirlingpdf_extraConfigs: + stirlingpdf_customFiles: + stirlingpdf_logs: + stirlingpdf_pipeline: diff --git a/tailscale/docker-compose.yaml b/tailscale/docker-compose.yaml deleted file mode 100644 index bcc33e3..0000000 --- a/tailscale/docker-compose.yaml +++ /dev/null @@ -1,17 +0,0 @@ -services: - tailscale: - image: tailscale/tailscale:stable - container_name: tailscaled - volumes: - - tailscale_tailscale_data:/var/lib - - /dev/net/tun:/dev/net/tun - network_mode: host - cap_add: - - NET_ADMIN - - NET_RAW - environment: - - TS_AUTHKEY=tskey-auth-kzcw7n21Rm11CNTRL-xscFvvmtfzFyzLi3QnQF1GJcKDhknoMP - -volumes: - tailscale_tailscale_data: - external: True diff --git a/webdav/.env b/webdav/.env new file mode 100644 index 0000000..dc5d2f0 --- /dev/null +++ b/webdav/.env @@ -0,0 +1,2 @@ +WEBDAV_USER=theo +WEBDAV_PASSWORD=58201928alsk diff --git a/webdav/docker-compose.yaml b/webdav/docker-compose.yaml new file mode 100644 index 0000000..76e4b1a --- /dev/null +++ b/webdav/docker-compose.yaml @@ -0,0 +1,16 @@ +services: + webdav: + image: bytemark/webdav + container_name: webdav + environment: + - AUTH_TYPE=Basic + - USERNAME=${WEBDAV_USER} + - PASSWORD=${WEBDAV_PASSWORD} + volumes: + - samba_data:/var/lib/dav + ports: + - 8081:80 + +volumes: + samba_data: + external: True