{"owner":"fullstackhero","repo":"dotnet-starter-kit","hasDocker":true,"hasCompose":true,"hasDockerfile":false,"composePath":"deploy/docker/docker-compose.yml","servicesCount":9,"services":[{"name":"postgres","image":"postgres:18-alpine","restart":"unless-stopped","environment":["POSTGRES_DB=fsh","POSTGRES_USER=fsh","POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required}"],"volumes":["pg_data:/var/lib/postgresql","./postgres-init:/docker-entrypoint-initdb.d:ro"]},{"name":"redis","image":"valkey/valkey:9.1.0-alpine","restart":"unless-stopped","command":"valkey-server --requirepass ${REDIS_PASSWORD:?REDIS_PASSWORD is required} --appendonly yes","environment":["REDIS_PASSWORD=${REDIS_PASSWORD}"],"volumes":["redis_data:/data"]},{"name":"rustfs","image":"rustfs/rustfs:1.0.0","restart":"unless-stopped","ports":["${FSH_S3_PORT:-9000}:9000"],"environment":["RUSTFS_ACCESS_KEY=${RUSTFS_ACCESS_KEY:?RUSTFS_ACCESS_KEY is required}","RUSTFS_SECRET_KEY=${RUSTFS_SECRET_KEY:?RUSTFS_SECRET_KEY is required}","RUSTFS_CONSOLE_ENABLE=true","RUSTFS_CORS_ALLOWED_ORIGINS=${FSH_ADMIN_URL},${FSH_DASHBOARD_URL}"],"volumes":["rustfs_data:/data"]},{"name":"rustfs-init","image":"amazon/aws-cli:2.37.3","restart":"no","command":"-c set -e\naws --endpoint-url http://rustfs:9000 s3api head-bucket --bucket fsh 2>/dev/null ||\n  aws --endpoint-url http://rustfs:9000 s3api create-bucket --bucket fsh\naws --endpoint-url http://rustfs:9000 s3api put-bucket-policy --bucket fsh --policy '{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetObject\"],\"Resource\":[\"arn:aws:s3:::fsh/public/*\"]}]}'\n","environment":["AWS_ACCESS_KEY_ID=${RUSTFS_ACCESS_KEY}","AWS_SECRET_ACCESS_KEY=${RUSTFS_SECRET_KEY}","AWS_DEFAULT_REGION=us-east-1"],"depends_on":["rustfs"]},{"name":"mailpit","image":"axllent/mailpit:v1.31.3","restart":"unless-stopped","ports":["127.0.0.1:${FSH_MAILPIT_PORT:-8025}:8025"]},{"name":"migrator","image":"fsh/dbmigrator:local","build":{"context":"../..","dockerfile":"src/Host/FSH.Starter.DbMigrator/Dockerfile"},"restart":"no","command":"apply --seed","environment":["DOTNET_ENVIRONMENT=Production","DatabaseOptions__ConnectionString=Host=postgres;Database=fsh;Username=fsh;Password=${POSTGRES_PASSWORD};GSS Encryption Mode=Disable","CachingOptions__Redis=redis,password=${REDIS_PASSWORD}","JwtOptions__SigningKey=${JWT_SIGNING_KEY:?JWT_SIGNING_KEY is required}","Seed__DefaultAdminPassword=${SEED_ADMIN_PASSWORD:?SEED_ADMIN_PASSWORD is required}"],"depends_on":["postgres"]},{"name":"api","image":"fsh/api:local","build":{"context":"../..","dockerfile":"src/Host/FSH.Starter.Api/Dockerfile"},"restart":"unless-stopped","ports":["${FSH_API_PORT:-8080}:8080"],"environment":["DOTNET_ENVIRONMENT=Production","ASPNETCORE_URLS=http://+:8080","DatabaseOptions__ConnectionString=Host=postgres;Database=fsh;Username=fsh;Password=${POSTGRES_PASSWORD};GSS Encryption Mode=Disable","CachingOptions__Redis=redis,password=${REDIS_PASSWORD}","JwtOptions__SigningKey=${JWT_SIGNING_KEY}","Seed__DefaultAdminPassword=${SEED_ADMIN_PASSWORD}","Storage__Provider=s3","Storage__S3__ServiceUrl=http://rustfs:9000","Storage__S3__PresignServiceUrl=${FSH_S3_PUBLIC_URL:?FSH_S3_PUBLIC_URL is required}","Storage__S3__PublicBaseUrl=${FSH_S3_PUBLIC_URL}/fsh","Storage__S3__AccessKey=${RUSTFS_ACCESS_KEY}","Storage__S3__SecretKey=${RUSTFS_SECRET_KEY}","Storage__S3__Bucket=fsh","Storage__S3__ForcePathStyle=true","MailOptions__Smtp__Host=${FSH_SMTP_HOST:-mailpit}","MailOptions__Smtp__Port=${FSH_SMTP_PORT:-1025}","MailOptions__Smtp__Security=${FSH_SMTP_SECURITY:-None}","MailOptions__Smtp__UserName=${FSH_SMTP_USERNAME:-}","MailOptions__Smtp__Password=${FSH_SMTP_PASSWORD:-}","MailOptions__From=${FSH_MAIL_FROM:-no-reply@fsh.local}","AllowedHosts=*","HangfireOptions__UserName=${HANGFIRE_USERNAME:?HANGFIRE_USERNAME is required}","HangfireOptions__Password=${HANGFIRE_PASSWORD:?HANGFIRE_PASSWORD is required}","CorsOptions__AllowedOrigins__0=${FSH_ADMIN_URL:?FSH_ADMIN_URL is required}","CorsOptions__AllowedOrigins__1=${FSH_DASHBOARD_URL:?FSH_DASHBOARD_URL is required}","FrontendOptions__AllowedOrigins__0=${FSH_ADMIN_URL}","FrontendOptions__AllowedOrigins__1=${FSH_DASHBOARD_URL}","FrontendOptions__DefaultOrigin=${FSH_DASHBOARD_URL}","OpenTelemetryOptions__Exporter__Otlp__Endpoint=${OTEL_EXPORTER_OTLP_ENDPOINT:-}"],"depends_on":["postgres","redis","rustfs","rustfs-init","migrator"]},{"name":"admin","image":"fsh/admin:local","build":{"context":"../../clients/admin"},"restart":"unless-stopped","ports":["${FSH_ADMIN_PORT:-8081}:80"],"environment":["FSH_API_URL=${FSH_API_URL:?FSH_API_URL is required}","FSH_DASHBOARD_URL=${FSH_DASHBOARD_URL}","FSH_DEFAULT_TENANT=${FSH_DEFAULT_TENANT:-root}"],"depends_on":["migrator"]},{"name":"dashboard","image":"fsh/dashboard:local","build":{"context":"../../clients/dashboard"},"restart":"unless-stopped","ports":["${FSH_DASHBOARD_PORT:-8082}:80"],"environment":["FSH_API_URL=${FSH_API_URL}","FSH_DEFAULT_TENANT=${FSH_DEFAULT_TENANT:-root}"],"depends_on":["migrator"]}],"exposedPorts":["9000","8025","8080","8081","8082"],"dockerRunCommand":"docker run -d --name dotnet-starter-kit -p 9000:9000 --restart always postgres:18-alpine","podmanRunCommand":"podman run -d --name dotnet-starter-kit -p 9000:9000 --restart always postgres:18-alpine","skopeoInspectCommand":"skopeo inspect docker://docker.io/library/postgres:18-alpine","orasPullCommand":"oras pull postgres:18-alpine","registryMeta":{"provider":"dockerhub","image":"library/postgres","canonicalImage":"docker.io/library/postgres:18-alpine","latestTag":"18-alpine","cliCommands":{"dockerRun":"docker run -d --name dotnet-starter-kit -p 9000:9000 --restart always postgres:18-alpine","dockerPull":"docker pull postgres:18-alpine","podmanRun":"podman run -d --name dotnet-starter-kit -p 9000:9000 --restart always postgres:18-alpine","skopeoInspect":"skopeo inspect docker://docker.io/library/postgres:18-alpine","orasPull":"oras pull postgres:18-alpine","composeYaml":"services:\n  dotnet-starter-kit:\n    image: postgres:18-alpine\n    restart: unless-stopped\n    ports:\n      - \"9000:9000\""}}}