Sign inSign up

pindu/printer-server

By pindu

Updated about 2 months ago

Servidor de impresión

Image
0

3.6K

pindu/printer-server repository overview

Dockerizado de Django para Desplegar Aplicaciones en Python

Docker Alpine Linux Debian Linux Python

Referencia Rápida

  • Docker: Herramienta para crear, implementar y ejecutar aplicaciones en contenedores.
  • Alpine Linux: Distribución de Linux ligera y segura.
  • Debian Linux: Sistema operativo universal basado en Linux.
  • Python: Lenguaje de programación de alto nivel.
  • Gunicorn: Servidor WSGI para aplicaciones Python.
  • Docker Compose: Herramienta para definir y ejecutar aplicaciones multi-contenedor.
  • FastAPi: Framework de alta performance para desarrolla de APIs.

Mantenido Por: PINDU

Descargo de Responsabilidad

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.

Donaciones

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!

Donate

Resumen

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:

  • Uso de Alpine Linux para minimizar el tamaño de la imagen.
  • Instalación de bibliotecas esenciales de Python para desarrollo web.
  • Configuración de servicios como curl para la gestión de impresoras.
  • Orquestación simplificada para entornos en la nube.

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.

Palabras Clave:

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.

Configuración

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

Prueba curl para emprimir

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

RECORDAR MODIFICAR EL .ENV PARA LOS ORIGINS , PONER URL DE PRODUCCION Y DESARROLLO

Termux para Android

Esta sección describe cómo instalar y configurar la API de impresión en un dispositivo Android utilizando Termux.

Prerrequisitos
  • Termux instalado en el dispositivo Android
  • Acceso SSH habilitado en Termux
  • Python y pip instalados en Termux
Instalación en Termux
1. Preparar el entorno en Termux (dispositivo Android)

Ejecutar el script de instalación que configura el entorno completo:

./install.sh

Este script instala:

  • OpenSSH para acceso remoto
  • Python y pip
  • Dependencias necesarias (Flask, python-escpos, etc.)
  • Configura el servidor SSH en el puerto 8022
2. Copiar la aplicación desde tu computadora

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 directorios
  • u0_a306: Usuario de Termux (obtenerlo con whoami en Termux)
  • 10.0.8.7: IP local del dispositivo Android (obtenerla con ip addr en Termux)
3. Configurar variables de entorno

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
4. Iniciar el servidor

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

5. Verificar el funcionamiento

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
Consejos útiles

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:

  • Usar termux-wake-lock para evitar que Android suspenda Termux
  • Considerar usar screen o tmux para sesiones persistentes

Autostart 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

Configuracion del Chrome

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;

Tag summary

Content type

Image

Digest

sha256:13049b95b

Size

37.5 MB

Last updated

about 2 months ago

docker pull pindu/printer-server