Referencia Rápida
Mantenido Por: PINDU
Este proyecto se proporciona "tal cual", sin garantías de ningún tipo, ya sean expresas o implícitas, incluidas, entre otras, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. El uso del código es bajo tu propio riesgo. Ni los autores ni los titulares de derechos de autor serán responsables de ningún daño directo, indirecto, incidental, especial, ejemplar o consecuente que surja del uso de este software.
Si este proyecto te resulta útil y deseas apoyar su desarrollo continuo, considera realizar una donación. Tu contribución ayuda a mantener y mejorar este proyecto, permitiendo que más personas se beneficien de él. ¡Gracias por tu apoyo!
Este proyecto presenta una solución integral para desplegar un servidor de impresión en un contenedor Docker. La configuración incluye una imagen basada en Alpine Linux, optimizada para ser ligera y eficiente, que ejecuta una aplicación FastAPI y curl.
Se proporciona un Dockerfile y un archivo de configuración Docker Compose que facilitan la instalación de dependencias, la integración con bases de datos PostgreSQL y la gestión de volúmenes para la persistencia de datos.
Las principales características incluyen:
Esta solución está diseñada para desarrolladores que buscan una implementación eficiente, escalable y fácil de mantener de aplicaciones Django en entornos modernos. Además, asegura una integración fluida con bases de datos relacionales y herramientas de análisis de datos, optimizando el flujo de trabajo y la productividad.
Docker, Alpine Linux, Python, Gunicorn, Docker Compose, APIs, Contenedores, Orquestación, Desarrollo Web, Backend, Escalabilidad, Persistencia de Datos, Cloud Computing, Microservicios, CI/CD, Automatización, Infraestructura como Código, Seguridad, Optimización, Análisis de Datos, Integración Continua, Despliegue Continuo, Sistemas Distribuidos, Arquitectura de Software, Desarrollo Ágil, DevOps, Virtualización, Gestión de Dependencias, Configuración de Entornos, Mejores Prácticas.
Generar un archivo .env con la siguiente configuración
########################################################################
# para la API
########################################################################
PRINT_API_CORS=https://example.develop.com.ar,https://example.com.ar
PRINT_DEFAULT_PRINTER=192.168.0.71
Generamos el archivo tickert.json y luego ejecutamos el curl
cat > ticket.json <<'JSON'
{
"content": "RESTAURANTE EL SABOR\nMesa: 12\n--------------------------\n1x Pizza Margarita $1200\n2x Coca-Cola $800\n1x Ensalada César $950\n1x Flan Casero $600\n--------------------------\nTOTAL: $3550\n¡Gracias por su visita!",
"qr": "https://example.com/orden/1234",
"impresora": "172.19.0.3"
}
JSON
Comando de prueba para la consola. Para verificar los tickets ingresar a http://localhost:8080
curl -X POST "http://10.0.8.7:8000/print" \
-H "Content-Type: application/json" \
--data-binary @ticket.json
Esta sección describe cómo instalar y configurar la API de impresión en un dispositivo Android utilizando Termux.
Ejecutar el script de instalación que configura el entorno completo:
./install.sh
Este script instala:
Desde tu máquina de desarrollo, copia la carpeta app al dispositivo Android usando SCP:
# Sintaxis general:
scp -P 8022 -r ./app <usuario>@<ip-del-dispositivo>:/data/data/com.termux/files/home/
# Ejemplo con usuario u0_a306 e IP 10.0.8.7:
scp -P 8022 -r . [email protected]:/data/data/com.termux/files/home/
Parámetros:
-P 8022: Puerto SSH de Termux (por defecto 8022)-r: Copia recursiva de directoriosu0_a306: Usuario de Termux (obtenerlo con whoami en Termux)10.0.8.7: IP local del dispositivo Android (obtenerla con ip addr en Termux)En el dispositivo Android (Termux), editar el archivo .env dentro de la carpeta app:
cd ~/app
nano .env
Configurar las variables necesarias:
# Nivel de log: DEBUG, INFO, WARNING, ERROR, CRITICAL
PRINT_API_LOG_LEVEL=INFO
# Longitud máxima del contenido a imprimir
PRINT_MAX_LENGTH=4000
# Impresora por defecto (IP:puerto)
PRINT_DEFAULT_PRINTER=192.168.0.71
# Orígenes CORS permitidos (separados por comas)
PRINT_API_CORS=https://agd.develop.pindu.com.ar,https://agd.pindu.com.ar,http://localhost,http://localhost:8000,http://127.0.0.1
Ejecutar el script de inicio:
cd ~/.termux/boot
./start.sh
O iniciar manualmente:
cd ~/app
python -m flask --app api run --host 0.0.0.0 --port 8000
El servidor estará disponible en http://<ip-del-dispositivo>:8000
Desde otra máquina en la misma red, probar la API:
curl -X POST "http://172.19.0.5:8000/print" \
-H "Content-Type: application/json" \
--data-binary @ticket.json
Obtener información del dispositivo Android:
# En Termux, obtener el nombre de usuario
whoami
# Obtener la IP local
ip addr show wlan0 | grep inet
Mantener Termux activo en segundo plano:
termux-wake-lock para evitar que Android suspenda Termuxscreen o tmux para sesiones persistentesAutostart en Termux:
Crear un script de inicio automático en ~/.termux/boot/:
mkdir -p ~/.termux/boot
nano ~/.termux/boot/start-api.sh
Contenido del script:
#!/data/data/com.termux/files/usr/bin/bash
termux-wake-lock
cd ~/app
python -m flask --app api run --host 0.0.0.0 --port 8000"
Dar permisos de ejecución:
chmod +x ~/.termux/boot/start-api.sh
Deshabilitar el flag
chrome://flags/#local-network-access-check
Para deshabilitarlo desde el SH shell de Linux
google-chrome --disable-features=LocalNetworkAccessChecks
Para deshabilitarlo desde el SH shell de Linux en Chromium
chromium --disable-features=LocalNetworkAccessChecks
Hacer acceso directo en el escritorio o en la barra de tareas con
chromium --disable-features=LocalNetworkAccessChecks --kiosk https://agd.pindu.com.ar
[Desktop Entry]
Name=AGD
Comment=Pantalla AGD
Exec=chromium --disable-features=LocalNetworkAccessChecks --kiosk https://agd.pindu.com.ar
Icon=chromium-browser
Terminal=false
Type=Application
Categories=Network;
Content type
Image
Digest
sha256:13049b95b…
Size
37.5 MB
Last updated
about 2 months ago
docker pull pindu/printer-server