Compare commits

...

2 Commits

Author SHA1 Message Date
c95ca45a67 feat: add Obsidian LiveSync CouchDB service for note synchronization
- Add Obsidian LiveSync Docker service with CouchDB backend
- Configure service for Tailscale-only access on port 5984
- Add vault credentials for database authentication
- Create productivity category task and handler
- Enable Glance dashboard integration

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-02 23:46:05 -06:00
a287e50048 feat: add ByteStash service for code snippet management
- Add ByteStash Docker service configuration and deployment
- Configure subdomain routing through Caddy
- Add DNS record for ByteStash subdomain
- Update development service category to include ByteStash

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-02 13:53:23 -06:00
11 changed files with 143 additions and 3 deletions

View File

@@ -27,6 +27,8 @@
ip: "152.53.36.98"
- name: "code"
ip: "152.53.36.98"
- name: "snippets"
ip: "152.53.36.98"
- name: cal
ip: "152.53.36.98"
- name: phlog
@@ -49,6 +51,8 @@
ip: "152.53.36.98"
- name: gotify-assistant
ip: "152.53.36.98"
- name: pdg
ip: "152.53.36.98"
- name: nerder.land
dns_records:
- name: "forms"

View File

@@ -29,6 +29,7 @@ subdomains:
appriseapi: "appriseapi.{{ primary_domain }}"
dockge: "dockge.{{ primary_domain }}"
code: "code.{{ primary_domain }}" # Code Server
bytestash: "snippets.{{ primary_domain }}" # ByteStash code snippets
gotify: "gotify.{{ primary_domain }}" # Gotify notifications
gotify_assistant: "gotify-assistant.{{ primary_domain }}" # iGotify iOS assistant

View File

@@ -49,6 +49,10 @@ code.thesatelliteoflove.com {
reverse_proxy authentik-server-1:9000
}
snippets.thesatelliteoflove.com {
reverse_proxy bytestash:5000
}
files.thesatelliteoflove.com {
reverse_proxy pingvin-pingvin-share-1:3000
}
@@ -64,8 +68,6 @@ thesatelliteoflove.com {
file_server
}
bookmarks.thesatelliteoflove.com {
reverse_proxy hoarder-web-1:3000
}
@@ -91,6 +93,17 @@ gotify-assistant.thesatelliteoflove.com {
reverse_proxy gotify-igotify-assistant-1: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 {
root * /srv/repair

View File

@@ -11,4 +11,11 @@
project_src: /opt/stacks/caddy
files:
- compose.yml
state: restarted
- name: restart obsidian-livesync
community.docker.docker_compose_v2:
project_src: /opt/stacks/obsidian-livesync
files:
- docker-compose.yml
state: restarted

View File

@@ -0,0 +1,19 @@
- name: make bytestash directories
ansible.builtin.file:
path: "{{ item}}"
state: directory
loop:
- /opt/stacks/bytestash
- name: Template out the compose file
ansible.builtin.template:
src: bytestash-compose.yml.j2
dest: /opt/stacks/bytestash/compose.yml
owner: root
mode: 644
- name: deploy bytestash stack
community.docker.docker_compose_v2:
project_src: /opt/stacks/bytestash
files:
- compose.yml

View File

@@ -9,3 +9,7 @@
import_tasks: codeserver.yml
tags: codeserver
- name: Install bytestash
import_tasks: bytestash.yml
tags: bytestash

View File

@@ -27,4 +27,8 @@
- name: Install pingvin
import_tasks: pingvin.yml
tags: pingvin
tags: pingvin
- name: Install obsidian-livesync
import_tasks: obsidian-livesync.yml
tags: obsidian-livesync

View 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

View 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 }}

View File

@@ -7,6 +7,7 @@ services:
glance.icon: si:vscodium
glance.url: https://{{ subdomains.code }}/
glance.description: Code Server
mag37.dockcheck.update: true
container_name: codeserver
volumes:
- home:/home

View 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 }}"