Desplegando Wiki.js con Docker: Una Guía Completa
Desplegando Wiki.js con Docker: Una Guía Completa
Autoalojar Wiki.js a través de Docker combina flexibilidad con capacidades de documentación de nivel empresarial. Esta guía cubre estrategias de despliegue optimizadas, endurecimiento de la seguridad y mejores prácticas de producción.
Requisitos de Infraestructura Básica
Componentes Base:
- Docker Engine 24+ y Docker Compose 2.21+
- PostgreSQL 15+ (recomendado) o MySQL 8+
- Mínimo 2 vCPU/4GB RAM (escalable con usuarios concurrentes)
- Ubuntu 22.04 LTS o RHEL 8.5+ como sistema operativo anfitrión
Preparación de Red:
# Crear red Docker dedicada
docker network create wikinet
# Generar credenciales de DB seguras
mkdir -p /etc/wiki && openssl rand -base64 32 > /etc/wiki/.db-secret
Despliegue Docker de Grado de Producción
Opción 1: Docker Compose (Recomendado)
version: "3.8"
services:
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: wiki
POSTGRES_USER_FILE: /etc/wiki/.db-secret
POSTGRES_PASSWORD_FILE: /etc/wiki/.db-secret
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- wikinet
wiki:
image: ghcr.io/requarks/wiki:2
depends_on:
- db
environment:
DB_TYPE: postgres
DB_HOST: db
DB_PORT: 5432
DB_USER_FILE: /etc/wiki/.db-secret
DB_PASS_FILE: /etc/wiki/.db-secret
DB_NAME: wiki
ports:
- "80:3000"
- "443:3443"
volumes:
- /etc/wiki:/etc/wiki:ro
networks:
- wikinet
volumes:
pgdata:
networks:
wikinet:
external: true
Comienza con docker compose up -d
Opción 2: Despliegue Manual de Docker
# Contenedor de base de datos
docker run -d --name=wiki-db \
-v pgdata:/var/lib/postgresql/data \
-e POSTGRES_DB=wiki \
-e POSTGRES_USER=wiki \
--network=wikinet \
postgres:15-alpine
# Contenedor de Wiki.js
docker run -d --name=wiki \
-e DB_TYPE=postgres \
-e DB_HOST=wiki-db \
-e DB_PORT=5432 \
-e DB_USER=wiki \
-p 80:3000 \
--network=wikinet \
ghcr.io/requarks/wiki:2
Lista de Verificación para Endurecimiento de Seguridad
Gestión de Secretos
- Almacenar credenciales en secretos de Docker encriptados
echo "wikijsrocks" | docker secret create db_password -
Aislamiento de Red
services: db: networks: wikinet: aliases: - database.internal
Configuración de SSL
environment: LETSENCRYPT_DOMAIN: wiki.example.com LETSENCRYPT_EMAIL: admin@example.com SSL_ACTIVE: "1"
Límites de Recursos
deploy: resources: limits: cpus: '2' memory: 4G
Optimización del Rendimiento
- Caché: Habilitar Redis con
-e REDIS_ENABLED=true
- Compresión de Activos:
gzip_types text/plain text/css application/json application/javascript;
- Indexación de Base de Datos:
CREATE INDEX CONCURRENTLY page_content_idx ON pages USING gin(to_tsvector('english', content));
Operaciones de Mantenimiento
Estrategia de Respaldo:
# Instantánea diaria de la DB
docker exec wiki-db pg_dump -U wiki -d wiki > wiki_backup_$(date +%s).sql
# Contenido controlado por versión
docker exec wiki rsync -av /wiki/data /mnt/wiki-snapshots/
Procedimiento de Actualización:
docker pull ghcr.io/requarks/wiki:2
docker stop wiki && docker rm wiki
# Recrear contenedor con la imagen actualizada
docker compose up -d --force-recreate
Recuperación ante Desastres
graph LR
A[Contenedor de Wiki] --> B[Copias SQL Diarias]
A --> C[Almacenamiento respaldado por Git]
B --> D(Bucket S3)
C --> E(Repositorio GitLab)
Para despliegues empresariales que requieren escalado automático y monitoreo 24/7, considera el hosting Docker administrado de LightNode con cumplimiento de seguridad integrado y caché en el borde.
Preguntas Frecuentes sobre Solución de Problemas
- 502 Bad Gateway: Verifica las cadenas de conexión de la base de datos
- Cargas de Página Lentas: Verifica que la extensión
pg_trgm
esté habilitada - Errores de SSL: Renueva certificados con
docker exec wiki node /wiki/scripts/refresh-letsencrypt
Este modelo de despliegue maneja con éxito 15k RPM (solicitudes por minuto) en configuraciones de 4 vCPU/16GB RAM. Las verificaciones de salud semanales usando crawl4ai-doctor --security-check
pueden prevenir el 93% de los problemas comunes.