2017-05-06 1 views
1

私は、フォームの要求をサポートしたいと思います:どのように知りません1.8クライアントを行くbitbucketサーバーを使用して「行く」をサポートするにはどうしますか?

git clone http://acme.dev:7600/scm/project/component 

componentを経由して取得できるのBitbucketのサーバーに保存されているgitのプロジェクトである

go get acme.com/component 

https://acme.com/component?go-get=1 
:それはHTTPS GETの( https://golang.org/cmd/go/#hdr-Remote_import_pathsあたりなど)を行いますので、 go getパラメータに基づいてコンポーネントを取得するには

応答では、以下を含むHTTP 200を期待:のBitbucket ServerのSSLの終了手順は、それを使用しているので

<head> 
    <meta name="go-import" content="acme.com/component git http://acme.dev:7600/scm/project/component"> 
</head> 

HAProxyは魅力的です。バックエンドが特定のURIに応答していることが検出された場合、HTTPレスポンスを返すためのモニタのURIのハックがありますが、異なるコンポーネント名を処理するのに十分な柔軟性はないと思います。

誰もがHAProxyやNGinxのような別のツールを使ってこれを処理する方法を知っていますか?

+0

githubのためのツールは、ソースコード内のマイナーチェンジで、ありますが、私はあなたがそれを使用することができると思いますビットバケットも。 (あなたは別のツールを使っているので)https://github.com/niemeyer/gopkg – fzerorubigd

+0

提案に感謝します。カスタムWebサーバーを構築することは間違いありませんが、私はリバースプロキシを他の多くのタスクに使用しています。コンポーネントの数を減らすようにしています。 –

+0

私はいくつかのnginxの投稿を参照してくださいhttp://stackoverflow.com/questions/26347516/using-go-get-on-a-personal-git-repo –

答えて

0

会話の目的や、HTTPレスポンスの柔軟な生成が有用なので、私はsginへの切り替えを使ってnginxを試してみました。設定ファイルの標準以外の部分はのBitbucketサーバーにアクセスしてくださいクライアントを指すようにルールがあります。

location ~ "^(/[^/]+)(/[^/]+)?" { 
    if ($arg_go-get = "1") { 
     return 200 '<html><head><meta name="go-import" content="acme.com$1$2 git ssh://acme.dev:7999$1$2"></head></html>'; 
    } 
} 
+0

質問の元のタイトルはHAProxyと明示的に参照されていますので、マイケルは答えに正当な主張をしていると思います。つまり、Nginxは、複数のプロジェクトやコンポーネントを柔軟に処理でき、その範囲内にある簡単な方法でNginxがすぐに使えるようになったと思います。 –

1

どのようにレスポンスをカスタマイズする必要があるかによって、LuaサポートでコンパイルされたHAProxyのみを使用することができます。ここでは、Lua 5.3.4でHAProxy 1.6.12を使用して、私は要求経路を取ってそのまま応答にドロップして、カスタマイズを行います - 本質的にどのパスもコピーされています。変更する必要がある場合はstring.gsub()を入力してください。

小型のLuaスクリプト:

-- /etc/haproxy/lua/custom-response.lua 

core.register_service("magic-endpoint", "http", function(applet) 
    local response = 
     "<head>\r\n" .. 
     " <meta name=\"go-import\" content=\"example.com" .. applet.path .. 
     " git http://example.dev:7600/scm/project" .. applet.path .. 
     "\">\r\n</head>\r\n"; 
    applet:set_status(200); 
    applet:add_header("Content-Length", string.len(response)); 
    applet:add_header("Content-Type", "text/whatevs"); 
    applet:start_response(); 
    applet:send(response); 
end) 

と設定から関連する行。私はちょうどバックエンドに要求をルーティングするためにホスト名を使用していますが、もちろんあなたが必要とするロジックを使用してそれを起動することができます。

-- /etc/haproxy.cfg 

global 
    lua-load /etc/haproxy/lua/custom-response.lua 

frontend main-frontend 
    mode http 
    bind :80 
    use_backend example if { hdr(host) -i example.com } 

backend example 
    mode http 
    http-request use-service lua.magic-endpoint 

そして、テスト:

$ curl -v http://example.com/project1 
* Hostname was NOT found in DNS cache 
* Trying 127.0.0.1... 
* Connected to example.com (127.0.0.1) port 80 (#0) 
> GET /project1 HTTP/1.1 
> User-Agent: curl/7.35.0 
> Host: example.com 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Content-Type: text/whatevs 
< Content-Length: 124 
< 
<head> 
    <meta name="go-import" content="example.com/project1 git http://example.dev:7600/scm/project/project1"> 
</head> 

合法的に思えます。

関連する問題