diff --git a/cmd/init.go b/cmd/init.go index 245f5f026..2d5ae79cc 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -48,6 +48,7 @@ var ( imageVariant string schedulerVolume string schedulerOverrideBroadcastHostPort string + redisStack bool ) var InitCmd = &cobra.Command{ @@ -97,6 +98,9 @@ dapr init --image-variant # Folder .dapr will be created in folder pointed to by dapr init --runtime-path +# Initialize Dapr with Redis Stack for RediSearch/vector store support +dapr init --redis-stack + # See more at: https://docs.dapr.io/getting-started/ `, Run: func(cmd *cobra.Command, args []string) { @@ -230,6 +234,7 @@ func init() { InitCmd.Flags().StringVarP(&imageVariant, "image-variant", "", "", "The image variant to use for the Dapr runtime, for example: mariner") InitCmd.Flags().StringVarP(&schedulerVolume, "scheduler-volume", "", "dapr_scheduler", "Self-hosted only. Specify a volume for the scheduler service data directory.") InitCmd.Flags().StringVarP(&schedulerOverrideBroadcastHostPort, "scheduler-override-broadcast-host-port", "", "", "Self-hosted only. Specify the scheduler broadcast host and port, for example: 192.168.42.42:50006. If not specified, it uses localhost:50006 (6060 for Windows).") + InitCmd.Flags().BoolVarP(&redisStack, "redis-stack", "", false, "Use redis-stack-server image instead of standard Redis for RediSearch support") InitCmd.Flags().BoolP("help", "h", false, "Print this help message") InitCmd.Flags().StringArrayVar(&values, "set", []string{}, "set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)") InitCmd.Flags().String("image-registry", "", "Custom/private docker image repository URL") diff --git a/pkg/standalone/standalone.go b/pkg/standalone/standalone.go index 2a1e81ca2..07ab6157c 100644 --- a/pkg/standalone/standalone.go +++ b/pkg/standalone/standalone.go @@ -59,18 +59,20 @@ const ( githubContainerRegistryName = "ghcr" // used when DAPR_DEFAULT_IMAGE_REGISTRY is not set. - daprDockerImageName = "docker.io/daprio/dapr" - redisDockerImageName = "docker.io/redis:6" - zipkinDockerImageName = "docker.io/openzipkin/zipkin" + daprDockerImageName = "docker.io/daprio/dapr" + redisDockerImageName = "docker.io/redis:6" + redisStackDockerImageName = "docker.io/redis/redis-stack-server:latest" + zipkinDockerImageName = "docker.io/openzipkin/zipkin" // used when DAPR_DEFAULT_IMAGE_REGISTRY is set as GHCR. dockerURI = "docker.io" ghcrURI = "ghcr.io" // used when DAPR_DEFAULT_IMAGE_REGISTRY is set as GHCR or image-registry flag is set. - daprGhcrImageName = "dapr/dapr" - redisGhcrImageName = "dapr/3rdparty/redis:6" - zipkinGhcrImageName = "dapr/3rdparty/zipkin" + daprGhcrImageName = "dapr/dapr" + redisGhcrImageName = "dapr/3rdparty/redis:6" + redisStackGhcrImageName = "redis/redis-stack-server:latest" + zipkinGhcrImageName = "dapr/3rdparty/zipkin" // DaprPlacementContainerName is the container name of placement service. DaprPlacementContainerName = "dapr_placement" @@ -145,6 +147,7 @@ type initInfo struct { imageVariant string schedulerVolume *string schedulerOverrideBroadcastHostPort *string + redisStack bool } type daprImageInfo struct { @@ -186,7 +189,7 @@ func isSchedulerIncluded(runtimeVersion string) (bool, error) { } // Init installs Dapr on a local machine using the supplied runtimeVersion. -func Init(runtimeVersion, dashboardVersion string, dockerNetwork string, slimMode bool, imageRegistryURL string, fromDir string, containerRuntime string, imageVariant string, daprInstallPath string, schedulerVolume *string, schedulerOverrideBroadcastHostPort *string) error { +func Init(runtimeVersion, dashboardVersion string, dockerNetwork string, slimMode bool, imageRegistryURL string, fromDir string, containerRuntime string, imageVariant string, daprInstallPath string, schedulerVolume *string, schedulerOverrideBroadcastHostPort *string, redisStack bool) error { var err error var bundleDet bundleDetails containerRuntime = strings.TrimSpace(containerRuntime) @@ -318,6 +321,7 @@ func Init(runtimeVersion, dashboardVersion string, dockerNetwork string, slimMod imageVariant: imageVariant, schedulerVolume: schedulerVolume, schedulerOverrideBroadcastHostPort: schedulerOverrideBroadcastHostPort, + redisStack: redisStack, } for _, step := range initSteps { // Run init on the configurations and containers. @@ -462,9 +466,15 @@ func runRedis(wg *sync.WaitGroup, errorChan chan<- error, info initInfo) { // do not create container again if it exists. args = append(args, "start", redisContainerName) } else { + ghcrImage := redisGhcrImageName + dockerImage := redisDockerImageName + if info.redisStack { + ghcrImage = redisStackGhcrImageName + dockerImage = redisStackDockerImageName + } imageName, err = resolveImageURI(daprImageInfo{ - ghcrImageName: redisGhcrImageName, - dockerHubImageName: redisDockerImageName, + ghcrImageName: ghcrImage, + dockerHubImageName: dockerImage, imageRegistryURL: info.imageRegistryURL, imageRegistryName: defaultImageRegistryName, })