# 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 Primero genera el hash del admin y reemplaza `` en `backend/src/comandos.sql`: ```bash node /opt/saludut/backend/src/generate-hash.js ``` Luego ejecuta el setup unico (esquema + CUPS + roles/admin): ```bash psql -U saludut_user -d saludut_db -f /opt/saludut/backend/src/setup.sql ``` 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 ``` ### 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=45231 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 (manual) 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 ``` Si no usas proxy y expones el puerto directo: ```html ``` ### 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:45231/; 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 ```