mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-11-08 08:05:07 +00:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ff700c036e |
@@ -0,0 +1,39 @@
|
||||
package req_helper
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
func newExternalHTTPClient(transport *http.Transport, timeout time.Duration) *http.Client {
|
||||
if transport == nil {
|
||||
transport = http.DefaultTransport.(*http.Transport)
|
||||
}
|
||||
verified := transport.Clone()
|
||||
if verified.TLSClientConfig == nil {
|
||||
verified.TLSClientConfig = &tls.Config{}
|
||||
} else {
|
||||
verified.TLSClientConfig = verified.TLSClientConfig.Clone()
|
||||
}
|
||||
verified.TLSClientConfig.InsecureSkipVerify = false
|
||||
verified.TLSClientConfig.ServerName = ""
|
||||
verified.DialTLS = nil
|
||||
verified.DialTLSContext = nil
|
||||
return &http.Client{
|
||||
Timeout: timeout,
|
||||
Transport: verified,
|
||||
CheckRedirect: checkExternalRedirect,
|
||||
}
|
||||
}
|
||||
|
||||
func checkExternalRedirect(req *http.Request, via []*http.Request) error {
|
||||
if len(via) >= 10 {
|
||||
return errors.New("stopped after 10 redirects")
|
||||
}
|
||||
if len(via) > 0 && via[len(via)-1].URL.Scheme == "https" && req.URL.Scheme != "https" {
|
||||
return errors.New("refusing HTTPS redirect to an insecure scheme")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -2,7 +2,6 @@ package req_helper
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"io"
|
||||
"net"
|
||||
@@ -21,10 +20,7 @@ import (
|
||||
)
|
||||
|
||||
func HandleGet(url string) (*http.Response, error) {
|
||||
client := &http.Client{
|
||||
Timeout: time.Second * 300,
|
||||
}
|
||||
client.Transport = loadRequestTransport()
|
||||
client := newExternalHTTPClient(loadRequestTransport(), time.Second*300)
|
||||
defer client.CloseIdleConnections()
|
||||
|
||||
req, err := http.NewRequestWithContext(context.Background(), "GET", url, nil)
|
||||
@@ -53,8 +49,9 @@ func HandleGet(url string) (*http.Response, error) {
|
||||
|
||||
func HandleRequest(url, method string, timeout int) (int, []byte, error) {
|
||||
transport := xpack.MultiNodeProvider.LoadRequestTransport()
|
||||
client := http.Client{Timeout: time.Duration(timeout) * time.Second, Transport: transport}
|
||||
return HandleRequestWithClient(&client, url, method, timeout)
|
||||
client := newExternalHTTPClient(transport, time.Duration(timeout)*time.Second)
|
||||
defer client.CloseIdleConnections()
|
||||
return HandleRequestWithClient(client, url, method, timeout)
|
||||
}
|
||||
|
||||
func HandleRequestWithClient(client *http.Client, url, method string, timeout int) (int, []byte, error) {
|
||||
@@ -136,7 +133,8 @@ func RequestFile(url, method string, timeout int) (io.ReadCloser, context.Cancel
|
||||
}
|
||||
}()
|
||||
transport := xpack.MultiNodeProvider.LoadRequestTransport()
|
||||
client := http.Client{Timeout: time.Duration(timeout) * time.Second, Transport: transport}
|
||||
client := newExternalHTTPClient(transport, time.Duration(timeout)*time.Second)
|
||||
defer client.CloseIdleConnections()
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeout)*time.Second)
|
||||
request, err := http.NewRequestWithContext(ctx, method, url, nil)
|
||||
if err != nil {
|
||||
@@ -156,7 +154,6 @@ func RequestFile(url, method string, timeout int) (io.ReadCloser, context.Cancel
|
||||
|
||||
func loadRequestTransport() *http.Transport {
|
||||
return &http.Transport{
|
||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||
DialContext: (&net.Dialer{
|
||||
Timeout: 60 * time.Second,
|
||||
KeepAlive: 60 * time.Second,
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package req_helper
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
func newExternalHTTPClient(transport *http.Transport, timeout time.Duration) *http.Client {
|
||||
if transport == nil {
|
||||
transport = http.DefaultTransport.(*http.Transport)
|
||||
}
|
||||
verified := transport.Clone()
|
||||
if verified.TLSClientConfig == nil {
|
||||
verified.TLSClientConfig = &tls.Config{}
|
||||
} else {
|
||||
verified.TLSClientConfig = verified.TLSClientConfig.Clone()
|
||||
}
|
||||
verified.TLSClientConfig.InsecureSkipVerify = false
|
||||
verified.TLSClientConfig.ServerName = ""
|
||||
verified.DialTLS = nil
|
||||
verified.DialTLSContext = nil
|
||||
return &http.Client{
|
||||
Timeout: timeout,
|
||||
Transport: verified,
|
||||
CheckRedirect: checkExternalRedirect,
|
||||
}
|
||||
}
|
||||
|
||||
func checkExternalRedirect(req *http.Request, via []*http.Request) error {
|
||||
if len(via) >= 10 {
|
||||
return errors.New("stopped after 10 redirects")
|
||||
}
|
||||
if len(via) > 0 && via[len(via)-1].URL.Scheme == "https" && req.URL.Scheme != "https" {
|
||||
return errors.New("refusing HTTPS redirect to an insecure scheme")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -2,7 +2,6 @@ package req_helper
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"io"
|
||||
"net"
|
||||
@@ -17,7 +16,6 @@ import (
|
||||
|
||||
func HandleRequest(url, method string, timeout int) (int, []byte, error) {
|
||||
transport := &http.Transport{
|
||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||
DialContext: (&net.Dialer{
|
||||
Timeout: 60 * time.Second,
|
||||
KeepAlive: 60 * time.Second,
|
||||
@@ -42,7 +40,8 @@ func handleRequestWithTransport(url, method string, transport *http.Transport, t
|
||||
}
|
||||
}()
|
||||
|
||||
client := http.Client{Timeout: time.Duration(timeout) * time.Second, Transport: transport}
|
||||
client := newExternalHTTPClient(transport, time.Duration(timeout)*time.Second)
|
||||
defer client.CloseIdleConnections()
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeout)*time.Second)
|
||||
defer cancel()
|
||||
request, err := http.NewRequestWithContext(ctx, method, url, nil)
|
||||
@@ -65,7 +64,6 @@ func handleRequestWithTransport(url, method string, transport *http.Transport, t
|
||||
|
||||
func HandleGet(url string) (*http.Response, error) {
|
||||
transport := &http.Transport{
|
||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||
DialContext: (&net.Dialer{
|
||||
Timeout: 60 * time.Second,
|
||||
KeepAlive: 60 * time.Second,
|
||||
@@ -83,10 +81,7 @@ func HandleGetWithProxy(url string) (*http.Response, error) {
|
||||
}
|
||||
|
||||
func handleGetWithTransport(url string, transport *http.Transport) (*http.Response, error) {
|
||||
client := &http.Client{
|
||||
Timeout: time.Second * 300,
|
||||
}
|
||||
client.Transport = transport
|
||||
client := newExternalHTTPClient(transport, time.Second*300)
|
||||
defer client.CloseIdleConnections()
|
||||
|
||||
req, err := http.NewRequestWithContext(context.Background(), "GET", url, nil)
|
||||
|
||||
@@ -1147,12 +1147,6 @@ const message = {
|
||||
serviceAddressHelper:
|
||||
'Use the container address for container apps and the external address for host or external apps.',
|
||||
externalAddress: 'External address',
|
||||
deploymentNameHelper:
|
||||
'Application instance name, used for the installation directory and fixed after creation. Set an alias to change the display name.',
|
||||
deploymentAliasHelper:
|
||||
'Optional display name for the list. Leave empty to use the application name. Changing only the alias does not restart the container.',
|
||||
deploymentContainerNameHelper:
|
||||
'Docker container name. Defaults to the application name and can be set separately. Changing it recreates the container.',
|
||||
imageVersion: 'Image version',
|
||||
deployments: 'Model deployment',
|
||||
files: 'Model preparation',
|
||||
|
||||
@@ -1150,12 +1150,6 @@ const message = {
|
||||
serviceAddressHelper:
|
||||
'Use la dirección del contenedor para sus aplicaciones y la dirección externa para aplicaciones del host o externas.',
|
||||
externalAddress: 'Dirección externa',
|
||||
deploymentNameHelper:
|
||||
'Nombre de la instancia, usado en el directorio de instalación y fijo tras crearla. Configure un alias para cambiar el nombre mostrado.',
|
||||
deploymentAliasHelper:
|
||||
'Nombre opcional para la lista. Si se deja vacío, se muestra el nombre de la aplicación. Cambiar solo el alias no reinicia el contenedor.',
|
||||
deploymentContainerNameHelper:
|
||||
'Nombre del contenedor Docker. Por defecto coincide con la aplicación y puede configurarse por separado. Cambiarlo vuelve a crear el contenedor.',
|
||||
imageVersion: 'Versión de la imagen',
|
||||
deployments: 'Despliegue de modelos',
|
||||
files: 'Preparación de modelos',
|
||||
|
||||
@@ -1128,12 +1128,6 @@ const message = {
|
||||
serviceAddressHelper:
|
||||
'برای برنامههای کانتینری از آدرس کانتینر و برای برنامههای میزبان یا خارجی از آدرس خارجی استفاده کنید.',
|
||||
externalAddress: 'آدرس خارجی',
|
||||
deploymentNameHelper:
|
||||
'نام نمونهٔ برنامه برای پوشهٔ نصب استفاده می\u200cشود و پس از ایجاد قابل تغییر نیست. برای تغییر نام نمایشی، نام مستعار تعیین کنید.',
|
||||
deploymentAliasHelper:
|
||||
'نام نمایشی اختیاری برای فهرست. اگر خالی باشد، نام برنامه نمایش داده می\u200cشود. تغییر فقط نام مستعار، کانتینر را راه\u200cاندازی مجدد نمی\u200cکند.',
|
||||
deploymentContainerNameHelper:
|
||||
'نام کانتینر Docker به\u200cطور پیش\u200cفرض همان نام برنامه است و جداگانه قابل تنظیم است. تغییر آن کانتینر را دوباره ایجاد می\u200cکند.',
|
||||
imageVersion: 'نسخه ایمیج',
|
||||
deployments: 'استقرار مدل',
|
||||
files: 'آمادهسازی مدل',
|
||||
|
||||
@@ -1133,12 +1133,6 @@ const message = {
|
||||
serviceAddressHelper:
|
||||
'コンテナ内のアプリにはコンテナアドレスを、ホスト上または外部のアプリには外部アドレスを使用してください。',
|
||||
externalAddress: '外部アクセスアドレス',
|
||||
deploymentNameHelper:
|
||||
'アプリのインスタンス名です。インストール先ディレクトリに使用され、作成後は変更できません。表示名を変更するには別名を設定してください。',
|
||||
deploymentAliasHelper:
|
||||
'一覧の表示名(任意)。空欄の場合はアプリ名を表示します。別名のみの変更ではコンテナは再起動しません。',
|
||||
deploymentContainerNameHelper:
|
||||
'Docker コンテナ名です。初期値はアプリ名で、個別に設定できます。変更するとコンテナが再作成されます。',
|
||||
imageVersion: 'イメージバージョン',
|
||||
deployments: 'モデルデプロイ',
|
||||
files: 'モデル準備',
|
||||
|
||||
@@ -1120,12 +1120,6 @@ const message = {
|
||||
serviceAPIHelper: '이 서비스는 OpenAI 호환 API를 제공합니다.',
|
||||
serviceAddressHelper: '컨테이너 앱에는 컨테이너 주소를, 호스트 또는 외부 앱에는 외부 주소를 사용하세요.',
|
||||
externalAddress: '외부 접속 주소',
|
||||
deploymentNameHelper:
|
||||
'앱 인스턴스 이름으로, 설치 디렉터리에 사용되며 생성 후 변경할 수 없습니다. 표시 이름을 바꾸려면 별칭을 설정하세요.',
|
||||
deploymentAliasHelper:
|
||||
'목록에 표시할 이름입니다(선택 사항). 비워 두면 앱 이름을 표시합니다. 별칭만 변경하면 컨테이너가 재시작되지 않습니다.',
|
||||
deploymentContainerNameHelper:
|
||||
'Docker 컨테이너 이름입니다. 기본값은 앱 이름이며 별도로 설정할 수 있습니다. 변경하면 컨테이너가 다시 생성됩니다.',
|
||||
imageVersion: '이미지 버전',
|
||||
deployments: '모델 배포',
|
||||
files: '모델 준비',
|
||||
|
||||
@@ -1114,12 +1114,6 @@ const message = {
|
||||
serviceAPIHelper: 'ບໍລິການນີ້ໃຫ້ API ທີ່ເຂົ້າກັນໄດ້ກັບ OpenAI.',
|
||||
serviceAddressHelper: 'ແອັບໃນຄອນເທນເນີໃຊ້ທີ່ຢູ່ຄອນເທນເນີ; ແອັບໃນໂຮສ ຫຼື ພາຍນອກໃຊ້ທີ່ຢູ່ພາຍນອກ.',
|
||||
externalAddress: 'ທີ່ຢູ່ພາຍນອກ',
|
||||
deploymentNameHelper:
|
||||
'ຊື່ອິນສະແຕນຂອງແອັບ ໃຊ້ສຳລັບໂຟນເດີຕິດຕັ້ງ ແລະ ປ່ຽນບໍ່ໄດ້ຫຼັງສ້າງ. ຕັ້ງຊື່ຫຼິ້ນເພື່ອປ່ຽນຊື່ທີ່ສະແດງ.',
|
||||
deploymentAliasHelper:
|
||||
'ຊື່ສະແດງໃນລາຍການ ບໍ່ບັງຄັບ. ຖ້າປະວ່າງຈະໃຊ້ຊື່ແອັບ. ການປ່ຽນພຽງຊື່ຫຼິ້ນຈະບໍ່ເລີ່ມຄອນເທນເນີໃໝ່.',
|
||||
deploymentContainerNameHelper:
|
||||
'ຊື່ຄອນເທນເນີ Docker ເລີ່ມຕົ້ນເປັນຊື່ແອັບ ແລະ ຕັ້ງແຍກໄດ້. ການປ່ຽນຊື່ນີ້ຈະສ້າງຄອນເທນເນີໃໝ່.',
|
||||
imageVersion: 'ເວີຊັນອິມເມຈ',
|
||||
deployments: 'ການນຳໃຊ້ໂມເດວ',
|
||||
files: 'ການກະກຽມໂມເດວ',
|
||||
|
||||
@@ -1159,12 +1159,6 @@ const message = {
|
||||
serviceAddressHelper:
|
||||
'Gunakan alamat bekas untuk aplikasi dalam bekas dan alamat luaran untuk aplikasi hos atau luaran.',
|
||||
externalAddress: 'Alamat luaran',
|
||||
deploymentNameHelper:
|
||||
'Nama instans aplikasi, digunakan untuk direktori pemasangan dan tidak boleh diubah selepas penciptaan. Tetapkan alias untuk mengubah nama paparan.',
|
||||
deploymentAliasHelper:
|
||||
'Nama paparan pilihan untuk senarai. Biarkan kosong untuk menggunakan nama aplikasi. Mengubah alias sahaja tidak memulakan semula kontena.',
|
||||
deploymentContainerNameHelper:
|
||||
'Nama kontena Docker. Secara lalai sama dengan nama aplikasi dan boleh ditetapkan secara berasingan. Mengubahnya akan mencipta semula kontena.',
|
||||
imageVersion: 'Versi imej',
|
||||
deployments: 'Pengerahan model',
|
||||
files: 'Penyediaan model',
|
||||
|
||||
@@ -1154,12 +1154,6 @@ const message = {
|
||||
serviceAddressHelper:
|
||||
'Use o endereço do contêiner para aplicativos em contêineres e o endereço externo para aplicativos do host ou externos.',
|
||||
externalAddress: 'Endereço externo',
|
||||
deploymentNameHelper:
|
||||
'Nome da instância, usado no diretório de instalação e fixo após a criação. Defina um alias para alterar o nome exibido.',
|
||||
deploymentAliasHelper:
|
||||
'Nome opcional para a lista. Deixe vazio para usar o nome do aplicativo. Alterar apenas o alias não reinicia o contêiner.',
|
||||
deploymentContainerNameHelper:
|
||||
'Nome do contêiner Docker. Por padrão, usa o nome do aplicativo e pode ser definido separadamente. Alterá-lo recria o contêiner.',
|
||||
imageVersion: 'Versão da imagem',
|
||||
deployments: 'Implantação de modelos',
|
||||
files: 'Preparação de modelos',
|
||||
|
||||
@@ -1147,12 +1147,6 @@ const message = {
|
||||
serviceAddressHelper:
|
||||
'Для приложений в контейнерах используйте адрес контейнера, для приложений на хосте или вне его — внешний адрес.',
|
||||
externalAddress: 'Внешний адрес',
|
||||
deploymentNameHelper:
|
||||
'Имя экземпляра приложения используется для каталога установки и не меняется после создания. Для отображения другого имени задайте псевдоним.',
|
||||
deploymentAliasHelper:
|
||||
'Необязательное имя для списка. Если пусто, отображается имя приложения. Изменение только псевдонима не перезапускает контейнер.',
|
||||
deploymentContainerNameHelper:
|
||||
'Имя контейнера Docker. По умолчанию совпадает с именем приложения, но задаётся отдельно. При изменении контейнер создаётся заново.',
|
||||
imageVersion: 'Версия образа',
|
||||
deployments: 'Развертывание моделей',
|
||||
files: 'Подготовка моделей',
|
||||
|
||||
@@ -1155,12 +1155,6 @@ const message = {
|
||||
serviceAddressHelper:
|
||||
'Konteyner uygulamaları için konteyner adresini, ana makine veya harici uygulamalar için harici adresi kullanın.',
|
||||
externalAddress: 'Harici adres',
|
||||
deploymentNameHelper:
|
||||
'Uygulama örneğinin adı, kurulum dizininde kullanılır ve oluşturulduktan sonra değiştirilemez. Görünen adı değiştirmek için takma ad belirleyin.',
|
||||
deploymentAliasHelper:
|
||||
'Listede gösterilecek isteğe bağlı ad. Boş bırakılırsa uygulama adı kullanılır. Yalnızca takma adı değiştirmek konteyneri yeniden başlatmaz.',
|
||||
deploymentContainerNameHelper:
|
||||
'Docker konteyner adı. Varsayılan olarak uygulama adı kullanılır ve ayrı ayarlanabilir. Değiştirilirse konteyner yeniden oluşturulur.',
|
||||
imageVersion: 'İmaj sürümü',
|
||||
deployments: 'Model dağıtımı',
|
||||
files: 'Model hazırlığı',
|
||||
|
||||
@@ -1074,11 +1074,6 @@ const message = {
|
||||
serviceAPIHelper: '此服務提供 OpenAI 相容介面。',
|
||||
serviceAddressHelper: '容器內應用程式使用容器位址,本機或外部應用程式使用外部位址。',
|
||||
externalAddress: '外部存取位址',
|
||||
deploymentNameHelper: '應用程式執行個體名稱,用於安裝目錄,建立後無法修改。如需調整顯示名稱,請設定別名。',
|
||||
deploymentAliasHelper:
|
||||
'選填,用於清單顯示,可隨時修改;留空時顯示應用程式名稱。僅修改別名不會重新啟動容器。',
|
||||
deploymentContainerNameHelper:
|
||||
'Docker 容器名稱,預設與應用程式名稱相同,可另外設定。修改後會重新建立容器。',
|
||||
imageVersion: '映像版本',
|
||||
deployments: '模型部署',
|
||||
files: '模型準備',
|
||||
|
||||
@@ -1087,9 +1087,6 @@ const message = {
|
||||
serviceAPIHelper: '该服务提供 OpenAI 兼容接口。',
|
||||
serviceAddressHelper: '容器内应用使用容器地址,本机或外部应用使用外部地址。',
|
||||
externalAddress: '外部访问地址',
|
||||
deploymentNameHelper: '应用实例名称,用于安装目录,创建后不可修改。需要调整展示名称时,请设置别名。',
|
||||
deploymentAliasHelper: '选填,用于列表展示,可随时修改;留空时显示应用名称。仅修改别名不会重启容器。',
|
||||
deploymentContainerNameHelper: 'Docker 容器名称,默认与应用名称相同,可单独设置。修改后会重新创建容器。',
|
||||
imageVersion: '镜像版本',
|
||||
deployments: '模型部署',
|
||||
files: '模型准备',
|
||||
|
||||
Reference in New Issue
Block a user