Froidefond Julien b9e54cbfd8
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 54s
chore: bump version to 1.19.1
2026-03-21 12:47:31 +01:00
2026-03-19 11:19:50 +01:00
2026-03-21 12:47:31 +01:00
2026-03-09 23:48:08 +01:00
2026-03-21 12:47:31 +01:00
2026-03-21 12:47:31 +01:00

Stripstream Librarian

A comprehensive comic book and e-book management system with automatic indexing, full-text search, and a modern web interface.

Architecture

The project consists of the following components:

  • API (apps/api/) - Rust-based REST API service
  • Indexer (apps/indexer/) - Rust-based background indexing service
  • Backoffice (apps/backoffice/) - Next.js web administration interface
  • Infrastructure (infra/) - Docker Compose setup with PostgreSQL

Quick Start

Prerequisites

  • Docker and Docker Compose
  • (Optional) Rust toolchain for local development
  • (Optional) Node.js 18+ for backoffice development

Environment Setup

  1. Copy the example environment file:

    cp .env.example .env
    
  2. Edit .env and set secure values for:

    • API_BOOTSTRAP_TOKEN - Bootstrap token for initial API authentication

Running with Docker

docker compose up -d

This will start:

  • PostgreSQL (port 6432)
  • API service (port 7080)
  • Indexer service (port 7081)
  • Backoffice web UI (port 7082)

Accessing the Application

Default Credentials

The default bootstrap token is configured in your .env file. Use this for initial API authentication.

Development

Local Development (without Docker)

API & Indexer (Rust)

# Start dependencies
docker compose up -d postgres

# Run API
cd apps/api
cargo run

# Run Indexer (in another terminal)
cd apps/indexer
cargo run

Backoffice (Next.js)

cd apps/backoffice
npm install
npm run dev

The backoffice will be available at http://localhost:7082

Features

Libraries Management

  • Create and manage multiple libraries
  • Configure automatic scanning schedules (hourly, daily, weekly)
  • Real-time file watcher for instant indexing
  • Full and incremental rebuild options

Books Management

  • Support for CBZ, CBR, and PDF formats
  • Automatic metadata extraction
  • Series and volume detection
  • Full-text search powered by PostgreSQL

Jobs Monitoring

  • Real-time job progress tracking
  • Detailed statistics (scanned, indexed, removed, errors)
  • Job history and logs
  • Cancel pending jobs
  • Full-text search across titles, authors, and series
  • Library filtering
  • Real-time suggestions

Environment Variables

Variables marquées required doivent être définies. Les autres ont une valeur par défaut.

Partagées (API + Indexer)

Variable Description Défaut
DATABASE_URL required — Connexion PostgreSQL

API

Variable Description Défaut
API_BOOTSTRAP_TOKEN required — Token admin initial
API_LISTEN_ADDR Adresse d'écoute 0.0.0.0:7080

Indexer

Variable Description Défaut
INDEXER_LISTEN_ADDR Adresse d'écoute 0.0.0.0:7081
INDEXER_SCAN_INTERVAL_SECONDS Intervalle de scan du watcher 5
THUMBNAIL_ENABLED Activer la génération de thumbnails true
THUMBNAIL_DIRECTORY Dossier de stockage des thumbnails /data/thumbnails
THUMBNAIL_WIDTH Largeur max des thumbnails (px) 300
THUMBNAIL_HEIGHT Hauteur max des thumbnails (px) 400
THUMBNAIL_QUALITY Qualité WebP (0100) 80
THUMBNAIL_FORMAT Format de sortie webp

Backoffice

Variable Description Défaut
API_BOOTSTRAP_TOKEN required — Token d'accès à l'API
API_BASE_URL URL interne de l'API (dans le réseau Docker) http://api:7080

API Documentation

The API is documented with OpenAPI/Swagger. When running locally, access the docs at:

http://localhost:7080/swagger-ui

Project Structure

stripstream-librarian/
├── apps/
│   ├── api/              # Rust REST API
│   ├── indexer/          # Rust background indexer
│   └── backoffice/       # Next.js web UI
├── infra/
│   └── migrations/       # SQL database migrations
├── libraries/            # Book storage (mounted volume)
└── .env                  # Environment configuration

Docker Registry

Images are built and pushed to Docker Hub with the naming convention docker.io/{owner}/stripstream-{service}.

Publishing Images (Maintainers)

To build and push all service images to the registry:

# Login to Docker Hub first
docker login -u julienfroidefond32

# Build and push all images
./scripts/docker-push.sh

This script will:

  • Build images for api, indexer, and backoffice
  • Tag them with the current version (from Cargo.toml) and latest
  • Push to the registry

Using Published Images

To use the pre-built images in your own docker-compose.yml:

services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: stripstream
      POSTGRES_USER: stripstream
      POSTGRES_PASSWORD: stripstream
    volumes:
      - postgres_data:/var/lib/postgresql/data

  api:
    image: julienfroidefond32/stripstream-api:latest
    ports:
      - "7080:7080"
    volumes:
      - ./libraries:/libraries
      - ./data/thumbnails:/data/thumbnails
    environment:
      # --- Required ---
      DATABASE_URL: postgres://stripstream:stripstream@postgres:5432/stripstream
      API_BOOTSTRAP_TOKEN: your_bootstrap_token  # required — change this
      # --- Optional (defaults shown) ---
      # API_LISTEN_ADDR: 0.0.0.0:7080

  indexer:
    image: julienfroidefond32/stripstream-indexer:latest
    ports:
      - "7081:7081"
    volumes:
      - ./libraries:/libraries
      - ./data/thumbnails:/data/thumbnails
    environment:
      # --- Required ---
      DATABASE_URL: postgres://stripstream:stripstream@postgres:5432/stripstream
      # --- Optional (defaults shown) ---
      # INDEXER_LISTEN_ADDR: 0.0.0.0:7081
      # INDEXER_SCAN_INTERVAL_SECONDS: 5
      # THUMBNAIL_ENABLED: true
      # THUMBNAIL_DIRECTORY: /data/thumbnails
      # THUMBNAIL_WIDTH: 300
      # THUMBNAIL_HEIGHT: 400
      # THUMBNAIL_QUALITY: 80
      # THUMBNAIL_FORMAT: webp

  backoffice:
    image: julienfroidefond32/stripstream-backoffice:latest
    ports:
      - "7082:7082"
    environment:
      # --- Required ---
      API_BOOTSTRAP_TOKEN: your_bootstrap_token  # must match api above
      # --- Optional (defaults shown) ---
      # API_BASE_URL: http://api:7080

volumes:
  postgres_data:

License

[Your License Here]

Description
No description provided
Readme 6.9 MiB
Languages
TypeScript 48.5%
Rust 48.2%
Shell 1.9%
CSS 0.7%
Dockerfile 0.5%
Other 0.2%