BysMax
Traccar

Guía de Compilación y Despliegue de Traccar

Te voy a mostrar como compilar y desplegar traccar en un servidor como digital ocean, aws, etc.

Emmanuel Díaz Leal Hernández

May 25, 2024
Intermediate

Comandos Rápidos

Copia y pega estos comandos para despliegue instantáneo

Despliegue del Backend

git pull && ./gradlew assemble && sudo systemctl stop traccar && sudo cp -r ./target/* /opt/traccar/ && sudo cp -r ./schema/* /opt/traccar/schema && sudo systemctl start traccar

Despliegue del Frontend

git pull && npm i && npm run build && sudo cp -r ./build/* /opt/traccar/web/

Monitoreo en Vivo

tail -f /opt/traccar/logs/tracker-server.log

Configuración del Entorno

Antes de comenzar, verifica tus herramientas:

java -version    # Java 11+ requerido
node -v         # Node.js 18+ requerido  
npm -v          # Última versión compatible

Consejo profesional: Usa nvm para gestión de versiones de Node.js en entornos de producción


Proceso de Compilación del Backend

Configuración Inicial del Repositorio

git clone --recursive https://github.com/traccar/traccar.git
cd traccar

Flujo de Compilación y Despliegue

# Compilar la aplicación
./gradlew assemble

# Apagado controlado
sudo systemctl stop traccar

# Desplegar artefactos
sudo cp -r ./target/* /opt/traccar/
sudo cp -r ./schema/* /opt/traccar/schema

# Reiniciar el servicio
sudo systemctl start traccar

Advertencia: Siempre detén el servicio antes de reemplazar JARs para evitar bloqueos de archivos


Proceso de Compilación del Frontend

Configuración del Repositorio

git clone https://github.com/traccar/traccar-web.git
cd traccar-web

Pipeline de Compilación y Despliegue

# Resolución de dependencias
npm install

# Compilación para producción
npm run build

# Despliegue en caliente (sin tiempo de inactividad)
sudo cp -r build/* /opt/traccar/web/

Característica: Los despliegues del frontend no requieren reiniciar el servicio - solo actualiza tu navegador


Arsenal de Solución de Problemas

Diagnósticos del Servicio

# Análisis profundo de logs del servicio
sudo journalctl -u traccar

# Streaming de logs en tiempo real
journalctl -u traccar -f

# Verificar estado del servicio
sudo systemctl status traccar

Recuperación de Permisos

# Arreglar problemas de propiedad
sudo chown -R traccar:traccar /opt/traccar/

# Verificar permisos de archivos
ls -la /opt/traccar/

# Resetear permisos si es necesario
sudo chmod -R 755 /opt/traccar/

Estrategias Avanzadas de Despliegue

Script de Compilación Automatizado

Crea tu arsenal de despliegue con deploy.sh:

#!/bin/bash
set -e

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

echo -e "${YELLOW}Compilando backend...${NC}"
./gradlew assemble

echo -e "${YELLOW}Deteniendo servicio Traccar...${NC}"
sudo systemctl stop traccar

echo -e "${YELLOW}Desplegando artefactos...${NC}"
sudo cp -r ./target/* /opt/traccar/
sudo cp -r ./schema/* /opt/traccar/schema

echo -e "${YELLOW}Iniciando servicio Traccar...${NC}"
sudo systemctl start traccar

echo -e "${GREEN}¡Despliegue completado!${NC}"

# Verificación de salud con lógica de reintentos
sleep 5
REINTENTOS=3
for i in $(seq 1 $REINTENTOS); do
    if curl -f http://localhost:8082 > /dev/null 2>&1; then
        echo -e "${GREEN}¡El servicio está funcionando correctamente!${NC}"
        exit 0
    else
        echo -e "${YELLOW}Intento de verificación $i/$REINTENTOS falló, reintentando...${NC}"
        sleep 3
    fi
done

echo -e "${RED}La verificación de salud falló después de $REINTENTOS intentos${NC}"
exit 1

Hazlo ejecutable:

chmod +x deploy.sh && ./deploy.sh

Optimización del Flujo de Desarrollo

# Recarga en vivo para desarrollo del frontend
npm run dev

# Monitoreo de logs en segundo plano con filtros
tail -f /opt/traccar/logs/tracker-server.log | grep -E "(ERROR|WARN|Exception)"

# Vigilar cambios en archivos durante desarrollo
find /opt/traccar -name "*.jar" | entr -r sudo systemctl restart traccar

Monitoreo de Salud en Producción

# Verificación integral del servicio
curl -f http://localhost:8082 && echo "Servicio funcionando" || echo "Servicio caído"

# Verificación de puertos
netstat -tlnp | grep :8082

# Monitoreo de uso de memoria
ps aux | grep traccar | awk '{print $2, $4, $11}' | head -1

# Verificación de espacio en disco para logs
df -h /opt/traccar/logs/

Estrategia de Rollback

# Respaldar despliegue actual
sudo cp -r /opt/traccar/target /opt/traccar/target.backup.$(date +%Y%m%d_%H%M%S)

# Procedimiento de rollback rápido
sudo systemctl stop traccar
sudo cp -r /opt/traccar/target.backup.* /opt/traccar/target/
sudo systemctl start traccar

Mejores Prácticas para Producción

Configuración de Variables de Entorno

export TRACCAR_HOME=/opt/traccar
export JAVA_OPTS="-Xms1g -Xmx2g -server"

Configuración de Rotación de Logs

# Agregar a /etc/logrotate.d/traccar
/opt/traccar/logs/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 644 traccar traccar
    postrotate
        systemctl reload traccar
    endscript
}

Hardening del Servicio Systemd

# Seguridad mejorada del servicio
sudo systemctl edit traccar

Agregar configuración de override:

[Service]
NoNewPrivileges=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=strict
ReadWritePaths=/opt/traccar

Comandos de Verificación Rápida

Estado del Sistema

# Verificar que todos los componentes estén funcionando
systemctl is-active traccar && echo "Servicio activo"
curl -s http://localhost:8082 > /dev/null && echo "API respondiendo"

Limpieza de Logs

# Limpiar logs antiguos manualmente
find /opt/traccar/logs -name "*.log.*" -mtime +30 -delete

# Verificar tamaño de logs actuales
du -sh /opt/traccar/logs/

Monitoreo de Performance

# CPU y memoria del proceso Traccar
top -p $(pgrep -f traccar)

# Conexiones de red activas
ss -tuln | grep :8082

Comentarios (0)