Kanboard (Kan)¶
Alternativa open source a Trello. Kanban board con PostgreSQL 15. Migraciones vía contenedor
kan-migrate(no automáticas al iniciar).
📁 Rutas y configs¶
| Qué | Dónde |
|---|---|
| Compose | /opt/docker/kan/compose.yaml |
| Compose migraciones | /opt/docker/kan/compose.migrate.yaml |
| Script migraciones | /opt/docker/kan/migrate.sh |
| Variables de entorno | /opt/docker/kan/.env |
Contenedores: kan-web, kan-db (PostgreSQL). Puerto: 8514 (solo 127.0.0.1, detrás de Caddy). Red: kan_net (externa).
Migraciones¶
La imagen kan:latest NO auto-migra el esquema. Antes de actualizar la imagen, correr:
/opt/docker/kan/migrate.sh # docker compose -f compose.yaml -f compose.migrate.yaml run --rm migrate
⚠️ compose.migrate.yaml debe usar la red kan_net (externa) — la red original kan_kan-network fue eliminada el 15-ago-2026 (commit eb3069d). Si Kan se ve vacío tras actualizar la imagen, es mismatch de esquema: correr las migraciones (incidente 2026-08-21: faltaba la columna cardPrefix, 4 migraciones pendientes, los datos nunca se perdieron).
Compose (web + db)¶
services:
web:
image: ghcr.io/kanbn/kan:latest
container_name: kan-web
ports:
- 127.0.0.1:8514:3000
networks:
- kan_net
env_file:
- .env
environment:
- NEXT_PUBLIC_BASE_URL=${NEXT_PUBLIC_BASE_URL}
- BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET}
- POSTGRES_URL=${POSTGRES_URL}
- NEXT_PUBLIC_ALLOW_CREDENTIALS=true
- BETTER_AUTH_TRUSTED_ORIGINS=${BETTER_AUTH_TRUSTED_ORIGINS}
depends_on:
postgres:
condition: service_healthy
restart: unless-stopped
postgres:
image: postgres:15
container_name: kan-db
environment:
- POSTGRES_DB=kan_db
- POSTGRES_USER=kan
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- kan_postgres_data:/var/lib/postgresql/data
healthcheck:
test:
- CMD-SHELL
- pg_isready -U kan -d kan_db
interval: 5s
timeout: 5s
retries: 10
restart: unless-stopped
networks:
- kan_net
networks:
kan_net:
external: true
volumes:
kan_postgres_data: null