linux
Proxmox Openclaw IA Arch

instalazioa

https://atareao.es/tutorial/docker/

curl -fsSL https://get.docker.com -o get-docker.sh

sudo sh get-docker.sh

post instalacion

sudo usermod -aG docker $USER

MIGRUPO=$(id -gn)

newgrp docker

newgrp $MIGRUPO

comprobar

docker -v

docker run hello-world

docker-compose install

sudo apt install jq

version=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r ‘.tag_name’)

sudo curl -L “https://github.com/docker/compose/releases/download/${version}/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

komando erabilienak

docker images listatzeko image danak

docker rmi CONTAINER_ID borratzeko

docker ps -a ikusteko docker danak

docker-compose up -d docker- compose arraknkatzeko

docker-compose down docker- compose gelditzeko

docker-compose -f docker-compose.yml -f docker-compose.caddy.yml up -d caddykin arrankatzeko

docker-compose logs -f log-ak ikusteko

docker volume ls sortutako bolumenak listatzeko

docker volume flatnotes\_data inspect bolumen bat aztertzeko

echo DOCKER\_HOST ikusteko docker daemon nun dagoen
docker exec -ti /bin/bash
https://www.ochobitshacenunbyte.com/2020/12/14/como-accedo-a-un-contenedor-con-docker/

https://atareao.es/podcast/he-liberado-600-gb-de-docker-el-comando-que-no-conoces/
docker system df docker barruko image, volume eta build-cache okupatzen dutena ikusteko.

RECLAIMABLE: El espacio que recuperarías inmediatamente si ejecutaras un comando de limpieza (prune). Indica qué parte del tamaño total pertenece a objetos que no están activos.
docker builder prune -a erabiltzen ez diren danak borratzeko. bolumen huerfanoak ere (ez daudenak inungo kontenedoretara lotuta)
docker builder prune -a --filter "until=72h" azkeneko 3 egunetan erabili ez direnak bakarrik.

Si quieres reiniciar: docker compose restart

Si quieres volver a empezar con los contenedores:docker compose down && docker-compose up -d

Si quieres cargártelo todo (incluido volúmenes e imágenes)… simplemente añade un ”

—rmi -v ” al down: docker compose down --rmi -v && docker-compose up -d
para actualizar con docker-compose:
docker-compose down
docker-compose pull
docker-compose up --detach

docker image prune gero erabiltzen ez diren imaginak borratzeko

caddy

caddy-ko docker- composakin :
docker-compose -f docker-compose.yml docker-compose.caddy.yml up-d
beste aukera bat termix-en bezela label-etan jartzen:

services:
  termix:
    image: ghcr.io/lukegus/termix:2.4.1
    container_name: termix
    restart: unless-stopped
    init: true
    user: ${UID}:${GID}
    networks:
      - proxy
    volumes:
      - termix-data:/app/data
    labels:
      caddy: termix.xabi.ovh
      caddy.reverse_proxy: "{{upstreams 8080}}"
      caddy.reverse_proxy.flush_interval: "-1"
      caddy.reverse_proxy.transport: "http"
      caddy.reverse_proxy.transport.read_timeout: "3600s"

volumes:
  termix-data:
    driver: local

networks:
  proxy:
    external: true

ta gero sudo -E docker compose up -d -kin kontenedorea ejekutatu

Portainer
https://jacar.es/como-instalar-portainer-con-docker-compose/
https://enlabrecha.cl/como-actualizar-un-conteiner-docker-con-portainer/

watchtower
https://www.jamescoyle.net/how-to/docker-compose-files/3323-docker-compose-file-for-watchtower
https://www.ochobitshacenunbyte.com/2021/10/06/tus-contenedores-docker-al-dia-con-watchtower/
para actualizar automaticamente dockers
añadir el label en el docker compose del docker a actualizar

labels:
  - "com.centurylinklabs.watchtower.enable=true"

tinyauth: login bat jartzeko (adibidez homepage)
https://tinyauth.app/docs/community/caddy.html

Immich

Documentación: Migración de PhotoPrism a Immich

Fase 1: Configuración del Proxy Inverso (Caddy)

