No description
  • Shell 59.5%
  • Jinja 26.5%
  • Python 14%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Kevin Heyer c0e28092b1
All checks were successful
/ image (push) Successful in 30m43s
/ lint (push) Successful in 5m41s
/ publish (push) Successful in 7s
Add wishly as LXC, VM and Docker app
wishly 0.1.0 is built natively from the Git tag v0.1.0 (checked against
the commit GitHub reports), Python packages from uv.lock on Debian's
Python. gunicorn on port 8000, SQLite in /var/lib/wishly, tasks run in
the web process, birthday reminders from a systemd timer. The first
administrator "admin" gets the generated wishly_admin_password while no
superuser exists. docker-compose.yml runs the upstream stack with the
image ghcr.io/kevinheyer-dev/wishly.

Tested: lint.sh clean; dev-container.sh twice (smoke test green, second
run changed=1); login as admin via the guest IP; compose stack healthy
with admin created. Not tested: update path (no older release exists),
VM image build and boot test (CI after push).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 12:01:30 +02:00
.forgejo/workflows Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
.vibe Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
files Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
handlers Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
tasks Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
templates Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
tests Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
.clinerules Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
.cursorrules Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
.windsurfrules Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
AGENTS.md Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
CHANGELOG.md Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
CLAUDE.md Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
docker-compose.yml Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
GEMINI.md Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
iac.json Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00
README.md Add wishly as LXC, VM and Docker app 2026-10-21 12:01:30 +02:00

iac-wishly

wishly – Wunschlisten für Familien und Freundeskreise – als LXC oder VM auf Proxmox VE oder mit Docker Compose. Teil von iac.

Installation (auf der Proxmox-Node)

bash -c "$(curl -fsSL https://iac.heyer.systems/wishly/ct.sh)"   # LXC
bash -c "$(curl -fsSL https://iac.heyer.systems/wishly/vm.sh)"   # VM

Ohne Dialog: IAC_NONINTERACTIVE=1 und var_*-Variablen – am einfachsten mit dem Generator auf https://iac.heyer.systems/apps/wishly/. Läuft wishly hinter einem Reverse-Proxy mit TLS, beim Anlegen var_wishly_site_url=https://wishly.example.org setzen.

Anmeldung

Direkt nach der Installation: http://<ip>:8000/, Benutzer admin, Passwort im Gast:

grep wishly_admin_password /etc/iac/settings.env

Das Konto wird nur angelegt, solange es keinen Superuser gibt – ein geändertes Passwort oder ein umbenanntes Konto bleibt unangetastet. Die Django-Verwaltung liegt unter /verwaltung/. Neue Konten können sich selbst registrieren (WISHLY_ALLOW_SIGNUP=false schaltet das ab).

Ports

Port Dienst Erreichbar
8000/tcp Weboberfläche (gunicorn) alle (public)

Kein TLS: für den Betrieb im Internet einen Reverse-Proxy (z. B. iac-traefik) davor setzen.

Aufbau

  • Installiert wird aus dem Git-Tag v<version> von GitHub. Weil wishly keine Archive mit Prüfsummen veröffentlicht, muss der Tag auf den Commit zeigen, den die GitHub-API meldet; die Python-Pakete kommen mit Prüfsummen aus uv.lock, Python selbst aus Debian.
  • /opt/wishly/current → /opt/wishly/releases/wishly-<version> (Quellen, .venv, statische Dateien); nur das aktive Release bleibt liegen.
  • Datenbank: SQLite in /var/lib/wishly/db.sqlite3 – das ist alles, was gesichert werden muss.
  • Kein Celery und kein Redis: Shopseiten werden direkt beim Speichern eingelesen, Geburtstags-Erinnerungen verschickt wishly-reminders.timer täglich um 8 Uhr (Europe/Berlin).
  • Konfiguration: /etc/wishly/wishly.env verwaltet iac. Eigene Einstellungen (SMTP für Passwort-Reset und Erinnerungen, Amazon-Partner-Tag, Registrierung …) in /etc/wishly/wishly.local.env, danach systemctl restart wishly. Alle Variablen: docs/betrieb.md von wishly.
  • Erlaubte Hostnamen (DJANGO_ALLOWED_HOSTS): IP, Hostname und der Host aus wishly_site_url. Wer wishly unter weiteren Namen aufruft, trägt sie in wishly.local.env ein. Ändert sich die IP, passt das nächste update die Liste an.
  • Verwaltungsbefehle: wishly-manage <befehl>, z. B. wishly-manage changepassword admin.

Docker

mkdir -p /opt/wishly && cd /opt/wishly
curl -fsSL https://iac.heyer.systems/wishly/docker-compose.yml -o docker-compose.yml
printf 'DJANGO_SECRET_KEY=%s\nPOSTGRES_PASSWORD=%s\nWISHLY_ADMIN_PASSWORD=%s\nDJANGO_ALLOWED_HOSTS=%s\n' \
  "$(openssl rand -hex 32)" "$(openssl rand -hex 24)" "$(openssl rand -hex 12)" \
  "$(hostname -I | cut -d' ' -f1),$(hostname),localhost" > .env
docker compose up -d

Das ist der Stack von wishly selbst (Image ghcr.io/kevinheyer-dev/wishly): gunicorn, Celery-Worker und -Beat, PostgreSQL 17 und Redis. Anmeldung als admin mit WISHLY_ADMIN_PASSWORD aus .env. Update: docker compose pull && docker compose up -d (bleibt in Version 0.1.x).

Update (im Gast)

update

update wechselt auf die in iac.json festgeschriebene, getestete Version (Renovate hebt sie an), baut das neue Release, migriert die Datenbank und startet wishly neu. Ohne neue Version ändert sich nichts.

Selbsttest (im Gast)

bash /var/lib/iac/src/core/bin/iac-smoke