{"owner":"HeyPuter","repo":"puter","hasDocker":true,"hasCompose":true,"hasDockerfile":false,"composePath":"docker-compose.yml","servicesCount":10,"services":[{"name":"valkey","image":"valkey/valkey:8-alpine","restart":"unless-stopped","command":"sh -c valkey-server \\\n  --port 6379 \\\n  --cluster-enabled yes \\\n  --cluster-config-file /data/nodes.conf \\\n  --cluster-node-timeout 5000 \\\n  --cluster-require-full-coverage no \\\n  --cluster-announce-ip valkey \\\n  --cluster-announce-port 6379 \\\n  --cluster-announce-bus-port 16379 \\\n  --appendonly yes \\\n  --save \"60 1\" &\nSERVER_PID=$$!\nuntil valkey-cli -p 6379 PING > /dev/null 2>&1; do sleep 0.5; done\nif ! valkey-cli -p 6379 CLUSTER NODES | grep -q '0-16383'; then\n  valkey-cli -p 6379 CLUSTER ADDSLOTSRANGE 0 16383\nfi\nwait $$SERVER_PID\n","volumes":["./puter/data/valkey:/data:z"]},{"name":"mariadb","image":"mariadb:11","restart":"unless-stopped","environment":["MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD:-root-change-me}","MARIADB_DATABASE=${MARIADB_DATABASE:-puter}","MARIADB_USER=${MARIADB_USER:-puter}","MARIADB_PASSWORD=${MARIADB_PASSWORD:-puter-change-me}"],"volumes":["./puter/data/mariadb:/var/lib/mysql:z"]},{"name":"dynamo","image":"amazon/dynamodb-local:latest","restart":"unless-stopped","command":"-jar DynamoDBLocal.jar -sharedDb -dbPath /home/dynamodblocal/data","volumes":["./puter/data/dynamo:/home/dynamodblocal/data:z"]},{"name":"s3","image":"rustfs/rustfs:latest","restart":"unless-stopped","environment":["RUSTFS_ACCESS_KEY=${S3_ACCESS_KEY:-puter}","RUSTFS_SECRET_KEY=${S3_SECRET_KEY:-puter-secret-change-me}"],"volumes":["./puter/data/s3:/data:z"]},{"name":"s3-init","image":"amazon/aws-cli:latest","restart":"no","environment":["AWS_ACCESS_KEY_ID=${S3_ACCESS_KEY:-puter}","AWS_SECRET_ACCESS_KEY=${S3_SECRET_KEY:-puter-secret-change-me}","AWS_DEFAULT_REGION=us-east-1"],"depends_on":["s3"]},{"name":"ollama","image":"ollama/ollama:latest","restart":"unless-stopped","volumes":["./puter/data/ollama:/root/.ollama:z"]},{"name":"ollama-init","image":"ollama/ollama:latest","restart":"no","environment":["OLLAMA_HOST=http://ollama:11434","OLLAMA_DEFAULT_MODEL=${OLLAMA_DEFAULT_MODEL:-tinyllama}"],"depends_on":["ollama"]},{"name":"puter","image":"ghcr.io/heyputer/puter:main","restart":"unless-stopped","environment":["PUID=1000","PGID=1000"],"volumes":["./puter/config:/etc/puter:z","./puter/data/puter:/var/puter:z"],"depends_on":["valkey","mariadb","dynamo","s3-init"]},{"name":"puter-smtp","image":"ghcr.io/heyputer/puter:main","restart":"unless-stopped","command":"node -r ./dist/src/backend/telemetry.js ./dist/src/backend/smtp/index.js","ports":["${SMTP_PORT:-25}:2525"],"environment":["PUID=1000","PGID=1000"],"volumes":["./puter/config:/etc/puter:z"],"depends_on":["puter"]},{"name":"caddy","image":"caddy:2.11-alpine","restart":"unless-stopped","ports":["${HTTP_PORT:-80}:80"],"volumes":["./caddy/Caddyfile:/etc/caddy/Caddyfile:ro,z","./puter/tls:/etc/caddy/tls:ro,z","./puter/data/caddy:/data:z"],"depends_on":["puter"]}],"exposedPorts":["25","80"],"dockerRunCommand":"docker run -d --name puter -p 25:25 --restart always ghcr.io/heyputer/puter:main","podmanRunCommand":"podman run -d --name puter -p 25:25 --restart always ghcr.io/heyputer/puter:main","skopeoInspectCommand":"skopeo inspect docker://ghcr.io/heyputer/puter:main","orasPullCommand":"oras pull ghcr.io/heyputer/puter:main","registryMeta":{"provider":"ghcr","image":"ghcr.io/heyputer/puter","canonicalImage":"ghcr.io/heyputer/puter:main","latestTag":"main","multiArch":["linux/amd64","linux/arm64"],"lastUpdated":"2026-10-22T22:50:14.153Z","cliCommands":{"dockerRun":"docker run -d --name puter -p 25:25 --restart always ghcr.io/heyputer/puter:main","dockerPull":"docker pull ghcr.io/heyputer/puter:main","podmanRun":"podman run -d --name puter -p 25:25 --restart always ghcr.io/heyputer/puter:main","skopeoInspect":"skopeo inspect docker://ghcr.io/heyputer/puter:main","orasPull":"oras pull ghcr.io/heyputer/puter:main","composeYaml":"services:\n  puter:\n    image: ghcr.io/heyputer/puter:main\n    restart: unless-stopped\n    ports:\n      - \"25:25\""}}}