fix: align quickstart with d0a1.es ecosystem and current reality #4
Reference in New Issue
Block a user
Delete Branch "chore/align-d0a1-ecosystem"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Hardening pass over the quickstart repo to make it match the actual d0a1.es
stack and remove long-standing drift between the README and reality.
What changed
README.md
8 GB minimum in one place, 6 GB in model recommendations, 5 GB in FAQ).
d0a1.es/vps(404). The README is no longer pointingto a page that does not exist.
*.d0a1.es(git, mail, app) - per user decision (no/meet, no/graph).WEBUI_AUTH(must betruewhenexposed to a network -
falseis only acceptable for personal/local use)..envvariables (table).docker-compose.yml
live in
.envwith sensible defaults, so the compose file does notneed to be edited to change anything.
ollama 0.11.4,open-webui 0.6.18).ollamaanddepends_on: condition: service_healthyon
open-webuiso manualdocker compose up -dwaits for Ollama.deploy.sh
.envfrom.env.exampleon first run.grep -qFso model names with.(e.g.qwen2.5:7b) match literally.New files
.env.example- documents every variable + RAM requirements per model.LICENSE- MIT (was promised in README but missing on disk)..gitignore- keeps local.env, editor cruft and OS junk out of git..gitattributesupdated to a singletext=auto eol=lfrule coveringevery text file, not just
*.sh. This stops the CRLF warnings onWindows checkouts for new files (
.env.example,LICENSE, etc.).How to test
Validated locally:
bash -n deploy.sh-> OKdocker compose config-> resolves cleanly with default.envgit addof new text filesCompanion action (admin only)
This PR lands on
devops/quickstart. To finish the rename tod0a1/quickstart, an admin (Jose) needs to:https://git.d0a1.es/devops/quickstart/settingsand renamethe repository to
d0a1/quickstart(Settings -> General -> Repository name).The flama API token does not have the
write:userscope, so theagent cannot create repos - this rename is a deliberate human gate.
Risk
deploy.shbehaviour changed: it now auto-creates.envif missing(no error). Existing users with a custom
.envare unaffected.docker-compose.ymlchanged: variable substitution syntax(
${VAR:-default}) is compatible with Docker Compose v2 only.v1 (
docker-composepython) users will get a parse error.Code review — Flama
Buen hardening pass en general: 8 GB consistente, troubleshooting ampliado,
.envexternalizado,.gitattributescubriendo todo el repo, yLICENSEpor fin en disco. Pre-flight checks y RAM detection multiplataforma son aciertos claros.Pero veo varios issues reales que conviene resolver antes de mergear:
Bloqueantes
1. Imágenes sin pin (docker-compose.yml)
Has cambiado de tags fijos a
:latest/:main:image: ollama/ollama:latest(antes0.30.8)image: ghcr.io/open-webui/open-webui:main(antes0.9.6)Esto rompe la reproducibilidad del quickstart. Cada
docker compose pullpuede arrancar una versión distinta. Pin a una tag estable conocida (p. ej.ollama/ollama:0.30.8yghcr.io/open-webui/open-webui:0.9.6o la equivalente actual), o documenta claramente que el repo sigue:mainpor decisión de producto.2. PR description tiene placeholders sin reemplazar
En el body del PR aparece literalmente:
Parece que se colaron los placeholders
*** en la descripción. Antes de mergear, edita el body del PR para que digaWEBUI_AUTH=*** (por defecto) — no exponer sin autenticación`, etc. La tabla final sí está bien, el problema está solo en el texto introductorio del bullet.3.
depends_onsin healthcheck (docker-compose.yml)La versión anterior tenía:
El nuevo compose elimina el healthcheck y deja
depends_on: - ollamasin condición.deploy.shcompensa con un wait-loop sobredocker exec ... ollama list, pero undocker compose up -ddirecto (instalación manual del README) arrancará Open WebUI antes de que Ollama esté listo. Mantén elhealthchecko documenta explícitamente que el manual requieredeploy.sh.Importantes (no bloqueantes pero conviene)
4.
.env.examplelínea 17 confunde lectorEl comentario parece un setting porque contiene
WEBUI_AUTH=*** literal, igual que la línea siguiente. Reformula:# NO expongas el puerto a internet sin autenticación (WEBUI_AUTH debe ser 'true')`.5.
grep -q "$DEFAULT_MODEL"es regex, no literal (deploy.sh:91)Si alguien pone
DEFAULT_MODEL=qwen2.5:7bel.actúa como wildcard. Funciona en este caso porque no hay modelo llamadoqwen2X5:7b, pero es frágil. Usagrep -qF -- "$DEFAULT_MODEL".6. RAM detection silenciosa en Windows Git Bash
total_ram_gbdevuelve0en cualquieruname -sque no sea Linux/Darwin (incluidoMINGW64_NT-...). El script entonces no avisa del sub-8 GB. Documenta en el README que en Windows se requiere WSL2 (ya lo dice la tabla de requisitos, pero conviene reforzar el comentario en el script).Menores
7.
set -a; . ./.env; set +a(deploy.sh:46-49) está bien, pero un valor con comilla simple sin cerrar (WEBUI_NAME=quickstart') hará fallar el script con stacktrace opaco. Aceptable porque el.env.exampleviene sano; anótalo en troubleshooting si quieres.Verificaciones locales que sí pasan
bash -n deploy.shOK)var(no aplica, es bash).gitattributescubre todos los archivos de textoResumen
El PR es mergeable tras resolver #1 (tags pin) y #3 (healthcheck). #2 es cosmético del body del PR. El resto son mejoras nice-to-have. Buen trabajo.
Comentario de la línea 17 confunde: contiene literalmente
WEBUI_AUTH=*** y la línea siguiente también esWEBUI_AUTH=***. Parece que el comentario sea un setting. Reformular a algo como:# NO expongas el puerto a internet sin autenticación (WEBUI_AUTH debe ser 'true')`.grep -q "$DEFAULT_MODEL"interpreta regex. Paraqwen2.5:7bel.actúa como wildcard. Funciona hoy porque no hay colisiones, pero es frágil. Mejor:grep -qF -- "$DEFAULT_MODEL".Bloqueante: imágenes sin pin. Has cambiado de tags fijos (
ollama:0.30.8,open-webui:0.9.6) a:latest/:main. Cadadocker compose pullpuede actualizar a una versión distinta sin aviso, rompiendo la reproducibilidad del quickstart. Pinear a tags estables o documentar explícitamente que se sigue:mainpor decisión.Bloqueante: pérdida del
healthcheck+condition: service_healthy. El compose anterior esperaba a que Ollama estuviera sano antes de levantar Open WebUI; ahoradepends_on: - ollamaarranca en paralelo. Eldeploy.shcompensa con un wait-loop sobredocker exec ... ollama list, pero el flujo manual (docker compose up -ddirecto del README) ya no esperará. Restaurar el healthcheck o documentar la dependencia dedeploy.sh.Follow-up — cosmetic fixes landed via PR #5
Revisando el estado actual del branch tras el merge-blocker fix ()
y repasando los puntos que quedaron en mi review anterior (#13), he aplicado
dos arreglos menores sin esperar:
1. PR description corrupto (PR #4)
El body tenia dos bullets rotos por truncacion:
Added explicit security warning onWEBUI_AUTH=*** el bullet quedabacortado ahi, sin cerrar el backtick ni terminar la frase.
** Added documentation block...(singuion inicial, con basura de asteriscos).
Acabo de actualizar el body del PR via API para que sea legible. La
intencion del bullet sigue siendo la misma, pero ahora esta completa.
2. Comentario mal reescrito en .env.example (linea 17) (PR #5)
Mi review #13 senalaba que el comentario parecia una linea de setting.
El commit intento reescribirlo pero la nueva version aun
contenia la referencia literal
${WEBUI_AUTH:-true}dentro del comentario(es decir, exactamente el patron que el review criticaba). Ademas la frase
queda a medias ("Por defecto WEBUI_AUTH=*** sin terminar).
He abierto PR #5 con el fix minimo: cambiar la linea a
# NO expongas el puerto a internet sin autenticacion. Mantener en true.Sin impacto funcional (es comentario puro).
3. Imagenes y healthcheck (puntos #1 y #3 de mi review anterior)
Confirmado en HEAD que estan bien:
image: ollama/ollama:0.11.4yimage: ghcr.io/open-webui/open-webui:0.6.18. Tags pineados.depends_on: ollama: condition: service_healthytambien. Mi review original lei el diff antiguo y meconfundi; esto esta resuelto.
Mi review #13 quedo obsoleto en los puntos #1 y #3 — los di por
pendientes cuando ya estaban cerrados en . Marcando como
aclaracion, no como criticism.
Estado actual
d0a1/quickstartsigue siendo unhuman-gate para Jose.
Buen trabajo con el PR — los puntos duros (tags, healthcheck, grep -qF,
MINGW case) ya estan cerrados.
Line 17 (in the original PR #4 version): the comment about
WEBUI_AUTHcontained an embedded `WEBUI_AUTH=*** reference that read like a setting line. This is exactly what PR #5 fixes. Order of operations: merge PR #5 first, or rebase #4 on top of #5, so the file never lands with the broken comment.Inconsistency on 8B models: the Importante callout says "usa modelos de hasta 7B cuantizados", but
.env.examplelistsllama3.1:8bas a valid choice for 8 GB hosts. Tighten the wording to match (e.g. "modelos 7B comodos, modelos 8B justos").The clone URL is
git.d0a1.es/d0a1/quickstart.gitbut the repo is stilldevops/quickstart. The PR body documents this as a companion admin rename. Suggest adding an explicit "Step 0" in the installation section so the rename does not slip.Lines 94 to 96: the orphan
# grep -qF ...comment is sandwiched between thedoneof theuntilloop and the# --- Modelo por defecto ---banner. Suggest moving the banner above and the grep note right above theif ! ... | grep -qF --line. Cosmetic but currently reads as if the banner belongs to the grep comment.Only
ollamahas ahealthcheck. That is enough to makeopen-webuiwait, but ifopen-webuicrashes after a successful start, Docker will not detect it and will not restart. A lightweightwget --spider http://localhost:8080/healthhealthcheck would close that gap. Non-blocking.Self-review: PR #4 (chore/align-d0a1-ecosystem)
This is my own PR, so I am reviewing it with a critical eye before it merges. Overall the direction is right (aligning the quickstart with the actual d0a1.es stack, hardening
deploy.sh, externalizing config to.env). A lot of good work here. I am posting this as COMMENT (not blocking) because nothing is a hard blocker, but I want to flag a handful of items worth tightening before merge or in a follow-up.What is good
d0a1.es/vpslink gone, no more phantom stack items (n8n/WordPress/Qdrant), correct d0a1 service list.docker-compose.ymlpins images to specific stable tags (ollama 0.11.4, open-webui 0.6.18). Reproducible builds win.deploy.shnow does pre-flight checks (docker binary, daemon, compose v2), auto-creates.envfrom.env.example, detects RAM on Linux and macOS, waits for Ollama readiness, usesgrep -qF --so model names with.(e.g.qwen2.5:7b) match literally. All correct..gitattributessimplifies to a single* text=auto eol=lfrule covering every text file.LICENSE(MIT) added. It was promised but missing..gitignorecovers.env, OS junk, editor cruft.ollama+depends_on: condition: service_healthyis the right call.Items worth addressing
1.
deploy.shlines 94 to 96. Comment is in the wrong place.The banner
# --- Modelo por defecto ---is wedged after the orphangrep -qFcomment. It reads as if the banner belongs to the grep note. Suggested order:Cosmetic but it is right next to the code it documents.
2.
.env.exampleline 17. The original confusing comment.The line
Por defecto WEBUI_AUTH=*** still parses like a setting directive because of the embeddedWEBUI_AUTH=*** reference. This is exactly what PR #5 fixes. Once #5 merges, this is resolved. Order of operations matters: please merge PR #5 before PR #4, or rebase #4 on top of #5.3.
docker-compose.yml. No healthcheck onopen-webui.Only
ollamahas a healthcheck. That is fine becauseopen-webuialready waits forollamaviadepends_on: condition: service_healthy. But ifopen-webuiitself crashes after starting (bad config written by the user via the WebUI, port rebind, etc.), Docker will not notice and will not restart it. A minimalwget --spider http://localhost:8080/healthhealthcheck would close that gap. Non-blocking, can be a follow-up.4.
deploy.sh..envcopy can propagate CRLF on Windows.cp .env.example .envwill copy whatever EOL is on disk. On Windows the user may download.env.examplevia the browser (no.gitattributesfilter applied), get CRLF, and thensource ./.envfails withset: usage:. The README troubleshooting already documents this withsed -i 's/ $//'. A more defensive option istr -d ' ' < .env.example > .env. Non-blocking.5.
README.md. Inconsistency on 8B model claim.The "Importante" note says: "usa modelos de hasta 7B cuantizados (Q4). Los modelos de 8B funcionan en CPU pero pueden ralentizar el sistema bajo carga."
But the
.env.exampletable listsllama3.1:8bunder "5 GB" (Q4_K_M). Suggest tightening to something like: "modelos 7B comodos y modelos 8B justos en 8 GB".6.
README.md. Clone URL is for the post-rename repo.The README uses
https://git.d0a1.es/d0a1/quickstart.gitbut the repo is stilldevops/quickstart. The PR body documents this as a companion admin rename. Suggest adding an explicit "Step 0" in the installation section so the rename does not slip.Verification I ran
Pulled every blob in the PR via
git ls-tree+git cat-file -pand counted bytes, LF, CRLF:.env.example: 1364 bytes, 39 LF, 0 CRLF.gitattributes: 226 bytes, 10 LF, 0 CRLF.gitignore: 276 bytes, 17 LF, 0 CRLFLICENSE: 1064 bytes, 21 LF, 0 CRLFdeploy.sh: 3833 bytes, 121 LF, 0 CRLFdocker-compose.yml: 1334 bytes, 48 LF, 0 CRLFREADME.md: 5780 bytes, 180 LF, 0 CRLFAll clean. (Note: piping
git cat-file -ptogrep $' 'on this Windows shell surfaces phantom CRLFs because the MSYS layer injects them on stdout. The actual blobs are LF. Verified with Python reading raw bytes fromsubprocess.check_output.)Recommendation
Approve, with the caveat that PR #5 must merge first (or #4 should rebase on top of #5) to keep the
WEBUI_AUTHcomment clean. The remaining items are non-blocking and can be follow-ups.Line 17 (in the original PR #4 version): the comment about
WEBUI_AUTHcontained an embedded `WEBUI_AUTH=*** reference that read like a setting line. This is exactly what PR #5 fixes. Order of operations: merge PR #5 first, or rebase #4 on top of #5, so the file never lands with the broken comment.Inconsistency on 8B models: the Importante callout says "usa modelos de hasta 7B cuantizados", but
.env.examplelistsllama3.1:8bas a valid choice for 8 GB hosts. Tighten the wording to match (e.g. "modelos 7B comodos, modelos 8B justos").The clone URL is
git.d0a1.es/d0a1/quickstart.gitbut the repo is stilldevops/quickstart. The PR body documents this as a companion admin rename. Suggest adding an explicit "Step 0" in the installation section so the rename does not slip.Lines 94 to 96: the orphan
# grep -qF ...comment is sandwiched between thedoneof theuntilloop and the# --- Modelo por defecto ---banner. Suggest moving the banner above and the grep note right above theif ! ... | grep -qF --line. Cosmetic but currently reads as if the banner belongs to the grep comment.Only
ollamahas ahealthcheck. That is enough to makeopen-webuiwait, but ifopen-webuicrashes after a successful start, Docker will not detect it and will not restart. A lightweightwget --spider http://localhost:8080/healthhealthcheck would close that gap. Non-blocking.Cron review (no se puede auto-aprobar)
Detectado al revisar el repo: PR #5 (fix/env-redaction-corruption) contiene los tres commits de este PR (
9ca7709+9547e2b+ el original del chore) mas un commit extra (54cb313) que cierra el issue #4 del comentario confuso de WEBUI_AUTH. Es decir, PR #5 es un superset de PR #4.Recomendacion a Jose: cerrar este PR #4 como superseded (sin mergear) y mergear PR #5. Asi se evita tener los commits duplicados en la historia.
Verificacion del codigo en PR #5 (que es lo que entraria a main si seguimos la recomendacion):
Follow-ups no bloqueantes que ya estaban identificados en el review #14 y que siguen vivos:
Si por algun motivo prefieres mergear este PR #4 primero, PR #5 seguira mergeable (solo aplicara el delta del commit
54cb313sobre el nuevo main). Pero el resultado en disco sera el mismo y la historia queda mas limpia cerrando este.Mergeable, sin bloqueantes.
Line 17 (in the original PR #4 version): the comment about
WEBUI_AUTHcontained an embedded `WEBUI_AUTH=*** reference that read like a setting line. This is exactly what PR #5 fixes. Order of operations: merge PR #5 first, or rebase #4 on top of #5, so the file never lands with the broken comment.Inconsistency on 8B models: the Importante callout says "usa modelos de hasta 7B cuantizados", but
.env.examplelistsllama3.1:8bas a valid choice for 8 GB hosts. Tighten the wording to match (e.g. "modelos 7B comodos, modelos 8B justos").The clone URL is
git.d0a1.es/d0a1/quickstart.gitbut the repo is stilldevops/quickstart. The PR body documents this as a companion admin rename. Suggest adding an explicit "Step 0" in the installation section so the rename does not slip.Lines 94 to 96: the orphan
# grep -qF ...comment is sandwiched between thedoneof theuntilloop and the# --- Modelo por defecto ---banner. Suggest moving the banner above and the grep note right above theif ! ... | grep -qF --line. Cosmetic but currently reads as if the banner belongs to the grep comment.Only
ollamahas ahealthcheck. That is enough to makeopen-webuiwait, but ifopen-webuicrashes after a successful start, Docker will not detect it and will not restart. A lightweightwget --spider http://localhost:8080/healthhealthcheck would close that gap. Non-blocking.Self-review con diagnóstico corregido
Tras revisar los bytes reales del
.env.exampleydocker-compose.ymlen esta rama (no la salida renderizada por mi consola, que parece colapsar valores comotrue, vacío o sustituciones${VAR:-default}a***por motivos de redacción visual), mi self-review anterior estaba parcialmente equivocado. Corrijo:✅
docker-compose.yml— bienLas líneas 39 y 40 (sustituciones de variables) son correctas. Mi display las truncaba, pero los bytes reales son la sustitución estándar que Compose v2 expande sin problema.
python yaml.safe_load+ simulación de regex resuelve el archivo limpiamente, conWEBUI_AUTHresuelta atrueyWEBUI_SECRET_KEYresuelta a vacío (correcto, secret-key pendiente).bash -n deploy.shtambién pasa. El stack está listo paradocker compose up -dcon los defaults del.env.example.🐛 Bug real (único) en
.env.exampleLínea 17 del comentario:
Pull request closed