3.4 KiB
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