Sync Knowledge Portal From Git¶
Fecha: 2026-06-01
Objetivo¶
Dejar el Knowledge Portal sincronizable desde origin/main sin editar
documentacion directamente en el VPS.
Regla central¶
- la fuente de verdad es siempre este repo Git
- el VPS solo publica una copia generada
- si hay diferencia entre VPS y repo, gana Git
SAFE POINT obligatorio¶
Antes de cualquier sync:
git status -sbgit rev-parse HEAD
Diagnostico O9.3¶
Estado real auditado por SSH el 2026-06-01:
- URL publicada:
https://doc.alpuntodeventa.com.ar/ - snapshot publicado en VPS:
/opt/openclawai - metodo de deploy previo:
sync controlado de archivos +
docker compose up -d --build - contenedor publicado:
knowledge-portal - compose rector:
/opt/openclawai/infra/knowledge-portal/docker-compose.yml - bind local esperado:
127.0.0.1:8085 -> 8085 - upstream esperado en
NPM:knowledge-portal:8085 - gap actual:
el checkout del VPS sigue como snapshot sin
.git - consecuencia:
hoy no existe garantia de
origin, rama nigit pulloperativo en el VPS - evidencia viva de runtime:
docker compose -f /opt/openclawai/infra/knowledge-portal/docker-compose.yml psmuestraknowledge-portalenUpcurl -I http://127.0.0.1:8085/->HTTP/1.1 200 OKcurl -I https://doc.alpuntodeventa.com.ar/->HTTP/2 200search/search_index.jsonresponde- una pagina real sigue renderizando Mermaid
- hallazgo clave:
el snapshot publicado no coincide con el
HEADlocalf49b9c581c1599ed72cec60cad5bf704f7108673 - interpretacion:
el portal publicado sigue sirviendo un snapshot anterior a O9.2; por eso hoy
faltan tanto
.gitcomo el contenido mas nuevo del repo
Diagnostico operativo a correr en el VPS¶
Estos comandos sirven para cerrar el estado real sin editar contenido:
cd /opt/openclawaipwdls -latest -d .git && echo git-present || echo git-missinggit status -sbgit rev-parse HEADgit branch --show-currentgit remote -vstat -c '%U:%G %a %n' /opt/openclawai /opt/openclawai/infra /opt/openclawai/docsdocker ps --filter name=knowledge-portaldocker inspect -f '{{json .Config.Labels}}' knowledge-portaldocker compose -f /opt/openclawai/infra/knowledge-portal/docker-compose.yml pscurl -I http://127.0.0.1:8085/curl -I https://doc.alpuntodeventa.com.ar/
Si git no existe o falla por snapshot sin .git, el gap queda confirmado y
no habilita inventar credenciales.
Flujo recomendado de sincronizacion¶
Opcion recomendada¶
- usar
deploy keySSH de solo lectura asociada al repo privado - alternativa aceptable: token de acceso solo lectura almacenado fuera del repo
- no guardar secretos en Markdown, Git ni logs del script
Secuencia objetivo¶
- el cambio nace en este repo
- validacion local:
mkdocs build --strict - commit y
git push - en el VPS:
git pull --ff-only origin main - rebuild:
mkdocs build --strict - redeploy:
docker compose -f infra/knowledge-portal/docker-compose.yml up -d --build --force-recreate - validacion local del servicio:
curl -I http://127.0.0.1:8085/ - validacion publica final:
curl -I https://doc.alpuntodeventa.com.ar/
Scripts operativos preparados¶
Archivos:
infra/knowledge-portal/deploy-knowledge-portal.shinfra/knowledge-portal/activate-real-git-checkout.sh
deploy-knowledge-portal.sh:
- exige checkout Git real
- exige repo limpio
- registra SAFE POINT
- valida
originy ramamain - hace
git fetchygit pull --ff-only - crea o reutiliza
.venv-portal - corre
mkdocs build --strict - valida
docker compose config - recrea
knowledge-portal - valida
http://127.0.0.1:8085/ - imprime evidencia final con commit y estado HTTP
activate-real-git-checkout.sh:
- exige una deploy key SSH real en el VPS
- valida acceso read-only a GitHub con
git ls-remote - clona
mainen un path temporal - compara snapshot vs checkout Git y deja reporte
- conserva backup del snapshot anterior
- activa el checkout real en
/opt/openclawai - ejecuta
deploy-knowledge-portal.sh - evita imprimir claves privadas o tokens
- puede ejecutarse versionado desde el repo o ya staged en el VPS como
/root/activate-real-git-checkout.sh
Diagnostico O9.5¶
Estado real revalidado por SSH el 2026-06-01 despues de O9.4:
- el checkout del VPS ya era Git real:
/opt/openclawai/.git - la deploy key seguia vigente:
~/.ssh/openclawai_github_deploy ssh -T git@github.comcon esa key seguia autenticando en modo read-onlyoriginseguia apuntando a:git@github.com:gcanuti/openclawai-vps-lab.git- la rama seguia siendo:
main - permisos observados:
root:root 755 /opt/openclawai,root:root 755 /opt/openclawai/infra,root:root 707 /opt/openclawai/docs GIT_SSH_COMMANDno estaba exportada de forma permanente en la sesion del host, pero el deploy la recompone en runtime cuando detecta la deploy key- causa real del fallo de
git pull: el working tree del VPS quedo con cambios manuales de O9.4 sin commitear sobre8106783, por lo quegit pull --ff-onlyrechazaba el merge aunque la autenticacion yoriginestuvieran correctos - evidencia de la causa:
git status -sbmostraba archivos de docs ymkdocs.ymlmodificados masdocs/governance/operations/O9.4-SERVICE-ACCESS-PUBLICATION.mdsin trackear
Correccion aplicada en O9.5¶
- se comparo el contenido sucio del VPS contra
origin/main - se confirmo que esos cambios coincidian con el commit correcto ya publicado
en GitHub:
d30c336e2e547d69a76b49ebc767911464b84891 - se genero un
stashpreventivo:o95-pre-pull-safety-20260601 - con el repo limpio, el deploy oficial ejecuto:
git fetch --prune origin mainy luegogit pull --ff-only origin main - el fast-forward efectivo fue:
8106783 -> d30c336 - despues del pull, el script rebuildo y recreo
knowledge-portal - no se usaron
scp, tokens ni secretos embebidos
Procedimiento para habilitar Git real en VPS¶
Con deploy key SSH¶
- generar o reutilizar una key dedicada en el VPS:
ssh-keygen -t ed25519 -N '' -f ~/.ssh/openclawai_github_deploy -C knowledge-portal-deploy - leer la clave publica sin tocar la privada:
cat ~/.ssh/openclawai_github_deploy.pub - agregar esa clave publica como
Deploy keyread-only en GitHub paragcanuti/openclawai-vps-lab - cargar
known_hosts:ssh-keyscan github.com >> ~/.ssh/known_hosts - validar acceso read-only sin imprimir secretos:
GIT_SSH_COMMAND='ssh -i ~/.ssh/openclawai_github_deploy -o IdentitiesOnly=yes' git ls-remote git@github.com:gcanuti/openclawai-vps-lab.git main - ejecutar el bootstrap seguro ya staged en el VPS:
bash /root/activate-real-git-checkout.sh - evidencia esperada del bootstrap:
- backup del snapshot anterior en
/opt/openclawai-backups/openclawai-snapshot-<timestamp> - reporte de comparacion en
/opt/openclawai-backups/openclawai-compare-<timestamp>.txt - checkout Git real activado en
/opt/openclawai - ejecucion final de
deploy-knowledge-portal.sh
Con token read-only¶
- guardar el token fuera del repo y fuera de docs
- configurar el remote en el VPS usando helper seguro del sistema
- validar
git remote -vsin imprimir el secreto - correr el mismo script de deploy
Estado operativo actual¶
- la deploy key dedicada del VPS ya fue aceptada por GitHub:
~/.ssh/openclawai_github_deploy - fingerprint publica validada:
SHA256:e6g0Mxk83ELK0Njm7B4URwlcE7pTjp5Z5i+tTYV9L9w - autenticacion SSH validada:
Hi gcanuti/openclawai-vps-lab! You've successfully authenticated - bootstrap real ejecutado:
bash /root/activate-real-git-checkout.sh - resultado:
/opt/openclawaidejo de ser snapshot y paso a checkout Git real con.git - validacion Git:
git rev-parse HEADygit rev-parse origin/maincoinciden end30c336e2e547d69a76b49ebc767911464b84891 - deploy final:
bash /opt/openclawai/infra/knowledge-portal/deploy-knowledge-portal.shejecutaOKusando la deploy key read-only - detalle relevante del host:
el VPS no tiene
python3-venv, por eso el script hace fallback al build estricto dentro del Dockerfile conmkdocs build --strict - validacion publica:
https://doc.alpuntodeventa.com.ar/responde200search/search_index.jsonrespondegovernance/knowledge/infrastructure/dns-tls/sigue entregando Mermaid - validacion O9.5 adicional:
el deploy oficial del portal ya vuelve a hacer el
git pullreal desdeorigin/main; el workaround porscpdeja de ser necesario - secretos: no se imprimieron claves privadas ni tokens durante la activacion
Revalidacion 2026-06-02¶
SAFE POINTremoto revalidado en/opt/openclawai:git status -sb->## main...origin/maingit rev-parse HEAD->f20c91ef8eff3c405e4620b063927393943c1e51- el checkout seguia siendo Git real:
/opt/openclawai/.git originseguia apuntando a:git@github.com:gcanuti/openclawai-vps-lab.git- nueva causa real del fallo
publickey: la deploy key~/.ssh/openclawai_github_deployseguia presente y valida, perorootya no tenia~/.ssh/config, por lo quesshno seleccionaba automaticamente esa identidad paragithub.com - evidencia:
ssh -T git@github.comdevolviaPermission denied (publickey)git pull --ff-only origin mainfallaba con el mismo errorGIT_SSH_COMMAND='ssh -i ~/.ssh/openclawai_github_deploy -o IdentitiesOnly=yes -o UserKnownHostsFile=~/.ssh/known_hosts' git ls-remote ...si autenticaba correctamente- correccion aplicada:
se recreo
~/.ssh/configcon entrada explicita paragithub.comusandoIdentityFile ~/.ssh/openclawai_github_deploy - validacion posterior:
ssh -T git@github.comvuelve a autenticar en read-onlygit pull --ff-only origin mainvuelve a operar en/opt/openclawai- fast-forward observado:
f20c91e -> 7a78ce1
Validacion de cierre¶
- SAFE POINT inicial: obligatorio
- diagnostico VPS: documentado
- flujo recomendado: definido
- script operativo: creado
- bootstrap de reemplazo seguro: creado
- validacion local:
mkdocs build --strict - validacion local del contenedor cuando se ejecute en VPS:
curl -I http://127.0.0.1:8085/ - validacion publica final:
curl -I https://doc.alpuntodeventa.com.ar/
Politicas de seguridad¶
- no editar docs manualmente en el VPS
- no guardar secretos en el repo
- no pegar tokens en runbooks
- no imprimir claves privadas ni tokens en logs