diff --git a/CLAUDE.md b/CLAUDE.md index 160a16b..3f40e1b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -25,7 +25,7 @@ │ Host │ Code Location │ Container Mount ├──────────┼─────────────────────────┼──────────────────────────────────────────┤ │ odin │ /home/podman/ppf/*.py │ Mounts ppf/ directly to /app -│ workers │ /home/podman/ppf/src/ │ Mounts ppf/src/ to /app (via systemd) +│ workers │ /home/podman/ppf/src/ │ Mounts ppf/src/ to /app (via compose) └──────────┴─────────────────────────┴──────────────────────────────────────────┘ ``` @@ -187,20 +187,15 @@ batch_size = clamp(fair_share, min=100, max=1000) - Workers shuffle their batch locally to avoid testing same proxies simultaneously - Claims expire after 5 minutes if not completed -## Worker Container +## Container Management -Workers run as podman containers with `--restart=unless-stopped`: +All nodes run via `podman-compose` with role-specific compose files: -```bash -podman run -d --name ppf-worker --network=host --restart=unless-stopped \ - -e PYTHONUNBUFFERED=1 \ - -v /home/podman/ppf/src:/app:ro,Z \ - -v /home/podman/ppf/data:/app/data:Z \ - -v /home/podman/ppf/config.ini:/app/config.ini:ro,Z \ - -v /home/podman/ppf/servers.txt:/app/servers.txt:ro,Z \ - localhost/ppf-worker:latest \ - python -u ppf.py --worker --server http://10.200.1.250:8081 -``` +- **Odin**: `compose.master.yml` -> deployed as `compose.yml` +- **Workers**: `compose.worker.yml` -> deployed as `compose.yml` + +Containers are managed exclusively through compose. No systemd user +services or standalone `podman run` commands. ## Rebuilding Images diff --git a/README.md b/README.md index fe6ef7a..f76911e 100644 --- a/README.md +++ b/README.md @@ -197,44 +197,23 @@ stale_count INT -- checks without new proxies ## Deployment -### Systemd Service - -```ini -[Unit] -Description=PPF Python Proxy Finder -After=network-online.target tor.service -Wants=network-online.target - -[Service] -Type=simple -User=ppf -WorkingDirectory=/opt/ppf -# ppf.py is the main entry point (runs harvester + validator) -ExecStart=/usr/bin/python2 ppf.py -Restart=on-failure -RestartSec=30 - -[Install] -WantedBy=multi-user.target -``` - ### Container Deployment -All nodes use `podman-compose` with role-specific compose files. +All nodes use `podman-compose` with role-specific compose files +(rootless, as `podman` user). `--network=host` required for Tor +access at 127.0.0.1:9050. ```sh # Build image podman build -t ppf:latest . -# Run standalone (single node) -podman run -d --name ppf \ - --network=host \ - -v ./data:/app/data:Z \ - -v ./config.ini:/app/config.ini:ro \ - ppf:latest python ppf.py -``` +# Start via compose +podman-compose up -d -Note: `--network=host` required for Tor access at 127.0.0.1:9050. +# View logs / stop +podman-compose logs -f +podman-compose down +``` ### Operations Toolkit