Clojure:如何为服务器设置特定的 url?

Clojure: How can I set up a specific url for a server?

我是 clojure 的新手,我正在尝试使用它来托管具有特定 url 的服务器。

在网上做了一些调查,我得到了如下信息。

(ns rest-demo.core
  (:require [org.httpkit.server :as server]
            [compojure.core :refer :all]
            [compojure.route :as route]
            [ring.middleware.defaults :refer :all]
            [clojure.string :as str]
            [clojure.data.json :as json])
  (:gen-class))

(defn hello-name
  [req]
  {:status  200
   :headers {"Content-Type" "text/html"}
   :body (str "Hello " (:name (:params req)))})

(defroutes app-routes
  (GET "/hello" [] hello-name)
  (route/not-found "Error, page not found!"))

(defn -main
  "This is our main entry point"
  [& args]
  (let [port (Integer/parseInt (or (System/getenv "PORT") "3000"))]
    ; Run the server with Ring.defaults middleware
    (server/run-server (wrap-defaults #'app-routes site-defaults) {:port port})))

运行 lein run 并访问 127.0.0.1:3000/hello 我可以访问 API.

我将如何使用我选择的 url 来托管它?

提前致谢!

一个URL*由几个部分组成,其中最重要的两个是

  1. 托管它的计算机的主机名
  2. 特定页面的路径。

看起来你已经处理了#2。 要解决#1,您可以采用两种方法:

  1. 在 Internet 上找到一个好地方来托管您的程序。像 Heroku
  2. 想办法在 Internet 上为您的笔记本电脑命名。像 https://portmap.io/

当你解决了这些问题后,我们就回到这个问题的编程部分。默认情况下,httpskit 将使用任何主机名回答请求。所以你不需要做任何事情并且可以接受默认值。

'*' 这里有 URL 和 URI 之间的区别,我在掩饰它们

在您选择的特定 URL 上托管它基本上意味着,您希望可以在该特定 URL 上访问您的 Web 应用程序。为此,您首先必须从 ICANN 认可的域名注册商(如 Namecheap、domain.com、Godaddy)付费购买域名(例如 .com),然后将其配置为将其重定向到服务器你从哪里晒太阳的服务。在这种情况下,它会是您机器的 public IP 地址(或者如 @Arthur_Ulfeldt 提到的那样使用端口映射或 ngrok 之类的东西)。

当然不推荐这样做,因为您的机器可能没有良好的正常运行时间或可靠的连接。这就是您将其托管在云解决方案上的原因。无论是像 Heroku 这样的东西(一个 PaaS,这对你来说是最好的选择,因为它真的很容易为 Clojure 部署)或者来自任何提供商的一些计算实例(AWS ec2 或 GCP 计算引擎或 Azure VM)只需在那里克隆你的应用程序, 运行 你的服务器在那里并将你的所有请求重定向到那里。