Compare commits

..

No commits in common. "3bb4522f07ea332fd3df139ffeca5f2b906128d3" and "2e7efa929ea61bdf439abdbff486fb0d5cf08157" have entirely different histories.

16 changed files with 4295 additions and 44 deletions

View file

@ -14,10 +14,6 @@ jobs:
- name: Fetch all history for git diff - name: Fetch all history for git diff
run: git fetch --depth=2 run: git fetch --depth=2
- name: Install jq
run: |
apt-get update && apt-get install -y jq
- name: Detect modified folders - name: Detect modified folders
id: detect-changes id: detect-changes
run: | run: |
@ -89,13 +85,10 @@ jobs:
sleep 45 # Delay for 45 seconds before fetching logs sleep 45 # Delay for 45 seconds before fetching logs
job_id=$(curl -s -H "Authorization: Bearer ${{ secrets.AWX_API_TOKEN }}" https://awx.mafyuh.xyz/api/v2/job_templates/13/jobs/?order_by=-id | jq -r '.results[0].id') job_id=$(curl -s -H "Authorization: Bearer ${{ secrets.AWX_API_TOKEN }}" "https://awx.mafyuh.xyz/api/v2/job_templates/13/jobs/?order_by=-id" | grep -oP '"id":\s*\K[0-9]+')
logs=$(curl -s -H "Authorization: Bearer ${{ secrets.AWX_API_TOKEN }}" https://awx.mafyuh.xyz/api/v2/jobs/$job_id/stdout/?format=json) logs=$(curl -s -H "Authorization: Bearer ${{ secrets.AWX_API_TOKEN }}" "https://awx.mafyuh.xyz/api/v2/jobs/$job_id/stdout/?format=json")
echo "AWX Job Logs for folder: $folder" echo "AWX Job Logs for folder: $folder"
echo "Range:"
echo "Start: $(echo "$logs" | jq -r '.range.start')"
echo "End: $(echo "$logs" | jq -r '.range.end')"
echo "Absolute End: $(echo "$logs" | jq -r '.range.absolute_end')"
echo "Content:" echo "Content:"
echo "$(echo "$logs" | jq -r '.content')" echo "$logs" | grep -oP '"content":\s*"\K[^"]+' | sed 's/\\n/\n/g'
done done

View file

@ -16,10 +16,6 @@ jobs:
uses: actions/setup-node@v4 uses: actions/setup-node@v4
with: with:
node-version: 14 node-version: 14
- name: Install yamllint
run: |
npm install -g yaml-lint
- name: Show yamllint version - name: Show yamllint version
run: | run: |

View file

@ -3,7 +3,7 @@ Currently migrating [Auto-Homelab](https://git.mafyuh.dev/mafyuh/Auto-Homelab),
ToDo ToDo
- [ ] Update Readme - [ ] Update Readme
- [x] Migrate all containers to use this repo (DB migrations) - [ ] Migrate all containers to use this repo (DB migrations)
- [x] Get OpenTofu migrated to this repo - [x] Get OpenTofu migrated to this repo
- [ ] Get Kubernetes repo migrated over - [ ] Get Kubernetes repo migrated over
- [ ] Re-bootstrap Flux - [ ] Re-bootstrap Flux

View file

@ -2,7 +2,7 @@ version: "3.8"
services: services:
ollama: ollama:
image: ollama/ollama:0.3.1 image: docker.mafyuh.xyz/ollama/ollama:0.2.6
container_name: ollama container_name: ollama
restart: unless-stopped restart: unless-stopped
volumes: volumes:
@ -29,7 +29,7 @@ services:
- host.docker.internal:host-gateway - host.docker.internal:host-gateway
mindsdb: mindsdb:
image: mindsdb/mindsdb:v24.7.5.0 image: docker.mafyuh.xyz/mindsdb/mindsdb:v24.7.3.0
container_name: mindsdb container_name: mindsdb
ports: ports:
- 47334:47334 - 47334:47334

View file

@ -1,15 +1,17 @@
[![Yamllint](https://git.mafyuh.dev/mafyuh/iac/badges/workflows/yamllint.yml/badge.svg)](https://git.mafyuh.dev/mafyuh/iac/actions) [![Yamllint](https://git.mafyuh.dev/mafyuh/Auto-Homelab/badges/workflows/yamllint.yml/badge.svg)](https://git.mafyuh.dev/mafyuh/Auto-Homelab/actions)
[![Yamllint](https://git.mafyuh.dev/mafyuh/iac/badges/workflows/CD.yml/badge.svg)](https://git.mafyuh.dev/mafyuh/iac/actions) [![Yamllint](https://git.mafyuh.dev/mafyuh/Auto-Homelab/badges/workflows/CD.yml/badge.svg)](https://git.mafyuh.dev/mafyuh/Auto-Homelab/actions)
[![Renovate](https://git.mafyuh.dev/renovatebot/renovate/badges/workflows/renovate.yml/badge.svg)](https://git.mafyuh.dev/renovatebot/renovate/actions) [![Renovate](https://git.mafyuh.dev/renovatebot/renovate/badges/workflows/renovate.yml/badge.svg)](https://git.mafyuh.dev/renovatebot/renovate/actions)
[![Pulls](https://git.mafyuh.dev/mafyuh/iac/badges/pulls.svg)](https://git.mafyuh.dev/mafyuh/iac/pulls) [![Pulls](https://git.mafyuh.dev/mafyuh/Auto-Homelab/badges/pulls.svg)](https://git.mafyuh.dev/mafyuh/Auto-Homelab/pulls)
![Header Image](https://raw.githubusercontent.com/Mafyuh/homelab-svg-assets/main/assets/header_.png) ![Header Image](https://raw.githubusercontent.com/Mafyuh/homelab-svg-assets/main/assets/header_.png)
<div align="center"> <div align="center">
# Auto-Homelab
Homelab docker-compose environment defined in code. Using Forgejo Actions and Renovate bot for CI, AWX Tower and Forgejo Actions for CD. This is how I keep my Homelab UTD. Homelab docker-compose environment defined in code. Using Forgejo Actions and Renovate bot for CI, AWX Tower and Forgejo Actions for CD. This is how I keep my Homelab UTD.
</div> </div>
<p align="center"> <p align="center">
<a href="https://git.mafyuh.dev/mafyuh/iac/wiki">Wiki</a> | <a href="https://git.mafyuh.dev/mafyuh/Auto-Homelab/wiki">Wiki</a> |
<a href="https://loganmarchione.com/2022/10/how-to-run-renovate-on-a-self-hosted-gitea-and-drone-instance/">How to Setup</a> | <a href="https://loganmarchione.com/2022/10/how-to-run-renovate-on-a-self-hosted-gitea-and-drone-instance/">How to Setup</a> |
<a href="https://mafyuh.com">Blog</a> | <a href="https://mafyuh.com">Blog</a> |
<a href="https://www.youtube.com/watch?v=5CkCr9U_Q1Y">Inspiration</a> | <a href="https://www.youtube.com/watch?v=5CkCr9U_Q1Y">Inspiration</a> |
@ -303,4 +305,8 @@ graph TD
P --> Q P --> Q
``` ```
## To-Do
[View Project Board](https://git.mafyuh.dev/mafyuh/Auto-Homelab/projects/1)

View file

@ -22,7 +22,7 @@ services:
- 5443:5443/udp - 5443:5443/udp
adguardhome-sync: adguardhome-sync:
image: ghcr.io/linuxserver/adguardhome-sync@sha256:c6bad810acfc292b9220936751194f6ae9800b1228385ae8f2130fba280b79ee image: ghcr.io/linuxserver/adguardhome-sync@sha256:ee2ddd62c61d13e01da7f96135d1438376a22992c7d9951b2429bb2cfd64a05a
container_name: adguardhome-sync container_name: adguardhome-sync
environment: environment:
- PUID=1000 - PUID=1000

View file

@ -1,7 +1,7 @@
--- ---
services: services:
server: server:
image: codeberg.org/forgejo/forgejo:8.0.0 image: codeberg.org/forgejo/forgejo:7.0.5
container_name: forgejo container_name: forgejo
environment: environment:
- USER_UID=1000 - USER_UID=1000
@ -107,7 +107,7 @@ services:
networks: networks:
- gitea_main - gitea_main
n8n: n8n:
image: ghcr.io/n8n-io/n8n:1.53.0 image: ghcr.io/n8n-io/n8n:1.51.0
container_name: n8n container_name: n8n
ports: ports:
- 5678:5678 - 5678:5678
@ -137,7 +137,7 @@ services:
ipv4_address: 172.25.0.25 ipv4_address: 172.25.0.25
syncthing: syncthing:
image: ghcr.io/linuxserver/syncthing@sha256:84e9cd99d247d6ef31fc8c1a6967f068a8352a530095bb402bf3bb298aa10696 image: ghcr.io/linuxserver/syncthing@sha256:6fb87abe19730aad01b6511d660a0664be424986ae662b85eb76f0ce585c4890
container_name: syncthing container_name: syncthing
hostname: ARM #optional hostname: ARM #optional
environment: environment:

View file

@ -1,7 +1,7 @@
--- ---
services: services:
bazarr: bazarr:
image: ghcr.io/linuxserver/bazarr@sha256:e70de8a714ac57395d45052392001ec433b8f48aa1c204f13dae312cbcbe43af image: ghcr.io/linuxserver/bazarr@sha256:25f0d19ba9226fdf15aec0fc7fa134ba89fc6f77f09d7bd45b33c5960c47821e
container_name: bazarr container_name: bazarr
ports: ports:
- "6767:6767" - "6767:6767"
@ -15,7 +15,7 @@ services:
- PGID=1000 - PGID=1000
lidarr: lidarr:
image: ghcr.io/linuxserver/lidarr@sha256:5855582eee07024c2584c01aaf955901303162bf00de183a1fbf2e9b81041695 image: ghcr.io/linuxserver/lidarr@sha256:3c093803236a9f694f805392a5d6461b550f70b3f9cf4be0bc73b3428e3dbe90
container_name: lidarr container_name: lidarr
ports: ports:
- "8686:8686" - "8686:8686"
@ -31,7 +31,7 @@ services:
- PGID=1000 - PGID=1000
prowlarr: prowlarr:
image: ghcr.io/linuxserver/prowlarr@sha256:7fe57565907f4f776d43c15b2e020a0e4a62fe1e04e80e25b85a3ae4ca49e5d0 image: ghcr.io/linuxserver/prowlarr@sha256:9a98da4fb506278ce92c2fdbb4e08a38418dd1456e3dd8b3a1f00a42a8ec4fb0
container_name: prowlarr container_name: prowlarr
ports: ports:
- "9696:9696" - "9696:9696"
@ -137,10 +137,10 @@ services:
privileged: true privileged: true
devices: devices:
- /dev/kmsg - /dev/kmsg
image: gcr.io/cadvisor/cadvisor:v0.50.0 image: gcr.io/cadvisor/cadvisor:v0.49.1
syncthing: syncthing:
image: ghcr.io/linuxserver/syncthing@sha256:84e9cd99d247d6ef31fc8c1a6967f068a8352a530095bb402bf3bb298aa10696 image: ghcr.io/linuxserver/syncthing@sha256:6fb87abe19730aad01b6511d660a0664be424986ae662b85eb76f0ce585c4890
container_name: syncthing container_name: syncthing
hostname: ARRS hostname: ARRS
environment: environment:

View file

@ -32,7 +32,7 @@ services:
volumes: volumes:
- redis:/data - redis:/data
server: server:
image: ghcr.io/goauthentik/server@sha256:a98f95518269d01bb812eb0e12c6647f3d08a36e37b9fdbdccf9345d4431b9f0 image: ghcr.io/goauthentik/server@sha256:f79b6cf35b29a8591136afb633ddd46da303e9cd2ca82c7cdfbd020a780e15e8
restart: unless-stopped restart: unless-stopped
command: server command: server
environment: environment:
@ -53,7 +53,7 @@ services:
- postgresql - postgresql
- redis - redis
worker: worker:
image: ghcr.io/goauthentik/server@sha256:a98f95518269d01bb812eb0e12c6647f3d08a36e37b9fdbdccf9345d4431b9f0 image: ghcr.io/goauthentik/server@sha256:f79b6cf35b29a8591136afb633ddd46da303e9cd2ca82c7cdfbd020a780e15e8
restart: unless-stopped restart: unless-stopped
command: worker command: worker
environment: environment:

View file

@ -69,7 +69,7 @@ services:
privileged: true privileged: true
devices: devices:
- /dev/kmsg - /dev/kmsg
image: gcr.io/cadvisor/cadvisor:v0.50.0 image: gcr.io/cadvisor/cadvisor:v0.49.1
node-exporter: node-exporter:
image: docker.mafyuh.xyz/prom/node-exporter:v1.8.2 image: docker.mafyuh.xyz/prom/node-exporter:v1.8.2

View file

@ -1,7 +1,7 @@
--- ---
services: services:
jellyfin: jellyfin:
image: ghcr.io/linuxserver/jellyfin@sha256:eadf16cadd823a5cbe1b92750ee74111f9b2cac894834477ab4a43a5fc835ebe image: ghcr.io/linuxserver/jellyfin@sha256:843878f35dc700e502798b39edb24b84b7b7ff0788f1b7b9b1e71d4f8d34f951
container_name: jellyfin container_name: jellyfin
devices: devices:
- /dev/dri/renderD129:/dev/dri/renderD129 - /dev/dri/renderD129:/dev/dri/renderD129
@ -35,7 +35,7 @@ services:
privileged: true privileged: true
syncthing: syncthing:
image: ghcr.io/linuxserver/syncthing@sha256:84e9cd99d247d6ef31fc8c1a6967f068a8352a530095bb402bf3bb298aa10696 image: ghcr.io/linuxserver/syncthing@sha256:6fb87abe19730aad01b6511d660a0664be424986ae662b85eb76f0ce585c4890
container_name: syncthing container_name: syncthing
hostname: JF hostname: JF
environment: environment:

View file

@ -1,7 +1,7 @@
--- ---
services: services:
netbootxyz: netbootxyz:
image: ghcr.io/linuxserver/netbootxyz@sha256:8adbd502fa2f31f03f39b35c511e3484b1a7100ee7bc4ab878518066881079e9 image: ghcr.io/linuxserver/netbootxyz@sha256:3e7af245944519374e7e01422024f3b5baf67fa252ec92390fee1d57cd6cc1f6
container_name: netboot container_name: netboot
environment: environment:
- PUID=1000 - PUID=1000

View file

@ -0,0 +1,21 @@
---
services:
pages:
image: codeberg.org/codeberg/pages-server:v5.1
container_name: codeberg-pages
environment:
- GITEA_ROOT=https://git.mafyuh.dev
- GITEA_API_TOKEN=$GITEA_API_TOKEN
- ACME_ACCEPT_TERMS=true
- CLOUDFLARE_EMAIL=$CLOUDFLARE_EMAIL
- CLOUDFLARE_API_KEY=$CLOUDFLARE_API_KEY
- DNS_PROVIDER=cloudflare
- PAGES_DOMAIN=mafyuh.co
- CF_ZONE_API_TOKEN=$CF_ZONE_API_TOKEN
- CF_DNS_API_TOKEN=$CF_DNS_API_TOKEN
- ENABLE_HTTP_SERVER=false
ports:
- "80:80"
- "443:443"
volumes:
- /home/ubuntu/pages/datanew:/data

4167
docker/scripts/CD.json Normal file

File diff suppressed because it is too large Load diff

74
docker/scripts/README.md Normal file
View file

@ -0,0 +1,74 @@
# n8n Continuous Deployment
Previously used this script for CD, it worked, but I wanted an instant deployment and not just ran on a schedule. So I created an n8n automation. Here's the visual breakdown:
```mermaid
graph LR
A((Webhook Received)) --> B{PR Merged?}
B -- No --> C(End)
B -- Yes --> D{Extract App Name}
D --> E{SSH to Host Machine}
E --> F{Git Pull & Docker Compose Up}
F --> G{Error?}
G -- Yes --> H[Send Gotify Notification]
G -- No --> I[Extract PR Number]
I --> J[Add PR Number to Forgejo API URL]
J --> K[Send Review with Logs]
K --> L(End)
H --> L
```
## Outline
- Webhook is sent whenever a PR is merged
- Filters out any new, edited or re-opened PR's
- Checks the PR title for app name, which is filtered so each SSH session matches based on the IF conditions.
- SSH in to the machine that hosts that docker compose stack running git pull and docker compose up -d
- Optional, If there is any error message we sent Gotify a link to the PR and error message
- Set number from JSON to number in n8n
- Add that number to URL of API request to Forgejo which we add a review with the logs if no errors. https://git.mafyuh.dev/mafyuh/Auto-Homelab/pulls/222#issuecomment-1799
The only exception is n8n itself. Which for now I will manually update.
To import this into your n8n, create a new workflow, top right click 3 dots - Import from URL and paste https://git.mafyuh.dev/mafyuh/Auto-Homelab/raw/branch/main/scripts/CD.json
## dccd instructions (no longer used besides ag-backup)
Modified version of https://github.com/loganmarchione/dccd, with Gotify notification on error and allowing to choose which directory is cd'd into before running script. I run this on each docker host through crontab every 30 minutes, just adding the -f flag with the folder which that host represents. So each directory represents a host
Clone this repo:
```
git clone https://git.mafyuh.dev/mafyuh/Auto-Homelab.git
```
Make executable:
```
sudo chmod +x /home/mafyuh/Auto-Homelab/scripts/dccd.sh
```
Example:
```
./dccd.sh -b main -d /home/mafyuh/Auto-Homelab -p -f 'arrs'
```
Crontab every 30 mins:
```
*/30 * * * * /home/mafyuh/Auto-Homelab/scripts/dccd.sh -b main -d /home/mafyuh/Auto-Homelab -l /tmp/dccd.txt -p -f 'arrs'
```
View Logs:
```
cat /tmp/dccd.txt
```
Export Variables:
```
export GOTIFY_BASE_URL="https:go.example.com"
export GOTIFY_TOKEN="token"
```
Full Usage:
```
Options:
-b <name> Specify the remote branch to track (default: main)
-d <path> Specify the base directory of the git repository (required)
-h Show this help message
-l <path> Specify the path to the log file (default: /tmp/dccd.log)
-p Specify if you want to prune docker images (default: don't prune)
-x <path> Exclude directories matching the specified pattern (relative to the base directory)
-f <pattern> Specify the pattern for folder names to match
```

View file

@ -28,10 +28,6 @@ resource "proxmox_virtual_environment_file" "cloud_config" {
- systemctl start qemu-guest-agent - systemctl start qemu-guest-agent
- curl -fsSL https://get.docker.com | sudo sh - curl -fsSL https://get.docker.com | sudo sh
- su - mafyuh -c 'git clone https://git.mafyuh.dev/mafyuh/iac.git /home/mafyuh/iac' - su - mafyuh -c 'git clone https://git.mafyuh.dev/mafyuh/iac.git /home/mafyuh/iac'
- su - mafyuh -c 'git config --global user.name "Mafyuh"'
- su - mafyuh -c 'git config --global user.email "matt@mafyuh.com"'
- su - mafyuh -c 'echo "alias dcu=\'docker compose up -d\'" >> /home/mafyuh/.bashrc
- su - mafyuh -c 'echo "alias dcd=\'docker compose down\'" >> /home/mafyuh/.bashrc
- echo "done" > /tmp/cloud-config.done - echo "done" > /tmp/cloud-config.done
EOF EOF
@ -67,8 +63,6 @@ resource "proxmox_virtual_environment_file" "cloud_config2" {
- su - mafyuh -c 'git clone https://git.mafyuh.dev/mafyuh/iac.git /home/mafyuh/iac' - su - mafyuh -c 'git clone https://git.mafyuh.dev/mafyuh/iac.git /home/mafyuh/iac'
- su - mafyuh -c 'git config --global user.name "Mafyuh"' - su - mafyuh -c 'git config --global user.name "Mafyuh"'
- su - mafyuh -c 'git config --global user.email "matt@mafyuh.com"' - su - mafyuh -c 'git config --global user.email "matt@mafyuh.com"'
- su - mafyuh -c 'echo "alias dcu=\'docker compose up -d\'" >> /home/mafyuh/.bashrc
- su - mafyuh -c 'echo "alias dcd=\'docker compose down\'" >> /home/mafyuh/.bashrc
- echo "done" > /tmp/cloud-config.done - echo "done" > /tmp/cloud-config.done
EOF EOF