Files
bookish/docs/deploy.md
T

3.4 KiB

Deploy di Bookish

Preparazione

# 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):

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:

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

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:

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

[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
sudo systemctl daemon-reload
sudo systemctl enable bookish
sudo systemctl start bookish

Reverse Proxy (Caddy)

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:

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:

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

# 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