From 2eb5c331a168b55b0f08a1399bd609bcf87d589e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ere=20M=C3=A4nnist=C3=B6?= Date: Sun, 14 Jul 2024 15:23:54 +0300 Subject: [PATCH 1/3] Clarify error message for naming validation --- components/dashboard/project/add-application.tsx | 2 +- components/dashboard/project/add-compose.tsx | 2 +- components/dashboard/project/add-database.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/dashboard/project/add-application.tsx b/components/dashboard/project/add-application.tsx index ecf2a1af..aacce06f 100644 --- a/components/dashboard/project/add-application.tsx +++ b/components/dashboard/project/add-application.tsx @@ -40,7 +40,7 @@ const AddTemplateSchema = z.object({ }) .regex(/^[a-z](?!.*--)([a-z0-9-]*[a-z])?$/, { message: - "App name supports letters, numbers, '-' and can only start and end letters, and does not support continuous '-'", + "App name supports lowercase letters, numbers, '-' and can only start and end letters, and does not support continuous '-'", }), description: z.string().optional(), }); diff --git a/components/dashboard/project/add-compose.tsx b/components/dashboard/project/add-compose.tsx index fd769c91..6daa1539 100644 --- a/components/dashboard/project/add-compose.tsx +++ b/components/dashboard/project/add-compose.tsx @@ -48,7 +48,7 @@ const AddComposeSchema = z.object({ }) .regex(/^[a-z](?!.*--)([a-z0-9-]*[a-z])?$/, { message: - "App name supports letters, numbers, '-' and can only start and end letters, and does not support continuous '-'", + "App name supports lowercase letters, numbers, '-' and can only start and end letters, and does not support continuous '-'", }), description: z.string().optional(), }); diff --git a/components/dashboard/project/add-database.tsx b/components/dashboard/project/add-database.tsx index 7ab90107..c573ed09 100644 --- a/components/dashboard/project/add-database.tsx +++ b/components/dashboard/project/add-database.tsx @@ -66,7 +66,7 @@ const baseDatabaseSchema = z.object({ }) .regex(/^[a-z](?!.*--)([a-z0-9-]*[a-z])?$/, { message: - "App name supports letters, numbers, '-' and can only start and end letters, and does not support continuous '-'", + "App name supports lowercase letters, numbers, '-' and can only start and end letters, and does not support continuous '-'", }), databasePassword: z.string(), dockerImage: z.string(), From 4ff178ea34059cfaadba155f1725e355a0c6fef3 Mon Sep 17 00:00:00 2001 From: Krzysztof Durek <21038648+kdurek@users.noreply.github.com> Date: Sun, 14 Jul 2024 20:28:37 +0200 Subject: [PATCH 2/3] feat: add umami template --- public/templates/umami.png | Bin 0 -> 4179 bytes templates/templates.ts | 14 +++++++++ templates/umami/docker-compose.yml | 46 +++++++++++++++++++++++++++++ templates/umami/index.ts | 24 +++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 public/templates/umami.png create mode 100644 templates/umami/docker-compose.yml create mode 100644 templates/umami/index.ts diff --git a/public/templates/umami.png b/public/templates/umami.png new file mode 100644 index 0000000000000000000000000000000000000000..de2f7615bd66089c2bcf814f3f46ffee1a124f4d GIT binary patch literal 4179 zcmds)`8yO|*#Bq23?WSRoe#;9oe?sY$Sz9O#%@$HC`=<`EFnAD_hqtANG8g@i;#UM z`<5ly%QOA*{r(5f56=(xxzBc;bDjIXuKWEu5hg}DbTk|^004ka_pX*H+1LCtD2Uuv zzmIn&JD|6zjs}4EjcbEE&~moWbulyqh?4tI05HrAK=E%2**M4s0DyCW05I7D|IOus z{@-d%F8KfV|7|oMO~wEKR~vM-)bINNcd{@~SvokoBvQBp!ondUZvt6s->`a#+|3W~ zJ%peQg^f9$rby?=7y z|I1ntTeB-ItE{{`td@>BPR&|V&dK_fHkr_L`S%=t3Zu-whGKnT5)%QsG(#*f&^s_Q zz#RzjFi@BjLs?)mqgZq%13Uz8K}iu~;kF#o%um}c%7<>(6TD7AZ_j5A#0#2pDDk7A z;3^s@SJn4!YP=>}_yfd3c#^gel&cj{4g%?v%Xw)mFi`z39L=o-G6s5JYZ4NecI~7g zZ|LcvaKAk}Z|`5k%S(BA`HwX<=)L24+~uzUwds#f#;Y8=h_;`PwkJOr=iDyJe!00( zloK%JR>b&ot^s>~v=a$Q$q!t5-}E==wfl7KtD{NR9Nb@wre@o>Eal^$v)J{)Jjbq> zkJ*!hgLU4n2w;3mFeD`@iH=iY`+|JM%3HHr&(SswOz*|rZ42bGLnAsnJ7d-Uo@DvX zogNMw|I5Lj^JCU$9w|3%zrmNH^d%b(r=Gm$R(*Ncj0fLv`(A9E;pPL2nGZPMNi@D~ z+3@oB=iSCDFxC944MTYcZ(wyf;Zg; zvQ^2!Sn{2J1@W$NqHZ(TqDujSshYb+O3dsDhJ{ZX`DW2^p}P&ob6+sO6rRnnjaTwD zVUK?rN-k}dy>HwsE%Pe^25AV4+vFiNQy_Y%=|*x$$%#G;U9wotBM=C&x6edg7?PgN zdc8`P82`moco_S0y)R7``+Jl5y3k7d-eOx0W;LxpL(%n-?}KF1p{KL;zX>Ui>i?c? zVGq|CQvhepBQnT{CyGI0%dd`TX>%PU5`*-+aB1Gfc<)u z=`tR|vp)VF>7)mTqXu(3B3aFJJMK8_>>swMv+t1u_IqbqQAQSpFi4XLwR)X0ow_~( zm-7|rL=9@ad!x{=c~!Lrd;H8%*YqIwZHu}*?()yEPAwbUZz)>QG@ncL<^2e`I&BS1 zCv>~UZCF5zgGOmH_w4M;5yKN+d+GNSIE;ZkU+t`qYm-87pVM^&ADClruChw^+1wbLXQ( zkBp6JC$y-$jIg;?n%gjS4o(^>&R!!rG`}1zeV|a3Su;rw2~LQ55Q4nT;amGa$Wy7G zZR>DjxJ{PinvGeV_GsevO`+?mcpbdK#0QO24?aAa_Hd=>qdKiN0K??u)Y)KHCW4Sq zScs*z!(SQfB4V(&w>L07u0@J!Hy=Zw@fQfT8yy{`ouU$N66qE| z^?H!#>9yI)N=rdgzjx>7HFgfZMeR(JkeHPuAZJ%JXBe;loag4Jpc;)jBR^+x~CV^>dtYY}MecQ2? zuxwH1CFFl1-%2g#)!UDY2HSJwozzx|wtfg5GBuxXR~p8qq(Pkq;v2;_3M&ssJS3h> zyJyFnicvNaQjh_4^ZqJMp7!_7->Nu#$Y0JKjtwRvxvecDyc0L+T|BXB~{Jg z%XLrL#IWE47>U)K@1>O#)cnz-pOS73W<;uIji)Z=3#S#1J`tc%T)RIU17C0XzISLH z^IoLi?~-w?4W4Xjan|3S6cG)&(CG^!pCd11EjfnnNIb( zRpwPPSHV3DrWI{cv;fhw?)eZgrks)QrxtlVQ2%Le+8w;!lAt;zt-DRgFM2T;cx#yb zMp0j`pCfHhVZ!ZggXyAlo-Cf!SA6LF9@u9cH|k zCe^|@mUD(IBLl@!Z8-dMGcPIQ9c0-zb9QkzS{rj(wVoF?_`Rb&&d4s9{tfUh^#_`o z9v;kcJmPX5SCEe8nVrvkW>2wKzeO}lG>_;g0(|S?4LGqk!o+WNOkJPL_CM%p)+!r7 zP_q;^pX@Jr_wQyB$LVz@R!aC(mtAr|hZ|nK+cuJ8bJo-(S^qKJNM&4khaWm6srBb2%RO4DMUoUy^^nsV}q4d7e@-IfGjtCh|`kUyOOT5HF62Th^C zVUlqs5F0H|XT>~758)I&d+3Cce>Wj8{-=s}2fgrIlADElzN)1CYkJF zm`n(OKNgM4`J%Pmel=|^K99;%V*P8m#I=Adb%l+~%@Nt@1P12ixx17TwmGbl2X9M* zr}XJB)=#e$lrHP3WP{2pMpX^S?~bzPPx)yHFs}YVo%=Y9{^fXKTHsQCe*04K zRc{acCMxagD-?iTWS-!jKq5#FzI7Qt3BFpmr7%pvwM}9?rMx*?tHh<&L6yO~p)g3n zHG%GzA79Vb7^!%xx-WYn@3U<&OGm#gPXW;n7*JZ{!X6sF&=Zk8IV%LhXj|~Aj-64` zcE-{wK|)7(cO`jCcPPD{Mk7=_MlEzrAQ<$NfiMjbPc+g*?@5{8Cld=Z(I~#FIZlap zUP>@X3BG4Qy$kl}yql8k)kdetmJuTbfhe_SqdIB5si6Zbw>|q)q@z!}*g}Kzq)zq> zk`P3i%A`jpVAneBgg?Kv7Xg^s&C#8i3UdFqy1`D@!MhtQ(bMMMI+ z(sp8|&YR%n78*;Ij?{r`>@KZXn*?+mRFpLh9T5yJip~i*>-j4B3m>xByl{5*((*II zYH%#0$3$g|3d7&)!dD?BWDTWzlG6%e-eKfIo*Y)HjhJ(l2%Do56j zUA(vpGQdRu7IDSQ=s3RHgR0)E29vh*k9Ql-pQSteHP91%dWCBuR)CqAxigb_TU0@Yl-}2sh(6sQwnUmcqBpMwj-dJR1X=zCtT=WI}$;jn)5=Ve9UuJG35 zrfk0-)TEU9=i3vWn}IVQ&@EkaHw9Ak%EdT%@wuY*^h`FKCl7QFf3(q9c@tSl}q&F3+=r^*yq9WqbD zX|q}YViYb*zC0(r*fRHO_2;-SF06LE60MskJk-EJrk~O*2GgrL!j1_4aiT354v}?U zD>}TdMrLNV2c%@}6$D+`ffj>i+){RkH|biQXK+xME02-pKR&B}u>~Lyi8q(zm$F6~ z?Q#<()Gf>40T+Hg%sv}1MqS+2eOg;Rs7RR`g2U`w=HG{2_l}Vk JQNu3ie*m&@+GYR% literal 0 HcmV?d00001 diff --git a/templates/templates.ts b/templates/templates.ts index b41a2028..1d4ac7d7 100644 --- a/templates/templates.ts +++ b/templates/templates.ts @@ -359,5 +359,19 @@ export const templates: TemplateData[] = [ }, tags: ['email'], load: () => import('./doublezero/index').then((m) => m.generate), + }, + { + id: 'umami', + name: 'Umami', + version: 'v2.12.1', + description: 'Umami is a simple, fast, privacy-focused alternative to Google Analytics.', + logo: 'umami.png', + links: { + github: 'https://github.com/umami-software/umami', + website: 'https://umami.is', + docs: 'https://umami.is/docs', + }, + tags: ['analytics'], + load: () => import('./umami/index').then((m) => m.generate), } ]; diff --git a/templates/umami/docker-compose.yml b/templates/umami/docker-compose.yml new file mode 100644 index 00000000..17e05bf5 --- /dev/null +++ b/templates/umami/docker-compose.yml @@ -0,0 +1,46 @@ +services: + umami: + image: ghcr.io/umami-software/umami:postgresql-latest + restart: always + healthcheck: + test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] + interval: 5s + timeout: 5s + retries: 5 + depends_on: + db: + condition: service_healthy + ports: + - ${UMAMI_PORT} + networks: + - dokploy-network + environment: + DATABASE_URL: postgresql://umami:umami@db:5432/umami + DATABASE_TYPE: postgresql + APP_SECRET: ${APP_SECRET} + labels: + - "traefik.enable=true" + - "traefik.http.routers.${HASH}.rule=Host(`${UMAMI_HOST}`)" + - "traefik.http.services.${HASH}.loadbalancer.server.port=${UMAMI_PORT}" + db: + image: postgres:15-alpine + restart: always + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 5s + retries: 5 + networks: + - dokploy-network + volumes: + - db-data:/var/lib/postgresql/data + environment: + POSTGRES_DB: umami + POSTGRES_USER: umami + POSTGRES_PASSWORD: umami + +networks: + dokploy-network: + external: true +volumes: + db-data: diff --git a/templates/umami/index.ts b/templates/umami/index.ts new file mode 100644 index 00000000..38ada270 --- /dev/null +++ b/templates/umami/index.ts @@ -0,0 +1,24 @@ +import { + generateHash, + generateRandomDomain, + type Template, + type Schema, + generateBase64, +} from "../utils"; + +export function generate(schema: Schema): Template { + const mainServiceHash = generateHash(schema.projectName); + const randomDomain = generateRandomDomain(schema); + const randomSecret = generateBase64(); + + const envs = [ + `UMAMI_HOST=${randomDomain}`, + "UMAMI_PORT=3000", + `APP_SECRET=${randomSecret}`, + `HASH=${mainServiceHash}`, + ]; + + return { + envs, + }; +} From f684ba7b1f5b976ad9e9cee7abc85e0eec436c2e Mon Sep 17 00:00:00 2001 From: Krzysztof Durek <21038648+kdurek@users.noreply.github.com> Date: Sun, 14 Jul 2024 20:42:26 +0200 Subject: [PATCH 3/3] fix: change umami version --- templates/umami/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/umami/docker-compose.yml b/templates/umami/docker-compose.yml index 17e05bf5..43d843af 100644 --- a/templates/umami/docker-compose.yml +++ b/templates/umami/docker-compose.yml @@ -1,6 +1,6 @@ services: umami: - image: ghcr.io/umami-software/umami:postgresql-latest + image: ghcr.io/umami-software/umami:postgresql-v2.12.1 restart: always healthcheck: test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]