Salud_UT/README.md
2025-12-23 13:42:25 -05:00

180 lines
4.2 KiB
Markdown

# 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', '<HASH_BCRYPT>', 'Administrador Sistema', <ID_ROL>, 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
<script>
window.__SALUDUT_CONFIG__ = {
apiBaseUrl: '/api'
};
</script>
```
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
```