🚀 Instalación 7Ges ERP
Guía completa para instalar 7Ges ERP Cliente/Servidor, la evolución de Dolibarr hacia un modelo arquitectónico revolucionario con PostgreSQL exclusivo y lógica centralizada.
Requisitos del Sistema
PostgreSQL 12+, PHP 7.4+, configuración optimizada
Proceso Guiado
Instalación paso a paso con verificación automática
Soporte Completo
Testing, troubleshooting y administración avanzada
🚀 Bienvenido a 7Ges ERP Cliente/Servidor
7Ges ERP es la evolución de Dolibarr hacia un modelo cliente/servidor puro donde toda la lógica de negocio reside en PostgreSQL. Esta arquitectura revolucionaria garantiza consistencia, performance y confiabilidad excepcionales.
✨ Beneficios Clave
- 🔒 Consistencia Garantizada: Las reglas de negocio se ejecutan siempre, sin excepciones
- ⚡ Performance Superior: Cálculos y validaciones optimizados en la base de datos
- 🛡️ Seguridad Reforzada: Validaciones imposibles de omitir
- 🔧 Mantenimiento Simplificado: Lógica centralizada y documentada
- 📊 Auditoría Completa: Tracking automático de todos los cambios
📋 Información de la Versión
📋 Requisitos del Sistema
🖥️ Servidor Web
- Apache: 2.4+ con mod_rewrite
- Nginx: 1.18+ (alternativo)
- PHP: 7.4+ a 8.2
- Memoria: 512MB mínimo, 2GB recomendado
- Espacio: 1GB para aplicación + datos
🐘 PostgreSQL (CRÍTICO)
- Versión: PostgreSQL 12+ (recomendado 14+)
- Extensiones: pgTAP para testing (opcional)
- Configuración: UTF-8, timezone configurado
- Permisos: CREATE, DROP, ALTER sobre BD
- ⚠️ IMPORTANTE: MySQL/MariaDB NO soportado
🔧 PHP Extensiones
- pgsql: Conexión PostgreSQL (obligatorio)
- pdo_pgsql: PDO PostgreSQL (obligatorio)
- gd: Manipulación de imágenes
- curl: Comunicaciones HTTP
- xml: Procesamiento XML
- zip: Compresión de archivos
⚠️ Compatibilidad Importante
7Ges ERP es EXCLUSIVO para PostgreSQL. No mantiene compatibilidad con MySQL/MariaDB por diseño. Esta decisión permite aprovechar al máximo las capacidades avanzadas de PostgreSQL y garantizar la consistencia del modelo cliente/servidor.
🆕 Instalación Nueva
Proceso completo para instalar 7Ges ERP desde cero con modelo cliente/servidor.
Preparar Base de Datos PostgreSQL
Crear la base de datos y usuario para 7Ges ERP.
Comandos PostgreSQL:
-- Conectarse como usuario postgres
sudo -u postgres psql
-- Crear usuario para 7Ges ERP
CREATE USER erp7ges WITH PASSWORD 'contraseña_segura';
-- Crear base de datos
CREATE DATABASE erp7ges
OWNER erp7ges
ENCODING 'UTF8'
LC_COLLATE = 'es_ES.UTF-8'
LC_CTYPE = 'es_ES.UTF-8'
TEMPLATE template0;
-- Otorgar permisos
GRANT ALL PRIVILEGES ON DATABASE erp7ges TO erp7ges;
-- Verificar conexión
\c erp7ges erp7ges
Descargar y Configurar 7Ges ERP
Obtener los archivos de 7Ges ERP y configurar permisos.
Comandos del Sistema:
# Descargar 7Ges ERP
cd /var/www/html
git clone https://github.com/7ges/7ges-erp.git
cd 7ges-erp
# Configurar permisos
sudo chown -R www-data:www-data .
sudo chmod -R 755 .
sudo chmod -R 777 documents/
sudo chmod -R 777 htdocs/conf/
# Verificar extensiones PHP
php -m | grep -E '(pgsql|pdo_pgsql|gd|curl)'
Ejecutar Instalador Web
Acceder al instalador web y configurar la conexión PostgreSQL.
🌐 Pasos del Instalador:
- Navegar a:
http://tu-servidor/7ges-erp/htdocs/install/
- Seleccionar idioma: Español
- Verificar prerrequisitos: Confirmar PostgreSQL
- Configurar base de datos:
- Tipo: PostgreSQL (pgsql)
- Servidor: localhost (o IP del servidor)
- Puerto: 5432
- Base de datos: erp7ges
- Usuario: erp7ges
- Contraseña: [la configurada]
- Crear administrador: Usuario inicial del sistema
- Finalizar: El instalador cargará automáticamente las funciones PostgreSQL
✨ Funciones Automáticas
El instalador de 7Ges ERP automáticamente carga todas las funciones y triggers PostgreSQL de los módulos migrados. No requiere configuración manual adicional.
Verificar Instalación
Comprobar que todas las funciones PostgreSQL están cargadas correctamente.
Script de Verificación:
-- Conectarse a la base de datos
\c erp7ges
-- Verificar funciones principales cargadas
SELECT
routine_name,
routine_type
FROM information_schema.routines
WHERE routine_schema = 'public'
AND routine_name LIKE 'llx_%'
ORDER BY routine_name;
-- Verificar triggers principales
SELECT
schemaname,
tablename,
triggername
FROM pg_triggers
WHERE schemaname = 'public'
AND triggername LIKE 'trg_%'
ORDER BY tablename, triggername;
-- Verificar módulos con funciones cargadas
SELECT DISTINCT
substring(routine_name from 'llx_([^_]+)_.*') as modulo,
COUNT(*) as funciones
FROM information_schema.routines
WHERE routine_schema = 'public'
AND routine_name LIKE 'llx_%'
GROUP BY modulo
ORDER BY modulo;
✅ Checklist de Verificación
- 59+ funciones PostgreSQL cargadas
- 51+ triggers activos
- Módulos con funciones: societe, product, user, banque, tax, propale, categories, don, contact, commande
- Acceso exitoso al panel de administración
- Creación de tercero de prueba funciona
🔄 Migración desde Dolibarr Existente
Proceso para migrar una instalación existente de Dolibarr a 7Ges ERP.
⚠️ Advertencia Importante
La migración es IRREVERSIBLE. 7Ges ERP elimina completamente la compatibilidad con MySQL y modifica sustancialmente el comportamiento del sistema. Realice backup completo antes de proceder.
1. 📊 Preparación y Backup
# Backup completo MySQL (si viene de MySQL)
mysqldump -u root -p dolibarr_db > backup_dolibarr_$(date +%Y%m%d).sql
# Backup completo PostgreSQL (si ya está en PostgreSQL)
pg_dump -U usuario -d dolibarr_db > backup_dolibarr_$(date +%Y%m%d).sql
# Backup archivos
tar -czf backup_files_$(date +%Y%m%d).tar.gz /ruta/dolibarr/
2. 🔄 Migración de Datos
Si viene de MySQL, migrar datos a PostgreSQL usando herramientas especializadas:
# Opción A: Usar pgloader (recomendado)
sudo apt-get install pgloader
pgloader mysql://user:pass@localhost/dolibarr_db \
postgresql://user:pass@localhost/erp7ges
# Opción B: Migración manual con conversión
# (Requiere script personalizado según estructura)
3. ⚙️ Carga de Funciones 7Ges
# Cargar todas las funciones de módulos migrados
cd /var/www/html/7ges-erp
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-societe.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-product.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-user.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-banque.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-tax.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-propale.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-categories.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-don.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-contact.sql
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-commande.sql
4. 🧪 Validación Post-Migración
Ejecutar tests para verificar que la migración fue exitosa:
# Ejecutar tests de estructura (opcional, requiere pgTAP)
cd /var/www/html/7ges-erp
./run_pgtap_tests.sh estructura
# Verificar funciones manualmente
psql -U erp7ges -d erp7ges -c "
SELECT COUNT(*) as funciones_cargadas
FROM information_schema.routines
WHERE routine_name LIKE 'llx_%';"
# Probar funcionalidad básica
# - Crear tercero
# - Crear producto
# - Generar presupuesto
# - Verificar cálculos automáticos
🧪 Testing y Validación
Sistema completo de testing para validar la integridad de 7Ges ERP.
🏗️ Arquitectura de Testing
Tests de Estructura
Verifican que todas las tablas, campos y constraints existen
Tests Unitarios pgTAP
Validan funciones individuales y triggers
Tests Comparativos
Garantizan paridad con comportamiento original PHP
🔧 Configuración de pgTAP (Opcional)
pgTAP permite ejecutar los tests unitarios avanzados.
Instalación pgTAP:
# Ubuntu/Debian
sudo apt-get install postgresql-contrib-XX # XX = versión de PostgreSQL
# O compilar desde fuente
git clone https://github.com/theory/pgtap.git
cd pgtap
make
sudo make install
# Instalar en la base de datos
psql -U erp7ges -d erp7ges -c "CREATE EXTENSION pgtap;"
▶️ Ejecutar Tests
Scripts de Testing Disponibles:
🏗️ Tests de Estructura
# Ejecutar tests de estructura de todos los módulos
cd /var/www/html/7ges-erp
./run_pgtap_tests.sh estructura
# Test específico de un módulo
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/tests/test-societe-estructura.sql
🧪 Tests Unitarios Completos
# Ejecutar TODOS los tests (1,215 tests)
./run_pgtap_tests.sh all
# Test específico de un módulo
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/tests/test-societe.sql
# Ver resultados detallados
./run_pgtap_tests.sh societe | grep -E "(not ok|#)"
⚖️ Tests Comparativos
# Sincronizar bases de datos de test
./sync-test-databases-final.sh
# Ejecutar test comparativo específico
php htdocs/societe/test-comparativo-societe.php
# Validar resultados en PostgreSQL
psql -U erp7ges -d dolibarr_test_postgresql -f htdocs/societe/test-comparativo-societe-sql.sql
📊 Interpretación de Resultados
✅ Tests Exitosos
ok 1 - Función llx_societe_before_insert debe existir
ok 2 - Email debe validarse correctamente
...
1..49
# Tests passed: 49/49
Estado: Todo funcionando correctamente
⚠️ Tests con Advertencias
ok 1 - Función existe
not ok 2 - Email inválido debe fallar
# Expected exception but none thrown
...
# Tests passed: 48/49
Acción: Revisar la función específica que falla
❌ Tests Fallidos
not ok 1 - Función llx_societe_before_insert debe existir
# Function does not exist
...
# Tests passed: 0/49
Acción: Verificar que las funciones PostgreSQL estén cargadas
🔧 Comandos de Administración
💾 Backup y Restauración
Backup Completo
# Backup completo con funciones
pg_dump -U erp7kas -d erp7kas \
--verbose --clean --create \
> backup_7ges_$(date +%Y%m%d_%H%M%S).sql
# Backup solo datos (sin funciones)
pg_dump -U erp7kas -d erp7kas \
--data-only --verbose \
> backup_data_$(date +%Y%m%d).sql
Restauración
# Restaurar backup completo
psql -U erp7ges -d erp7ges_new < backup_7ges_20250106_143022.sql
# Restaurar solo datos
psql -U erp7ges -d erp7ges < backup_data_20250106.sql
🧹 Mantenimiento
Optimización BD
# Análisis de estadísticas
psql -U erp7ges -d erp7ges -c "ANALYZE;"
# Vacuum completo
psql -U erp7ges -d erp7ges -c "VACUUM VERBOSE;"
# Reindexar (si es necesario)
psql -U erp7ges -d erp7ges -c "REINDEX DATABASE erp7ges;"
Limpieza de Logs
# Limpiar archivos de log antiguos
find /var/log/apache2/ -name "*.log.*" -mtime +30 -delete
# Limpiar cache PHP si existe
rm -rf /tmp/php_cache/*
# Limpiar temporales de Dolibarr
rm -rf documents/admin/temp/*
📊 Monitoreo
Estado del Sistema
# Conexiones activas PostgreSQL
psql -U erp7ges -d erp7ges -c "
SELECT count(*) as conexiones_activas,
state
FROM pg_stat_activity
WHERE datname = 'erp7ges'
GROUP BY state;"
# Tamaño de la base de datos
psql -U erp7ges -d erp7ges -c "
SELECT pg_size_pretty(pg_database_size('erp7ges')) as tamaño_bd;"
Logs de Errores
# Últimos errores PostgreSQL
sudo tail -f /var/log/postgresql/postgresql-*.log
# Errores PHP de Apache
sudo tail -f /var/log/apache2/error.log | grep -i "7ges\|dolibarr"
# Logs de aplicación (si configurados)
tail -f documents/dolibarr.log
🔄 Actualización de Funciones
Recargar Funciones Específicas
# Recargar funciones de un módulo específico
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-societe.sql
# Verificar que se cargaron correctamente
psql -U erp7ges -d erp7ges -c "
SELECT routine_name
FROM information_schema.routines
WHERE routine_name LIKE 'llx_societe_%';"
Actualización Completa
# Script para recargar todas las funciones
#!/bin/bash
cd /var/www/html/7ges-erp
for func_file in htdocs/install/pgsql/functions/functions-*.sql; do
echo "Cargando $func_file..."
psql -U erp7ges -d erp7ges -f "$func_file"
done
echo "Todas las funciones actualizadas."
🛠️ Solución de Problemas Comunes
❌ Error: "relation llx_tabla does not exist"
Causa:
Falta tabla de relación específica no creada en todas las instalaciones.
Solución:
-- Verificar qué tablas faltan
SELECT tablename
FROM pg_tables
WHERE schemaname = 'public'
AND tablename LIKE 'llx_%'
ORDER BY tablename;
-- Crear tabla faltante (ejemplo)
CREATE TABLE IF NOT EXISTS llx_categorie_fichinter (
fk_categorie integer NOT NULL,
fk_fichinter integer NOT NULL,
import_key varchar(14),
PRIMARY KEY (fk_categorie, fk_fichinter)
);
⚠️ Error: "function llx_modulo_function does not exist"
Causa:
Funciones PostgreSQL no cargadas o cargadas incorrectamente.
Solución:
# Verificar funciones cargadas
psql -U erp7ges -d erp7ges -c "
SELECT routine_name
FROM information_schema.routines
WHERE routine_name LIKE 'llx_%'
ORDER BY routine_name;"
# Recargar funciones del módulo específico
psql -U erp7ges -d erp7ges -f htdocs/install/pgsql/functions/functions-modulo.sql
🔄 Error: Tests pgTAP Fallando
Causa:
Datos de test inconsistentes o modificados por tests anteriores.
Solución:
# Sincronizar bases de datos de test
./sync-test-databases-final.sh
# Ejecutar test específico en modo verbose
psql -U erp7ges -d dolibarr_test_postgresql -f htdocs/install/pgsql/tests/test-modulo.sql
# Ver detalles del error
psql -U erp7ges -d dolibarr_test_postgresql -c "
SELECT * FROM pg_stat_activity WHERE state = 'active';"
💾 Error: "out of memory" en PostgreSQL
Causa:
Configuración insuficiente de memoria PostgreSQL.
Solución:
# Editar configuración PostgreSQL
sudo nano /etc/postgresql/XX/main/postgresql.conf
# Ajustar parámetros (ejemplo para servidor con 4GB RAM)
shared_buffers = 1GB
effective_cache_size = 3GB
maintenance_work_mem = 256MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
# Reiniciar PostgreSQL
sudo systemctl restart postgresql
📚 Recursos Adicionales
📖 Documentación
🔧 Archivos de Configuración
htdocs/conf/conf.php
- Configuración principalhtdocs/install/pgsql/functions/
- Funciones PostgreSQLhtdocs/install/pgsql/tests/
- Tests pgTAPdocs/migracion/
- Documentación técnica
🌐 Enlaces Útiles
🆘 Soporte
- Logs del Sistema:
/var/log/postgresql/
- Logs de Apache:
/var/log/apache2/
- Tests de Validación:
./run_pgtap_tests.sh
- Documentación Proyecto:
*.md
en directorio raíz