Instalación por red
Instale HWD POS con un solo comando que lo descarga y configura todo.
La instalación por red es la forma recomendada de instalar HWD POS. Siempre trae la versión más reciente de los scripts de instalación y del sistema, y un solo comando hace todo el trabajo: instala el servidor web, PHP, la base de datos, la impresión, los dos servicios de fondo, las reglas del cortafuegos y el panel del servidor hwdpanel.
| Tiempo | 10–20 minutos en un servidor limpio con buena conexión |
| Se necesita | Un servidor limpio, acceso root (o sudo), conexión a internet y la clave de activación |
| Al terminar | El sistema queda funcionando y se abre en el navegador desde cualquier equipo de la red |
Antes de empezar, revise los requisitos.
El comando
Ejecute en el servidor, conectado por SSH o en su consola:
curl -fsSL https://3r.com.pa/hwdpos_inst/bootstrap.sh | sudo bashEso es todo. El script:
Detecta la familia del sistema (apt → Ubuntu/Debian, dnf → AlmaLinux/Rocky/RHEL) y descarga el instalador que corresponde.
Pregunta lo que necesita saber (siguiente apartado) antes de instalar nada.
Descarga e instala el sistema y todas sus dependencias.
Muestra un resumen ✓ / ✗ y la dirección para terminar la instalación en el navegador.
El paquete del sistema (.zip) no incluye los scripts de instalación. El instalador descarga sus compañeros (install-workers.sh, hwdpanel.sh y check.sh) de https://3r.com.pa/hwdpos_inst/ y los deja, junto consigo mismo, en /var/www/HWDPOS/deploy/. Esa carpeta pertenece a root, para que el servidor web no pueda modificarla, y es donde los buscan hwdpanel y las reparaciones posteriores.
Las preguntas del instalador
Se hacen todas al principio, a propósito, para que no le interrumpan en medio de una descarga. En una instalación normal basta con aceptar las tres respuestas por omisión.
1. Modo de instalación
Modo de instalación:
1) Todo en uno — servidor web + base de datos en ESTE servidor (predeterminado)
2) Solo web — servidor web + PHP; la base de datos está en OTRO servidor
3) Solo base de datos — únicamente MariaDB abierto a la red (sin web ni PHP)
Opción [1/2/3]:| Opción | Cuándo usarla |
|---|---|
| 1) Todo en uno | Lo normal. Un servidor para la tienda. Es la opción por omisión: presione Enter. |
| 2) Solo web | La base de datos ya está en otra máquina (o quiere separarlas por rendimiento). Le pedirá la IP del servidor de base de datos. |
| 3) Solo base de datos | Está preparando la máquina de la base de datos. Le pedirá desde qué IP se autoriza al servidor web. |
Los modos 2 y 3 se explican en Base de datos en otro servidor.
2. Puerto del sitio web
Puerto [80]:Presione Enter para usar el 80. Vea Puerto del sitio si necesita otro.
3. Zona horaria del servidor
Solo se pregunta si el servidor no tiene ya la hora de Panamá:
Zona horaria del servidor: UTC. El sistema trabaja con la hora de Panamá (America/Panama).
¿Poner la zona horaria del servidor en America/Panama? [S/n]:Presione Enter para aceptar. Con otra zona, la hora del servidor, la de los registros y la de la base de datos no coinciden con la del sistema. En un servidor aparte de base de datos también conviene aceptarla.
4. Nada más
El instalador genera por sí mismo la contraseña de la base de datos y la guarda en deploy/DB-CREDENTIALS.txt (legible solo por root). Si el servidor ya tenía una (por ejemplo, al volver a ejecutar el instalador), la conserva. Vea Actualizar y reinstalar.
Ejecución desatendida
Sin terminal interactivo (cron, cloud-init, ssh servidor 'orden') no se pregunta nada: el modo es «todo en uno», el puerto es el 80, la zona horaria no se toca (el resumen la marca con ✗ y muestra el comando para cambiarla) y lo demás se fija con variables. Si el terminal existe pero no se puede abrir, se trata igual que si no lo hubiera.
El resumen final
Al terminar aparece algo así (en AlmaLinux se agregan tres líneas de SELinux):
==================== RESUMEN DE INSTALACIÓN (all) ====================
✓ Apache (activo)
✓ PHP 8.3-FPM (activo)
✓ PHP: pdo_mysql
✓ PHP: mbstring
✓ PHP: curl
✓ PHP: zip
✓ PHP: gd
✓ PHP: opcache
✓ PHP: sodium (recomendado; hay polyfill)
✓ CUPS (impresión A4/IP)
✓ Chrome/Chromium (PDF de documentos A4; se probó ejecutándolo)
✓ Worker de impresión (hwpos-print)
✓ Worker de impresión (arranque auto)
✓ Worker de plugins (hwpos-plugins)
✓ Worker de plugins (arranque auto)
✓ Zona horaria del servidor: America/Panama
✓ MariaDB (activo)
✓ Base de datos 'hwd_pos' creada
✓ Código del sistema en /var/www/HWDPOS
✓ Panel de administración (hwdpanel)
✓ Puerto 80 escuchando
IP interna (LAN): 192.168.1.50
IP externa (WAN): 203.0.113.10
=======================================================================
Termine la instalación en el navegador (desde cualquier equipo de la red):
http://192.168.1.50/installLéalo antes de seguir. Cada ✗ se explica en Problemas frecuentes.
- Un ✗ en
sodium, enChrome/Chromiumo en la zona horaria no impide continuar. - Uno en
pdo_mysql,MariaDBo el puerto sí. - La línea de Chrome/Chromium no se limita a mirar si el comando existe: lo ejecuta como el usuario del servidor web, porque un
chromium-browserde Snap sin snapd existe pero no funciona. - La última línea solo propone
hwdpanelsi de verdad quedó instalado; si no, dice qué archivo faltó.
Después abra la dirección indicada y continúe con el asistente del navegador.
Variantes del comando
Todas se ejecutan igual; solo cambian las variables del principio:
# Puerto distinto, sin que pregunte
curl -fsSL https://3r.com.pa/hwdpos_inst/bootstrap.sh | sudo WEB_PORT=8080 bash
# Sin impresión (servidor que no imprime)
curl -fsSL https://3r.com.pa/hwdpos_inst/bootstrap.sh | sudo WITH_PRINTING=no bash
# Con un nombre de dominio propio
curl -fsSL https://3r.com.pa/hwdpos_inst/bootstrap.sh | sudo DOMAIN=pos.miferreteria.com bash
# Solo el ENTORNO (dependencias y servicios), sin el código del sistema
curl -fsSL https://3r.com.pa/hwdpos_inst/bootstrap.sh | sudo ENV_ONLY=1 bash
# Desde un paquete concreto que ya está en el servidor
curl -fsSL https://3r.com.pa/hwdpos_inst/bootstrap.sh | sudo HWPOS_ZIP=/root/HWDPOS-v1.5.0.zip bash
# Sin preguntas (cron, cloud-init, ssh servidor 'orden'), cambiando la zona horaria
curl -fsSL https://3r.com.pa/hwdpos_inst/bootstrap.sh | sudo HWPOS_ZIP=/root/HWDPOS-v1.5.0.zip SET_TIMEZONE=yes bashHWPOS_ZIP admite una ruta local en el servidor o una URL. El paquete se descomprime en /var/www/HWDPOS y el instalador de la familia se descarga del servidor de distribución (el .zip no lo trae). El .zip debe tener HWDPOS/ como carpeta raíz, como los paquetes oficiales.
Sobre un sistema ya instalado, HWPOS_ZIP se niega: para actualizar use Sistema → Actualizaciones. Para reemplazarlo de verdad agregue HWPOS_REPLACE=1; la carpeta anterior se guarda como HWDPOS.anterior-FECHA en lugar de borrarse.
Cualquier fallo o cancelación termina con un código distinto de 0, así que una automatización nunca puede dar por hecha una instalación que no se completó.
La lista completa de variables está en Variables del instalador.
Menú interactivo
Ejecutado sin tubería, el mismo script pregunta antes de actuar y permite elegir entre instalar solo el entorno o todo desde un .zip:
sudo bash /root/hwdpos-inst/bootstrap.shSin terminal no hay menú: indique HWPOS_ZIP=… o ENV_ONLY=1 (o MODE=db); de lo contrario termina con error.
Puerto del sitio
El instalador pregunta el puerto y usa el 80 si no se indica otro.
| Puerto | Cómo se entra | Cuándo conviene |
|---|---|---|
| 80 (por omisión) | http://192.168.1.50/ | Siempre que el servidor sea solo para HWD POS. No hay que escribir el puerto. |
| Otro (p. ej. 8080) | http://192.168.1.50:8080/ | Cuando el servidor ya tiene otro sitio en el 80. |
Se rechazan de entrada los puertos que ya usa el propio sistema: 22 (SSH), 3306 (MariaDB) y 8108 (buscador). Es mejor avisarlo antes que dejar el servidor web sin arrancar.
Al elegir un puerto, el instalador cambia las cuatro cosas que van juntas: el VirtualHost (o el listen de Nginx), la directiva Listen del servidor (la que se olvida al hacerlo a mano y deja el sitio sin escuchar), el cortafuegos y las direcciones del resumen final.
Para cambiar el puerto después de instalar, lo más simple es volver a ejecutar el instalador con WEB_PORT=. Es seguro reejecutarlo: no borra datos. Los pasos manuales están en Servidor web.
Las terminales y tablets deben apuntar a la dirección con el puerto incluido. El sistema no necesita ningún ajuste: sus enlaces internos son relativos.
Instalar sin internet en el servidor
Si el servidor no puede descargar de internet, puede instalar desde el paquete .zip copiado por USB o SCP. Vea Ubuntu y Debian (en AlmaLinux el procedimiento es el mismo con su propio instalador).
La activación siempre necesita internet, aunque el código venga en un .zip. El servidor debe poder llegar a https://3r.com.pa en el último paso del asistente del navegador.