Add reedsolo to Docker, update docs for docker/ paths

- Add reedsolo>=1.7.0 to Dockerfile and Dockerfile.base for DCT
  error correction (fixes DCT decode failures in container)
- Update all documentation to use docker/docker-compose.yml paths

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Aaron D. Lee
2026-01-09 21:20:52 -05:00
parent 3d53282738
commit 14a73c63ac
10 changed files with 48 additions and 46 deletions

4
API.md
View File

@@ -88,7 +88,7 @@ uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
**Docker with channel key:** **Docker with channel key:**
```bash ```bash
STEGASOO_CHANNEL_KEY=XXXX-XXXX-... docker-compose up api STEGASOO_CHANNEL_KEY=XXXX-XXXX-... docker-compose -f docker/docker-compose.yml up api
``` ```
--- ---
@@ -843,7 +843,7 @@ curl -s -X POST "$BASE_URL/decode/multipart" \
## Docker Configuration ## Docker Configuration
### docker-compose.yml ### docker/docker-compose.yml
```yaml ```yaml
x-common-env: &common-env x-common-env: &common-env

2
CLI.md
View File

@@ -810,7 +810,7 @@ stegasoo decode -r ref.jpg -s stego.png -p "phrase" --pin 123456
### Docker Deployment ### Docker Deployment
**docker-compose.yml:** **docker/docker-compose.yml:**
```yaml ```yaml
x-common-env: &common-env x-common-env: &common-env
STEGASOO_CHANNEL_KEY: ${STEGASOO_CHANNEL_KEY:-} STEGASOO_CHANNEL_KEY: ${STEGASOO_CHANNEL_KEY:-}

View File

@@ -6,10 +6,10 @@ Stegasoo provides Docker images for both the Web UI and REST API.
```bash ```bash
# Build and start all services # Build and start all services
docker-compose up -d docker-compose -f docker/docker-compose.yml up -d
# Check status # Check status
docker-compose ps docker-compose -f docker/docker-compose.yml ps
``` ```
Access: Access:
@@ -61,10 +61,10 @@ Uses a pre-built base image with all dependencies:
```bash ```bash
# First time only: build the base image # First time only: build the base image
docker build -f Dockerfile.base -t stegasoo-base:latest . docker build -f docker/Dockerfile.base -t stegasoo-base:latest .
# Build services (fast - only copies app code) # Build services (fast - only copies app code)
docker-compose build docker-compose -f docker/docker-compose.yml build
``` ```
### Full Build (No Base Image) ### Full Build (No Base Image)
@@ -72,26 +72,26 @@ docker-compose build
If you don't have the base image, the Dockerfile will build all dependencies (slower): If you don't have the base image, the Dockerfile will build all dependencies (slower):
```bash ```bash
docker-compose build docker-compose -f docker/docker-compose.yml build
``` ```
## Commands ## Commands
```bash ```bash
# Start services # Start services
docker-compose up -d docker-compose -f docker/docker-compose.yml up -d
# View logs # View logs
docker-compose logs -f docker-compose -f docker/docker-compose.yml logs -f
# Stop services # Stop services
docker-compose down docker-compose -f docker/docker-compose.yml down
# Rebuild after code changes # Rebuild after code changes
docker-compose build && docker-compose up -d docker-compose -f docker/docker-compose.yml build && docker-compose -f docker/docker-compose.yml up -d
# Full rebuild (no cache) # Full rebuild (no cache)
docker-compose build --no-cache docker-compose -f docker/docker-compose.yml build --no-cache
``` ```
## Resource Limits ## Resource Limits
@@ -112,7 +112,7 @@ Both services include health checks:
Check health status: Check health status:
```bash ```bash
docker-compose ps docker-compose -f docker/docker-compose.yml ps
``` ```
## Production Deployment ## Production Deployment
@@ -129,7 +129,7 @@ For production, consider:
```bash ```bash
# Don't commit .env files with secrets # Don't commit .env files with secrets
export STEGASOO_CHANNEL_KEY=your-key export STEGASOO_CHANNEL_KEY=your-key
docker-compose up -d docker-compose -f docker/docker-compose.yml up -d
``` ```
3. **Reverse proxy**: Put behind nginx/traefik for TLS termination 3. **Reverse proxy**: Put behind nginx/traefik for TLS termination
@@ -145,12 +145,12 @@ For production, consider:
### Container won't start ### Container won't start
```bash ```bash
# Check logs # Check logs
docker-compose logs web docker-compose -f docker/docker-compose.yml logs web
docker-compose logs api docker-compose -f docker/docker-compose.yml logs api
``` ```
### Out of memory ### Out of memory
Increase Docker's memory allocation or reduce worker count in Dockerfile. Increase Docker's memory allocation or reduce worker count in `docker/Dockerfile`.
### Permission errors ### Permission errors
The containers run as non-root user `stego` (UID 1000). Ensure volume permissions match. The containers run as non-root user `stego` (UID 1000). Ensure volume permissions match.

