Skip to main content

Prerequisites

Hardware
ResourceMinimumRecommended
RAM4 GB8 GB
CPU2 cores4 cores
Disk20 GB50 GB
Software
  • Linux host: RHEL 8/9, Rocky Linux, AlmaLinux, Ubuntu 22.04+, or any Docker-capable system
  • Docker 24+ or Podman 4+ (for container deployment)
  • Network access to target hosts on port 22 (SSH)
  • curl and openssl available on the host
Network ports
PortServiceDirection
3000Frontend (dev/Docker)Inbound
8000Backend APIInbound
22SSH to scan targetsOutbound
443/80Frontend (production)Inbound

Deployment options

Production deployment

For production, use the Docker Compose overlay that enables HTTPS, FIPS mode, resource limits, and JSON logging:
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
SettingDevelopmentProduction
OPENWATCH_DEBUGtruefalse
OPENWATCH_FIPS_MODEfalsetrue
OPENWATCH_REQUIRE_HTTPSfalsetrue
OPENWATCH_SSH_STRICT_MODEfalsetrue
Frontend ports3000:80443:443, 80:80
Resource limitsNonePer-service CPU/memory limits
Log driverDefaultJSON file with rotation
Restart policyunless-stoppedalways
Before deploying to production:
  1. Place TLS certificates in security/certs/ and keys in security/keys/.
  2. Set all environment variables to strong, unique values.
  3. Configure firewall rules to restrict access to ports 8000 and 3000/443.

Post-install checklist

  • Backend health check passes: curl http://localhost:8000/health
  • Frontend loads in browser
  • Default admin password changed
  • SSH credentials configured for target hosts
  • TLS certificates in place (production only)
  • Log rotation configured for /openwatch/logs/
  • Firewall rules restrict access to exposed ports

Environment variables

VariableDescriptionExample
POSTGRES_PASSWORDPostgreSQL passwordRandom 32+ character string
REDIS_PASSWORDRedis authentication passwordRandom 32+ character string
OPENWATCH_SECRET_KEYApplication secret for session signingopenssl rand -hex 32
MASTER_KEYMaster encryption keyopenssl rand -hex 32
OPENWATCH_ENCRYPTION_KEYData-at-rest encryption keyopenssl rand -hex 32

Troubleshooting

Check logs for database connection issues:
docker logs openwatch-backend --tail 50
docker exec openwatch-db pg_isready -U openwatch -d openwatch
The backend may still be initializing. Wait 30 seconds and retry. Check that the backend container is running: docker ps | grep openwatch-backend.
docker logs openwatch-worker --tail 50
docker exec openwatch-redis redis-cli -a "${REDIS_PASSWORD}" ping
Add the :Z suffix to volume mounts in the compose file.