Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wikijs-zataca

Wiki.js autohospedada sobre Docker — un stack productivo de tres servicios (app + base de datos + reverse proxy) con Linux endurecido, copias de seguridad automaticas y monitorizacion.

Proyecto final de la FCT del ciclo ASIR (Administracion de Sistemas Informaticos en Red). Integra de forma practica casi todos los modulos del ciclo: sistemas, redes, virtualizacion, bases de datos, seguridad y administracion de servicios.

validate Docker PostgreSQL Nginx Wiki.js License

El stack en marcha

El stack corriendo en la VM: tres contenedores (dos con healthcheck), las dos redes internas aisladas y los volumenes persistentes.

Que es

Un despliegue completo y reproducible de Wiki.js pensado para una VM Linux o cualquier maquina con Docker. Levanta una wiki lista para usar con un solo comando, detras de un reverse proxy y con la base de datos aislada de Internet.

Que demuestra este proyecto

Pensado como pieza de portfolio: cada decision esta justificada y documentada.

  • 🐳 Docker Compose multi-servicio — 3 contenedores, 2 redes internas (la BD no es alcanzable desde el reverse proxy ni desde fuera), volumenes nombrados persistentes, healthchecks y arranque ordenado con depends_on: service_healthy.
  • 🔒 Seguridad — secretos en .env (fuera del repo), minima superficie de exposicion (solo nginx publica puerto). En la VM real: SSH solo-clave, UFW y Fail2Ban (documentado abajo).
  • 💾 Operacion automatizada — backup diario de BD + datos con retencion, monitorizacion de contenedores por cron, y procedimiento de restauracion probado.
  • 📦 Infraestructura reproduciblegit clone + docker-compose up y funciona; sin pasos manuales ocultos.

Competencias ASIR aplicadas

El proyecto pone en practica, de forma integrada, los principales modulos del ciclo de Administracion de Sistemas Informaticos en Red:

Modulo del ciclo Como aparece en el proyecto
Implantacion de SO VM Debian 13, particiones, usuarios, gestion de servicios systemd.
Administracion de SO Hardening, gestion de paquetes, cron, scripting Bash, permisos.
Planificacion y administracion de redes IP estatica, segmentacion en redes Docker, reverse proxy.
Servicios de red e Internet DNS interno (BIND9), Nginx como proxy inverso, HTTP/HTTPS.
Gestion de bases de datos PostgreSQL 17: despliegue, pg_dump, restauracion, retencion.
Implantacion de aplicaciones web Wiki.js (Node.js) desplegada y servida en produccion.
Seguridad y alta disponibilidad SSH solo-clave, UFW, Fail2Ban, secretos, backups, healthchecks, restart policies.
Virtualizacion / contenedores VM en Proxmox + stack en Docker Compose con volumenes y redes.

Perfil: administracion de sistemas y redes con base en virtualizacion, contenedores y automatizacion — orientado a roles de sysadmin, tecnico de sistemas/redes o junior DevOps/Cloud.

Arquitectura

   navegador ──HTTP:80──▶ [ nginx ]──proxy──▶ [ wiki ]──5432──▶ [ postgres ]
                          frontend            front+back         backend
                            │                    │                  │
                       (unico puerto         wiki_data           db_data
                        publicado)           (volumen)          (volumen)
  • backend: wikipostgres. Por aqui viaja el trafico de base de datos.
  • frontend: nginxwiki. Por aqui hace proxy_pass el reverse proxy.
  • postgres no esta en frontend → aislada del proxy y de Internet.
  • Solo nginx publica un puerto (80) al host.
Servicio Imagen Rol
db postgres:17-alpine Base de datos (todo el contenido de la wiki).
wiki requarks/wiki:2 Aplicacion Wiki.js (Node.js).
nginx nginx:1.27-alpine Reverse proxy, unico expuesto.

Quickstart

Necesitas Docker y Docker Compose. En cualquier maquina:

git clone https://github.com/DannyRuizB/wikijs-zataca.git
cd wikijs-zataca

# 1) Credenciales: copia la plantilla y pon una password fuerte
cp .env.example .env
sed -i "s/changeme/$(openssl rand -hex 16)/" .env   # o editala a mano

# 2) Levanta el stack
docker-compose up -d        # (o `docker compose up -d` segun tu version)

