# Deploy di Bookish ## Preparazione ```bash # Clona il repository git clone http://192.168.0.183:8085/truetype/bookish.git cd bookish # Ambiente virtuale python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt # Verifica python app.py # → Avvia su 0.0.0.0:5000 (o porta libera successiva) # → Crea automaticamente bookish.db ``` ## Opzioni di Deploy ### 1. Proxmox LXC (consigliato) Crea un container Linux privilegiato (Debian/Ubuntu): ```bash pct create 100 local/vault/debian-12-standard_12.7-1_amd64.tar.zst \ --hostname bookish \ --storage local-zfs \ --rootfs 4 \ --cores 1 \ --memory 512 \ --net0 name=eth0,bridge=vmbr0,firewall=1,ip=dhcp ``` All'interno del container: ```bash apt update && apt install -y python3 python3-venv python3-pip git git clone http://192.168.0.183:8085/truetype/bookish.git /opt/bookish cd /opt/bookish python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ### 2. Docker ```dockerfile FROM python:3.12-slim RUN apt-get update && apt-get install -y \ libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 \ libffi-dev shared-mime-info WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . RUN mkdir -p uploads converted EXPOSE 5000 CMD ["python", "app.py"] ``` Build e avvio: ```bash docker build -t bookish . docker run -d \ --name bookish \ -p 5000:5000 \ -v bookish_data:/app/uploads \ -v bookish_data:/app/converted \ -v bookish_db:/app \ --restart unless-stopped \ bookish ``` ### 3. Systemd Service ```ini [Unit] Description=Bookish Flask App After=network.target [Service] Type=simple User=bookish WorkingDirectory=/opt/bookish Environment=PATH=/opt/bookish/.venv/bin Environment=BOOKISH_SECRET=your-secure-secret-key ExecStart=/opt/bookish/.venv/bin/python app.py Restart=always RestartSec=10 [Install] WantedBy=multi-user.target ``` ```bash sudo systemctl daemon-reload sudo systemctl enable bookish sudo systemctl start bookish ``` ## Reverse Proxy (Caddy) ```caddyfile bookish.tuodominio.it { reverse_proxy localhost:5000 } ``` Con Caddy ottieni automaticamente HTTPS tramite Let's Encrypt. ## Dati persistenti Bookish usa il filesystem per dati temporanei e un database SQLite per dati permanenti: | Cosa | Dove | Persistente? | |---|---|---| | File caricati | `uploads/` | ❌ (pulizia 1h) | | File convertiti | `converted/` | ❌ (pulizia 1h) | | Segnalibri e posizioni | `bookish.db` | ✅ (SQLite) | **Backup**: per salvare segnalibri e posizioni, copia `bookish.db`: ```bash cp /opt/bookish/bookish.db /tuo/backup/ ``` Il database si ricrea automaticamente se manca (perdendo però i dati precedenti). ## Configurazione Porta Se `app.py` non trova la porta specificata, scorre in sequenza (`+1`) finché non trova una porta libera. Puoi specificare la porta di partenza come argomento: ```bash python app.py 8080 # Prova 8080, 8081, 8082... ``` ## Variabili d'ambiente | Variabile | Default | Descrizione | |---|---|---| | `BOOKISH_SECRET` | `bookish-secret-key-change-in-production` | Flask secret key | | `BOOKISH_PORT` | 5000 | Porta di partenza per la ricerca | | `FLASK_DEBUG` | 0 | Modalità debug (1 per attivare) | ## Manutenzione ```bash # Update app git pull source .venv/bin/activate pip install -r requirements.txt --upgrade systemctl restart bookish # se systemd # Pulizia hard disk rm -rf uploads/* converted/* # Backup cp bookish.db bookish.db.$(date +%Y%m%d).bak ```