Go to file
2025-12-23 13:42:25 -05:00
aunarsalud/src/app producto final 2025-12-23 13:42:25 -05:00
backend producto final 2025-12-23 13:42:25 -05:00
saludut-inpec producto final 2025-12-23 13:42:25 -05:00
.gitignore desarrollo 2025-12-16 19:33:09 -05:00
README.md producto final 2025-12-23 13:42:25 -05:00

Saludut

Frontend Angular (saludut-inpec) + backend Node.js (backend) + PostgreSQL + Python + LibreOffice.

Produccion (Alpine 3.21)

1) Preparar servidor

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

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

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:

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:

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:

node /opt/saludut/backend/src/generate-hash.js

Luego en PostgreSQL:

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', '<HASH_BCRYPT>', 'Administrador Sistema', <ID_ROL>, true, NOW());

Si tu esquema tiene columnas obligatorias adicionales, completa esos campos.

7) Backend (instalar y correr)

cd /opt/saludut/backend
npm ci --omit=dev
node src/server.js

OpenRC (servicio backend)

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)

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__:

<script>
  window.__SALUDUT_CONFIG__ = {
    apiBaseUrl: '/api'
  };
</script>

Si el backend esta en otro dominio, cambia apiBaseUrl antes de publicar.

10) Nginx + SSL (ejemplo)

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:

rc-service nginx start
certbot --nginx -d saludut.tu-dominio.com

Desarrollo

cd backend
npm install
node src/server.js
cd saludut-inpec
npm install
npm run start