version: '3.8'
services:
proofmode:
image: guardianproject/proofmode:latest
build:
context: .
dockerfile: Dockerfile
platforms:
- linux/amd64
- linux/arm64
container_name: proofmode
restart: unless-stopped
user: "1000:1000"
environment:
- RUST_LOG=${RUST_LOG:-info}
- PROOFMODE_INPUT_DIR=/app/input
- PROOFMODE_OUTPUT_DIR=/app/output
- PROOFMODE_CONFIG_DIR=/app/config
volumes:
- ./media:/app/input:ro
- ./proofs:/app/output
- ./config:/app/config:ro
- /etc/localtime:/etc/localtime:ro
deploy:
resources:
limits:
cpus: '2.0'
memory: 2G
reservations:
cpus: '0.5'
memory: 512M
healthcheck:
test: ["CMD", "proofmode", "--version"]
interval: 30s
timeout: 3s
retries: 3
start_period: 5s
networks:
- proofmode-net
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp
- /var/tmp
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
ipfs:
image: ipfs/kubo:latest
container_name: proofmode-ipfs
restart: unless-stopped
environment:
- IPFS_PROFILE=server
volumes:
- ipfs-data:/data/ipfs
ports:
- "4001:4001" - "5001:5001" - "8080:8080" networks:
- proofmode-net
profiles:
- with-ipfs
postgres:
image: postgres:16-alpine
container_name: proofmode-db
restart: unless-stopped
environment:
- POSTGRES_DB=proofmode
- POSTGRES_USER=proofmode
- POSTGRES_PASSWORD=${DB_PASSWORD:-changeme}
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- proofmode-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U proofmode"]
interval: 10s
timeout: 5s
retries: 5
profiles:
- with-database
networks:
proofmode-net:
driver: bridge
volumes:
ipfs-data:
postgres-data: