184 lines
4.2 KiB
Markdown
184 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 minimo
|
|
Ejecuta el script minimo (schema + roles base):
|
|
```bash
|
|
psql -U saludut_user -d saludut_db -f /opt/saludut/backend/src/insert.sql
|
|
```
|
|
|
|
El admin se crea automaticamente al iniciar el backend si defines
|
|
`ADMIN_USER` y `ADMIN_PASS` en el `.env`.
|
|
|
|
Opcional: cargar datos masivos desde archivos:
|
|
```bash
|
|
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
|
|
```
|
|
|
|
Opcional (solo si quieres cargar CUPS por SQL y no por la UI):
|
|
```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
|
|
```
|
|
|
|
### 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
|
|
ADMIN_USER=admin
|
|
ADMIN_PASS=admin123
|
|
ADMIN_EMAIL=admin@saludut.gov.co
|
|
ADMIN_NAME=Administrador Sistema
|
|
```
|
|
|
|
### 6) Crear usuario admin (automatico)
|
|
Si defines `ADMIN_USER` y `ADMIN_PASS` en `.env`, el backend crea/actualiza el admin automaticamente al iniciar.
|
|
|
|
### 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 no usas proxy y expones el puerto directo:
|
|
```html
|
|
<script>
|
|
window.__SALUDUT_CONFIG__ = {
|
|
apiBaseUrl: 'https://autorizaciones.saludut.com:3000'
|
|
};
|
|
</script>
|
|
```
|
|
|
|
### 10) Nginx + SSL (ejemplo)
|
|
```nginx
|
|
server {
|
|
listen 80;
|
|
server_name autorizaciones.saludut.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 autorizaciones.saludut.com
|
|
```
|
|
|
|
## Desarrollo
|
|
```bash
|
|
cd backend
|
|
npm install
|
|
node src/server.js
|
|
```
|
|
|
|
```bash
|
|
cd saludut-inpec
|
|
npm install
|
|
npm run start
|
|
```
|