Sign inSign up

pindu/printer-server

By pindu

•Updated 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

2 months ago

docker pull pindu/printer-server