El primer obstáculo fue lograr que Immich fuera accesible desde el exterior mediante el dominio.

  • El problema: El contenedor immich-server no estaba conectado a la red externa de Caddy, y además tenía etiquetas heredadas de otros servicios (WebSockets) que no necesitaba.

  • La solución: 1. Conectar immich-server tanto a la red proxy (para Caddy) como a la red default (para hablar con su base de datos y Redis). 2. Limpiar las etiquetas de Caddy en el docker-compose.yml, dejando únicamente la ruta básica:

    YAML

    labels:
      caddy: immich.tudominio.ovh
      caddy.reverse_proxy: "{{upstreams 2283}}"
    

Fase 2: El sistema de almacenamiento y la comprobación de integridad

El objetivo era utilizar la plantilla nativa de Immich ({{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}) en un directorio nuevo y limpio.

  • El problema: Al definir el nuevo directorio (UPLOAD_LOCATION), Docker lo creaba como usuario root. El contenedor de Immich (que corre internamente con el usuario node o UID 1000) no tenía permisos para escribir. Al intentar crear las carpetas a mano, saltó la alarma de Integrity Check porque Immich exige que exista un archivo oculto llamado .immich en cada subcarpeta del sistema.

  • La solución: Crear la estructura y los archivos “chivatos” manualmente, y forzar la propiedad al UID 1000.

    Bash

    # 1. Crear directorios
    mkdir -p /ruta/immich/data/{encoded-video,library,upload,thumbs,profile,backups}
    
    # 2. Crear archivos de validación
    sudo touch /ruta/immich/data/encoded-video/.immich
    sudo touch /ruta/immich/data/library/.immich
    # (Repetir para upload, thumbs, profile y backups)
    
    # 3. Asignar permisos al usuario interno de Immich
    sudo chown -R 1000:1000 /ruta/immich/data
    

Fase 3: Importación masiva de originales (El reto de los permisos)

Para subir los archivos desde la antigua carpeta de PhotoPrism sin saturar el navegador, utilizamos la herramienta oficial Immich CLI mediante un contenedor Docker efímero.

  • Obstáculo 1 (Autenticación): Las versiones modernas de la CLI exigen usar variables de entorno (IMMICH_INSTANCE_URL e IMMICH_API_KEY) en lugar de argumentos en el comando.

  • Obstáculo 2 (Permisos de lectura): La CLI solo lograba importar fotos recientes (2024 en adelante). Descubrimos que las carpetas de los años anteriores (2009-2023) pertenecían a root. Se solucionó devolviendo la propiedad al usuario local:

    Bash

    sudo chown -R tu_usuario:tu_usuario /ruta/photoprism/Pictures
    

Fase 4: Encontrar los gigabytes ocultos

A pesar de tener los permisos correctos, la CLI seguía sin subir las fotos más antiguas porque las carpetas parecían estar vacías.

  • El diagnóstico: Utilizando comandos de auditoría (du -sh y find), descubrimos que PhotoPrism anidaba las fotos en subcarpetas profundas y, además, dividía los archivos: 8.1 GB estaban en /Pictures y 23 GB estaban almacenados en una caché interna en /Import.
  • La solución final: Lanzar la CLI atacando directamente ambas rutas que contenían los archivos reales, ignorando la carpeta /Storage (que solo contenía miniaturas inservibles para Immich).

Comando definitivo de importación:

Bash

sudo docker run -it --rm \
  -v /ruta/photoprism:/photoprism:ro \
  -e IMMICH_INSTANCE_URL="https://immich.tudominio.ovh/api" \
  -e IMMICH_API_KEY="TU_API_KEY" \
  ghcr.io/immich-app/immich-cli:latest upload \
  --recursive \
  /photoprism/Pictures /photoprism/Import

Con esto, Immich se encargó de extraer los metadatos reales (EXIF) de todos esos gigas recuperados, descartar duplicados y guardarlo todo físicamente bajo la estructura de años, meses y días que habías definido en tu plantilla. Un trabajo de limpieza y organización redondo.

PocketID
Atareao
https://auth.xabi.ovh

Conectar servicios : Para los que soportan OIDC, configuras el cliente en Pocket ID. Para el resto (Navidrome, Termix, FreshRSS…), toca montar OAuth2 Proxy por delante como intermediario.
He verificado:

• ✅ .env config correcto (PUBLIC_APP_URL, TRUSTED_PROXIES, ADMIN_EMAIL)
• ✅ El dominio auth.xabi.ovh resuelve bien con HTTPS
• ✅ Los magic links funcionan (entras a la configuración)
• ❌ El WebAuthn (crear passkey) falla en TODOS los dispositivos/navegadores

Esto puede ser:

  1. Un tema con el dominio .ovh y la validación del RP ID
  2. Algún header de Caddy que interfiere con el origen de WebAuthn
  3. La versión v2.13.0/v2.14.0 que tiene un requisito de WebAuthn que vuestros dispositivos no soportan

Uptime-kuma : web orriaka erortzen direnean abisatzek
https://uptime.xabi.ovh

Lychee(ikuxkako argazkiak)
https://github.com/LycheeOrg
https://github.com/jmlcas/lychee/blob/main/docker-compose.yml
portuak zabaldu ditut 8300 (orain funzionatzen du CAddykin)
http://161.97.168.69:8300/

metube youtube-ko video eta mp3 jeisteko
http://localhost:8081/
Simple torrent
https://simple-torrent.xabi.ovh/

duplicati kopia automatizatuta egiteko (google driven)
http://161.97.168.69:8200
https://youtu.be/woX_7PXvRAc?si=Y4QczLzxBd84P_xO
https://docs.linuxserver.io/images/docker-duplicati/#usage
https://github.com/linuxserver/docker-duplicati

Homepage Docker dashboard
https://gethomepage.dev/latest/
https://github.com/walkxcode/dashboard-icons

wordpress-local
https://danisanchez.net/instalar-wordpress-mysql-phpmyadmin-desde-docker-compose/
https://wppractico.com/migrar-wordpress-de-servidor-remoto-a-local/

VPS contabon nere pruebak
http://161.97.168.69:8000

duplicator-eko artxiboen permisoak aldatzeko
https://www.tekonline.com.au/%F0%9F%90%B3%F0%9F%94%A7-how-to-fix-file-permissions-in-dockerized-wordpress-from-inside-the-container/

Kavita Liburutegi digitala
https://wiki.kavitareader.com/installation/getting-started
liburuak karpeta baten barruan sartu behar dira eta izenek ezin dute espaziorik eduki

Kanboard
usuarioak:
xabi 77lua3
nagore ovejas

https://api.brightsky.dev

Navidrome
karpeta baten playlist-a sortzeko karpeta barruan sartu eta.
ls > playlist_izena.m3u
https://ittavern.com/notes/navidrome-create-playlist-from-songs-in-directory-on-linux/

lastfm-rekin konektatzeko API-a sortuta:
https://www.ochobitshacenunbyte.com/2025/09/09/navidrome-vitaminado-las-mejores-variables-de-entorno-para-tu-servidor-de-musica/
d| | |
| --- | --- |
| Application name | navidrome |
| API key | 39d62e57682b08e51f5d64d256446190 |
| Shared secret | 5e5a1ae95a0d0285acaa63d94f42d31e |
| Registered to | xabiliza |

hobeto karpetakin Swingmusic edo symphonium
filebrowser docker bezela: https://familia.xabi.ovh musika igo dezakegu eta webdavekin funtzionatzen du symphonium.

Multimedia stack
https://zerodya.net/self-host-jellyfin-media-streaming-stack/
https://academy.pointtosource.com/containers/all-in-one-media-server-docker/

timetagger
https://denbora.xabi.ovh nagore ovejas

gemini-cli
https://atareao.es/podcast/como-dar-superpoderes-a-tu-terminal/
https://github.com/google-gemini/gemini-cli

export GEMINI_API_KEY=“AIzaSyAfQ4H8yuGzlVEwu0PZMI4TE68jaGz4XL8”
para salir de gemini ctrl +c (2 aldiz)

Shell (shell) Runs commands you prefix with ! (e.g., !npm test) directly in the terminal .

Dockershield (auditoria seguridad)
https://www.youtube.com/watch?v=mdlnZTNUrEU
Instalatzeko:

curl -sSL https://raw.githubusercontent.com/adrian13508/dockershield/main/install.sh | bash

dockershield scan