Configuración de Desarrollo
Requisitos Previos
- Docker / Docker Compose
- Node.js (consulta
engines.nodeenpackage.json) - pnpm (consulta
engines.pnpm/packageManagerenpackage.json) - SQLite3
- Inkscape (para traducción de SVG de documentación y exportación PNG; requerido solo si ejecutas
translateotranslate:svg) - bat/batcat (para mostrar una versión bonita del
translate:help) - direnv (para cargar automáticamente los archivos
.env*) - Playwright Chromium (ejecuta
pnpm take-screenshots:installdespués depnpm install; esto ejecutaplaywright install chromium)
Pasos
1. Clonar el repositorio:
git clone https://github.com/wsj-br/duplistatus.git
cd duplistatus
2. Instalar dependencias (Debian/Ubuntu):
sudo apt update
sudo apt install sqlite3 git inkscape bat -y
sudo apt install -y build-essential python3 python3-dev python3-setuptools make g++ gcc pkg-config
3. Eliminar instalaciones antiguas de Node.js (si ya lo tienes instalado)
sudo apt-get purge nodejs npm -y
sudo apt-get autoremove -y
sudo rm -rf /usr/local/bin/npm
sudo rm -rf /usr/local/share/man/man1/node*
sudo rm -rf /usr/local/lib/dtrace/node.d
rm -rf ~/.npm
rm -rf ~/.node-gyp
sudo rm -rf /opt/local/bin/node
sudo rm -rf /opt/local/include/node
sudo rm -rf /opt/local/lib/node_modules
sudo rm -rf /usr/local/lib/node*
sudo rm -rf /usr/local/include/node*
sudo rm -rf /usr/local/bin/node*
4. Instalar Node.js y pnpm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
nvm install --lts
nvm use --lts
npm config set allow-scripts=pnpm --location=user
npm install -g pnpm npm-check-updates doctoc
5. Configurar soporte de direnv
Añadir estas líneas a tu archivo ~/.bashrc
# direnv support (apt install direnv)
eval "$(direnv hook bash)"
con este comando:
(echo "# direnv support (apt install direnv)"; echo 'eval "$(direnv hook bash)') >> ~/.bashrc
en el directorio base del repositorio, ejecuta:
direnv allow
Añadir estas líneas a tu archivo ~/.profile
# export the Bash environment (needed for code editor or AI Agents to load it).
export BASH_ENV="$HOME/.bashrc"
con este comando:
(echo "# export the Bash environment (needed for code editor or AI Agents to load it)."; \
echo 'export BASH_ENV="$HOME/.bashrc"') >> ~/.profile
Necesitas reabrirla terminal o puede que tengas que cerrar/reabrir el editor de código IDE (Visual Studio Code, Cursor, Lingma, Antigravity, Zed, ...) para que estos cambios surtan efecto.
6. Crear el archivo .env en el directorio base del repositorio con estas variables.
-
Puedes usar cualquier valor para
VERSION; se actualizará automáticamente al usar los scripts de desarrollo. -
Usa contraseñas aleatorias para
ADMIN_PASSWORDyUSER_PASSWORD; estas contraseñas se utilizarán en el scriptpnpm take-screenshots. -
Puedes obtener
OPENROUTER_API_KEYde openrouter.ai.VERSION=x.x.x# Development user passwordsADMIN_PASSWORD="admin_secret"USER_PASSWORD="user_secret"# Openrouter.ai API key for translation scripts in documentationOPENROUTER_API_KEY=sk-or-v1-your-key-for-translate-files
Scripts Disponibles
El proyecto incluye varios scripts npm para diferentes tareas de desarrollo:
Scripts de desarrollo
pnpm dev- Inicia el servidor de desarrollo de Next.js (puerto 8666) y el servicio cron (puerto 8667) juntos a través deconcurrently(incluye comprobaciones previas). CTRL-C detiene ambos.NODE_OPTIONSpara Next.js cargascripts/dev-preload.cjs, que aplicascripts/peer-ip.cjs(dirección de par TCP para listas de permitidos de IP) y marcas de tiempo de registro de solicitudes.pnpm dev:next- Inicia solo el servidor de desarrollo de Next.js en el puerto 8666 (sin cron).pnpm build- Compila la aplicación para producción (incluye comprobaciones previas)pnpm lint- Ejecuta ESLint para comprobar la calidad del códigopnpm typecheck- Ejecuta la comprobación de tipos de TypeScriptscripts/upgrade-dependencies.sh— Actualización segura para compilación de cada paquete del espacio de trabajo (detección automática). Resuelve las versiones más recientes connpm-check-updates, instala desde la raíz del espacio de trabajo y mantiene solo las actualizaciones que pasantypecheck/lintde cada paquete (las compuertas de pares fijaneslint/typescriptcuando la pila de linting no permite la versión principal más reciente). Luego ejecutapnpm audit/audit --fixy aplica forzadamente (e informa) cualquier corrección de seguridad que requiera cambios de código. Actualiza el archivo de bloqueo del espacio de trabajo y browserslist. Prefieresource ./scripts/upgrade-dependencies.shpara que nvm se aplique a tu shell; en CI o automatización usaCI=1oUPGRADE_ALLOW_EXEC=1al ejecutar el archivo directamente. Consulta tambiénscripts/upgrade-tools.shsolo para herramientas de Node/pnpm.scripts/clean-workspace.sh- Limpia el espacio de trabajopnpm i18n:tools --local/--remote— Enlace a unai-i18n-toolshermano o restaura el último paquete npm (scripts/link-ai-i18n-tools.sh). No cometas el especificadorlink:.
Nota: El script preinstall aplica automáticamente pnpm como gestor de paquetes.
Scripts de documentación
Estos scripts deben ejecutarse desde el directorio documentation/:
pnpm start- Compila y sirve el sitio de documentación en modo de producción (puerto 3000 por defecto)pnpm start:en- Inicia el servidor de desarrollo de documentación en inglés (recarga en caliente habilitada)pnpm start:fr- Inicia el servidor de desarrollo de documentación en locale francés (recarga en caliente habilitada)pnpm start:de- Inicia el servidor de desarrollo de documentación en locale alemán (recarga en caliente habilitada)pnpm start:es- Inicia el servidor de desarrollo de documentación en locale español (recarga en caliente habilitada)pnpm start:pt-br- Inicia el servidor de desarrollo de documentación en locale portugués (Brasil) (recarga en caliente habilitada)pnpm build- Compila el sitio de documentación para producciónpnpm write-translations- Extrae cadenas traducibles de la documentaciónpnpm translate- Traduce archivos de documentación usando IA (consulta Flujo de traducción)pnpm lint- Ejecuta ESLint en archivos fuente de documentación
Los servidores de desarrollo (start:*) proporcionan reemplazo de módulo en caliente para desarrollo rápido. El puerto predeterminado es 3000.
Scripts de producción
pnpm build-local- Compila y prepara para producción local (incluye comprobaciones previas, copia archivos estáticos al directorio independiente)pnpm start-local- Inicia el servidor de producción localmente (puerto 8666, incluye comprobaciones previas). Nota: Ejecutapnpm build-localprimero. Inicia el servidor independiente con--require ./scripts/peer-ip.cjs.pnpm start- Inicia el servidor de producción (puerto 9666) con la misma precarga de IP de par. Docker usadocker-entrypoint.shpara cargar el mismo script.
Scripts de Docker
pnpm docker:up- Inicia la pila de Docker Composepnpm docker:down- Detiene la pila de Docker Composepnpm docker:clean- Limpia el entorno de Docker y la cachépnpm docker:devel- Compila una imagen de Docker de desarrollo etiquetada comowsj-br/duplistatus:devel
Scripts del servicio cron
pnpm cron:start- Inicia el servicio cron en modo de producciónpnpm cron:dev- Inicia solo el servicio cron en modo de desarrollo con observación de archivos (puerto 8667). Generalmente innecesario cuando se usapnpm dev, que ya inicia cron.pnpm cron:start-local- Inicia el servicio cron localmente para pruebas (puerto 8667)
Scripts de prueba
pnpm generate-test-data- Genera datos de copia de seguridad de prueba (requiere parámetro --servers=N)pnpm validate-csv-export- Valida la funcionalidad de exportación CSVpnpm test-entrypoint- Prueba el script de punto de entrada de Docker en desarrollo local (consulta Scripts de prueba)pnpm take-screenshots- Toma capturas de pantalla para la documentación (consulta Herramientas de documentación)
Las comprobaciones de vencimiento, comprobaciones de salud de cron y pruebas SMTP se realizan a través de la aplicación en ejecución y curl (consulta Scripts de prueba); los antiguos ayudantes independientes pnpm para esos fueron eliminados.