hX{e=y7K
z>$|r1@TE5Vrf$@)Z$@t9`A{8oKg%K|A#2{K0o}Hzqgi)tw`GiSRvUT3-N@;aSp&z1
zJ1ncawmDpDGW|X`et7OllZS?fpN4&?i?{_^AN>-k!ivtY^k}?+=tEhC>JpnMD&=#U
zzOdv4>i`r#H3%Meva61yH*6f
z?iixRz9vITjus=qzJ=wTx10L4){Ho$Ug4j*SOgk2f@!jh)th8nJ2xh~TpjE6F08VQ
zS&`^%d|>f9QpcKWeSJOQPiWO(P$si{2=_x@?{m94$>qi=^_14o>Osc97i7@q{qD^l
z&)-QjL}kk0arolqWc74LF2@cGCM+r{XqGuExI22e{o!8^mia(*zM{KRxClj6cc(kW
z61;D=o`tE9V)*EniN-O9+w&D@rbWlLNYC8wi%%!TZ#u&o*Lzi=L}li$6v|kuD{@ey
zeumh7u3$dJK)!+`*DcoCIDgr0%7b`ZC}y4UQRPJN_Nf-UUXe82qK+3LU~G5vh@n5b
zT0w>f@syql}xGeY1^zEHYC;fn5%{3RKB%e1OirasKv+k)z|e{=h6+
z>!3l5HvG`}VU#&OMul0SXTy-^zpcaQRlYTYAXc68ZD;7h-T1O)(}aeKCy=}#rc~mY
zEBF#XRYs57cQHApU5Wvf24m6sIy!f#M8js54mEQSIey|4%1&nfRJ5|RBsOb&X>yk@Vw>zd-Gx*G@-ZE)H@n-r;%7X*9mZxuPv
z5PSLKWHeS!O%jC;--ZSpf{GpI>@K0pHR9yguMy({MbP82J=JQ!mNg+~XklDsGnQao
zU*$YRG)}%)rSE67wJ#Oq&KD2ewh6^wuOk?onHc6OOgem)2Nh0D8MvS9aE&Rv+ae(C
zaf?~q3>H>g9=%tK%oBKKd3*Cj59eg>YOS_eFI-LfOZh(fgT+|qdnF}s8+52KRi1yF
zS3w=nkNNv#BO@}Lld;WzI|49jt!^6YpHgC*e%l}N7C3v90A8{h%F?HYj
z<+v6$McDHs(r;Y)&yYw7$B}h{WZAQ2^TNm9lT9Mu6|6Gq5=}a*HXKAln(yRSC(`@@
zxAD8(iBmS#FJVHJ!OmshUGr*8@b5%*U0RN!j()jWmAPus`KTW3~_Bpuq$AEUBJTYE{_*9x0Mm?6OM)5C?*}RN@hn5
zQc1$MkNcF7!;)^c%B;~_G$Lva>(3|Pl$No)i3?B6wegS(^^4fC?@v1rENmUd=-wq%
zrCoks0ax(VI4PW#I@h^TLDK|HZ2k4glMgp&h^;7Ht>P~z_cmx*(ltW>w1}06MtIZY
zhWB#U+a%Pq@@Qe0J1yJNRl;PKJGq8;v(3*I9!M#wvUqc@bzGU4sp9pu$YOmmz7X4PG!1HXJ?=b7A%IY1uF@
zd+cMI&*U3Y!Vp9;N^ds7u3+Ur0bY%L>i+~>E-hfI9Wcp++GWiosIy{bw*PW$kU72A
zItJD6fiyfVq~H(}7tli(a<9dMXVDrd_YdCikGI6wSYvT?^d>a;@;c08V634AjUNpj
z>bs-7{3GPYC7$L5A#ewB~2W@W}jbn{CGzGt+E#{Gr8Vs%+en4b*IcsT!U^q{jO>9JMtlX^}vb5DAr
zm#!({OMB#z0h*P9>h|aIzG%nOq9|mYX;bOVnVZ!f^V)fGa_`%>4*=z^m%OJ6i9bc|
zh17D`LA{e#bq`~3gA5JP+xK%zJ)mD61uAZ>`26V%@
zXjb_vP2GySVV&(bnRVfT5T9jv&KBtJWA1Sfd{lyWj?$Hf2W*)v**J+YYUeSBIL-33
z>~`?ZSsd%qYmYA}zP?yB&sgysYUDvIn7@oSeIoDEB+WXgq%$c>#EuA-o&G&e6@!h8
z%vjYIPy7>Gi(_H>n3mKXShq5Jreq>)k5+9Fs
z2e#;R7ZYrhzrS-yNy$5|c?SQEoWX{W5MHuC&*|R!P~BgDpN@nvkJb&~K
z>R&y2^j3PJw#E3=D;|M(^T?s|@78SNt*MBLC7va?FJ03E`!nd!XsPE(IeB?m()%Z~
zBmv#MKe(XMRHW$S1t%6VRyG*dQpIiP7)S&6A$|hf8ETkm!+#FGpNd!*3&S&^5edc4
zsgnZ(16w`eP6Iqaxr2Fjc7Vy|>JZ6>|R9NypgESaa#+#3Vl
zIj4h{MWK($5%F=+kH-7r`ohadpkDwm!#ffJzi$*aT@J021@NjwHzz-y7PBHK03Wdn
zQi!r5gC;#7bGiD}q&H5%@;eYqV-JQd^7l)3;0~oD5TH52Rd-XD6!htR5aqlL0C4*A
zzpb(+HqPNjS3rAWcJr6``99|1fK)VM=o$?8c31gQW}g^O%NUwk8hzyGq=TaY(jF7@
zX`<5L4qc+ZpM#-_#6v?|GqY9xHHV^d#HlCPDzHePhAZ8{vw^@9*d&+Y)F*mi_a14(
zp1zV)&|)!ZOT|KfCDUqDtAdILZh>@69|-`q&n_jL9o=TiugjiE%Onc
zaOgjjVVDbR69a{sGhDB<&kB&8epMdyg4X|=f0d_?ts=e^t%?vUs-5ToQNKP2yR-GJGE)TuA@V0|`dPwJ2-+|qjEIdydm0BrIm2Au5Z1K^kma6DP1{YNcf
zH`TEU6(vwG-uSU4?D?@8rFa(?<_Z862T~=985J}RT_OetApT|8PFVYq@~!&0EX^HZ
zpr#{8crEc|{tsCSy)cU%xJrTP1ESqIMLu$vvT{ls^>RAGFaR)X_>r)*-Pdd|8BVQN
zl7s=h-*z+6Z&@*nactROb=4v>rmo*@KEUs*q!u7E;wHQ{U6rMg&P}#Ofh^!IGB&$)
zMY>a0>iA^@cN;!D!-^je3jwnlWX|>%Wx{p8hS~tVjt5*@kGXH=qn4TMKZL^p?v2(u
z#f+~spr%6^n;N7Cv_|;1GOY0bK^?ky=^Nfbka~}%avQGS_a+~Xdv8#`wkrd%?(n@3
ztD3J+hp7Tqpvqy)CHgK-f)s}sQ#%?I2?BP{&X$z;5~kEBbdF<_^$?(yq
z2tcw#xhwJ;D2Kfd|*1qnxF)!5sU#K-N6AhN9QXidyYSp2ahEnh8Y11k#`3L`Ukd<`
zMdjYkpW?tSJfjN!%Hh}mYLX83iF@_=JQewk6^_=E8tX79Q1PpnbuTqxf}Jc}YIsr@
zePr)6#0-!MgMMWMWty^7{zua8at!*H9C45tlAuOOQ9U47(*qA@M`R7987QncKYL&A
z_o{$QM#BN;ny>^(oA-dwt}3+zd13VYhx-qu9T9J`E}U!EFWE&4IJz0@{VeJ>nGU<4
zlCTPJ3?6GGpERyA|co-lUZKZohrS>gHfp
zjY~s5(Qkz|H-OgLL>&liIE{@pY{|yW$LJc3{2{ICL3xZauxohS$Hus)%1%yVI3BOB
z+)5spwFc4%Q@7n?!VJLNm4{%gBOZO_v96INneh!Bo0xfv^zdy{Zl3V3UEHlE8G`%(
zv!U<)9-=o);c^!P24=wIIAkp<2vEGe_7tm`jS5z`k(v*$l=R(aXNhh5(5W%emxDJ5
zNx*6Wx}@653yc9yrKB9jacZu4C6t^X67pp!%g~aX0@gg95`G1W5Wb$_X>qmO1Z?s3
zziiUE)>6##-5+=fckmW}qK!~5C8-RTP7L`*KjQ+P^<<-|J1BBmCnb*3OMQ0YyB&Zk$=xf)=GQr$B4zZ=Q&HJo;V`HVgwe&Q?-V#$-#~aCFJ)nEc=RECusjofs
zc;A~6y|tj%&W@=&u=+_^D4yjX07@gQ?JBBW^V}%Pf&JSQ512fr`rxG3#vNw0d`F`$
z1&Na8!$WyT3~wrIcpIb@_|hT}VD6ZrirPfauo8_h5igudGi-&bX24KVeEoXo#!5da
z0bqWcr%oGsSx>p+0^vS0D221j_V`wm@Z_WlbfjcyB6jxdxTXaXFL5rYMy_8CiMl3I
z_IhSftV95%%z%-UtNYe-rO7pPl-i=)kR|Ryi?A1)Q;IF)`05{zOw^9oM!X?SbY6(p
zwEqvx+_MP;vjygJbhoEo7#xqRiR+#H0D9_DD&jrE98g#GQ$7~&?+>g&^wh+-Xc2EO
z@2BA3hS608Bc6Zn<;AAlR-IS~;@CYR{J6*C$ZrPr{UaO_%`|QkO+R7ri|Xe_)X-pA
zeM-$g_rUe6_OdUw=X_b~jN)<(LdR>=@Y4u;7)g*L#iRXV2oz|IKQG>Ui=(MH?oId@n
w)fe6NrP^N&%@n<}wy=Z#=_>UFi}@pZ{MVN;5)dr`^GN}t%O;nq44fbQACa5EIsgCw
literal 0
HcmV?d00001
diff --git a/templates/open-webui/docker-compose.yml b/templates/open-webui/docker-compose.yml
new file mode 100644
index 00000000..005048ed
--- /dev/null
+++ b/templates/open-webui/docker-compose.yml
@@ -0,0 +1,39 @@
+version: '3.8'
+services:
+
+ ollama:
+ volumes:
+ - ollama:/root/.ollama
+ container_name: ollama
+ networks:
+ - dokploy-network
+ pull_policy: always
+ tty: true
+ restart: unless-stopped
+ image: ollama/ollama:${OLLAMA_DOCKER_TAG-latest}
+
+ open-webui:
+ image: ghcr.io/open-webui/open-webui:${WEBUI_DOCKER_TAG-main}
+ container_name: open-webui
+ networks:
+ - dokploy-network
+ volumes:
+ - open-webui:/app/backend/data
+ depends_on:
+ - ollama
+ environment:
+ - 'OLLAMA_BASE_URL=http://ollama:11434'
+ - 'WEBUI_SECRET_KEY='
+ restart: unless-stopped
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.${HASH}.rule=Host(`${OPEN_WEBUI_HOST}`)"
+ - "traefik.http.services.${HASH}.loadbalancer.server.port=${OPEN_WEBUI_PORT}"
+
+networks:
+ dokploy-network:
+ external: true
+
+volumes:
+ ollama: {}
+ open-webui: {}
diff --git a/templates/open-webui/index.ts b/templates/open-webui/index.ts
new file mode 100644
index 00000000..9607285e
--- /dev/null
+++ b/templates/open-webui/index.ts
@@ -0,0 +1,22 @@
+import {
+ generateHash,
+ generateRandomDomain,
+ type Template,
+ type Schema,
+} from "../utils";
+
+export function generate(schema: Schema): Template {
+ const mainServiceHash = generateHash(schema.projectName);
+ const randomDomain = generateRandomDomain(schema);
+ const envs = [
+ `OPEN_WEBUI_HOST=${randomDomain}`,
+ "OPEN_WEBUI_PORT=8080",
+ `HASH=${mainServiceHash}`,
+ 'OLLAMA_DOCKER_TAG=latest',
+ 'WEBUI_DOCKER_TAG=main'
+ ];
+
+ return {
+ envs,
+ };
+}
diff --git a/templates/templates.ts b/templates/templates.ts
index a4b1a995..153b2ba5 100644
--- a/templates/templates.ts
+++ b/templates/templates.ts
@@ -318,4 +318,18 @@ export const templates: TemplateData[] = [
tags: ["hosting"],
load: () => import("./glitchtip/index").then((m) => m.generate),
},
+ {
+ id: 'open-webui',
+ name: 'Open WebUI',
+ version: 'latest',
+ description: 'Open WebUI is a free and open source chatgpt alternative. Open WebUI is an extensible, feature-rich, and user-friendly self-hosted WebUI designed to operate entirely offline. It supports various LLM runners, including Ollama and OpenAI-compatible APIs. The template include ollama and webui services.',
+ logo: 'open-webui.png',
+ links: {
+ github: 'https://github.com/open-webui/open-webui',
+ website: 'https://openwebui.com/',
+ docs: 'https://docs.openwebui.com/',
+ },
+ tags: ['chat'],
+ load: () => import('./open-webui/index').then((m) => m.generate),
+ }
];
From 59d662396e6037026801579c2d1f52ab7c0351a3 Mon Sep 17 00:00:00 2001
From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Date: Thu, 4 Jul 2024 00:39:11 -0600
Subject: [PATCH 11/18] fix(git): set 22 port in git add host
---
server/utils/providers/git.ts | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/server/utils/providers/git.ts b/server/utils/providers/git.ts
index 9c91ca19..e49867e7 100644
--- a/server/utils/providers/git.ts
+++ b/server/utils/providers/git.ts
@@ -87,7 +87,6 @@ const addHostToKnownHosts = async (repositoryURL: string) => {
throw error;
}
};
-
const sanitizeRepoPathSSH = (input: string) => {
const SSH_PATH_RE = new RegExp(
[
@@ -113,7 +112,7 @@ const sanitizeRepoPathSSH = (input: string) => {
return {
user: found.groups?.user ?? "git",
domain: found.groups?.domain,
- port: Number(found.groups?.port ?? 22),
+ port: 22,
owner: found.groups?.owner ?? "",
repo: found.groups?.repo,
get repoPath() {
From b7cc3283e204d910281c2e31c740d03369aea122 Mon Sep 17 00:00:00 2001
From: Andrey Kucherenko
Date: Thu, 4 Jul 2024 12:27:45 +0300
Subject: [PATCH 12/18] chore(review): update code based on code review
---
templates/open-webui/docker-compose.yml | 2 --
templates/open-webui/index.ts | 4 ++--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/templates/open-webui/docker-compose.yml b/templates/open-webui/docker-compose.yml
index 005048ed..457a60bd 100644
--- a/templates/open-webui/docker-compose.yml
+++ b/templates/open-webui/docker-compose.yml
@@ -4,7 +4,6 @@ services:
ollama:
volumes:
- ollama:/root/.ollama
- container_name: ollama
networks:
- dokploy-network
pull_policy: always
@@ -14,7 +13,6 @@ services:
open-webui:
image: ghcr.io/open-webui/open-webui:${WEBUI_DOCKER_TAG-main}
- container_name: open-webui
networks:
- dokploy-network
volumes:
diff --git a/templates/open-webui/index.ts b/templates/open-webui/index.ts
index 9607285e..79e3b35e 100644
--- a/templates/open-webui/index.ts
+++ b/templates/open-webui/index.ts
@@ -12,8 +12,8 @@ export function generate(schema: Schema): Template {
`OPEN_WEBUI_HOST=${randomDomain}`,
"OPEN_WEBUI_PORT=8080",
`HASH=${mainServiceHash}`,
- 'OLLAMA_DOCKER_TAG=latest',
- 'WEBUI_DOCKER_TAG=main'
+ 'OLLAMA_DOCKER_TAG=0.1.47',
+ 'WEBUI_DOCKER_TAG=0.3.7'
];
return {
From f77de1bc52d59a703f268e8d5d89f46963d2bfdb Mon Sep 17 00:00:00 2001
From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Date: Thu, 4 Jul 2024 10:43:30 -0600
Subject: [PATCH 13/18] Update templates.ts
---
templates/templates.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/templates/templates.ts b/templates/templates.ts
index 65510b69..49bd596c 100644
--- a/templates/templates.ts
+++ b/templates/templates.ts
@@ -321,7 +321,7 @@ export const templates: TemplateData[] = [
{
id: 'open-webui',
name: 'Open WebUI',
- version: 'latest',
+ version: 'v0.3.7',
description: 'Open WebUI is a free and open source chatgpt alternative. Open WebUI is an extensible, feature-rich, and user-friendly self-hosted WebUI designed to operate entirely offline. It supports various LLM runners, including Ollama and OpenAI-compatible APIs. The template include ollama and webui services.',
logo: 'open-webui.png',
links: {
From 22328eeb83b450c4c8226c67d7e45e955ca2f637 Mon Sep 17 00:00:00 2001
From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Date: Fri, 5 Jul 2024 12:24:13 -0600
Subject: [PATCH 14/18] fix(registry): remove login on self hosted
---
server/api/services/registry.ts | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/server/api/services/registry.ts b/server/api/services/registry.ts
index 29c421b5..da124c7a 100644
--- a/server/api/services/registry.ts
+++ b/server/api/services/registry.ts
@@ -33,8 +33,10 @@ export const createRegistry = async (input: typeof apiCreateRegistry._type) => {
});
}
- const loginCommand = `echo ${input.password} | docker login ${input.registryUrl} --username ${input.username} --password-stdin`;
- await execAsync(loginCommand);
+ if (newRegistry.registryType === "cloud") {
+ const loginCommand = `echo ${input.password} | docker login ${input.registryUrl} --username ${input.username} --password-stdin`;
+ await execAsync(loginCommand);
+ }
return newRegistry;
});
From c8f14c322ed40f19293e53528e47494d32c43351 Mon Sep 17 00:00:00 2001
From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Date: Fri, 5 Jul 2024 13:43:56 -0600
Subject: [PATCH 15/18] chore(version): bump version
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 0283474f..5883df66 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "dokploy",
- "version": "v0.3.0",
+ "version": "v0.3.1",
"private": true,
"license": "Apache-2.0",
"type": "module",
From 45aae520d8fe45b21bea7a1cf7919af7a9ea564b Mon Sep 17 00:00:00 2001
From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
Date: Fri, 5 Jul 2024 22:48:32 -0600
Subject: [PATCH 16/18] refacto(github): comment github app
---
components/dashboard/settings/github/github-setup.tsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/components/dashboard/settings/github/github-setup.tsx b/components/dashboard/settings/github/github-setup.tsx
index 2b20fa87..99f71e6d 100644
--- a/components/dashboard/settings/github/github-setup.tsx
+++ b/components/dashboard/settings/github/github-setup.tsx
@@ -95,7 +95,7 @@ export const GithubSetup = () => {