View File

@@ -154,10 +154,10 @@ Build and run individual containers.
#### Build Images #### Build Images
```bash ```bash
# Build all targets # From project root - build all targets
docker build -t stegasoo-web --target web . docker build -t stegasoo-web --target web -f docker/Dockerfile .
docker build -t stegasoo-api --target api . docker build -t stegasoo-api --target api -f docker/Dockerfile .
docker build -t stegasoo-cli --target cli . docker build -t stegasoo-cli --target cli -f docker/Dockerfile .
``` ```
#### Run Web UI #### Run Web UI
@@ -214,17 +214,17 @@ The easiest way to run all services.
```bash ```bash
# Start in background # Start in background
docker-compose up -d docker-compose -f docker/docker-compose.yml up -d
# Start specific service # Start specific service
docker-compose up -d web docker-compose -f docker/docker-compose.yml up -d web
docker-compose up -d api docker-compose -f docker/docker-compose.yml up -d api
# View logs # View logs
docker-compose logs -f docker-compose -f docker/docker-compose.yml logs -f
# Stop all # Stop all
docker-compose down docker-compose -f docker/docker-compose.yml down
``` ```
#### Authentication Configuration (v4.0.2) #### Authentication Configuration (v4.0.2)
@@ -239,7 +239,7 @@ STEGASOO_HOSTNAME=localhost # Hostname for SSL cert
STEGASOO_CHANNEL_KEY= # Optional channel key STEGASOO_CHANNEL_KEY= # Optional channel key
# Then run # Then run
docker-compose up -d web docker-compose -f docker/docker-compose.yml up -d web
``` ```
On first access, you'll be prompted to create an admin account. The database and SSL certs are persisted in Docker volumes. On first access, you'll be prompted to create an admin account. The database and SSL certs are persisted in Docker volumes.
@@ -255,16 +255,16 @@ On first access, you'll be prompted to create an admin account. The database and
```bash ```bash
# Build images and start # Build images and start
docker-compose up -d --build docker-compose -f docker/docker-compose.yml up -d --build
# Force rebuild (no cache) # Force rebuild (no cache)
docker-compose build --no-cache docker-compose -f docker/docker-compose.yml build --no-cache
docker-compose up -d docker-compose -f docker/docker-compose.yml up -d
``` ```
#### Resource Configuration #### Resource Configuration
The `docker-compose.yml` includes resource limits: The `docker/docker-compose.yml` includes resource limits:
```yaml ```yaml
services: services:
@@ -852,7 +852,7 @@ Argon2 needs 256MB per operation. Increase container memory:
# Docker run # Docker run
docker run --memory=768m ... docker run --memory=768m ...
# Docker Compose - edit docker-compose.yml # Docker Compose - edit docker/docker-compose.yml
deploy: deploy:
resources: resources:
limits: limits:

View File

@@ -106,17 +106,17 @@ ruff check src/ tests/ frontends/
```bash ```bash
# Quick start (HTTPS enabled by default) # Quick start (HTTPS enabled by default)
docker-compose up -d docker-compose -f docker/docker-compose.yml up -d
# Access # Access
# Web UI: https://localhost:5000 (self-signed cert) # Web UI: https://localhost:5000 (self-signed cert)
# REST API: http://localhost:8000 # REST API: http://localhost:8000
# Disable HTTPS if needed: # Disable HTTPS if needed:
STEGASOO_HTTPS_ENABLED=false docker-compose up -d STEGASOO_HTTPS_ENABLED=false docker-compose -f docker/docker-compose.yml up -d
``` ```
See [DOCKER.md](DOCKER.md) for full documentation. See [DOCKER.md](DOCKER.md) and [docs/DOCKER_QUICKSTART.md](docs/DOCKER_QUICKSTART.md) for full documentation.
## Raspberry Pi ## Raspberry Pi