# 3) Abre la wiki y completa el asistente inicial
#    http://localhost

Eso es todo: en menos de un minuto tienes Wiki.js corriendo en http://localhost. Para pararlo, docker-compose down (conserva los datos).

Nota: el primer arranque descarga las imagenes de Docker Hub (requiere salida a Internet). En el laboratorio original el DNS externo estaba bloqueado y se cargaban a mano; eso no aplica en una maquina normal.

Estructura del repo

wikijs-zataca/
├── docker-compose.yml      # 3 servicios + 2 redes + volumenes
├── .env.example            # plantilla de variables (sin secretos)
├── nginx/
│   └── default.conf        # reverse proxy -> wiki:3000 (server_name catch-all)
├── scripts/
│   ├── reset-pass.sh       # reset de password del admin (bcrypt + psql)
│   ├── backup-wikijs.sh    # backup: dump BD + datos del wiki + retencion
│   ├── monitor-wikijs.sh   # vigilancia de los 3 contenedores (cron */5)
│   └── wikijs.cron         # crontab de ejemplo
├── .gitignore
├── LICENSE                 # MIT
└── README.md

Comandos utiles

docker-compose ps                 # estado de los contenedores
docker-compose logs -f wiki       # logs en vivo
docker-compose restart wiki       # reiniciar un servicio
docker-compose down               # parar conservando datos
docker-compose down -v            # DESTRUCTIVO: borra BD y uploads

Backups y monitorizacion

Dos scripts en scripts/ cubren la operacion (no requieren sudo si el usuario esta en el grupo docker):

./scripts/backup-wikijs.sh        # dump BD + tar de datos, en /opt/wikijs/backups
./scripts/monitor-wikijs.sh       # comprueba los 3 contenedores
  • backup-wikijs.sh vuelca la BD con pg_dump (las credenciales se toman de dentro del contenedor, no del .env) a db-FECHA.sql.gz, y empaqueta /wiki/data a wiki_data-FECHA.tar.gz. Retencion de 7 dias y log.
  • monitor-wikijs.sh alerta en monitor.log si algun contenedor cae (sin reiniciar, para no enmascarar fallos).

Automatizacion con wikijs.cron (crontab scripts/wikijs.cron):

30 3 * * * /opt/wikijs/backups/backup-wikijs.sh >/dev/null 2>>/opt/wikijs/backups/backup.log
*/5 * * * * /opt/wikijs/backups/monitor-wikijs.sh >/dev/null 2>>/opt/wikijs/backups/monitor.log

Restaurar

# Base de datos (DESTRUCTIVO sobre la actual; el dump incluye --clean --if-exists)
zcat backups/db-FECHA.sql.gz | docker exec -i wikijs-db sh -c 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB"'
# Datos del wiki
zcat backups/wiki_data-FECHA.tar.gz | docker exec -i wikijs-app tar xzf - -C /wiki/data

Para validar un backup sin tocar produccion, restauralo a una BD temporal (createdb wiki_restore_test, restaurar, comprobar, dropdb).

Reset de la contrasenya del admin

./scripts/reset-pass.sh                  # pide email y password por teclado
./scripts/reset-pass.sh admin@ejemplo    # o pasa el email como argumento

Regenera el hash bcrypt dentro del contenedor del wiki y lo aplica a la BD; valida que el usuario existe antes de tocar nada.

Hardening de la VM (despliegue real)

En la VM del laboratorio el stack corre detras de:

Capa Configuracion
SSH solo clave, PermitRootLogin no, PasswordAuthentication no
Firewall UFW deny incoming + allow 22, 80, 443/tcp
Fail2Ban jail sshd, banaction=ufw, bantime 1h, maxretry 5
Secretos .env con chmod 600, propiedad de root

Contexto

Proyecto final de la FCT (Formacion en Centros de Trabajo) del ciclo superior de ASIR — Administracion de Sistemas Informaticos en Red, realizado en Zataca (Elche, curso 2025/2026). La documentacion tecnica completa (arquitectura, instalacion, operacion, troubleshooting) vive en la wiki del curso.

Licencia

MIT — ver LICENSE.

About

Self-hosted Wiki.js stack on Docker Compose (PostgreSQL + Wiki.js + Nginx). FCT final project at Zataca.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages