Compare commits
	
		
			24 Commits
		
	
	
		
			8710ffc70d
			...
			add-auto-u
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f088247ac0 | |||
| e1b6d3132a | |||
| f71ded1a01 | |||
| a2ae9e5ff6 | |||
| fb6651f1dc | |||
| 58a6be8da0 | |||
| 17c3077cf0 | |||
| 75fabb3523 | |||
| 336e197176 | |||
| f0c4cb51b8 | |||
| c95ca45a67 | |||
| a287e50048 | |||
| 01d959d12c | |||
| a4fc5f7608 | |||
| e3f4eb4e95 | |||
| a8350459ae | |||
| eac67e269c | |||
| 85cfca08f5 | |||
| 2cc05a19e6 | |||
| d54d04bcc9 | |||
| 5f76f69d8b | |||
| ef5309363c | |||
| ff89683038 | |||
| a338186a77 | 
							
								
								
									
										29
									
								
								CLAUDE.md
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								CLAUDE.md
									
									
									
									
									
								
							@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Overview
 | 
					## Overview
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This is a personal infrastructure Ansible playbook that automates deployment and management of 25 self-hosted Docker services across two domains (`thesatelliteoflove.com` and `nerder.land`). The setup uses Tailscale VPN for secure networking and Caddy for reverse proxy with automated HTTPS.
 | 
					This is a personal infrastructure Ansible playbook that automates deployment and management of 27 self-hosted Docker services across two domains (`thesatelliteoflove.com` and `nerder.land`). The setup uses Tailscale VPN for secure networking and Caddy for reverse proxy with automated HTTPS.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Important**: Always review `DEPLOYMENT_LEARNINGS.md` when working on this repository for lessons learned and troubleshooting guidance.
 | 
					**Important**: Always review `DEPLOYMENT_LEARNINGS.md` when working on this repository for lessons learned and troubleshooting guidance.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,18 +28,18 @@ ansible-playbook dns.yml -i hosts.yml
 | 
				
			|||||||
### Service Management
 | 
					### Service Management
 | 
				
			||||||
```bash
 | 
					```bash
 | 
				
			||||||
# Deploy specific services using tags (now properly isolated)
 | 
					# Deploy specific services using tags (now properly isolated)
 | 
				
			||||||
ansible-playbook site.yml -i hosts.yml --tags caddy --vault-password-file vault_pass --extra-vars "@secrets.enc"
 | 
					ansible-playbook site.yml -i hosts.yml --tags caddy --vault-password-file vault_pass
 | 
				
			||||||
ansible-playbook site.yml -i hosts.yml --tags authentik --vault-password-file vault_pass --extra-vars "@secrets.enc"
 | 
					ansible-playbook site.yml -i hosts.yml --tags authentik --vault-password-file vault_pass
 | 
				
			||||||
ansible-playbook site.yml -i hosts.yml --tags mmdl --vault-password-file vault_pass --extra-vars "@secrets.enc"
 | 
					ansible-playbook site.yml -i hosts.yml --tags mmdl --vault-password-file vault_pass
 | 
				
			||||||
ansible-playbook site.yml -i hosts.yml --tags docker --vault-password-file vault_pass --extra-vars "@secrets.enc"  # all docker services
 | 
					ansible-playbook site.yml -i hosts.yml --tags docker --vault-password-file vault_pass  # all docker services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Deploy services by category (new organized structure)
 | 
					# Deploy services by category (new organized structure)
 | 
				
			||||||
ansible-playbook site.yml -i hosts.yml --tags infrastructure --vault-password-file vault_pass --extra-vars "@secrets.enc"
 | 
					ansible-playbook site.yml -i hosts.yml --tags infrastructure --vault-password-file vault_pass
 | 
				
			||||||
ansible-playbook site.yml -i hosts.yml --tags media,productivity --vault-password-file vault_pass --extra-vars "@secrets.enc"
 | 
					ansible-playbook site.yml -i hosts.yml --tags media,productivity --vault-password-file vault_pass
 | 
				
			||||||
ansible-playbook site.yml -i hosts.yml --tags development,monitoring --vault-password-file vault_pass --extra-vars "@secrets.enc"
 | 
					ansible-playbook site.yml -i hosts.yml --tags development,monitoring --vault-password-file vault_pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Deploy only infrastructure components
 | 
					# Deploy only infrastructure components
 | 
				
			||||||
ansible-playbook site.yml -i hosts.yml --tags common,cron --vault-password-file vault_pass --extra-vars "@secrets.enc"
 | 
					ansible-playbook site.yml -i hosts.yml --tags common,cron --vault-password-file vault_pass
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Architecture
 | 
					## Architecture
 | 
				
			||||||
@@ -51,7 +51,7 @@ ansible-playbook site.yml -i hosts.yml --tags common,cron --vault-password-file
 | 
				
			|||||||
### Role Structure
 | 
					### Role Structure
 | 
				
			||||||
- **bootstrap**: Initial server hardening, user creation, Tailscale VPN setup
 | 
					- **bootstrap**: Initial server hardening, user creation, Tailscale VPN setup
 | 
				
			||||||
- **common**: Basic system configuration, UFW firewall management
 | 
					- **common**: Basic system configuration, UFW firewall management
 | 
				
			||||||
- **docker**: Comprehensive service deployment (25 containerized applications, organized by category)
 | 
					- **docker**: Comprehensive service deployment (24 containerized applications, organized by category)
 | 
				
			||||||
- **cron**: Scheduled task management (currently Warhammer RSS feed generation)
 | 
					- **cron**: Scheduled task management (currently Warhammer RSS feed generation)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Docker Role Organization (Reorganized into Logical Categories)
 | 
					### Docker Role Organization (Reorganized into Logical Categories)
 | 
				
			||||||
@@ -60,15 +60,15 @@ The docker role is now organized into logical service groups under `roles/docker
 | 
				
			|||||||
- **infrastructure/**: Core platform components
 | 
					- **infrastructure/**: Core platform components
 | 
				
			||||||
  - Caddy (reverse proxy), Authentik (SSO), Dockge (container management)
 | 
					  - Caddy (reverse proxy), Authentik (SSO), Dockge (container management)
 | 
				
			||||||
- **development/**: Development and collaboration tools  
 | 
					- **development/**: Development and collaboration tools  
 | 
				
			||||||
  - Gitea, Code Server, Matrix (Conduit)
 | 
					  - Gitea, Code Server, ByteStash
 | 
				
			||||||
- **media/**: Content creation and consumption
 | 
					- **media/**: Content creation and consumption
 | 
				
			||||||
  - Audiobookshelf, Calibre, Ghost blog, Pinchflat, Pinry, Karakeep (formerly Hoarder), Manyfold
 | 
					  - Audiobookshelf, Calibre, Ghost blog, Pinchflat, Pinry, Karakeep (formerly Hoarder), Manyfold
 | 
				
			||||||
- **productivity/**: Personal organization and document management
 | 
					- **productivity/**: Personal organization and document management
 | 
				
			||||||
  - Paperless-NGX, MMDL, Baikal (CalDAV/CardDAV), Syncthing, Heyform, Dawarich, Pingvin
 | 
					  - Paperless-NGX, MMDL, Baikal (CalDAV/CardDAV), Syncthing, Heyform, Dawarich, Palmr, Obsidian LiveSync
 | 
				
			||||||
- **communication/**: Social media and external communication
 | 
					- **communication/**: Social media and external communication
 | 
				
			||||||
  - GoToSocial (Fediverse), Postiz (social media management)  
 | 
					  - GoToSocial (Fediverse), Postiz (social media management)  
 | 
				
			||||||
- **monitoring/**: System monitoring and alerts
 | 
					- **monitoring/**: System monitoring and alerts
 | 
				
			||||||
  - Changedetection, Glance dashboard, AppriseAPI
 | 
					  - Changedetection, Glance dashboard, AppriseAPI, Gotify
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Variable Management
 | 
					### Variable Management
 | 
				
			||||||
**Critical**: This infrastructure uses a centralized variable hierarchy in `group_vars/all/`:
 | 
					**Critical**: This infrastructure uses a centralized variable hierarchy in `group_vars/all/`:
 | 
				
			||||||
@@ -131,10 +131,11 @@ Common domains requiring hairpinning fixes:
 | 
				
			|||||||
- **Dawarich**: Based on production compose file at https://github.com/Freika/dawarich/blob/master/docker/docker-compose.production.yml
 | 
					- **Dawarich**: Based on production compose file at https://github.com/Freika/dawarich/blob/master/docker/docker-compose.production.yml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Service Memories
 | 
					## Service Memories
 | 
				
			||||||
- pingvin is the service that responds on files.thesatelliteoflove.com
 | 
					- palmr is the service that responds on files.thesatelliteoflove.com
 | 
				
			||||||
- karakeep (formerly called hoarder) is deployed with both 'hoarder' and 'karakeep' tags for backward compatibility
 | 
					- karakeep (formerly called hoarder) is deployed with both 'hoarder' and 'karakeep' tags for backward compatibility
 | 
				
			||||||
- whenever i ask you what containers need updates, run dockcheck and return a list of containers needing updates
 | 
					- whenever i ask you what containers need updates, run dockcheck and return a list of containers needing updates
 | 
				
			||||||
- when i ask for the status container updates i want you to run dockcheck on the docker host https://github.com/mag37/dockcheck?ref=selfh.st
 | 
					- when i ask for the status container updates i want you to run dockcheck on the docker host https://github.com/mag37/dockcheck?ref=selfh.st
 | 
				
			||||||
 | 
					- this is your reference for glance configuration https://github.com/glanceapp/glance/blob/main/docs/configuration.md#configuring-glance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Variable Management Implementation Notes
 | 
					## Variable Management Implementation Notes
 | 
				
			||||||
**Major Infrastructure Update**: Variable management system was implemented to replace all hardcoded values with centralized variables.
 | 
					**Major Infrastructure Update**: Variable management system was implemented to replace all hardcoded values with centralized variables.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ The playbook manages two main environments:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Services Deployed
 | 
					## Services Deployed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The Docker role deploys and manages 25 self-hosted services organized into logical categories:
 | 
					The Docker role deploys and manages 27 self-hosted services organized into logical categories:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Infrastructure
 | 
					### Infrastructure
 | 
				
			||||||
- **Caddy** (Reverse proxy with automatic HTTPS)
 | 
					- **Caddy** (Reverse proxy with automatic HTTPS)
 | 
				
			||||||
@@ -20,7 +20,7 @@ The Docker role deploys and manages 25 self-hosted services organized into logic
 | 
				
			|||||||
### Development
 | 
					### Development
 | 
				
			||||||
- **Gitea** (Git repository hosting)
 | 
					- **Gitea** (Git repository hosting)
 | 
				
			||||||
- **Code Server** (VS Code in browser)
 | 
					- **Code Server** (VS Code in browser)
 | 
				
			||||||
- **Matrix Conduit** (Communication/chat)
 | 
					- **ByteStash** (Code snippet management)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Media
 | 
					### Media
 | 
				
			||||||
- **Audiobookshelf** (Audiobook server)
 | 
					- **Audiobookshelf** (Audiobook server)
 | 
				
			||||||
@@ -38,7 +38,8 @@ The Docker role deploys and manages 25 self-hosted services organized into logic
 | 
				
			|||||||
- **Syncthing** (File synchronization)
 | 
					- **Syncthing** (File synchronization)
 | 
				
			||||||
- **HeyForm** (Form builder)
 | 
					- **HeyForm** (Form builder)
 | 
				
			||||||
- **Dawarich** (Location tracking)
 | 
					- **Dawarich** (Location tracking)
 | 
				
			||||||
- **Pingvin Share** (File sharing)
 | 
					- **Palmr** (File sharing)
 | 
				
			||||||
 | 
					- **Obsidian LiveSync** (Note synchronization)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Communication
 | 
					### Communication
 | 
				
			||||||
- **GoToSocial** (Fediverse/Mastodon)
 | 
					- **GoToSocial** (Fediverse/Mastodon)
 | 
				
			||||||
@@ -48,6 +49,7 @@ The Docker role deploys and manages 25 self-hosted services organized into logic
 | 
				
			|||||||
- **Changedetection** (Website change monitoring)
 | 
					- **Changedetection** (Website change monitoring)
 | 
				
			||||||
- **Glance** (Dashboard)
 | 
					- **Glance** (Dashboard)
 | 
				
			||||||
- **AppriseAPI** (Notification service)
 | 
					- **AppriseAPI** (Notification service)
 | 
				
			||||||
 | 
					- **Gotify** (Push notifications)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Structure
 | 
					## Structure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								dns.yml
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								dns.yml
									
									
									
									
									
								
							@@ -27,6 +27,8 @@
 | 
				
			|||||||
            ip: "152.53.36.98"
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
          - name: "code"
 | 
					          - name: "code"
 | 
				
			||||||
            ip: "152.53.36.98"
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
 | 
					          - name: "snippets"
 | 
				
			||||||
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
          - name: cal
 | 
					          - name: cal
 | 
				
			||||||
            ip: "152.53.36.98"
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
          - name: phlog
 | 
					          - name: phlog
 | 
				
			||||||
@@ -35,8 +37,6 @@
 | 
				
			|||||||
            ip: "152.53.36.98"
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
          - name: watcher
 | 
					          - name: watcher
 | 
				
			||||||
            ip: "152.53.36.98"
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
          - name: chat
 | 
					 | 
				
			||||||
            ip: "152.53.36.98"
 | 
					 | 
				
			||||||
          - name: models
 | 
					          - name: models
 | 
				
			||||||
            ip: "152.53.36.98"
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
          - name: tasks
 | 
					          - name: tasks
 | 
				
			||||||
@@ -47,6 +47,16 @@
 | 
				
			|||||||
            ip: "152.53.36.98"
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
          - name: bookmarks
 | 
					          - name: bookmarks
 | 
				
			||||||
            ip: "152.53.36.98"
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
 | 
					          - name: gotify
 | 
				
			||||||
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
 | 
					          - name: gotify-assistant
 | 
				
			||||||
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
 | 
					          - name: pdg
 | 
				
			||||||
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
 | 
					          - name: kanboard
 | 
				
			||||||
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
 | 
					          - name: grocy
 | 
				
			||||||
 | 
					            ip: "152.53.36.98"
 | 
				
			||||||
      - name: nerder.land
 | 
					      - name: nerder.land
 | 
				
			||||||
        dns_records:
 | 
					        dns_records:
 | 
				
			||||||
          - name: "forms"
 | 
					          - name: "forms"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ subdomains:
 | 
				
			|||||||
  tasks: "tasks.{{ primary_domain }}"  # MMDL
 | 
					  tasks: "tasks.{{ primary_domain }}"  # MMDL
 | 
				
			||||||
  syncthing: "syncthing.{{ primary_domain }}"
 | 
					  syncthing: "syncthing.{{ primary_domain }}"
 | 
				
			||||||
  loclog: "loclog.{{ primary_domain }}"  # Dawarich
 | 
					  loclog: "loclog.{{ primary_domain }}"  # Dawarich
 | 
				
			||||||
  files: "files.{{ primary_domain }}"  # Pingvin file sharing
 | 
					  files: "files.{{ primary_domain }}"  # Palmr file sharing
 | 
				
			||||||
  social: "social.{{ primary_domain }}"  # GoToSocial
 | 
					  social: "social.{{ primary_domain }}"  # GoToSocial
 | 
				
			||||||
  post: "post.{{ primary_domain }}"  # Postiz
 | 
					  post: "post.{{ primary_domain }}"  # Postiz
 | 
				
			||||||
  home: "home.{{ primary_domain }}"  # Glance
 | 
					  home: "home.{{ primary_domain }}"  # Glance
 | 
				
			||||||
@@ -29,7 +29,11 @@ subdomains:
 | 
				
			|||||||
  appriseapi: "appriseapi.{{ primary_domain }}"
 | 
					  appriseapi: "appriseapi.{{ primary_domain }}"
 | 
				
			||||||
  dockge: "dockge.{{ primary_domain }}"
 | 
					  dockge: "dockge.{{ primary_domain }}"
 | 
				
			||||||
  code: "code.{{ primary_domain }}"  # Code Server
 | 
					  code: "code.{{ primary_domain }}"  # Code Server
 | 
				
			||||||
  chat: "chat.{{ primary_domain }}"  # Conduit Matrix
 | 
					  bytestash: "snippets.{{ primary_domain }}"  # ByteStash code snippets
 | 
				
			||||||
 | 
					  gotify: "gotify.{{ primary_domain }}"  # Gotify notifications
 | 
				
			||||||
 | 
					  gotify_assistant: "gotify-assistant.{{ primary_domain }}"  # iGotify iOS assistant
 | 
				
			||||||
 | 
					  kanboard: "kanboard.{{ primary_domain }}"  # Kanboard project management
 | 
				
			||||||
 | 
					  grocy: "grocy.{{ primary_domain }}"  # Grocy kitchen ERP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Email domains for notifications
 | 
					# Email domains for notifications
 | 
				
			||||||
email_domains:
 | 
					email_domains:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,11 +3,11 @@
 | 
				
			|||||||
# Service categories for organization
 | 
					# Service categories for organization
 | 
				
			||||||
service_categories:
 | 
					service_categories:
 | 
				
			||||||
  infrastructure: ["caddy", "authentik", "dockge"]
 | 
					  infrastructure: ["caddy", "authentik", "dockge"]
 | 
				
			||||||
  development: ["gitea", "codeserver", "conduit"]
 | 
					  development: ["gitea", "codeserver"]
 | 
				
			||||||
  media: ["audiobookshelf", "calibre", "ghost", "pinchflat", "pinry", "hoarder", "manyfold"]
 | 
					  media: ["audiobookshelf", "calibre", "ghost", "pinchflat", "pinry", "hoarder", "manyfold"]
 | 
				
			||||||
  productivity: ["paperlessngx", "baikal", "syncthing", "mmdl", "heyform", "dawarich", "pingvin"]
 | 
					  productivity: ["paperlessngx", "baikal", "syncthing", "mmdl", "heyform", "dawarich", "pingvin"]
 | 
				
			||||||
  communication: ["gotosocial", "postiz"]
 | 
					  communication: ["gotosocial", "postiz"]
 | 
				
			||||||
  monitoring: ["glance", "changedetection", "appriseapi"]
 | 
					  monitoring: ["glance", "changedetection", "appriseapi", "gotify"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Common service configuration
 | 
					# Common service configuration
 | 
				
			||||||
services:
 | 
					services:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								roles/cron/handlers/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								roles/cron/handlers/main.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					# Handler to restart systemd-journald service
 | 
				
			||||||
 | 
					- name: restart rsyslog
 | 
				
			||||||
 | 
					  systemd:
 | 
				
			||||||
 | 
					    name: systemd-journald
 | 
				
			||||||
 | 
					    state: restarted
 | 
				
			||||||
@@ -1,4 +1,7 @@
 | 
				
			|||||||
---
 | 
					---
 | 
				
			||||||
 | 
					# Enable cron logging in systemd-journald (already enabled by default)
 | 
				
			||||||
 | 
					# We'll rely on journalctl for cron execution logs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Ensure the script is copied to the target machine
 | 
					# Ensure the script is copied to the target machine
 | 
				
			||||||
- name: Copy the warhammer feed update script
 | 
					- name: Copy the warhammer feed update script
 | 
				
			||||||
  copy:
 | 
					  copy:
 | 
				
			||||||
@@ -16,3 +19,97 @@
 | 
				
			|||||||
    hour: "9"
 | 
					    hour: "9"
 | 
				
			||||||
    user: root
 | 
					    user: root
 | 
				
			||||||
    job: "/usr/local/bin/update_warhammer_feed.sh"
 | 
					    job: "/usr/local/bin/update_warhammer_feed.sh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create .local/bin directory for phil user
 | 
				
			||||||
 | 
					- name: Ensure .local/bin directory exists for phil
 | 
				
			||||||
 | 
					  file:
 | 
				
			||||||
 | 
					    path: /home/phil/.local/bin
 | 
				
			||||||
 | 
					    state: directory
 | 
				
			||||||
 | 
					    mode: '0755'
 | 
				
			||||||
 | 
					    owner: phil
 | 
				
			||||||
 | 
					    group: phil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Install dockcheck script in phil's .local/bin
 | 
				
			||||||
 | 
					- name: Download dockcheck.sh script
 | 
				
			||||||
 | 
					  get_url:
 | 
				
			||||||
 | 
					    url: https://raw.githubusercontent.com/mag37/dockcheck/main/dockcheck.sh
 | 
				
			||||||
 | 
					    dest: /home/phil/.local/bin/dockcheck.sh
 | 
				
			||||||
 | 
					    mode: '0755'
 | 
				
			||||||
 | 
					    owner: phil
 | 
				
			||||||
 | 
					    group: phil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create .config directory for phil user
 | 
				
			||||||
 | 
					- name: Ensure .config directory exists for phil
 | 
				
			||||||
 | 
					  file:
 | 
				
			||||||
 | 
					    path: /home/phil/.config
 | 
				
			||||||
 | 
					    state: directory
 | 
				
			||||||
 | 
					    mode: '0755'
 | 
				
			||||||
 | 
					    owner: phil
 | 
				
			||||||
 | 
					    group: phil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create notify_templates directory alongside dockcheck.sh
 | 
				
			||||||
 | 
					- name: Ensure notify_templates directory exists in .local/bin
 | 
				
			||||||
 | 
					  file:
 | 
				
			||||||
 | 
					    path: /home/phil/.local/bin/notify_templates
 | 
				
			||||||
 | 
					    state: directory
 | 
				
			||||||
 | 
					    mode: '0755'
 | 
				
			||||||
 | 
					    owner: phil
 | 
				
			||||||
 | 
					    group: phil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Download notify_v2.sh script for dockcheck notifications
 | 
				
			||||||
 | 
					- name: Download notify_v2.sh script
 | 
				
			||||||
 | 
					  get_url:
 | 
				
			||||||
 | 
					    url: https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_v2.sh
 | 
				
			||||||
 | 
					    dest: /home/phil/.local/bin/notify_templates/notify_v2.sh
 | 
				
			||||||
 | 
					    mode: '0755'
 | 
				
			||||||
 | 
					    owner: phil
 | 
				
			||||||
 | 
					    group: phil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Download notify_gotify.sh script for dockcheck notifications
 | 
				
			||||||
 | 
					- name: Download notify_gotify.sh script
 | 
				
			||||||
 | 
					  get_url:
 | 
				
			||||||
 | 
					    url: https://raw.githubusercontent.com/mag37/dockcheck/main/notify_templates/notify_gotify.sh
 | 
				
			||||||
 | 
					    dest: /home/phil/.local/bin/notify_templates/notify_gotify.sh
 | 
				
			||||||
 | 
					    mode: '0755'
 | 
				
			||||||
 | 
					    owner: phil
 | 
				
			||||||
 | 
					    group: phil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Template dockcheck configuration file
 | 
				
			||||||
 | 
					- name: Template dockcheck configuration
 | 
				
			||||||
 | 
					  template:
 | 
				
			||||||
 | 
					    src: dockcheck.config.j2
 | 
				
			||||||
 | 
					    dest: /home/phil/.config/dockcheck.config
 | 
				
			||||||
 | 
					    mode: '0644'
 | 
				
			||||||
 | 
					    owner: phil
 | 
				
			||||||
 | 
					    group: phil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create log directory for dockcheck
 | 
				
			||||||
 | 
					- name: Create dockcheck log directory
 | 
				
			||||||
 | 
					  file:
 | 
				
			||||||
 | 
					    path: /var/log/dockcheck
 | 
				
			||||||
 | 
					    state: directory
 | 
				
			||||||
 | 
					    mode: '0755'
 | 
				
			||||||
 | 
					    owner: phil
 | 
				
			||||||
 | 
					    group: phil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create dockcheck wrapper script to avoid cron escaping issues
 | 
				
			||||||
 | 
					- name: Create dockcheck wrapper script
 | 
				
			||||||
 | 
					  copy:
 | 
				
			||||||
 | 
					    dest: /home/phil/.local/bin/run_dockcheck.sh
 | 
				
			||||||
 | 
					    mode: '0755'
 | 
				
			||||||
 | 
					    owner: phil
 | 
				
			||||||
 | 
					    group: phil
 | 
				
			||||||
 | 
					    content: |
 | 
				
			||||||
 | 
					      #!/bin/bash
 | 
				
			||||||
 | 
					      cd /home/phil
 | 
				
			||||||
 | 
					      /home/phil/.local/bin/dockcheck.sh >> /var/log/dockcheck/dockcheck.log 2>&1
 | 
				
			||||||
 | 
					      echo "$(date "+%Y-%m-%d %H:%M:%S") - Dockcheck completed with exit code $?" >> /var/log/dockcheck/dockcheck.log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create cron job for dockcheck as phil user with logging
 | 
				
			||||||
 | 
					- name: Create cron job for dockcheck container updates
 | 
				
			||||||
 | 
					  cron:
 | 
				
			||||||
 | 
					    name: "Check Docker container updates"
 | 
				
			||||||
 | 
					    minute: "0"
 | 
				
			||||||
 | 
					    hour: "8"
 | 
				
			||||||
 | 
					    user: phil
 | 
				
			||||||
 | 
					    job: "/home/phil/.local/bin/run_dockcheck.sh"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										18
									
								
								roles/cron/templates/dockcheck.config.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								roles/cron/templates/dockcheck.config.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					# Dockcheck Configuration - Check only, no updates
 | 
				
			||||||
 | 
					# Don't update, just check for updates
 | 
				
			||||||
 | 
					# DontUpdate=true
 | 
				
			||||||
 | 
					OnlyLabel=true
 | 
				
			||||||
 | 
					AutoMode=true 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Enable notifications
 | 
				
			||||||
 | 
					Notify=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Exclude containers from checking
 | 
				
			||||||
 | 
					Exclude="authentik-postgresql-1,dawarich_redis,dawarich_db"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Notification channels
 | 
				
			||||||
 | 
					NOTIFY_CHANNELS="gotify"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Gotify notification configuration
 | 
				
			||||||
 | 
					GOTIFY_DOMAIN="https://{{ subdomains.gotify }}"
 | 
				
			||||||
 | 
					GOTIFY_TOKEN="{{ vault_dockcheck.gotify_token }}"
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
# Docker Role
 | 
					# Docker Role
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Purpose
 | 
					## Purpose
 | 
				
			||||||
Deploys and manages a comprehensive self-hosted infrastructure with 22+ containerized services organized into logical categories, transforming a server into a personal cloud platform with authentication, media management, productivity tools, and development services.
 | 
					Deploys and manages a comprehensive self-hosted infrastructure with 24 containerized services organized into logical categories, transforming a server into a personal cloud platform with authentication, media management, productivity tools, and development services.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Architecture Overview
 | 
					## Architecture Overview
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,7 +28,7 @@ Deploys and manages a comprehensive self-hosted infrastructure with 22+ containe
 | 
				
			|||||||
### Development (`development/`)
 | 
					### Development (`development/`)
 | 
				
			||||||
- **Gitea** - Self-hosted Git with CI/CD runners
 | 
					- **Gitea** - Self-hosted Git with CI/CD runners
 | 
				
			||||||
- **Code Server** - VS Code in the browser
 | 
					- **Code Server** - VS Code in the browser
 | 
				
			||||||
- **Conduit** - Matrix homeserver for communication
 | 
					- **ByteStash** - Code snippet management and organization
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Media (`media/`)
 | 
					### Media (`media/`)
 | 
				
			||||||
- **Audiobookshelf** - Audiobook and podcast server
 | 
					- **Audiobookshelf** - Audiobook and podcast server
 | 
				
			||||||
@@ -46,7 +46,8 @@ Deploys and manages a comprehensive self-hosted infrastructure with 22+ containe
 | 
				
			|||||||
- **Syncthing** - Decentralized file sync
 | 
					- **Syncthing** - Decentralized file sync
 | 
				
			||||||
- **Heyform** - Form builder and surveys
 | 
					- **Heyform** - Form builder and surveys
 | 
				
			||||||
- **Dawarich** - Location tracking
 | 
					- **Dawarich** - Location tracking
 | 
				
			||||||
- **Pingvin Share** - File sharing service
 | 
					- **Palmr** - File sharing service
 | 
				
			||||||
 | 
					- **Obsidian LiveSync** - CouchDB backend for note synchronization
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Communication (`communication/`)
 | 
					### Communication (`communication/`)
 | 
				
			||||||
- **GoToSocial** - Lightweight ActivityPub server
 | 
					- **GoToSocial** - Lightweight ActivityPub server
 | 
				
			||||||
@@ -56,6 +57,7 @@ Deploys and manages a comprehensive self-hosted infrastructure with 22+ containe
 | 
				
			|||||||
- **Glance** - Customizable dashboard with monitoring
 | 
					- **Glance** - Customizable dashboard with monitoring
 | 
				
			||||||
- **Change Detection** - Website monitoring
 | 
					- **Change Detection** - Website monitoring
 | 
				
			||||||
- **Apprise API** - Unified notifications
 | 
					- **Apprise API** - Unified notifications
 | 
				
			||||||
 | 
					- **Gotify** - Self-hosted push notification service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Deployment Patterns
 | 
					## Deployment Patterns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -92,8 +94,7 @@ roles/docker/
 | 
				
			|||||||
│   ├── development/
 | 
					│   ├── development/
 | 
				
			||||||
│   │   ├── main.yml               # Development category orchestrator
 | 
					│   │   ├── main.yml               # Development category orchestrator
 | 
				
			||||||
│   │   ├── gitea.yml              # Git hosting
 | 
					│   │   ├── gitea.yml              # Git hosting
 | 
				
			||||||
│   │   ├── codeserver.yml         # VS Code server
 | 
					│   │   └── codeserver.yml         # VS Code server
 | 
				
			||||||
│   │   └── conduit.yml            # Matrix server
 | 
					 | 
				
			||||||
│   ├── media/                     # Media services (7 services)
 | 
					│   ├── media/                     # Media services (7 services)
 | 
				
			||||||
│   ├── productivity/              # Productivity services (7 services)
 | 
					│   ├── productivity/              # Productivity services (7 services)
 | 
				
			||||||
│   ├── communication/             # Communication services (2 services)
 | 
					│   ├── communication/             # Communication services (2 services)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,6 +40,30 @@ tasks.thesatelliteoflove.com {
 | 
				
			|||||||
    reverse_proxy mmdl:3000
 | 
					    reverse_proxy mmdl:3000
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					kanboard.thesatelliteoflove.com {
 | 
				
			||||||
 | 
					    reverse_proxy kanboard:80
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					grocy.thesatelliteoflove.com {
 | 
				
			||||||
 | 
					    # API endpoints bypass forward auth for mobile apps
 | 
				
			||||||
 | 
					    handle /api/* {
 | 
				
			||||||
 | 
					        reverse_proxy grocy:80
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # Web interface requires Authentik authentication
 | 
				
			||||||
 | 
					    forward_auth authentik-server-1:9000 {
 | 
				
			||||||
 | 
					        uri /outpost.goauthentik.io/auth/caddy
 | 
				
			||||||
 | 
					        copy_headers {
 | 
				
			||||||
 | 
					            X-authentik-username
 | 
				
			||||||
 | 
					            X-authentik-groups  
 | 
				
			||||||
 | 
					            X-authentik-email
 | 
				
			||||||
 | 
					            X-authentik-name
 | 
				
			||||||
 | 
					            X-authentik-uid
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    reverse_proxy grocy:80
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
phlog.thesatelliteoflove.com {
 | 
					phlog.thesatelliteoflove.com {
 | 
				
			||||||
    reverse_proxy ghost-1-ghost-1:2368
 | 
					    reverse_proxy ghost-1-ghost-1:2368
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -49,8 +73,12 @@ code.thesatelliteoflove.com {
 | 
				
			|||||||
    reverse_proxy authentik-server-1:9000
 | 
					    reverse_proxy authentik-server-1:9000
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					snippets.thesatelliteoflove.com {
 | 
				
			||||||
 | 
					    reverse_proxy bytestash:5000
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
files.thesatelliteoflove.com {
 | 
					files.thesatelliteoflove.com {
 | 
				
			||||||
    reverse_proxy pingvin-pingvin-share-1:3000
 | 
					    reverse_proxy palmr-palmr-1:5487
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
git.thesatelliteoflove.com {
 | 
					git.thesatelliteoflove.com {
 | 
				
			||||||
@@ -64,15 +92,6 @@ thesatelliteoflove.com {
 | 
				
			|||||||
    file_server
 | 
					    file_server
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
chat.thesatelliteoflove.com, chat.thesatelliteoflove.com:8448 {
 | 
					 | 
				
			||||||
    handle /.well-known/* {
 | 
					 | 
				
			||||||
        root * /srv/matrix
 | 
					 | 
				
			||||||
        file_server
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    reverse_proxy /_matrix/* conduit-homeserver-1:6167
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bookmarks.thesatelliteoflove.com {
 | 
					bookmarks.thesatelliteoflove.com {
 | 
				
			||||||
    reverse_proxy hoarder-web-1:3000
 | 
					    reverse_proxy hoarder-web-1:3000
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -90,6 +109,25 @@ home.thesatelliteoflove.com {
 | 
				
			|||||||
    reverse_proxy authentik-server-1:9000
 | 
					    reverse_proxy authentik-server-1:9000
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gotify.thesatelliteoflove.com {
 | 
				
			||||||
 | 
					    reverse_proxy gotify:80
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gotify-assistant.thesatelliteoflove.com {
 | 
				
			||||||
 | 
					    reverse_proxy igotify-assistant:8080
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pdg.thesatelliteoflove.com {
 | 
				
			||||||
 | 
					    root * /srv/pdg
 | 
				
			||||||
 | 
					    try_files {path} {path}.html {path}/ =404
 | 
				
			||||||
 | 
					    file_server
 | 
				
			||||||
 | 
					    encode gzip
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    handle_errors {
 | 
				
			||||||
 | 
					        rewrite * /{err.status_code}.html
 | 
				
			||||||
 | 
					        file_server
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
repair.nerder.land {
 | 
					repair.nerder.land {
 | 
				
			||||||
    root * /srv/repair
 | 
					    root * /srv/repair
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
    "m.homeserver": {
 | 
					 | 
				
			||||||
        "base_url": "https://chat.thesatelliteoflove.com"
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
    "m.server": "chat.thesatelliteoflove.com:443"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -12,3 +12,10 @@
 | 
				
			|||||||
    files:
 | 
					    files:
 | 
				
			||||||
      - compose.yml
 | 
					      - compose.yml
 | 
				
			||||||
    state: restarted
 | 
					    state: restarted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: restart obsidian-livesync
 | 
				
			||||||
 | 
					  community.docker.docker_compose_v2:
 | 
				
			||||||
 | 
					    project_src: /opt/stacks/obsidian-livesync
 | 
				
			||||||
 | 
					    files:
 | 
				
			||||||
 | 
					      - docker-compose.yml
 | 
				
			||||||
 | 
					    state: restarted
 | 
				
			||||||
@@ -1,19 +1,19 @@
 | 
				
			|||||||
- name: make pingvin directories
 | 
					- name: make bytestash directories
 | 
				
			||||||
  ansible.builtin.file:
 | 
					  ansible.builtin.file:
 | 
				
			||||||
    path: "{{ item}}"
 | 
					    path: "{{ item}}"
 | 
				
			||||||
    state: directory
 | 
					    state: directory
 | 
				
			||||||
  loop:
 | 
					  loop:
 | 
				
			||||||
    - /opt/stacks/pingvin
 | 
					    - /opt/stacks/bytestash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- name: Template out the compose file
 | 
					- name: Template out the compose file
 | 
				
			||||||
  ansible.builtin.template:
 | 
					  ansible.builtin.template:
 | 
				
			||||||
    src: pingvin-compose.yml.j2
 | 
					    src: bytestash-compose.yml.j2
 | 
				
			||||||
    dest: /opt/stacks/pingvin/compose.yml
 | 
					    dest: /opt/stacks/bytestash/compose.yml
 | 
				
			||||||
    owner: root
 | 
					    owner: root
 | 
				
			||||||
    mode: 644
 | 
					    mode: 644
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- name: deploy pingvin stack
 | 
					- name: deploy bytestash stack
 | 
				
			||||||
  community.docker.docker_compose_v2:
 | 
					  community.docker.docker_compose_v2:
 | 
				
			||||||
    project_src: /opt/stacks/pingvin
 | 
					    project_src: /opt/stacks/bytestash
 | 
				
			||||||
    files:
 | 
					    files:
 | 
				
			||||||
    - compose.yml
 | 
					    - compose.yml
 | 
				
			||||||
@@ -1,29 +0,0 @@
 | 
				
			|||||||
- name: make conduit directories
 | 
					 | 
				
			||||||
  ansible.builtin.file:
 | 
					 | 
				
			||||||
    path: "{{ item}}"
 | 
					 | 
				
			||||||
    state: directory
 | 
					 | 
				
			||||||
  loop:
 | 
					 | 
				
			||||||
    - /opt/stacks/conduit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- name: copy well-known files
 | 
					 | 
				
			||||||
  ansible.builtin.copy:
 | 
					 | 
				
			||||||
    src: "{{item}}"
 | 
					 | 
				
			||||||
    dest: /opt/stacks/caddy/site/matrix/
 | 
					 | 
				
			||||||
    owner: root
 | 
					 | 
				
			||||||
    mode: 644
 | 
					 | 
				
			||||||
  loop:
 | 
					 | 
				
			||||||
    - client
 | 
					 | 
				
			||||||
    - server
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- name: Template out the compose file
 | 
					 | 
				
			||||||
  ansible.builtin.template:
 | 
					 | 
				
			||||||
    src: conduit-compose.yml.j2
 | 
					 | 
				
			||||||
    dest: /opt/stacks/conduit/compose.yml
 | 
					 | 
				
			||||||
    owner: root
 | 
					 | 
				
			||||||
    mode: 644
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- name: deploy conduit stack
 | 
					 | 
				
			||||||
  community.docker.docker_compose_v2:
 | 
					 | 
				
			||||||
    project_src: /opt/stacks/conduit
 | 
					 | 
				
			||||||
    files:
 | 
					 | 
				
			||||||
    - compose.yml
 | 
					 | 
				
			||||||
@@ -9,6 +9,7 @@
 | 
				
			|||||||
  import_tasks: codeserver.yml
 | 
					  import_tasks: codeserver.yml
 | 
				
			||||||
  tags: codeserver
 | 
					  tags: codeserver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- name: Install conduit
 | 
					- name: Install bytestash
 | 
				
			||||||
  import_tasks: conduit.yml
 | 
					  import_tasks: bytestash.yml
 | 
				
			||||||
  tags: conduit
 | 
					  tags: bytestash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								roles/docker/tasks/monitoring/gotify.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								roles/docker/tasks/monitoring/gotify.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					- name: Create gotify directories
 | 
				
			||||||
 | 
					  ansible.builtin.file:
 | 
				
			||||||
 | 
					    path: "{{ item }}"
 | 
				
			||||||
 | 
					    state: directory
 | 
				
			||||||
 | 
					  loop:
 | 
				
			||||||
 | 
					    - /opt/stacks/gotify
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Template out the gotify compose file
 | 
				
			||||||
 | 
					  ansible.builtin.template:
 | 
				
			||||||
 | 
					    src: gotify-compose.yml.j2
 | 
				
			||||||
 | 
					    dest: /opt/stacks/gotify/compose.yml
 | 
				
			||||||
 | 
					    owner: root
 | 
				
			||||||
 | 
					    mode: 644
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy gotify stack
 | 
				
			||||||
 | 
					  community.docker.docker_compose_v2:
 | 
				
			||||||
 | 
					    project_src: /opt/stacks/gotify
 | 
				
			||||||
 | 
					    files:
 | 
				
			||||||
 | 
					      - compose.yml
 | 
				
			||||||
@@ -12,3 +12,7 @@
 | 
				
			|||||||
- name: Install appriseapi
 | 
					- name: Install appriseapi
 | 
				
			||||||
  import_tasks: appriseapi.yml 
 | 
					  import_tasks: appriseapi.yml 
 | 
				
			||||||
  tags: appriseapi
 | 
					  tags: appriseapi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Install gotify
 | 
				
			||||||
 | 
					  import_tasks: gotify.yml
 | 
				
			||||||
 | 
					  tags: gotify
 | 
				
			||||||
							
								
								
									
										18
									
								
								roles/docker/tasks/productivity/grocy.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								roles/docker/tasks/productivity/grocy.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- name: Create grocy directories
 | 
				
			||||||
 | 
					  ansible.builtin.file:
 | 
				
			||||||
 | 
					    path: "{{ item }}"
 | 
				
			||||||
 | 
					    state: directory
 | 
				
			||||||
 | 
					  loop:
 | 
				
			||||||
 | 
					    - /opt/stacks/grocy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Template grocy compose file
 | 
				
			||||||
 | 
					  ansible.builtin.template:
 | 
				
			||||||
 | 
					    src: grocy-compose.yml.j2
 | 
				
			||||||
 | 
					    dest: /opt/stacks/grocy/compose.yml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy grocy stack
 | 
				
			||||||
 | 
					  community.docker.docker_compose_v2:
 | 
				
			||||||
 | 
					    project_src: /opt/stacks/grocy
 | 
				
			||||||
 | 
					    files:
 | 
				
			||||||
 | 
					      - compose.yml
 | 
				
			||||||
							
								
								
									
										18
									
								
								roles/docker/tasks/productivity/kanboard.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								roles/docker/tasks/productivity/kanboard.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- name: Create kanboard directories
 | 
				
			||||||
 | 
					  ansible.builtin.file:
 | 
				
			||||||
 | 
					    path: "{{ item }}"
 | 
				
			||||||
 | 
					    state: directory
 | 
				
			||||||
 | 
					  loop:
 | 
				
			||||||
 | 
					    - /opt/stacks/kanboard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Template kanboard compose file
 | 
				
			||||||
 | 
					  ansible.builtin.template:
 | 
				
			||||||
 | 
					    src: kanboard-compose.yml.j2
 | 
				
			||||||
 | 
					    dest: /opt/stacks/kanboard/compose.yml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy kanboard stack
 | 
				
			||||||
 | 
					  community.docker.docker_compose_v2:
 | 
				
			||||||
 | 
					    project_src: /opt/stacks/kanboard
 | 
				
			||||||
 | 
					    files:
 | 
				
			||||||
 | 
					      - compose.yml
 | 
				
			||||||
@@ -25,6 +25,18 @@
 | 
				
			|||||||
  import_tasks: dawarich.yml
 | 
					  import_tasks: dawarich.yml
 | 
				
			||||||
  tags: dawarich
 | 
					  tags: dawarich
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- name: Install pingvin
 | 
					- name: Install palmr
 | 
				
			||||||
  import_tasks: pingvin.yml
 | 
					  import_tasks: palmr.yml
 | 
				
			||||||
  tags: pingvin
 | 
					  tags: palmr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Install obsidian-livesync
 | 
				
			||||||
 | 
					  import_tasks: obsidian-livesync.yml
 | 
				
			||||||
 | 
					  tags: obsidian-livesync
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Install kanboard
 | 
				
			||||||
 | 
					  import_tasks: kanboard.yml
 | 
				
			||||||
 | 
					  tags: kanboard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Install grocy
 | 
				
			||||||
 | 
					  import_tasks: grocy.yml
 | 
				
			||||||
 | 
					  tags: grocy
 | 
				
			||||||
							
								
								
									
										20
									
								
								roles/docker/tasks/productivity/obsidian-livesync.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								roles/docker/tasks/productivity/obsidian-livesync.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- name: make obsidian-livesync directories
 | 
				
			||||||
 | 
					  ansible.builtin.file:
 | 
				
			||||||
 | 
					    path: "{{ paths.stacks }}/obsidian-livesync"
 | 
				
			||||||
 | 
					    state: directory
 | 
				
			||||||
 | 
					    mode: '0755'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Template out the compose file
 | 
				
			||||||
 | 
					  ansible.builtin.template:
 | 
				
			||||||
 | 
					    src: obsidian-livesync-compose.yml.j2
 | 
				
			||||||
 | 
					    dest: "{{ paths.stacks }}/obsidian-livesync/docker-compose.yml"
 | 
				
			||||||
 | 
					    mode: '0644'
 | 
				
			||||||
 | 
					  notify: restart obsidian-livesync
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: deploy obsidian-livesync stack
 | 
				
			||||||
 | 
					  community.docker.docker_compose_v2:
 | 
				
			||||||
 | 
					    project_src: "{{ paths.stacks }}/obsidian-livesync"
 | 
				
			||||||
 | 
					    state: present
 | 
				
			||||||
 | 
					  tags:
 | 
				
			||||||
 | 
					    - obsidian-livesync
 | 
				
			||||||
							
								
								
									
										19
									
								
								roles/docker/tasks/productivity/palmr.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								roles/docker/tasks/productivity/palmr.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					- name: make palmr directories
 | 
				
			||||||
 | 
					  ansible.builtin.file:
 | 
				
			||||||
 | 
					    path: "{{ item }}"
 | 
				
			||||||
 | 
					    state: directory
 | 
				
			||||||
 | 
					  loop:
 | 
				
			||||||
 | 
					    - /opt/stacks/palmr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Template out the compose file
 | 
				
			||||||
 | 
					  ansible.builtin.template:
 | 
				
			||||||
 | 
					    src: palmr-compose.yml.j2
 | 
				
			||||||
 | 
					    dest: /opt/stacks/palmr/compose.yml
 | 
				
			||||||
 | 
					    owner: root
 | 
				
			||||||
 | 
					    mode: 644
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: deploy palmr stack
 | 
				
			||||||
 | 
					  community.docker.docker_compose_v2:
 | 
				
			||||||
 | 
					    project_src: /opt/stacks/palmr
 | 
				
			||||||
 | 
					    files:
 | 
				
			||||||
 | 
					      - compose.yml
 | 
				
			||||||
@@ -12,14 +12,14 @@ services:
 | 
				
			|||||||
      - attach:/attach
 | 
					      - attach:/attach
 | 
				
			||||||
    image: caronc/apprise:latest
 | 
					    image: caronc/apprise:latest
 | 
				
			||||||
    extra_hosts:
 | 
					    extra_hosts:
 | 
				
			||||||
      - "{{ subdomains.chat }}:{{ docker.hairpin_ip }}"
 | 
					      - "{{ subdomains.gotify }}:{{ docker.hairpin_ip }}"
 | 
				
			||||||
    labels:
 | 
					    labels:
 | 
				
			||||||
      glance.name: Apprise
 | 
					      glance.name: Apprise
 | 
				
			||||||
      glance.icon: si:imessage
 | 
					      glance.icon: si:imessage
 | 
				
			||||||
      glance.url: https://{{ subdomains.appriseapi }}/
 | 
					      glance.url: https://{{ subdomains.appriseapi }}/
 | 
				
			||||||
      glance.description: Apprise api server
 | 
					      glance.description: Apprise api server
 | 
				
			||||||
      glance.id: apprise
 | 
					      glance.id: apprise
 | 
				
			||||||
    
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
volumes:
 | 
					volumes:
 | 
				
			||||||
  config:
 | 
					  config:
 | 
				
			||||||
  attach:
 | 
					  attach:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,6 +16,7 @@ services:
 | 
				
			|||||||
      glance.icon: si:audiobookshelf
 | 
					      glance.icon: si:audiobookshelf
 | 
				
			||||||
      glance.url: https://{{ subdomains.audio }}/
 | 
					      glance.url: https://{{ subdomains.audio }}/
 | 
				
			||||||
      glance.description: Audio book server
 | 
					      glance.description: Audio book server
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
volumes:
 | 
					volumes:
 | 
				
			||||||
  audiobooks:
 | 
					  audiobooks:
 | 
				
			||||||
    driver: local
 | 
					    driver: local
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,7 +37,7 @@ services:
 | 
				
			|||||||
      glance.parent: authentik
 | 
					      glance.parent: authentik
 | 
				
			||||||
      glance.name: Redis
 | 
					      glance.name: Redis
 | 
				
			||||||
  server:
 | 
					  server:
 | 
				
			||||||
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.6.1}
 | 
					    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.6.4}
 | 
				
			||||||
    restart: unless-stopped
 | 
					    restart: unless-stopped
 | 
				
			||||||
    command: server
 | 
					    command: server
 | 
				
			||||||
    environment:
 | 
					    environment:
 | 
				
			||||||
@@ -64,7 +64,7 @@ services:
 | 
				
			|||||||
      glance.description: Authentication server
 | 
					      glance.description: Authentication server
 | 
				
			||||||
      glance.id: authentik
 | 
					      glance.id: authentik
 | 
				
			||||||
  worker:
 | 
					  worker:
 | 
				
			||||||
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.6.1}
 | 
					    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.6.4}
 | 
				
			||||||
    restart: unless-stopped
 | 
					    restart: unless-stopped
 | 
				
			||||||
    command: worker
 | 
					    command: worker
 | 
				
			||||||
    environment:
 | 
					    environment:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ services:
 | 
				
			|||||||
      glance.icon: si:protoncalendar
 | 
					      glance.icon: si:protoncalendar
 | 
				
			||||||
      glance.url: https://{{ subdomains.cal }}/
 | 
					      glance.url: https://{{ subdomains.cal }}/
 | 
				
			||||||
      glance.description: CalDav server
 | 
					      glance.description: CalDav server
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
volumes:
 | 
					volumes:
 | 
				
			||||||
  config:
 | 
					  config:
 | 
				
			||||||
  data:
 | 
					  data:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										37
									
								
								roles/docker/templates/bytestash-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								roles/docker/templates/bytestash-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					services:
 | 
				
			||||||
 | 
					  bytestash:
 | 
				
			||||||
 | 
					    image: ghcr.io/jordan-dalby/bytestash:latest
 | 
				
			||||||
 | 
					    container_name: bytestash
 | 
				
			||||||
 | 
					    restart: unless-stopped
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - bytestash_data:/data/snippets
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      JWT_SECRET: "{{ vault_bytestash.jwt_secret }}"
 | 
				
			||||||
 | 
					      TOKEN_EXPIRY: "24h"
 | 
				
			||||||
 | 
					      ALLOW_NEW_ACCOUNTS: "true"
 | 
				
			||||||
 | 
					      DEBUG: "false"
 | 
				
			||||||
 | 
					      DISABLE_ACCOUNTS: "false"
 | 
				
			||||||
 | 
					      DISABLE_INTERNAL_ACCOUNTS: "false"
 | 
				
			||||||
 | 
					      OIDC_ENABLED: "true"
 | 
				
			||||||
 | 
					      OIDC_DISPLAY_NAME: "Login with Authentik"
 | 
				
			||||||
 | 
					      OIDC_ISSUER_URL: "https://{{ subdomains.auth }}/application/o/bytestash/"
 | 
				
			||||||
 | 
					      OIDC_CLIENT_ID: "{{ vault_bytestash.oidc_client_id }}"
 | 
				
			||||||
 | 
					      OIDC_CLIENT_SECRET: "{{ vault_bytestash.oidc_client_secret }}"
 | 
				
			||||||
 | 
					      OIDC_SCOPES: "openid profile email"
 | 
				
			||||||
 | 
					    extra_hosts:
 | 
				
			||||||
 | 
					      - "{{ subdomains.auth }}:{{ docker.hairpin_ip }}"
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      glance.name: ByteStash
 | 
				
			||||||
 | 
					      glance.icon: si:code
 | 
				
			||||||
 | 
					      glance.url: https://{{ subdomains.bytestash }}/
 | 
				
			||||||
 | 
					      glance.description: Code snippet manager
 | 
				
			||||||
 | 
					      glance.id: bytestash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					volumes:
 | 
				
			||||||
 | 
					  bytestash_data:
 | 
				
			||||||
 | 
					    driver: local
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					networks:
 | 
				
			||||||
 | 
					  default:
 | 
				
			||||||
 | 
					    external: true
 | 
				
			||||||
 | 
					    name: {{ docker.network_name }}
 | 
				
			||||||
@@ -18,6 +18,7 @@ services:
 | 
				
			|||||||
      glance.icon: si:caddy
 | 
					      glance.icon: si:caddy
 | 
				
			||||||
      glance.url: https://{{ primary_domain }}/
 | 
					      glance.url: https://{{ primary_domain }}/
 | 
				
			||||||
      glance.description: Reverse proxy
 | 
					      glance.description: Reverse proxy
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
    networks:
 | 
					    networks:
 | 
				
			||||||
      default:
 | 
					      default:
 | 
				
			||||||
        ipv4_address: {{ docker.hairpin_ip }}
 | 
					        ipv4_address: {{ docker.hairpin_ip }}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@ services:
 | 
				
			|||||||
      glance.icon: si:calibreweb
 | 
					      glance.icon: si:calibreweb
 | 
				
			||||||
      glance.url: https://{{ subdomains.books }}/
 | 
					      glance.url: https://{{ subdomains.books }}/
 | 
				
			||||||
      glance.description: Book server
 | 
					      glance.description: Book server
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
volumes:
 | 
					volumes:
 | 
				
			||||||
  config:
 | 
					  config:
 | 
				
			||||||
    driver: local
 | 
					    driver: local
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,14 +4,13 @@ services:
 | 
				
			|||||||
      image: ghcr.io/dgtlmoon/changedetection.io
 | 
					      image: ghcr.io/dgtlmoon/changedetection.io
 | 
				
			||||||
      container_name: changedetection
 | 
					      container_name: changedetection
 | 
				
			||||||
      hostname: changedetection
 | 
					      hostname: changedetection
 | 
				
			||||||
      extra_hosts:
 | 
					 | 
				
			||||||
        - '{{ subdomains.chat }}:172.20.0.5'
 | 
					 | 
				
			||||||
      labels:
 | 
					      labels:
 | 
				
			||||||
        glance.name: Changedetection
 | 
					        glance.name: Changedetection
 | 
				
			||||||
        glance.icon: si:watchtower
 | 
					        glance.icon: si:watchtower
 | 
				
			||||||
        glance.url: https://{{ subdomains.watcher }}/
 | 
					        glance.url: https://{{ subdomains.watcher }}/
 | 
				
			||||||
        glance.description: Changedetection
 | 
					        glance.description: Changedetection
 | 
				
			||||||
        glance.id: changedetection
 | 
					        glance.id: changedetection
 | 
				
			||||||
 | 
					        mag37.dockcheck.update: true
 | 
				
			||||||
      volumes:
 | 
					      volumes:
 | 
				
			||||||
        - changedetection-data:/datastore
 | 
					        - changedetection-data:/datastore
 | 
				
			||||||
# Configurable proxy list support, see https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration#proxy-list-support
 | 
					# Configurable proxy list support, see https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration#proxy-list-support
 | 
				
			||||||
@@ -77,6 +76,8 @@ services:
 | 
				
			|||||||
  #    ports:
 | 
					  #    ports:
 | 
				
			||||||
  #      - 5000:5000
 | 
					  #      - 5000:5000
 | 
				
			||||||
      restart: unless-stopped
 | 
					      restart: unless-stopped
 | 
				
			||||||
 | 
					      extra_hosts:
 | 
				
			||||||
 | 
					        - "{{ subdomains.gotify }}:{{ docker.hairpin_ip }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     # Used for fetching pages via WebDriver+Chrome where you need Javascript support.
 | 
					     # Used for fetching pages via WebDriver+Chrome where you need Javascript support.
 | 
				
			||||||
     # Now working on arm64 (needs testing on rPi - tested on Oracle ARM instance)
 | 
					     # Now working on arm64 (needs testing on rPi - tested on Oracle ARM instance)
 | 
				
			||||||
@@ -96,6 +97,7 @@ services:
 | 
				
			|||||||
        labels:
 | 
					        labels:
 | 
				
			||||||
          glance.parent: changedetection
 | 
					          glance.parent: changedetection
 | 
				
			||||||
          glance.name: Browser
 | 
					          glance.name: Browser
 | 
				
			||||||
 | 
					          mag37.dockcheck.update: true
 | 
				
			||||||
        image: dgtlmoon/sockpuppetbrowser:latest
 | 
					        image: dgtlmoon/sockpuppetbrowser:latest
 | 
				
			||||||
        cap_add:
 | 
					        cap_add:
 | 
				
			||||||
            - SYS_ADMIN
 | 
					            - SYS_ADMIN
 | 
				
			||||||
@@ -106,6 +108,8 @@ services:
 | 
				
			|||||||
            - SCREEN_HEIGHT=1024
 | 
					            - SCREEN_HEIGHT=1024
 | 
				
			||||||
            - SCREEN_DEPTH=16
 | 
					            - SCREEN_DEPTH=16
 | 
				
			||||||
            - MAX_CONCURRENT_CHROME_PROCESSES=10
 | 
					            - MAX_CONCURRENT_CHROME_PROCESSES=10
 | 
				
			||||||
 | 
					        extra_hosts:
 | 
				
			||||||
 | 
					            - "{{ subdomains.gotify }}:{{ docker.hairpin_ip }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     # Used for fetching pages via Playwright+Chrome where you need Javascript support.
 | 
					     # Used for fetching pages via Playwright+Chrome where you need Javascript support.
 | 
				
			||||||
     # Note: Works well but is deprecated, does not fetch full page screenshots (doesnt work with Visual Selector)
 | 
					     # Note: Works well but is deprecated, does not fetch full page screenshots (doesnt work with Visual Selector)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ services:
 | 
				
			|||||||
      glance.icon: si:vscodium
 | 
					      glance.icon: si:vscodium
 | 
				
			||||||
      glance.url: https://{{ subdomains.code }}/
 | 
					      glance.url: https://{{ subdomains.code }}/
 | 
				
			||||||
      glance.description: Code Server
 | 
					      glance.description: Code Server
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
    container_name: codeserver
 | 
					    container_name: codeserver
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - home:/home
 | 
					      - home:/home
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,46 +0,0 @@
 | 
				
			|||||||
services:
 | 
					 | 
				
			||||||
    homeserver:
 | 
					 | 
				
			||||||
        image: matrixconduit/matrix-conduit:next
 | 
					 | 
				
			||||||
        restart: unless-stopped
 | 
					 | 
				
			||||||
        volumes:
 | 
					 | 
				
			||||||
            - db:/var/lib/matrix-conduit/
 | 
					 | 
				
			||||||
        labels:
 | 
					 | 
				
			||||||
          glance.name: Conduit
 | 
					 | 
				
			||||||
          glance.icon: si:matrix
 | 
					 | 
				
			||||||
          glance.url: https://{{ subdomains.chat }}/
 | 
					 | 
				
			||||||
          glance.description: Matrix server
 | 
					 | 
				
			||||||
        environment:
 | 
					 | 
				
			||||||
            CONDUIT_SERVER_NAME: {{ subdomains.chat }} # EDIT THIS
 | 
					 | 
				
			||||||
            CONDUIT_DATABASE_PATH: /var/lib/matrix-conduit/
 | 
					 | 
				
			||||||
            CONDUIT_DATABASE_BACKEND: rocksdb
 | 
					 | 
				
			||||||
            CONDUIT_PORT: 6167
 | 
					 | 
				
			||||||
            CONDUIT_MAX_REQUEST_SIZE: 20000000 # in bytes, ~20 MB
 | 
					 | 
				
			||||||
            CONDUIT_ALLOW_REGISTRATION: 'true'
 | 
					 | 
				
			||||||
            CONDUIT_ALLOW_FEDERATION: 'true'
 | 
					 | 
				
			||||||
            CONDUIT_ALLOW_CHECK_FOR_UPDATES: 'true'
 | 
					 | 
				
			||||||
            CONDUIT_TRUSTED_SERVERS: '["matrix.org"]'
 | 
					 | 
				
			||||||
            #CONDUIT_MAX_CONCURRENT_REQUESTS: 100
 | 
					 | 
				
			||||||
            CONDUIT_ADDRESS: 0.0.0.0
 | 
					 | 
				
			||||||
            CONDUIT_CONFIG: '' # Ignore this
 | 
					 | 
				
			||||||
    #
 | 
					 | 
				
			||||||
    ### Uncomment if you want to use your own Element-Web App.
 | 
					 | 
				
			||||||
    ### Note: You need to provide a config.json for Element and you also need a second
 | 
					 | 
				
			||||||
    ###       Domain or Subdomain for the communication between Element and Conduit
 | 
					 | 
				
			||||||
    ### Config-Docs: https://github.com/vector-im/element-web/blob/develop/docs/config.md
 | 
					 | 
				
			||||||
    # element-web:
 | 
					 | 
				
			||||||
    #     image: vectorim/element-web:latest
 | 
					 | 
				
			||||||
    #     restart: unless-stopped
 | 
					 | 
				
			||||||
    #     ports:
 | 
					 | 
				
			||||||
    #         - 8009:80
 | 
					 | 
				
			||||||
    #     volumes:
 | 
					 | 
				
			||||||
    #         - ./element_config.json:/app/config.json
 | 
					 | 
				
			||||||
    #     depends_on:
 | 
					 | 
				
			||||||
    #         - homeserver
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
volumes:
 | 
					 | 
				
			||||||
    db:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
networks:
 | 
					 | 
				
			||||||
  default:
 | 
					 | 
				
			||||||
    external: true
 | 
					 | 
				
			||||||
    name: {{ docker.network_name }}
 | 
					 | 
				
			||||||
@@ -1,4 +1,19 @@
 | 
				
			|||||||
services:
 | 
					services:
 | 
				
			||||||
 | 
					  dawarich_redis:
 | 
				
			||||||
 | 
					    image: redis:7.4-alpine
 | 
				
			||||||
 | 
					    container_name: dawarich_redis
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      glance.parent: dawarich
 | 
				
			||||||
 | 
					      glance.name: Redis
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - dawarich_redis_data:/data
 | 
				
			||||||
 | 
					    restart: always
 | 
				
			||||||
 | 
					    healthcheck:
 | 
				
			||||||
 | 
					      test: ["CMD", "redis-cli", "ping"]
 | 
				
			||||||
 | 
					      interval: 10s
 | 
				
			||||||
 | 
					      retries: 5
 | 
				
			||||||
 | 
					      start_period: 30s
 | 
				
			||||||
 | 
					      timeout: 10s
 | 
				
			||||||
  dawarich_db:
 | 
					  dawarich_db:
 | 
				
			||||||
    image: postgis/postgis:17-3.5-alpine
 | 
					    image: postgis/postgis:17-3.5-alpine
 | 
				
			||||||
    shm_size: 1G
 | 
					    shm_size: 1G
 | 
				
			||||||
@@ -19,8 +34,9 @@ services:
 | 
				
			|||||||
      retries: 5
 | 
					      retries: 5
 | 
				
			||||||
      start_period: 30s
 | 
					      start_period: 30s
 | 
				
			||||||
      timeout: 10s
 | 
					      timeout: 10s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  dawarich_app:
 | 
					  dawarich_app:
 | 
				
			||||||
    image: freikin/dawarich:0.27.3
 | 
					    image: freikin/dawarich:latest
 | 
				
			||||||
    container_name: dawarich_app
 | 
					    container_name: dawarich_app
 | 
				
			||||||
    labels:
 | 
					    labels:
 | 
				
			||||||
      glance.name: Dawarich
 | 
					      glance.name: Dawarich
 | 
				
			||||||
@@ -32,7 +48,6 @@ services:
 | 
				
			|||||||
      - dawarich_public:/var/app/public
 | 
					      - dawarich_public:/var/app/public
 | 
				
			||||||
      - dawarich_watched:/var/app/tmp/imports/watched
 | 
					      - dawarich_watched:/var/app/tmp/imports/watched
 | 
				
			||||||
      - dawarich_storage:/var/app/storage
 | 
					      - dawarich_storage:/var/app/storage
 | 
				
			||||||
      - dawarich_db_data:/dawarich_db_data
 | 
					 | 
				
			||||||
    stdin_open: true
 | 
					    stdin_open: true
 | 
				
			||||||
    tty: true
 | 
					    tty: true
 | 
				
			||||||
    entrypoint: web-entrypoint.sh
 | 
					    entrypoint: web-entrypoint.sh
 | 
				
			||||||
@@ -40,13 +55,12 @@ services:
 | 
				
			|||||||
    restart: on-failure
 | 
					    restart: on-failure
 | 
				
			||||||
    environment:
 | 
					    environment:
 | 
				
			||||||
      RAILS_ENV: production
 | 
					      RAILS_ENV: production
 | 
				
			||||||
      QUEUE_DATABASE_PATH: /dawarich_db_data/dawarich_production_queue.sqlite3
 | 
					 | 
				
			||||||
      CACHE_DATABASE_PATH: /dawarich_db_data/dawarich_production_cache.sqlite3
 | 
					 | 
				
			||||||
      DATABASE_HOST: dawarich_db
 | 
					      DATABASE_HOST: dawarich_db
 | 
				
			||||||
      DATABASE_PORT: 5432
 | 
					      DATABASE_PORT: 5432
 | 
				
			||||||
      DATABASE_USERNAME: postgres
 | 
					      DATABASE_USERNAME: postgres
 | 
				
			||||||
      DATABASE_PASSWORD: {{ vault_dawarich.postgres_password }}
 | 
					      DATABASE_PASSWORD: {{ vault_dawarich.postgres_password }}
 | 
				
			||||||
      DATABASE_NAME: dawarich_production
 | 
					      DATABASE_NAME: dawarich_production
 | 
				
			||||||
 | 
					      REDIS_URL: redis://dawarich_redis:6379
 | 
				
			||||||
      MIN_MINUTES_SPENT_IN_CITY: 60
 | 
					      MIN_MINUTES_SPENT_IN_CITY: 60
 | 
				
			||||||
      APPLICATION_HOSTS: {{ subdomains.loclog }},localhost,::1,127.0.0.1
 | 
					      APPLICATION_HOSTS: {{ subdomains.loclog }},localhost,::1,127.0.0.1
 | 
				
			||||||
      TIME_ZONE: America/Denver
 | 
					      TIME_ZONE: America/Denver
 | 
				
			||||||
@@ -55,7 +69,7 @@ services:
 | 
				
			|||||||
      PROMETHEUS_EXPORTER_ENABLED: false
 | 
					      PROMETHEUS_EXPORTER_ENABLED: false
 | 
				
			||||||
      PROMETHEUS_EXPORTER_HOST: 0.0.0.0
 | 
					      PROMETHEUS_EXPORTER_HOST: 0.0.0.0
 | 
				
			||||||
      PROMETHEUS_EXPORTER_PORT: 9394
 | 
					      PROMETHEUS_EXPORTER_PORT: 9394
 | 
				
			||||||
      SECRET_KEY_BASE: 1234567890
 | 
					      SECRET_KEY_BASE: {{ vault_dawarich.secret_key_base }}
 | 
				
			||||||
      RAILS_LOG_TO_STDOUT: "true"
 | 
					      RAILS_LOG_TO_STDOUT: "true"
 | 
				
			||||||
    logging:
 | 
					    logging:
 | 
				
			||||||
      driver: "json-file"
 | 
					      driver: "json-file"
 | 
				
			||||||
@@ -72,13 +86,69 @@ services:
 | 
				
			|||||||
      dawarich_db:
 | 
					      dawarich_db:
 | 
				
			||||||
        condition: service_healthy
 | 
					        condition: service_healthy
 | 
				
			||||||
        restart: true
 | 
					        restart: true
 | 
				
			||||||
 | 
					      dawarich_redis:
 | 
				
			||||||
 | 
					        condition: service_healthy
 | 
				
			||||||
 | 
					        restart: true
 | 
				
			||||||
    deploy:
 | 
					    deploy:
 | 
				
			||||||
      resources:
 | 
					      resources:
 | 
				
			||||||
        limits:
 | 
					        limits:
 | 
				
			||||||
          cpus: '0.50'    # Limit CPU usage to 50% of one core
 | 
					          cpus: '0.50'
 | 
				
			||||||
          memory: '2G'    # Limit memory usage to 2GB
 | 
					          memory: '2G'
 | 
				
			||||||
 | 
					  dawarich_sidekiq:
 | 
				
			||||||
 | 
					    image: freikin/dawarich:latest
 | 
				
			||||||
 | 
					    container_name: dawarich_sidekiq
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      glance.parent: dawarich
 | 
				
			||||||
 | 
					      glance.name: Sidekiq
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - dawarich_public:/var/app/public
 | 
				
			||||||
 | 
					      - dawarich_watched:/var/app/tmp/imports/watched
 | 
				
			||||||
 | 
					      - dawarich_storage:/var/app/storage
 | 
				
			||||||
 | 
					    stdin_open: true
 | 
				
			||||||
 | 
					    tty: true
 | 
				
			||||||
 | 
					    entrypoint: sidekiq-entrypoint.sh
 | 
				
			||||||
 | 
					    command: ['sidekiq']
 | 
				
			||||||
 | 
					    restart: on-failure
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      RAILS_ENV: production
 | 
				
			||||||
 | 
					      DATABASE_HOST: dawarich_db
 | 
				
			||||||
 | 
					      DATABASE_PORT: 5432
 | 
				
			||||||
 | 
					      DATABASE_USERNAME: postgres
 | 
				
			||||||
 | 
					      DATABASE_PASSWORD: {{ vault_dawarich.postgres_password }}
 | 
				
			||||||
 | 
					      DATABASE_NAME: dawarich_production
 | 
				
			||||||
 | 
					      REDIS_URL: redis://dawarich_redis:6379
 | 
				
			||||||
 | 
					      MIN_MINUTES_SPENT_IN_CITY: 60
 | 
				
			||||||
 | 
					      APPLICATION_HOSTS: {{ subdomains.loclog }},localhost,::1,127.0.0.1
 | 
				
			||||||
 | 
					      TIME_ZONE: America/Denver
 | 
				
			||||||
 | 
					      APPLICATION_PROTOCOL: http
 | 
				
			||||||
 | 
					      DISTANCE_UNIT: mi
 | 
				
			||||||
 | 
					      PROMETHEUS_EXPORTER_ENABLED: false
 | 
				
			||||||
 | 
					      SECRET_KEY_BASE: {{ vault_dawarich.secret_key_base }}
 | 
				
			||||||
 | 
					      RAILS_LOG_TO_STDOUT: "true"
 | 
				
			||||||
 | 
					    logging:
 | 
				
			||||||
 | 
					      driver: "json-file"
 | 
				
			||||||
 | 
					      options:
 | 
				
			||||||
 | 
					        max-size: "100m"
 | 
				
			||||||
 | 
					        max-file: "5"
 | 
				
			||||||
 | 
					    healthcheck:
 | 
				
			||||||
 | 
					      test: ["CMD-SHELL", "ps aux | grep '[s]idekiq' || exit 1"]
 | 
				
			||||||
 | 
					      interval: 10s
 | 
				
			||||||
 | 
					      retries: 30
 | 
				
			||||||
 | 
					      start_period: 30s
 | 
				
			||||||
 | 
					      timeout: 10s
 | 
				
			||||||
 | 
					    depends_on:
 | 
				
			||||||
 | 
					      dawarich_app:
 | 
				
			||||||
 | 
					        condition: service_healthy
 | 
				
			||||||
 | 
					        restart: true
 | 
				
			||||||
 | 
					      dawarich_db:
 | 
				
			||||||
 | 
					        condition: service_healthy
 | 
				
			||||||
 | 
					        restart: true
 | 
				
			||||||
 | 
					      dawarich_redis:
 | 
				
			||||||
 | 
					        condition: service_healthy
 | 
				
			||||||
 | 
					        restart: true
 | 
				
			||||||
volumes:
 | 
					volumes:
 | 
				
			||||||
  dawarich_db_data:
 | 
					  dawarich_db_data:
 | 
				
			||||||
 | 
					  dawarich_redis_data:
 | 
				
			||||||
  dawarich_public:
 | 
					  dawarich_public:
 | 
				
			||||||
  dawarich_watched:
 | 
					  dawarich_watched:
 | 
				
			||||||
  dawarich_storage:
 | 
					  dawarich_storage:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@ services:
 | 
				
			|||||||
      glance.icon: si:ghost
 | 
					      glance.icon: si:ghost
 | 
				
			||||||
      glance.url: https://{{ subdomains.phlog }}/
 | 
					      glance.url: https://{{ subdomains.phlog }}/
 | 
				
			||||||
      glance.description: Photo Blog
 | 
					      glance.description: Photo Blog
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
volumes:
 | 
					volumes:
 | 
				
			||||||
  ghost:
 | 
					  ghost:
 | 
				
			||||||
    driver: local
 | 
					    driver: local
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,7 @@ services:
 | 
				
			|||||||
      glance.url: https://{{ subdomains.git }}/
 | 
					      glance.url: https://{{ subdomains.git }}/
 | 
				
			||||||
      glance.description: Code repo
 | 
					      glance.description: Code repo
 | 
				
			||||||
      glance.id: gitea
 | 
					      glance.id: gitea
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - gitea:/data
 | 
					      - gitea:/data
 | 
				
			||||||
      - /etc/timezone:/etc/timezone:ro
 | 
					      - /etc/timezone:/etc/timezone:ro
 | 
				
			||||||
@@ -46,6 +47,7 @@ services:
 | 
				
			|||||||
    labels:
 | 
					    labels:
 | 
				
			||||||
      glance.parent: gitea
 | 
					      glance.parent: gitea
 | 
				
			||||||
      glance.name: Worker
 | 
					      glance.name: Worker
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - ./runner-config.yaml:/config.yaml
 | 
					      - ./runner-config.yaml:/config.yaml
 | 
				
			||||||
      - ./data:/data
 | 
					      - ./data:/data
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
services:
 | 
					services:
 | 
				
			||||||
  glance:
 | 
					  glance:
 | 
				
			||||||
    image: glanceapp/glance:v0.8.3
 | 
					    image: glanceapp/glance:latest
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - ./config:/app/config
 | 
					      - ./config:/app/config
 | 
				
			||||||
      - /etc/timezone:/etc/timezone:ro
 | 
					      - /etc/timezone:/etc/timezone:ro
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,40 +1,27 @@
 | 
				
			|||||||
pages:
 | 
					pages:
 | 
				
			||||||
  - name: Home
 | 
					  - name: Home
 | 
				
			||||||
    columns:
 | 
					    head-widgets:
 | 
				
			||||||
      - size: small
 | 
					      - type: markets
 | 
				
			||||||
        widgets:
 | 
					        hide-header: true
 | 
				
			||||||
          - type: calendar
 | 
					        markets:
 | 
				
			||||||
 | 
					          - symbol: SPY
 | 
				
			||||||
 | 
					            name: S&P 500
 | 
				
			||||||
 | 
					          - symbol: VTSAX
 | 
				
			||||||
 | 
					            name: Vanguard Total Stock Market
 | 
				
			||||||
 | 
					          - symbol: BAI
 | 
				
			||||||
 | 
					            name: Blackrock AI
 | 
				
			||||||
 | 
					          - symbol: NLR
 | 
				
			||||||
 | 
					            name: VanEck Uranium+Nuclear Energy
 | 
				
			||||||
 | 
					          - symbol: BITO
 | 
				
			||||||
 | 
					            name: Bitcoin ETF
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
          - type: server-stats
 | 
					    columns:
 | 
				
			||||||
            servers:
 | 
					 | 
				
			||||||
              - type: local
 | 
					 | 
				
			||||||
                name: Services
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - size: full
 | 
					      - size: full
 | 
				
			||||||
        widgets:
 | 
					        widgets:
 | 
				
			||||||
          - type: group
 | 
					          - type: search
 | 
				
			||||||
            widgets:
 | 
					            search-engine: kagi
 | 
				
			||||||
            - type: hacker-news
 | 
					            new-tab: true
 | 
				
			||||||
            - type: rss
 | 
					 | 
				
			||||||
              limit: 10
 | 
					 | 
				
			||||||
              collapse-after: 3
 | 
					 | 
				
			||||||
              cache: 3h
 | 
					 | 
				
			||||||
              feeds:
 | 
					 | 
				
			||||||
              - url: https://kill-the-newsletter.com/feeds/ij4twrnzhrwvyic13qcm.xml
 | 
					 | 
				
			||||||
              - url: https://mrmoneymustache.ck.page/68f9e9826c
 | 
					 | 
				
			||||||
            - type: rss
 | 
					 | 
				
			||||||
              title: Gear
 | 
					 | 
				
			||||||
              limit: 10
 | 
					 | 
				
			||||||
              collapse-after: 3
 | 
					 | 
				
			||||||
              cache: 3h
 | 
					 | 
				
			||||||
              feeds:
 | 
					 | 
				
			||||||
              - url: https://9to5toys.com/steals/feed
 | 
					 | 
				
			||||||
              - url: https://hiro.report/rss/
 | 
					 | 
				
			||||||
          - type: change-detection
 | 
					 | 
				
			||||||
            instance-url: https://watcher.thesatelliteoflove.com
 | 
					 | 
				
			||||||
            token: ac69ae11570548549d6706eac6dbb6a9
 | 
					 | 
				
			||||||
          - type: docker-containers
 | 
					 | 
				
			||||||
            hide-by-default: false
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - size: small
 | 
					      - size: small
 | 
				
			||||||
        widgets:
 | 
					        widgets:
 | 
				
			||||||
@@ -42,24 +29,62 @@ pages:
 | 
				
			|||||||
            location: Nederland, Colorado, United States
 | 
					            location: Nederland, Colorado, United States
 | 
				
			||||||
            units: imperial
 | 
					            units: imperial
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          - type: markets
 | 
					          - type: custom-api
 | 
				
			||||||
            markets:
 | 
					            title: Air Quality
 | 
				
			||||||
              - symbol: SPY
 | 
					            cache: 10m
 | 
				
			||||||
                name: S&P 500
 | 
					            url: https://api.waqi.info/feed/geo:39.9676367;-105.4037992/?token={{ vault_glance.air_quality_key }}
 | 
				
			||||||
              - symbol: VTSAX
 | 
					            template: |
 | 
				
			||||||
                name: Vanguard Total Stock Market
 | 
					              {% raw %}{{ $aqi := printf "%03s" (.JSON.String "data.aqi") }}
 | 
				
			||||||
              - symbol: BAI
 | 
					              {{ $aqiraw := .JSON.String "data.aqi" }}
 | 
				
			||||||
                name: Blackrock AI
 | 
					              {{ $updated := .JSON.String "data.time.iso" }}
 | 
				
			||||||
              - symbol: NLR
 | 
					              {{ $humidity := .JSON.String "data.iaqi.h.v" }}
 | 
				
			||||||
                name: VanEck Uranium+Nuclear Energy
 | 
					              {{ $ozone := .JSON.String "data.iaqi.o3.v" }}
 | 
				
			||||||
              - symbol: BITO
 | 
					              {{ $pm25 := .JSON.String "data.iaqi.pm25.v" }}
 | 
				
			||||||
                name: Bitcoin ETF
 | 
					              {{ $pressure := .JSON.String "data.iaqi.p.v" }}
 | 
				
			||||||
              - symbol: GOOGL
 | 
					
 | 
				
			||||||
                name: Google
 | 
					              <div class="flex justify-between">
 | 
				
			||||||
              - symbol: AMD
 | 
					                <div class="size-h5">
 | 
				
			||||||
                name: AMD
 | 
					                  {{ if le $aqi "050" }}
 | 
				
			||||||
              - symbol: DJT
 | 
					                    <div class="color-positive">Good air quality</div>
 | 
				
			||||||
                name: Trump Media
 | 
					                  {{ else if le $aqi "100" }}
 | 
				
			||||||
 | 
					                    <div class="color-primary">Moderate air quality</div>
 | 
				
			||||||
 | 
					                  {{ else }}
 | 
				
			||||||
 | 
					                    <div class="color-negative">Bad air quality</div>
 | 
				
			||||||
 | 
					                  {{ end }}
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              <div class="color-highlight size-h2">AQI: {{ $aqiraw }}</div>
 | 
				
			||||||
 | 
					              <div style="border-bottom: 1px solid; margin-block: 10px;"></div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              <div class="margin-block-2">
 | 
				
			||||||
 | 
					                <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px;">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  <div>
 | 
				
			||||||
 | 
					                    <div class="size-h3 color-highlight">{{ $humidity }}%</div>
 | 
				
			||||||
 | 
					                    <div class="size-h6">HUMIDITY</div>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  <div>
 | 
				
			||||||
 | 
					                    <div class="size-h3 color-highlight">{{ $ozone }} μg/m³</div>
 | 
				
			||||||
 | 
					                    <div class="size-h6">OZONE</div>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  <div>
 | 
				
			||||||
 | 
					                    <div class="size-h3 color-highlight">{{ $pm25 }} μg/m³</div>
 | 
				
			||||||
 | 
					                    <div class="size-h6">PM2.5</div>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  <div>
 | 
				
			||||||
 | 
					                    <div class="size-h3 color-highlight">{{ $pressure }} hPa</div>
 | 
				
			||||||
 | 
					                    <div class="size-h6">PRESSURE</div>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <div class="size-h6" style="margin-top: 10px;">Last Updated at {{ slice $updated 11 16 }}</div>
 | 
				
			||||||
 | 
					              </div>{% endraw %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - name: Mini Painting
 | 
					  - name: Mini Painting
 | 
				
			||||||
    columns:
 | 
					    columns:
 | 
				
			||||||
    - size: small
 | 
					    - size: small
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										47
									
								
								roles/docker/templates/gotify-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								roles/docker/templates/gotify-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					services:
 | 
				
			||||||
 | 
					  gotify:
 | 
				
			||||||
 | 
					    image: gotify/server:latest
 | 
				
			||||||
 | 
					    container_name: gotify
 | 
				
			||||||
 | 
					    restart: unless-stopped
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - gotify_data:/app/data
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - GOTIFY_DEFAULTUSER_PASS={{ vault_gotify.admin_password }}
 | 
				
			||||||
 | 
					      - TZ=America/Denver
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      glance.name: Gotify
 | 
				
			||||||
 | 
					      glance.icon: si:gotify
 | 
				
			||||||
 | 
					      glance.url: "https://{{ subdomains.gotify }}/"
 | 
				
			||||||
 | 
					      glance.description: Push notification server
 | 
				
			||||||
 | 
					    extra_hosts:
 | 
				
			||||||
 | 
					      - "{{ subdomains.auth }}:{{ docker.hairpin_ip }}"
 | 
				
			||||||
 | 
					      - "{{ subdomains.gotify_assistant }}:{{ docker.hairpin_ip }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  igotify-assistant:
 | 
				
			||||||
 | 
					    image: ghcr.io/androidseb25/igotify-notification-assist:latest
 | 
				
			||||||
 | 
					    restart: unless-stopped
 | 
				
			||||||
 | 
					    container_name: igotify-assistant
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - igotify_data:/app/data
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      TZ: America/Denver
 | 
				
			||||||
 | 
					    depends_on:
 | 
				
			||||||
 | 
					      - gotify
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      glance.name: iGotify Assistant
 | 
				
			||||||
 | 
					      glance.icon: si:apple
 | 
				
			||||||
 | 
					      glance.url: "https://{{ subdomains.gotify_assistant }}/"
 | 
				
			||||||
 | 
					      glance.description: iOS notification assistant
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
 | 
					    extra_hosts:
 | 
				
			||||||
 | 
					      - "{{ subdomains.auth }}:{{ docker.hairpin_ip }}"
 | 
				
			||||||
 | 
					      - "{{ subdomains.gotify }}:{{ docker.hairpin_ip }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					volumes:
 | 
				
			||||||
 | 
					  gotify_data:
 | 
				
			||||||
 | 
					  igotify_data:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					networks:
 | 
				
			||||||
 | 
					  default:
 | 
				
			||||||
 | 
					    external: true
 | 
				
			||||||
 | 
					    name: "{{ docker.network_name }}"
 | 
				
			||||||
@@ -44,23 +44,19 @@ services:
 | 
				
			|||||||
    labels:
 | 
					    labels:
 | 
				
			||||||
      glance.parent: gotosocial
 | 
					      glance.parent: gotosocial
 | 
				
			||||||
      glance.name: Backup
 | 
					      glance.name: Backup
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
    environment:
 | 
					    environment:
 | 
				
			||||||
      BACKUP_FILENAME: backup-gts-%Y-%m-%dT%H-%M-%S.tar.gz
 | 
					      BACKUP_FILENAME: gts-backup-%Y-%m-%dT%H-%M-%S.tar.gz
 | 
				
			||||||
      BACKUP_LATEST_SYMLINK: backup-latest.tar.gz
 | 
					 | 
				
			||||||
      BACKUP_CRON_EXPRESSION: "0 9 * * *"
 | 
					      BACKUP_CRON_EXPRESSION: "0 9 * * *"
 | 
				
			||||||
      BACKUP_PRUNING_PREFIX: backup-
 | 
					      BACKUP_PRUNING_PREFIX: gts-
 | 
				
			||||||
      BACKUP_RETENTION_DAYS: 1
 | 
					      BACKUP_RETENTION_DAYS: 7
 | 
				
			||||||
      AWS_S3_BUCKET_NAME: tsolbackups
 | 
					      AWS_S3_BUCKET_NAME: tsolbackups
 | 
				
			||||||
      AWS_ENDPOINT: s3.us-west-004.backblazeb2.com 
 | 
					      AWS_ENDPOINT: s3.us-west-004.backblazeb2.com 
 | 
				
			||||||
      AWS_ACCESS_KEY_ID: {{ vault_backup.access_key_id }}
 | 
					      AWS_ACCESS_KEY_ID: {{ vault_backup.access_key_id }}
 | 
				
			||||||
      AWS_SECRET_ACCESS_KEY: {{ vault_backup.secret_access_key }}
 | 
					      AWS_SECRET_ACCESS_KEY: {{ vault_backup.secret_access_key }}
 | 
				
			||||||
      BACKUP_SKIP_BACKENDS_FROM_PRUNE: s3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - gotosocial:/backup/my-app-backup:ro
 | 
					      - gotosocial:/backup/gts-app-backup:ro
 | 
				
			||||||
      - /var/run/docker.sock:/var/run/docker.sock:ro
 | 
					      - /var/run/docker.sock:/var/run/docker.sock:ro
 | 
				
			||||||
      - ./backup:/archive
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
volumes:
 | 
					volumes:
 | 
				
			||||||
  gotosocial:
 | 
					  gotosocial:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										30
									
								
								roles/docker/templates/grocy-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								roles/docker/templates/grocy-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					services:
 | 
				
			||||||
 | 
					  grocy:
 | 
				
			||||||
 | 
					    image: lscr.io/linuxserver/grocy:latest
 | 
				
			||||||
 | 
					    container_name: grocy
 | 
				
			||||||
 | 
					    restart: unless-stopped
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - PUID=1000
 | 
				
			||||||
 | 
					      - PGID=1000
 | 
				
			||||||
 | 
					      - TZ=America/Denver
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - ./config:/config
 | 
				
			||||||
 | 
					    extra_hosts:
 | 
				
			||||||
 | 
					      - "host.docker.internal:host-gateway"
 | 
				
			||||||
 | 
					      - "{{ subdomains.auth }}:{{ docker.hairpin_ip }}"
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      glance.name: Grocy
 | 
				
			||||||
 | 
					      glance.icon: si:grocyapp
 | 
				
			||||||
 | 
					      glance.url: https://{{ subdomains.grocy }}/
 | 
				
			||||||
 | 
					      glance.description: Kitchen ERP and inventory management
 | 
				
			||||||
 | 
					      glance.id: grocy
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					volumes:
 | 
				
			||||||
 | 
					  grocy_config:
 | 
				
			||||||
 | 
					    driver: local
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					networks:
 | 
				
			||||||
 | 
					  default:
 | 
				
			||||||
 | 
					    external: true
 | 
				
			||||||
 | 
					    name: {{ docker.network_name }}
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
version: "3.8"
 | 
					version: "3.8"
 | 
				
			||||||
services:
 | 
					services:
 | 
				
			||||||
  web:
 | 
					  web:
 | 
				
			||||||
    image: ghcr.io/karakeep-app/karakeep:0.25.0
 | 
					    image: ghcr.io/karakeep-app/karakeep:latest
 | 
				
			||||||
    restart: unless-stopped
 | 
					    restart: unless-stopped
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - data:/data
 | 
					      - data:/data
 | 
				
			||||||
@@ -22,12 +22,14 @@ services:
 | 
				
			|||||||
      glance.url: https://{{ subdomains.bookmarks }}/
 | 
					      glance.url: https://{{ subdomains.bookmarks }}/
 | 
				
			||||||
      glance.description: Bookmark manager
 | 
					      glance.description: Bookmark manager
 | 
				
			||||||
      glance.id: karakeep
 | 
					      glance.id: karakeep
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
  chrome:
 | 
					  chrome:
 | 
				
			||||||
    image: gcr.io/zenika-hub/alpine-chrome:123
 | 
					    image: gcr.io/zenika-hub/alpine-chrome:123
 | 
				
			||||||
    restart: unless-stopped
 | 
					    restart: unless-stopped
 | 
				
			||||||
    labels:
 | 
					    labels:
 | 
				
			||||||
      glance.name: Chrome
 | 
					      glance.name: Chrome
 | 
				
			||||||
      glance.parent: karakeep
 | 
					      glance.parent: karakeep
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
    command:
 | 
					    command:
 | 
				
			||||||
      - --no-sandbox
 | 
					      - --no-sandbox
 | 
				
			||||||
      - --disable-gpu
 | 
					      - --disable-gpu
 | 
				
			||||||
@@ -41,6 +43,7 @@ services:
 | 
				
			|||||||
    labels:
 | 
					    labels:
 | 
				
			||||||
      glance.name: Meilisearch
 | 
					      glance.name: Meilisearch
 | 
				
			||||||
      glance.parent: karakeep
 | 
					      glance.parent: karakeep
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
    env_file:
 | 
					    env_file:
 | 
				
			||||||
      - .env
 | 
					      - .env
 | 
				
			||||||
    environment:
 | 
					    environment:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										32
									
								
								roles/docker/templates/kanboard-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								roles/docker/templates/kanboard-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					services:
 | 
				
			||||||
 | 
					  kanboard:
 | 
				
			||||||
 | 
					    image: kanboard/kanboard:latest
 | 
				
			||||||
 | 
					    container_name: kanboard
 | 
				
			||||||
 | 
					    restart: unless-stopped
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - PLUGIN_INSTALLER=true
 | 
				
			||||||
 | 
					      - DB_DRIVER=sqlite
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - kanboard_data:/var/www/app/data
 | 
				
			||||||
 | 
					      - kanboard_plugins:/var/www/app/plugins
 | 
				
			||||||
 | 
					    extra_hosts:
 | 
				
			||||||
 | 
					      - "host.docker.internal:host-gateway"
 | 
				
			||||||
 | 
					      - "{{ subdomains.auth }}:{{ docker.hairpin_ip }}"
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      glance.name: Kanboard
 | 
				
			||||||
 | 
					      glance.icon: si:kanboard
 | 
				
			||||||
 | 
					      glance.url: https://{{ subdomains.kanboard }}/
 | 
				
			||||||
 | 
					      glance.description: Project management and Kanban boards
 | 
				
			||||||
 | 
					      glance.id: kanboard
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					volumes:
 | 
				
			||||||
 | 
					  kanboard_data:
 | 
				
			||||||
 | 
					    driver: local
 | 
				
			||||||
 | 
					  kanboard_plugins:
 | 
				
			||||||
 | 
					    driver: local
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					networks:
 | 
				
			||||||
 | 
					  default:
 | 
				
			||||||
 | 
					    external: true
 | 
				
			||||||
 | 
					    name: {{ docker.network_name }}
 | 
				
			||||||
@@ -12,23 +12,24 @@ services:
 | 
				
			|||||||
      # The container path can be anything; you will need to enter it in the "new library" form.
 | 
					      # The container path can be anything; you will need to enter it in the "new library" form.
 | 
				
			||||||
      - ./models:/models
 | 
					      - ./models:/models
 | 
				
			||||||
    environment:
 | 
					    environment:
 | 
				
			||||||
      SECRET_KEY_BASE: {{manyfold_key}}
 | 
					      SECRET_KEY_BASE: {{ vault_manyfold.secret_key }}
 | 
				
			||||||
      MULTIUSER: enabled 
 | 
					      MULTIUSER: enabled 
 | 
				
			||||||
      OIDC_CLIENT_ID: {{ manyfold_oidc_client_id }}
 | 
					      OIDC_CLIENT_ID: {{ vault_manyfold.oidc.client_id }}
 | 
				
			||||||
      OIDC_CLIENT_SECRET: {{ manyfold_oidc_client_secret }}
 | 
					      OIDC_CLIENT_SECRET: {{ vault_manyfold.oidc.client_secret }}
 | 
				
			||||||
      OIDC_ISSUER: https://auth.thesatelliteoflove.com/application/o/manyfold/
 | 
					      OIDC_ISSUER: https://{{ subdomains.auth }}/application/o/manyfold/
 | 
				
			||||||
      OIDC_NAME: Authentik
 | 
					      OIDC_NAME: Authentik
 | 
				
			||||||
      PUBLIC_HOSTNAME: models.thesatelliteoflove.com
 | 
					      PUBLIC_HOSTNAME: {{ subdomains.models }}
 | 
				
			||||||
      MAX_FILE_UPLOAD_SIZE: 5368709120
 | 
					      MAX_FILE_UPLOAD_SIZE: 5368709120
 | 
				
			||||||
      PUID: 1000
 | 
					      PUID: 1000
 | 
				
			||||||
      PGID: 1000
 | 
					      PGID: 1000
 | 
				
			||||||
    extra_hosts:
 | 
					    extra_hosts:
 | 
				
			||||||
      - 'auth.thesatelliteoflove.com:172.20.0.5'
 | 
					      - "{{ subdomains.auth }}:{{ docker.hairpin_ip }}"
 | 
				
			||||||
    labels:
 | 
					    labels:
 | 
				
			||||||
      glance.name: Manyfold
 | 
					      glance.name: Manyfold
 | 
				
			||||||
      glance.icon: si:open3d
 | 
					      glance.icon: si:open3d
 | 
				
			||||||
      glance.url: https://models.thesatelliteoflove.com/
 | 
					      glance.url: https://{{ subdomains.models }}/
 | 
				
			||||||
      glance.description: STL Storage
 | 
					      glance.description: STL Storage
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
    restart: unless-stopped
 | 
					    restart: unless-stopped
 | 
				
			||||||
    # Optional, but recommended for better security
 | 
					    # Optional, but recommended for better security
 | 
				
			||||||
    security_opt:
 | 
					    security_opt:
 | 
				
			||||||
@@ -44,4 +45,4 @@ services:
 | 
				
			|||||||
networks:
 | 
					networks:
 | 
				
			||||||
  default:
 | 
					  default:
 | 
				
			||||||
    external: true
 | 
					    external: true
 | 
				
			||||||
    name: lava
 | 
					    name: "{{ docker.network_name }}"
 | 
				
			||||||
@@ -17,6 +17,7 @@ services:
 | 
				
			|||||||
      glance.url: https://{{ subdomains.tasks }}/
 | 
					      glance.url: https://{{ subdomains.tasks }}/
 | 
				
			||||||
      glance.description: Task and calendar management
 | 
					      glance.description: Task and calendar management
 | 
				
			||||||
      glance.id: mmdl
 | 
					      glance.id: mmdl
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mmdl_db:
 | 
					  mmdl_db:
 | 
				
			||||||
    image: mysql:8.0
 | 
					    image: mysql:8.0
 | 
				
			||||||
@@ -35,6 +36,7 @@ services:
 | 
				
			|||||||
    labels:
 | 
					    labels:
 | 
				
			||||||
      glance.parent: mmdl
 | 
					      glance.parent: mmdl
 | 
				
			||||||
      glance.name: DB
 | 
					      glance.name: DB
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
volumes:
 | 
					volumes:
 | 
				
			||||||
  mmdl_db:
 | 
					  mmdl_db:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										30
									
								
								roles/docker/templates/obsidian-livesync-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								roles/docker/templates/obsidian-livesync-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					services:
 | 
				
			||||||
 | 
					  obsidian-livesync:
 | 
				
			||||||
 | 
					    image: oleduc/docker-obsidian-livesync-couchdb:latest
 | 
				
			||||||
 | 
					    container_name: obsidian-livesync
 | 
				
			||||||
 | 
					    restart: unless-stopped
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      glance.name: Obsidian LiveSync
 | 
				
			||||||
 | 
					      glance.icon: si:obsidian
 | 
				
			||||||
 | 
					      glance.url: http://{{ network.docker_host_ip }}:5984
 | 
				
			||||||
 | 
					      glance.description: Obsidian note synchronization
 | 
				
			||||||
 | 
					      glance.id: obsidian-livesync
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - SERVER_DOMAIN={{ network.docker_host_ip }}
 | 
				
			||||||
 | 
					      - COUCHDB_USER={{ vault_obsidian.username }}
 | 
				
			||||||
 | 
					      - COUCHDB_PASSWORD={{ vault_obsidian.password }}
 | 
				
			||||||
 | 
					      - COUCHDB_DATABASE=obsidian
 | 
				
			||||||
 | 
					    ports:
 | 
				
			||||||
 | 
					      - "{{ network.docker_host_ip }}:5984:5984"
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - couchdb_data:/opt/couchdb/data
 | 
				
			||||||
 | 
					    networks:
 | 
				
			||||||
 | 
					      - default
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					volumes:
 | 
				
			||||||
 | 
					  couchdb_data:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					networks:
 | 
				
			||||||
 | 
					  default:
 | 
				
			||||||
 | 
					    external: true
 | 
				
			||||||
 | 
					    name: "{{ docker.network_name }}"
 | 
				
			||||||
							
								
								
									
										30
									
								
								roles/docker/templates/palmr-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								roles/docker/templates/palmr-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					services:
 | 
				
			||||||
 | 
					  palmr:
 | 
				
			||||||
 | 
					    image: kyantech/palmr:latest
 | 
				
			||||||
 | 
					    restart: unless-stopped
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      DISABLE_FILESYSTEM_ENCRYPTION: "false"
 | 
				
			||||||
 | 
					      ENCRYPTION_KEY: "{{ vault_palmr.encryption_key }}"
 | 
				
			||||||
 | 
					      PALMR_UID: "1000"
 | 
				
			||||||
 | 
					      PALMR_GID: "1000"
 | 
				
			||||||
 | 
					      SECURE_SITE: "true"
 | 
				
			||||||
 | 
					      DEFAULT_LANGUAGE: "en-US"
 | 
				
			||||||
 | 
					      TRUST_PROXY: "true"
 | 
				
			||||||
 | 
					    extra_hosts:
 | 
				
			||||||
 | 
					      - "{{ subdomains.auth }}:{{ docker.hairpin_ip }}"
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      glance.name: Palmr
 | 
				
			||||||
 | 
					      glance.icon: si:files
 | 
				
			||||||
 | 
					      glance.url: "https://{{ subdomains.files }}/"
 | 
				
			||||||
 | 
					      glance.description: File sharing and storage
 | 
				
			||||||
 | 
					      glance.id: palmr
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - palmr_data:/app/server
 | 
				
			||||||
 | 
					volumes:
 | 
				
			||||||
 | 
					  palmr_data:
 | 
				
			||||||
 | 
					    driver: local
 | 
				
			||||||
 | 
					networks:
 | 
				
			||||||
 | 
					  default:
 | 
				
			||||||
 | 
					    external: true
 | 
				
			||||||
 | 
					    name: "{{ docker.network_name }}"
 | 
				
			||||||
@@ -57,6 +57,26 @@ services:
 | 
				
			|||||||
      glance.name: Tika
 | 
					      glance.name: Tika
 | 
				
			||||||
    restart: unless-stopped
 | 
					    restart: unless-stopped
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  backup:
 | 
				
			||||||
 | 
					    image: offen/docker-volume-backup:v2
 | 
				
			||||||
 | 
					    restart: always
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      glance.parent: paperlessngx
 | 
				
			||||||
 | 
					      glance.name: Backup
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      BACKUP_FILENAME: pngx-backup-%Y-%m-%dT%H-%M-%S.tar.gz
 | 
				
			||||||
 | 
					      BACKUP_CRON_EXPRESSION: "10 9 * * *"
 | 
				
			||||||
 | 
					      BACKUP_PRUNING_PREFIX: pngx-
 | 
				
			||||||
 | 
					      BACKUP_RETENTION_DAYS: 7
 | 
				
			||||||
 | 
					      AWS_S3_BUCKET_NAME: tsolbackups
 | 
				
			||||||
 | 
					      AWS_ENDPOINT: s3.us-west-004.backblazeb2.com 
 | 
				
			||||||
 | 
					      AWS_ACCESS_KEY_ID: {{ vault_backup.access_key_id }}
 | 
				
			||||||
 | 
					      AWS_SECRET_ACCESS_KEY: {{ vault_backup.secret_access_key }}
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - media:/backup/pngx-app-backup:ro
 | 
				
			||||||
 | 
					      - /var/run/docker.sock:/var/run/docker.sock:ro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
volumes:
 | 
					volumes:
 | 
				
			||||||
  data:
 | 
					  data:
 | 
				
			||||||
  media:
 | 
					  media:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,24 +0,0 @@
 | 
				
			|||||||
services:
 | 
					 | 
				
			||||||
  pingvin-share:
 | 
					 | 
				
			||||||
    image: stonith404/pingvin-share:latest
 | 
					 | 
				
			||||||
    restart: unless-stopped
 | 
					 | 
				
			||||||
    environment:
 | 
					 | 
				
			||||||
      - TRUST_PROXY=true
 | 
					 | 
				
			||||||
    extra_hosts:
 | 
					 | 
				
			||||||
      - '{{ subdomains.auth }}:{{ docker.hairpin_ip }}'
 | 
					 | 
				
			||||||
    labels:
 | 
					 | 
				
			||||||
      glance.name: Pingvin
 | 
					 | 
				
			||||||
      glance.icon: si:files
 | 
					 | 
				
			||||||
      glance.url: https://{{ subdomains.files }}
 | 
					 | 
				
			||||||
      glance.description: File sharing service
 | 
					 | 
				
			||||||
      glance.id: pingvin
 | 
					 | 
				
			||||||
    volumes:
 | 
					 | 
				
			||||||
      - data:/opt/app/backend/data
 | 
					 | 
				
			||||||
      - images:/opt/app/frontend/public/img
 | 
					 | 
				
			||||||
volumes:
 | 
					 | 
				
			||||||
  images:
 | 
					 | 
				
			||||||
  data:
 | 
					 | 
				
			||||||
networks:
 | 
					 | 
				
			||||||
  default:
 | 
					 | 
				
			||||||
    external: true
 | 
					 | 
				
			||||||
    name: {{ docker.network_name }}
 | 
					 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
services:
 | 
					services:
 | 
				
			||||||
  postiz:
 | 
					  postiz:
 | 
				
			||||||
    image: ghcr.io/gitroomhq/postiz-app:v1.48.4
 | 
					    image: ghcr.io/gitroomhq/postiz-app:latest
 | 
				
			||||||
    container_name: postiz
 | 
					    container_name: postiz
 | 
				
			||||||
    restart: always
 | 
					    restart: always
 | 
				
			||||||
    environment:
 | 
					    environment:
 | 
				
			||||||
@@ -38,6 +38,7 @@ services:
 | 
				
			|||||||
      glance.url: https://{{ subdomains.post }}/
 | 
					      glance.url: https://{{ subdomains.post }}/
 | 
				
			||||||
      glance.description: Social media scheduler
 | 
					      glance.description: Social media scheduler
 | 
				
			||||||
      glance.id: postiz
 | 
					      glance.id: postiz
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
  postiz-postgres:
 | 
					  postiz-postgres:
 | 
				
			||||||
    image: postgres:14.5
 | 
					    image: postgres:14.5
 | 
				
			||||||
@@ -57,6 +58,7 @@ services:
 | 
				
			|||||||
    labels:
 | 
					    labels:
 | 
				
			||||||
      glance.parent: postiz
 | 
					      glance.parent: postiz
 | 
				
			||||||
      glance.name: DB
 | 
					      glance.name: DB
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
  postiz-redis:
 | 
					  postiz-redis:
 | 
				
			||||||
    image: redis:7.2
 | 
					    image: redis:7.2
 | 
				
			||||||
    container_name: postiz-redis
 | 
					    container_name: postiz-redis
 | 
				
			||||||
@@ -71,6 +73,7 @@ services:
 | 
				
			|||||||
    labels:
 | 
					    labels:
 | 
				
			||||||
      glance.parent: postiz
 | 
					      glance.parent: postiz
 | 
				
			||||||
      glance.name: Redis
 | 
					      glance.name: Redis
 | 
				
			||||||
 | 
					      mag37.dockcheck.update: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								todo.md
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								todo.md
									
									
									
									
									
								
							@@ -9,11 +9,11 @@
 | 
				
			|||||||
  roles/docker/tasks/
 | 
					  roles/docker/tasks/
 | 
				
			||||||
  ├── main.yml (orchestrator)
 | 
					  ├── main.yml (orchestrator)
 | 
				
			||||||
  ├── infrastructure/ (caddy, authentik, dockge)
 | 
					  ├── infrastructure/ (caddy, authentik, dockge)
 | 
				
			||||||
  ├── development/ (gitea, codeserver, conduit)
 | 
					  ├── development/ (gitea, codeserver, bytestash)
 | 
				
			||||||
  ├── media/ (audiobookshelf, calibre, ghost, pinchflat, pinry, hoarder, manyfold)
 | 
					  ├── media/ (audiobookshelf, calibre, ghost, pinchflat, pinry, hoarder, manyfold)
 | 
				
			||||||
  ├── productivity/ (paperless, baikal, syncthing, mmdl, heyform, dawarich, pingvin)
 | 
					  ├── productivity/ (paperless, baikal, syncthing, mmdl, heyform, dawarich, palmr, obsidian-livesync)
 | 
				
			||||||
  ├── communication/ (gotosocial, postiz)
 | 
					  ├── communication/ (gotosocial, postiz)
 | 
				
			||||||
  └── monitoring/ (glance, changedetection, appriseapi)
 | 
					  └── monitoring/ (glance, changedetection, appriseapi, gotify)
 | 
				
			||||||
  ```
 | 
					  ```
 | 
				
			||||||
- **COMPLETED**: All services organized into logical categories with category-level tags
 | 
					- **COMPLETED**: All services organized into logical categories with category-level tags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user