From 64a0911d7bf5285fa22ce5bf5deb3cd454a7f2a7 Mon Sep 17 00:00:00 2001 From: Mike McFetridge <91107715+mmcfetridge1969@users.noreply.github.com> Date: Tue, 21 Jul 2026 17:26:47 -0400 Subject: [PATCH] migrate --- .gitea/workflows/00-deploy-authentik.yml | 34 +++++++++ .gitea/workflows/00-deploy-dockhand.yml | 34 +++++++++ .gitea/workflows/00-deploy-duplicati.yml | 34 +++++++++ .gitea/workflows/00-deploy-immich.yml | 34 +++++++++ .gitea/workflows/00-deploy-obsidian.yml | 34 +++++++++ .gitea/workflows/00-deploy-sencho.yml | 34 +++++++++ .gitea/workflows/deploy-watchtower.yml | 34 +++++++++ Sencho/docker-compose.yml | 15 ++++ authentik/docker-compose.yml | 79 ++++++++++++++++++++ dockhand/docker-compose.yml | 21 ++++++ duplicati/docker-compose.yml | 17 +++++ immich/docker-compose.yml | 89 +++++++++++++++++++++++ obsidian/docker-compose.yml | 30 ++++++++ watchtower/.docker-compose.yml.kate-swp | Bin 0 -> 2641 bytes watchtower/docker-compose.yml | 15 ++++ 15 files changed, 504 insertions(+) create mode 100644 .gitea/workflows/00-deploy-authentik.yml create mode 100644 .gitea/workflows/00-deploy-dockhand.yml create mode 100644 .gitea/workflows/00-deploy-duplicati.yml create mode 100644 .gitea/workflows/00-deploy-immich.yml create mode 100644 .gitea/workflows/00-deploy-obsidian.yml create mode 100644 .gitea/workflows/00-deploy-sencho.yml create mode 100644 .gitea/workflows/deploy-watchtower.yml create mode 100644 Sencho/docker-compose.yml create mode 100644 authentik/docker-compose.yml create mode 100644 dockhand/docker-compose.yml create mode 100644 duplicati/docker-compose.yml create mode 100644 immich/docker-compose.yml create mode 100644 obsidian/docker-compose.yml create mode 100644 watchtower/.docker-compose.yml.kate-swp create mode 100644 watchtower/docker-compose.yml diff --git a/.gitea/workflows/00-deploy-authentik.yml b/.gitea/workflows/00-deploy-authentik.yml new file mode 100644 index 0000000..dce4946 --- /dev/null +++ b/.gitea/workflows/00-deploy-authentik.yml @@ -0,0 +1,34 @@ +name: Deploy authentik + +on: + push: + branches: + - main + paths: + - 'authentik/**' # <-- CRITICAL: Only triggers if files in the watchtower folder change + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Sync authentik to Host + uses: appleboy/scp-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + source: "authentik/" + target: "/home/miker/docker" + + - name: Deploy authentik Stack + uses: appleboy/ssh-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: | + cd /home/miker/docker/authentik + docker compose up -d --remove-orphans diff --git a/.gitea/workflows/00-deploy-dockhand.yml b/.gitea/workflows/00-deploy-dockhand.yml new file mode 100644 index 0000000..1089cb9 --- /dev/null +++ b/.gitea/workflows/00-deploy-dockhand.yml @@ -0,0 +1,34 @@ +name: Deploy dockhand + +on: + push: + branches: + - main + paths: + - 'dockhand/**' # <-- CRITICAL: Only triggers if files in the watchtower folder change + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Sync dockhand to Host + uses: appleboy/scp-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + source: "dockhand/" + target: "/home/miker/docker" + + - name: Deploy dockhand Stack + uses: appleboy/ssh-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: | + cd /home/miker/docker/dockhand + docker compose up -d --remove-orphans diff --git a/.gitea/workflows/00-deploy-duplicati.yml b/.gitea/workflows/00-deploy-duplicati.yml new file mode 100644 index 0000000..28810d1 --- /dev/null +++ b/.gitea/workflows/00-deploy-duplicati.yml @@ -0,0 +1,34 @@ +name: Deploy duplicati + +on: + push: + branches: + - main + paths: + - 'duplicati/**' # <-- CRITICAL: Only triggers if files in the watchtower folder change + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Sync duplicati to Host + uses: appleboy/scp-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + source: "duplicati/" + target: "/home/miker/docker" + + - name: Deploy duplicati Stack + uses: appleboy/ssh-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: | + cd /home/miker/docker/duplicati + docker compose up -d --remove-orphans diff --git a/.gitea/workflows/00-deploy-immich.yml b/.gitea/workflows/00-deploy-immich.yml new file mode 100644 index 0000000..c2016d9 --- /dev/null +++ b/.gitea/workflows/00-deploy-immich.yml @@ -0,0 +1,34 @@ +name: Deploy immich + +on: + push: + branches: + - main + paths: + - 'immich/**' # <-- CRITICAL: Only triggers if files in the watchtower folder change + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Sync immich to Host + uses: appleboy/scp-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + source: "immich/" + target: "/home/miker/docker" + + - name: Deploy immich Stack + uses: appleboy/ssh-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: | + cd /home/miker/docker/immich + docker compose up -d --remove-orphans diff --git a/.gitea/workflows/00-deploy-obsidian.yml b/.gitea/workflows/00-deploy-obsidian.yml new file mode 100644 index 0000000..64f0b3a --- /dev/null +++ b/.gitea/workflows/00-deploy-obsidian.yml @@ -0,0 +1,34 @@ +name: Deploy obsidian + +on: + push: + branches: + - main + paths: + - 'obsidian/**' # <-- CRITICAL: Only triggers if files in the watchtower folder change + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Sync obsidian to Host + uses: appleboy/scp-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + source: "obsidian/" + target: "/home/miker/docker" + + - name: Deploy obsidian Stack + uses: appleboy/ssh-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: | + cd /home/miker/docker/obsidian + docker compose up -d --remove-orphans diff --git a/.gitea/workflows/00-deploy-sencho.yml b/.gitea/workflows/00-deploy-sencho.yml new file mode 100644 index 0000000..fd517e5 --- /dev/null +++ b/.gitea/workflows/00-deploy-sencho.yml @@ -0,0 +1,34 @@ +name: Deploy Sencho + +on: + push: + branches: + - main + paths: + - 'Sencho/**' # <-- CRITICAL: Only triggers if files in the watchtower folder change + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Sync Sencho to Host + uses: appleboy/scp-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + source: "Sencho/" + target: "/home/miker/docker" + + - name: Deploy Sencho Stack + uses: appleboy/ssh-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: | + cd /home/miker/docker/Sencho + docker compose up -d --remove-orphans diff --git a/.gitea/workflows/deploy-watchtower.yml b/.gitea/workflows/deploy-watchtower.yml new file mode 100644 index 0000000..43d00b6 --- /dev/null +++ b/.gitea/workflows/deploy-watchtower.yml @@ -0,0 +1,34 @@ +name: Deploy watchtower + +on: + push: + branches: + - main + paths: + - 'watchtower/**' # <-- CRITICAL: Only triggers if files in the watchtower folder change + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Sync watchtower to Host + uses: appleboy/scp-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + source: "watchtower/" + target: "/home/miker/docker" + + - name: Deploy watchtower Stack + uses: appleboy/ssh-action@master + with: + host: "192.168.2.6" + username: "miker" + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: | + cd /home/miker/docker/watchtower + docker compose up -d --remove-orphans diff --git a/Sencho/docker-compose.yml b/Sencho/docker-compose.yml new file mode 100644 index 0000000..435d2cb --- /dev/null +++ b/Sencho/docker-compose.yml @@ -0,0 +1,15 @@ +services: + sencho: + image: saelix/sencho:latest + container_name: sencho + restart: unless-stopped + ports: + - "1852:1852" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /home/miker/docker/Sencho/data:/app/data + # Change this line so the container path matches the host path: + - /opt/Docker-Deployments:/opt/Docker-Deployments + environment: + - COMPOSE_DIR=/home/miker/docker + - DATA_DIR=/app/data diff --git a/authentik/docker-compose.yml b/authentik/docker-compose.yml new file mode 100644 index 0000000..dcf7850 --- /dev/null +++ b/authentik/docker-compose.yml @@ -0,0 +1,79 @@ +services: + postgresql: + env_file: + - .env + environment: + POSTGRES_DB: ${PG_DB:-authentik} + POSTGRES_PASSWORD: ${PG_PASS:?database password required} + POSTGRES_USER: ${PG_USER:-authentik} + healthcheck: + interval: 30s + retries: 5 + start_period: 20s + test: + - CMD-SHELL + - pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER} + timeout: 5s + image: docker.io/library/postgres:16-alpine + restart: unless-stopped + volumes: + - /home/miker/docker/authentik/database:/var/lib/postgresql/data + networks: + - authentik + + server: + command: server + depends_on: + postgresql: + condition: service_healthy + env_file: + - .env + environment: + AUTHENTIK_POSTGRESQL__HOST: postgresql + AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik} + AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS} + AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik} + AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required} + image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.1} + ports: + - ${COMPOSE_PORT_HTTP}:9000 + - ${COMPOSE_PORT_HTTPS}:9443 + restart: unless-stopped + shm_size: 512mb + volumes: + - /home/miker/docker/authentik/data:/data + - /home/miker/docker/authentik/custom-templates:/templates + networks: + - authentik + - main + + worker: + command: worker + depends_on: + postgresql: + condition: service_healthy + env_file: + - .env + environment: + AUTHENTIK_POSTGRESQL__HOST: postgresql + AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik} + AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS} + AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik} + AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required} + image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.1} + restart: unless-stopped + shm_size: 512mb + user: root + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /home/miker/docker/authentik/data:/data + - /home/miker/docker/authentik/certs:/certs + - /home/miker/docker/authentik/custom-templates:/templates + networks: + - authentik + - main +networks: + main: + external: true # Tells Compose not to create this network + authentik: + external: true # Tells Compose not to create this network diff --git a/dockhand/docker-compose.yml b/dockhand/docker-compose.yml new file mode 100644 index 0000000..3fbc9d0 --- /dev/null +++ b/dockhand/docker-compose.yml @@ -0,0 +1,21 @@ +services: + dockhand: + image: fnsys/dockhand:latest + container_name: dockhand + restart: unless-stopped + ports: + - 3200:3000 + security_opt: + - no-new-privileges:true + volumes: + - /home/miker/docker/dockhand/data:/app/data + - /home/miker/docker/dockhand/stack:/stack + - /home/miker/docker/dockhand/config:/DockerConfigs + - /var/run/docker.sock:/var/run/docker.sock:ro + environment: + - TZ=America/New_york + networks: + - main +networks: + main: + external: true # Tells Compose not to create this network diff --git a/duplicati/docker-compose.yml b/duplicati/docker-compose.yml new file mode 100644 index 0000000..08efc8e --- /dev/null +++ b/duplicati/docker-compose.yml @@ -0,0 +1,17 @@ +services: + duplicati: + image: lscr.io/linuxserver/duplicati:latest + container_name: duplicati + environment: + - PUID=1000 # Your host user ID + - PGID=1000 # Your host group ID + - TZ=America/New_York + - SETTINGS_ENCRYPTION_KEY=84Jo17Ecw5muzGgqVjpeZQYnWBH7XFM7R01CdR646jSIfNbxgp # <-- Add this line + volumes: + - /home/miker/docker/duplicati/config:/config + - /home/miker/docker/immich/library:/source/photos:ro # Mounts your photo directory as read-only + - /home/miker/docker:/source/apps:ro # Mounts your application data files + - /home/miker/docker/duplicati/backups:/backups # Optional local backup location + ports: + - 8250:8200 + restart: unless-stopped diff --git a/immich/docker-compose.yml b/immich/docker-compose.yml new file mode 100644 index 0000000..0b2126a --- /dev/null +++ b/immich/docker-compose.yml @@ -0,0 +1,89 @@ +# +# WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose +# +# Make sure to use the docker-compose.yml of the current release: +# +# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml +# +# The compose file on main may not be compatible with the latest release. + +name: immich + +services: + immich-server: + container_name: immich_server + image: ghcr.io/immich-app/immich-server:v3 + # extends: + # file: hwaccel.transcoding.yml + # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding + volumes: + # Do not edit the next line. If you want to change the media storage location on your system, edit the value of U> + - /home/miker/docker/immich/library:/data + - /etc/localtime:/etc/localtime:ro + ports: + - '2283:2283' + depends_on: + - redis + - database + restart: always + healthcheck: + disable: false + networks: + - immich + - main + + immich-machine-learning: + container_name: immich_machine_learning + # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag. + # Example tag: ${IMMICH_VERSION:-release}-cuda + image: ghcr.io/immich-app/immich-machine-learning:v3 + # extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-ac> + # file: hwaccel.ml.yml + # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use > + volumes: + - model-cache:/cache + restart: always + healthcheck: + disable: false + networks: + - immich + - main + + redis: + container_name: immich_redis + image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9 + healthcheck: + test: redis-cli ping || exit 1 + restart: always + networks: + - immich + - main + + database: + container_name: immich_postgres + image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511d> + environment: + POSTGRES_PASSWORD: mM3PXXUjK0QMz7 + POSTGRES_USER: postgresadmin + POSTGRES_DB: immich + POSTGRES_INITDB_ARGS: '--data-checksums' + # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs + # DB_STORAGE_TYPE: 'HDD' + volumes: + # Do not edit the next line. If you want to change the database storage location on your system, edit the value o> + - /home/miker/docker/immich/postgres:/var/lib/postgresql/data + shm_size: 128mb + restart: always + healthcheck: + disable: false + networks: + - immich + +volumes: + model-cache: + +networks: + main: + external: true # Tells Compose not to create this network + immich: + external: true # Tells Compose not to create this network diff --git a/obsidian/docker-compose.yml b/obsidian/docker-compose.yml new file mode 100644 index 0000000..29e463a --- /dev/null +++ b/obsidian/docker-compose.yml @@ -0,0 +1,30 @@ +services: + couchdb-obsidian-livesync: + container_name: obsidian-livesync +# image: couchdb:3.3.3 # Specify a stable CouchDB version + image: 'docker.io/oleduc/docker-obsidian-livesync-couchdb:master' + environment: + # User and password for CouchDB admin access + - COUCHDB_USER=miker + - COUCHDB_PASSWORD=tw9222dvO91ZHb + - COUCHDB_DATABASE=obsidian + - SERVER_DOMAIN=https://obsidian.mikemcfetridge.com + # Optional: Set PUID, PGID, UMASK, and TZ for user/group permissions and timezone + - PUID=1000 + - PGID=1000 + - UMASK=0022 + - TZ=America/New_York # Adjust timezone as needed + volumes: + # Mount a local directory for CouchDB data persistence + - /home/miker/docker/obsidian/data:/opt/couchdb/data + # Mount a local directory for CouchDB configuration files + - /home/miker/docker/obsidian/config:/opt/couchdb/etc/local.d + ports: + # Map CouchDB's default port 5984 to the host machine + - "5984:5984" + restart: unless-stopped # Ensure the container restarts automatically unless explicitly stopped + networks: + - main +networks: + main: + external: true # Tells Compose not to create this network diff --git a/watchtower/.docker-compose.yml.kate-swp b/watchtower/.docker-compose.yml.kate-swp new file mode 100644 index 0000000000000000000000000000000000000000..9e8fb2764456a3885874a93390c3a92bb87fc5f8 GIT binary patch literal 2641 zcmb7G>rUH96b_eC!letedn>yzU8J@`j7Uti8@{}tc-HN81C`OoFvzm~}@kN6kYQ-DQrTPQpSSdd@|U|xcKfH?_tfT9Fd zfLRG@01qWt0GN^BF~9=}<^ZN8SOu7pK%_G%!8$Ax5)^y<<`ITP3=0_MG0b5Q)>+&= z#4v;50fuP|Qy332DBT>~e3WZ*CwCoW4GWEl2o z9GBuG8Vu+eg1~PTg!F;0fI!15=bZ121}XDf_`$pazw|9FNk5-OVL-z~EEL8ic%?6P z9bSZ#h}LPo*G)(58qTk}X&IfiQY+W%kcRI%Na@yCO-c4|iW*Sndv2voN6v?ceF6b~ zBIhE%!Bt8L-JYQ}lv=e~B^$(~=akXVqXg6BoJB#l9573WnQqjrOybDU#whUFy9yv~ zK_T7u*-}qcyLoJPPWf`1EnRK*x=O-^6q&zS(KDIB6UoG{H}6`o);|R`XcbdM#b4k}9c_O?;3%I4=_X~0DRp!&sUFYt^UH_k5yZcj;_vPy-c>E@ zv}0<@Gi&Hw)5J|`+dD`aa_^w~gVfEAm|KNiO6e` zUCY>4E~~I%SUD3lS&sQnqcUa^Nq}90%(|4}U6l}CNF&|^ZW=EvqN@_=B3csiq<4qtKjI*0olzRKYq rhx<9)Dbq;rPxWi#Rhua+P?xnqzoR?CAdklaJ{g literal 0 HcmV?d00001 diff --git a/watchtower/docker-compose.yml b/watchtower/docker-compose.yml new file mode 100644 index 0000000..435d2cb --- /dev/null +++ b/watchtower/docker-compose.yml @@ -0,0 +1,15 @@ +services: + sencho: + image: saelix/sencho:latest + container_name: sencho + restart: unless-stopped + ports: + - "1852:1852" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /home/miker/docker/Sencho/data:/app/data + # Change this line so the container path matches the host path: + - /opt/Docker-Deployments:/opt/Docker-Deployments + environment: + - COMPOSE_DIR=/home/miker/docker + - DATA_DIR=/app/data