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
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-serverno 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-servertanto a la redproxy(para Caddy) como a la reddefault(para hablar con su base de datos y Redis). 2. Limpiar las etiquetas de Caddy en eldocker-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 usuarioroot. El contenedor de Immich (que corre internamente con el usuarionodeo UID1000) 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.immichen 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_URLeIMMICH_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 -shyfind), descubrimos que PhotoPrism anidaba las fotos en subcarpetas profundas y, además, dividía los archivos: 8.1 GB estaban en/Picturesy 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:
- Un tema con el dominio
.ovhy la validación del RP ID - Algún header de Caddy que interfiere con el origen de WebAuthn
- 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
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