# Saludut Frontend Angular (`saludut-inpec`) + backend Node.js (`backend`) + PostgreSQL + Python + LibreOffice. ## Produccion (Alpine 3.21) ### 1) Preparar servidor ```bash apk add nginx certbot certbot-nginx nftables rsync nodejs npm \ postgresql postgresql-client python3 py3-pip libreoffice rc-update add postgresql default rc-service postgresql setup rc-service postgresql start ``` ### 2) Crear BD y usuario ```bash su - postgres psql -c "CREATE USER saludut_user WITH PASSWORD 'TU_PASSWORD_FUERTE';" psql -c "CREATE DATABASE saludut_db OWNER saludut_user;" exit ``` ### 3) Subir codigo ```bash mkdir -p /opt/saludut/backend /opt/saludut/frontend tar -czf saludut-backend.tar.gz --exclude="node_modules" --exclude=".env" backend tar -czf saludut-frontend.tar.gz --exclude="node_modules" saludut-inpec scp -C saludut-backend.tar.gz root@tu-servidor:/opt/saludut/ scp -C saludut-frontend.tar.gz root@tu-servidor:/opt/saludut/ ``` En el servidor: ```bash tar -xzf /opt/saludut/saludut-backend.tar.gz -C /opt/saludut/ tar -xzf /opt/saludut/saludut-frontend.tar.gz -C /opt/saludut/ ``` ### 4) Inicializar esquema y datos Este repo no incluye el esquema base (tablas `usuario`, `rol`, `autorizacion`, etc). Restaura tu dump base primero. Luego ejecuta los SQL que si estan en el repo, en este orden: ```bash psql -U saludut_user -d saludut_db -f /opt/saludut/backend/src/cups_schema.sql psql -U saludut_user -d saludut_db -f /opt/saludut/backend/src/cups_referencia.sql psql -U saludut_user -d saludut_db -f /opt/saludut/backend/src/cups_cubiertos.sql psql -U saludut_user -d saludut_db -f /opt/saludut/backend/src/establecimiento.sql psql -U saludut_user -d saludut_db -f /opt/saludut/backend/src/paciente.sql psql -U saludut_user -d saludut_db -f /opt/saludut/backend/src/ingreso.sql ``` Si tu esquema tiene restricciones, ajusta el orden de los inserts para respetar las FK. ### 5) Backend (.env) Crear `backend/.env` en el servidor: ``` DB_HOST=127.0.0.1 DB_PORT=5432 DB_USER=saludut_user DB_PASSWORD=TU_PASSWORD_FUERTE DB_NAME=saludut_db JWT_SECRET=CAMBIA_ESTE_SECRETO JWT_EXPIRES_IN=24h PORT=3000 SOFFICE_PATH=/usr/bin/soffice PYTHON_PATH=python3 ``` ### 6) Crear usuario admin (manual) Generar hash bcrypt: ```bash node /opt/saludut/backend/src/generate-hash.js ``` Luego en PostgreSQL: ```sql SELECT id_rol FROM rol WHERE nombre_rol = 'administrador'; INSERT INTO usuario (username, email, password_hash, nombre_completo, id_rol, activo, fecha_creacion) VALUES ('admin', 'admin@saludut.local', '', 'Administrador Sistema', , true, NOW()); ``` Si tu esquema tiene columnas obligatorias adicionales, completa esos campos. ### 7) Backend (instalar y correr) ```bash cd /opt/saludut/backend npm ci --omit=dev node src/server.js ``` #### OpenRC (servicio backend) ```bash cat <<'EOF' > /etc/init.d/saludut-backend #!/sbin/openrc-run name="saludut-backend" description="Backend Node para Saludut" directory="/opt/saludut/backend" command="/usr/bin/node" command_args="src/server.js" command_background="yes" pidfile="/run/${RC_SVCNAME}.pid" output_log="/var/log/saludut-backend.log" error_log="/var/log/saludut-backend.err" depend() { need net } EOF chmod +x /etc/init.d/saludut-backend rc-update add saludut-backend default rc-service saludut-backend start ``` ### 8) Frontend (build) ```bash cd /opt/saludut/saludut-inpec npm ci npm run build ``` El build queda en `saludut-inpec/dist/saludut-inpec/`. ### 9) Configurar API base (sin localhost) El frontend lee la base desde `window.__SALUDUT_CONFIG__`: ```html ``` Si el backend esta en otro dominio, cambia `apiBaseUrl` antes de publicar. ### 10) Nginx + SSL (ejemplo) ```nginx server { listen 80; server_name saludut.tu-dominio.com; root /var/www/saludut; index index.html; location / { try_files $uri /index.html; } location /api/ { proxy_pass http://127.0.0.1:3000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` Luego: ```bash rc-service nginx start certbot --nginx -d saludut.tu-dominio.com ``` ## Desarrollo ```bash cd backend npm install node src/server.js ``` ```bash cd saludut-inpec npm install npm run start ```