浏览代码

pass flags to `serve` to allow setting allowed-origins + host and port

* resolves: https://github.com/jmorganca/ollama/issues/300 and
https://github.com/jmorganca/ollama/issues/282

* example usage:
```
ollama serve --port 9999 --allowed-origins "http://foo.example.com,http://192.0.0.1"
```
cmiller01 1 年之前
父节点
当前提交
fb593b7bfc
共有 2 个文件被更改,包括 26 次插入10 次删除
  1. 22 8
      cmd/cmd.go
  2. 4 2
      server/routes.go

+ 22 - 8
cmd/cmd.go

@@ -513,23 +513,33 @@ func generateBatch(cmd *cobra.Command, model string) error {
 	return nil
 	return nil
 }
 }
 
 
-func RunServer(_ *cobra.Command, _ []string) error {
-	host := os.Getenv("OLLAMA_HOST")
-	if host == "" {
-		host = "127.0.0.1"
+func RunServer(cmd *cobra.Command, _ []string) error {
+	host, err := cmd.Flags().GetString("host")
+	if err != nil {
+		return errors.New("host unset")
+	}
+	if os.Getenv("OLLAMA_HOST") != "" {
+		host = os.Getenv("OLLAMA_HOST")
+	}
+	port, err := cmd.Flags().GetString("port")
+	if err != nil {
+		return errors.New("port unset")
 	}
 	}
 
 
-	port := os.Getenv("OLLAMA_PORT")
-	if port == "" {
-		port = "11434"
+	if os.Getenv("OLLAMA_PORT") != "" {
+		port = os.Getenv("OLLAMA_PORT")
 	}
 	}
 
 
 	ln, err := net.Listen("tcp", fmt.Sprintf("%s:%s", host, port))
 	ln, err := net.Listen("tcp", fmt.Sprintf("%s:%s", host, port))
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
+	extraOrigins, err := cmd.Flags().GetStringSlice("allowed-origins")
+	if err != nil {
+		return err
+	}
 
 
-	return server.Serve(ln)
+	return server.Serve(ln, extraOrigins)
 }
 }
 
 
 func startMacApp(client *api.Client) error {
 func startMacApp(client *api.Client) error {
@@ -621,6 +631,10 @@ func NewCLI() *cobra.Command {
 		RunE:    RunServer,
 		RunE:    RunServer,
 	}
 	}
 
 
+	serveCmd.Flags().String("port", "11434", "Port to listen on, may also use OLLAMA_PORT environment variable")
+	serveCmd.Flags().String("host", "127.0.0.1", "Host listen address, may also use OLLAMA_HOST environment variable")
+	serveCmd.Flags().StringSlice("allowed-origins", []string{}, "Additional allowed CORS origins (outside of localhost), specify as comma-separated list")
+
 	pullCmd := &cobra.Command{
 	pullCmd := &cobra.Command{
 		Use:     "pull MODEL",
 		Use:     "pull MODEL",
 		Short:   "Pull a model from a registry",
 		Short:   "Pull a model from a registry",

+ 4 - 2
server/routes.go

@@ -301,11 +301,11 @@ func CopyModelHandler(c *gin.Context) {
 	}
 	}
 }
 }
 
 
-func Serve(ln net.Listener) error {
+func Serve(ln net.Listener, extraOrigins []string) error {
 	config := cors.DefaultConfig()
 	config := cors.DefaultConfig()
 	config.AllowWildcard = true
 	config.AllowWildcard = true
 	// only allow http/https from localhost
 	// only allow http/https from localhost
-	config.AllowOrigins = []string{
+	allowedOrigins := []string{
 		"http://localhost",
 		"http://localhost",
 		"http://localhost:*",
 		"http://localhost:*",
 		"https://localhost",
 		"https://localhost",
@@ -315,6 +315,8 @@ func Serve(ln net.Listener) error {
 		"https://127.0.0.1",
 		"https://127.0.0.1",
 		"https://127.0.0.1:*",
 		"https://127.0.0.1:*",
 	}
 	}
+	allowedOrigins = append(allowedOrigins, extraOrigins...)
+	config.AllowOrigins = allowedOrigins
 
 
 	r := gin.Default()
 	r := gin.Default()
 	r.Use(cors.New(config))
 	r.Use(cors.New(config))