add compose file for serial printer
This commit is contained in:
parent
273ad95fa0
commit
0bb29c6a01
166
PRINTER_SETUP.md
Normal file
166
PRINTER_SETUP.md
Normal file
@ -0,0 +1,166 @@
|
||||
# Printer Setup for Task Receipts
|
||||
|
||||
This document explains how to set up the Task Receipts application with USB printer support using Docker.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- USB thermal printer (ESC/POS compatible)
|
||||
- Docker and Docker Compose installed
|
||||
- Linux host system (for USB device access)
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1. Run with Printer Support
|
||||
|
||||
```bash
|
||||
# Build and start with printer support
|
||||
docker-compose -f docker-compose.printer.yml up --build
|
||||
|
||||
# Or run in background
|
||||
docker-compose -f docker-compose.printer.yml up -d --build
|
||||
```
|
||||
|
||||
## Configuration Options
|
||||
|
||||
### Environment Variables
|
||||
|
||||
| Variable | Description | Example |
|
||||
|----------|-------------|---------|
|
||||
| `PRINTER_DRIVER` | Type of printer connection | `serial` |
|
||||
|
||||
### USB Device Mounting
|
||||
|
||||
The printer configuration includes several USB mounting options:
|
||||
|
||||
```yaml
|
||||
volumes:
|
||||
# Mount specific USB bus
|
||||
- /dev/bus/usb:/dev/bus/usb:rw
|
||||
|
||||
devices:
|
||||
# Mount USB devices specifically
|
||||
- /dev/bus/usb:/dev/bus/usb
|
||||
|
||||
privileged: true # Required for USB access
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Printer Not Found
|
||||
|
||||
1. **Check USB device listing:**
|
||||
```bash
|
||||
lsusb
|
||||
```
|
||||
|
||||
2. **Verify device permissions:**
|
||||
```bash
|
||||
ls -la /dev/bus/usb/
|
||||
```
|
||||
|
||||
3. **Check container logs:**
|
||||
```bash
|
||||
docker-compose -f docker-compose.printer.yml logs server
|
||||
```
|
||||
|
||||
### Permission Issues
|
||||
|
||||
If you encounter permission issues:
|
||||
|
||||
1. **Add your user to the docker group:**
|
||||
```bash
|
||||
sudo usermod -aG docker $USER
|
||||
```
|
||||
|
||||
2. **Restart Docker service:**
|
||||
```bash
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
3. **Log out and back in** for group changes to take effect.
|
||||
|
||||
### Alternative: Run with sudo
|
||||
|
||||
If you still have issues, you can run with elevated privileges:
|
||||
|
||||
```bash
|
||||
sudo docker-compose -f docker-compose.printer.yml up --build
|
||||
```
|
||||
|
||||
## Common Printer Models
|
||||
|
||||
### ESC/POS Compatible Printers
|
||||
|
||||
Most thermal printers support ESC/POS commands. Common models include:
|
||||
|
||||
- **Star TSP100** series
|
||||
- **Epson TM-T88** series
|
||||
- **Citizen CT-S310** series
|
||||
- **Generic thermal printers**
|
||||
|
||||
### Finding Your Printer's IDs
|
||||
|
||||
```bash
|
||||
# Method 1: lsusb
|
||||
lsusb
|
||||
|
||||
# Method 2: dmesg (after plugging in printer)
|
||||
dmesg | tail -20
|
||||
|
||||
# Method 3: udevadm
|
||||
udevadm info -a -n /dev/usb/lp0
|
||||
```
|
||||
|
||||
## Security Considerations
|
||||
|
||||
⚠️ **Warning**: The printer configuration uses `privileged: true` which gives the container elevated privileges. This is necessary for USB device access but should be used carefully in production environments.
|
||||
|
||||
### Alternative Security Approaches
|
||||
|
||||
1. **Use specific device capabilities:**
|
||||
```yaml
|
||||
cap_add:
|
||||
- SYS_RAWIO
|
||||
```
|
||||
|
||||
2. **Mount only specific devices:**
|
||||
```yaml
|
||||
devices:
|
||||
- /dev/usb/lp0:/dev/usb/lp0
|
||||
```
|
||||
|
||||
3. **Use udev rules** to set proper permissions on the host.
|
||||
|
||||
## Testing Printer Connection
|
||||
|
||||
Once the container is running, you can test the printer connection:
|
||||
|
||||
1. **Check if printer is detected:**
|
||||
```bash
|
||||
docker exec -it task-receipts-server lsusb
|
||||
```
|
||||
|
||||
2. **Test printer from the application:**
|
||||
- Use the web interface to send a test print
|
||||
- Check the server logs for printer-related messages
|
||||
|
||||
## Stopping the Services
|
||||
|
||||
```bash
|
||||
# Stop all services
|
||||
docker-compose -f docker-compose.printer.yml down
|
||||
|
||||
# Stop and remove volumes
|
||||
docker-compose -f docker-compose.printer.yml down -v
|
||||
```
|
||||
|
||||
## Support
|
||||
|
||||
For printer-specific issues:
|
||||
|
||||
1. Check the server logs for detailed error messages
|
||||
2. Verify your printer is ESC/POS compatible
|
||||
3. Ensure the USB IDs are correctly configured
|
||||
4. Test the printer on the host system first
|
||||
|
||||
For Docker-related issues, refer to the main `DOCKER.md` documentation.
|
54
docker-compose.printer.yml
Normal file
54
docker-compose.printer.yml
Normal file
@ -0,0 +1,54 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
server:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: server/Dockerfile
|
||||
container_name: task-receipts-server
|
||||
ports:
|
||||
- "4000:4000"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
# Printer configuration
|
||||
- PRINTER_DRIVER=serial
|
||||
volumes:
|
||||
# Mount database directory for persistence
|
||||
- ./server/data/prod.sqlite3:/app/server/prod.sqlite3:rw
|
||||
# Mount USB devices for printer access
|
||||
# /dev/bus/usb:/dev/bus/usb:rw
|
||||
devices:
|
||||
# Mount USB devices specifically
|
||||
- /dev/bus/usb:/dev/bus/usb
|
||||
privileged: true # Required for USB device access
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "node", "-e", "require('http').get('http://localhost:4000/graphql', (res) => { process.exit(res.statusCode === 200 ? 0 : 1) })"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
networks:
|
||||
- task-receipts-network
|
||||
|
||||
client:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: client/Dockerfile
|
||||
container_name: task-receipts-client
|
||||
ports:
|
||||
- "80:80"
|
||||
depends_on:
|
||||
server:
|
||||
condition: service_healthy
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- task-receipts-network
|
||||
|
||||
networks:
|
||||
task-receipts-network:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
server-data:
|
||||
driver: local
|
@ -37,4 +37,4 @@ EXPOSE 4000
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD node -e "require('http').get('http://localhost:4000/graphql', (res) => { process.exit(res.statusCode === 200 ? 0 : 1) })"
|
||||
ENTRYPOINT ["dumb-init", "--"]
|
||||
CMD ["node", "dist/index.js"]
|
||||
CMD ["node", "dist/server/src/index.js"]
|
Loading…
Reference in New Issue
Block a user