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>
This commit is contained in:
2025-07-02 13:53:23 -06:00
parent 01d959d12c
commit a287e50048
7 changed files with 81 additions and 2 deletions

View File

@ -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
@ -49,6 +51,8 @@
ip: "152.53.36.98" ip: "152.53.36.98"
- name: gotify-assistant - name: gotify-assistant
ip: "152.53.36.98" ip: "152.53.36.98"
- name: pdg
ip: "152.53.36.98"
- name: nerder.land - name: nerder.land
dns_records: dns_records:
- name: "forms" - name: "forms"

View File

@ -29,6 +29,7 @@ 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
bytestash: "snippets.{{ primary_domain }}" # ByteStash code snippets
gotify: "gotify.{{ primary_domain }}" # Gotify notifications gotify: "gotify.{{ primary_domain }}" # Gotify notifications
gotify_assistant: "gotify-assistant.{{ primary_domain }}" # iGotify iOS assistant gotify_assistant: "gotify-assistant.{{ primary_domain }}" # iGotify iOS assistant

View File

@ -49,6 +49,10 @@ 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 pingvin-pingvin-share-1:3000
} }
@ -64,8 +68,6 @@ thesatelliteoflove.com {
file_server file_server
} }
bookmarks.thesatelliteoflove.com { bookmarks.thesatelliteoflove.com {
reverse_proxy hoarder-web-1:3000 reverse_proxy hoarder-web-1:3000
} }
@ -91,6 +93,17 @@ gotify-assistant.thesatelliteoflove.com {
reverse_proxy gotify-igotify-assistant-1:8080 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 { repair.nerder.land {
root * /srv/repair root * /srv/repair

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 import_tasks: codeserver.yml
tags: codeserver tags: codeserver
- name: Install bytestash
import_tasks: bytestash.yml
tags: bytestash

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.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