View File

@@ -21,12 +21,12 @@ Pre-release validation checklist. Complete all items before tagging a release.
## Docker Validation ## Docker Validation
- [ ] Base image builds: `docker build -f Dockerfile.base -t stegasoo-base:latest .` - [ ] Base image builds: `docker build -f docker/Dockerfile.base -t stegasoo-base:latest .`
- [ ] Web image builds: `docker-compose build web` - [ ] Web image builds: `docker-compose -f docker/docker-compose.yml build web`
- [ ] Container starts: `docker-compose up -d web` - [ ] Container starts: `docker-compose -f docker/docker-compose.yml up -d web`
- [ ] Web UI accessible at http://localhost:5000 - [ ] Web UI accessible at http://localhost:5000
- [ ] Encode/decode works in container - [ ] Encode/decode works in container
- [ ] Container stops cleanly: `docker-compose down` - [ ] Container stops cleanly: `docker-compose -f docker/docker-compose.yml down`
## Release Process ## Release Process

View File

@@ -39,8 +39,8 @@ First boot runs the setup wizard for WiFi, HTTPS, and channel key configuration.
### Docker ### Docker
```bash ```bash
docker-compose up -d web # Web UI on :5000 docker-compose -f docker/docker-compose.yml up -d web # Web UI on :5000
docker-compose up -d api # REST API on :8000 docker-compose -f docker/docker-compose.yml up -d api # REST API on :8000
``` ```
### Full Changelog ### Full Changelog

View File

@@ -177,7 +177,7 @@ python app.py
### Docker Configuration ### Docker Configuration
```yaml ```yaml
# docker-compose.yml # docker/docker-compose.yml
services: services:
web: web:
environment: environment:
@@ -360,7 +360,7 @@ gunicorn --bind 0.0.0.0:5000 --workers 2 --threads 4 --timeout 60 app:app
**Docker:** **Docker:**
```bash ```bash
docker-compose up web docker-compose -f docker/docker-compose.yml up web
``` ```
### First-Time Setup ### First-Time Setup
@@ -1245,7 +1245,7 @@ volumes:
```bash ```bash
pip install scipy pip install scipy
# Or rebuild Docker image # Or rebuild Docker image
docker-compose build --no-cache docker-compose -f docker/docker-compose.yml build --no-cache
``` ```
### Browser Compatibility ### Browser Compatibility

View File

@@ -43,6 +43,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
RUN pip install --no-cache-dir \ RUN pip install --no-cache-dir \
cython numpy scipy>=1.10.0 jpegio>=0.2.0 \ cython numpy scipy>=1.10.0 jpegio>=0.2.0 \
argon2-cffi>=23.0.0 pillow>=10.0.0 cryptography>=41.0.0 \ argon2-cffi>=23.0.0 pillow>=10.0.0 cryptography>=41.0.0 \
reedsolo>=1.7.0 \
flask>=3.0.0 gunicorn>=21.0.0 \ flask>=3.0.0 gunicorn>=21.0.0 \
fastapi>=0.100.0 "uvicorn[standard]>=0.20.0" python-multipart>=0.0.6 \ fastapi>=0.100.0 "uvicorn[standard]>=0.20.0" python-multipart>=0.0.6 \
qrcode>=7.3.0 pyzbar>=0.1.9 click>=8.0.0 lz4>=4.0.0 qrcode>=7.3.0 pyzbar>=0.1.9 click>=8.0.0 lz4>=4.0.0

View File

@@ -32,7 +32,8 @@ RUN pip install --no-cache-dir \
jpegio>=0.2.0 \ jpegio>=0.2.0 \
argon2-cffi>=23.0.0 \ argon2-cffi>=23.0.0 \
pillow>=10.0.0 \ pillow>=10.0.0 \
cryptography>=41.0.0 cryptography>=41.0.0 \
reedsolo>=1.7.0
# Install web/api framework packages (also stable) # Install web/api framework packages (also stable)
RUN pip install --no-cache-dir \ RUN pip install --no-cache-dir \