feat: Umami service
This commit is contained in:
parent
07708155ac
commit
046f738b7d
@ -6,6 +6,7 @@
|
|||||||
import N8n from './svg/services/N8n.svelte';
|
import N8n from './svg/services/N8n.svelte';
|
||||||
import NocoDb from './svg/services/NocoDB.svelte';
|
import NocoDb from './svg/services/NocoDB.svelte';
|
||||||
import PlausibleAnalytics from './svg/services/PlausibleAnalytics.svelte';
|
import PlausibleAnalytics from './svg/services/PlausibleAnalytics.svelte';
|
||||||
|
import Umami from './svg/services/Umami.svelte';
|
||||||
import UptimeKuma from './svg/services/UptimeKuma.svelte';
|
import UptimeKuma from './svg/services/UptimeKuma.svelte';
|
||||||
import VaultWarden from './svg/services/VaultWarden.svelte';
|
import VaultWarden from './svg/services/VaultWarden.svelte';
|
||||||
import VsCodeServer from './svg/services/VSCodeServer.svelte';
|
import VsCodeServer from './svg/services/VSCodeServer.svelte';
|
||||||
@ -52,4 +53,8 @@
|
|||||||
<a href="https://ghost.org" target="_blank">
|
<a href="https://ghost.org" target="_blank">
|
||||||
<Ghost />
|
<Ghost />
|
||||||
</a>
|
</a>
|
||||||
|
{:else if service.type === 'umami'}
|
||||||
|
<a href="https://umami.is" target="_blank">
|
||||||
|
<Umami />
|
||||||
|
</a>
|
||||||
{/if}
|
{/if}
|
||||||
|
85
src/lib/components/svg/services/Umami.svelte
Normal file
85
src/lib/components/svg/services/Umami.svelte
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
export let isAbsolute = false;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg
|
||||||
|
version="1.0"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="856.000000pt"
|
||||||
|
height="856.000000pt"
|
||||||
|
viewBox="0 0 856.000000 856.000000"
|
||||||
|
preserveAspectRatio="xMidYMid meet"
|
||||||
|
class={isAbsolute ? 'w-10 h-10 absolute top-0 left-0 -m-5' : 'w-8 mx-auto'}
|
||||||
|
>
|
||||||
|
<metadata> Created by potrace 1.11, written by Peter Selinger 2001-2013 </metadata>
|
||||||
|
<g
|
||||||
|
transform="translate(0.000000,856.000000) scale(0.100000,-0.100000)"
|
||||||
|
fill="currentColor"
|
||||||
|
stroke="none"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M4027 8163 c-2 -2 -28 -5 -58 -7 -50 -4 -94 -9 -179 -22 -19 -2 -48
|
||||||
|
-6 -65 -9 -47 -6 -236 -44 -280 -55 -22 -6 -49 -12 -60 -15 -34 -6 -58 -13
|
||||||
|
-130 -36 -38 -13 -72 -23 -75 -24 -29 -6 -194 -66 -264 -96 -49 -22 -95 -39
|
||||||
|
-102 -39 -7 0 -19 -7 -28 -15 -8 -9 -18 -15 -21 -14 -7 1 -197 -92 -205 -101
|
||||||
|
-3 -3 -21 -13 -40 -24 -79 -42 -123 -69 -226 -137 -94 -62 -246 -173 -280
|
||||||
|
-204 -6 -5 -29 -25 -52 -43 -136 -111 -329 -305 -457 -462 -21 -25 -41 -47
|
||||||
|
-44 -50 -4 -3 -22 -26 -39 -52 -18 -25 -38 -52 -45 -60 -34 -35 -207 -308
|
||||||
|
-259 -408 -13 -25 -25 -47 -28 -50 -11 -11 -121 -250 -159 -346 -42 -105 -114
|
||||||
|
-321 -126 -374 l-7 -30 -263 0 c-245 0 -268 -2 -321 -21 -94 -35 -171 -122
|
||||||
|
-191 -216 -9 -39 -8 -852 0 -938 9 -87 16 -150 23 -195 3 -19 6 -48 8 -65 3
|
||||||
|
-29 14 -97 22 -140 3 -11 7 -36 10 -55 3 -19 9 -51 14 -70 5 -19 11 -46 14
|
||||||
|
-60 29 -138 104 -401 145 -505 5 -11 23 -58 42 -105 18 -47 42 -105 52 -130
|
||||||
|
11 -25 21 -49 22 -55 3 -10 109 -224 164 -330 18 -33 50 -89 71 -124 22 -34
|
||||||
|
40 -64 40 -66 0 -8 104 -161 114 -167 6 -4 7 -8 3 -8 -4 0 4 -12 18 -27 14
|
||||||
|
-15 25 -32 25 -36 0 -5 6 -14 13 -21 6 -7 21 -25 32 -41 11 -15 34 -44 50 -64
|
||||||
|
17 -21 41 -52 55 -70 13 -18 33 -43 45 -56 11 -13 42 -49 70 -81 100 -118 359
|
||||||
|
-369 483 -469 34 -27 62 -53 62 -57 0 -5 6 -8 13 -8 7 0 19 -9 27 -20 8 -11
|
||||||
|
19 -20 26 -20 6 0 19 -9 29 -20 10 -11 22 -20 27 -20 5 0 23 -13 41 -30 18
|
||||||
|
-16 37 -30 44 -30 6 0 13 -4 15 -8 3 -8 186 -132 194 -132 2 0 27 -15 56 -34
|
||||||
|
132 -83 377 -207 558 -280 36 -15 74 -31 85 -36 62 -26 220 -81 320 -109 79
|
||||||
|
-23 191 -53 214 -57 14 -3 28 -7 31 -9 4 -2 20 -7 36 -9 16 -3 40 -8 54 -11
|
||||||
|
14 -3 36 -8 50 -11 14 -2 36 -7 50 -10 13 -3 40 -8 60 -10 19 -2 46 -7 60 -10
|
||||||
|
54 -10 171 -25 320 -40 90 -9 613 -12 636 -4 11 5 28 4 37 -1 9 -6 17 -6 17
|
||||||
|
-1 0 4 10 8 23 9 29 0 154 12 192 18 17 3 46 7 65 9 70 10 131 20 183 32 16 3
|
||||||
|
38 7 50 9 45 7 165 36 252 60 50 14 100 28 112 30 12 3 34 10 48 15 14 5 25 7
|
||||||
|
25 4 0 -4 6 -2 13 3 6 6 30 16 52 22 22 7 47 15 55 18 8 4 17 7 20 7 10 2 179
|
||||||
|
68 240 94 96 40 342 159 395 191 17 10 53 30 80 46 28 15 81 47 118 71 37 24
|
||||||
|
72 44 76 44 5 0 11 3 13 8 2 4 30 25 63 47 33 22 62 42 65 45 3 3 50 38 105
|
||||||
|
79 55 40 105 79 110 85 6 6 24 22 40 34 85 65 465 430 465 447 0 3 8 13 18 23
|
||||||
|
9 10 35 40 57 66 22 27 47 56 55 65 8 9 42 52 74 96 32 44 71 96 85 115 140
|
||||||
|
183 358 576 461 830 12 30 28 69 36 85 24 56 123 355 117 355 -3 0 -1 6 5 13
|
||||||
|
6 6 14 30 18 52 10 48 9 46 17 65 5 13 37 155 52 230 9 42 35 195 40 231 34
|
||||||
|
235 40 357 40 804 l0 420 -24 44 c-46 87 -143 157 -231 166 -19 2 -144 4 -276
|
||||||
|
4 l-242 1 -36 118 c-21 64 -46 139 -56 166 -11 27 -20 52 -20 57 0 5 -11 33
|
||||||
|
-25 63 -14 30 -25 58 -25 61 0 18 -152 329 -162 333 -5 2 -8 10 -8 18 0 8 -4
|
||||||
|
14 -10 14 -5 0 -9 3 -8 8 3 9 -40 82 -128 217 -63 97 -98 145 -187 259 -133
|
||||||
|
171 -380 420 -559 564 -71 56 -132 102 -138 102 -5 0 -10 3 -10 8 0 4 -25 23
|
||||||
|
-55 42 -30 19 -55 38 -55 43 0 4 -6 7 -13 7 -7 0 -22 8 -33 18 -11 9 -37 26
|
||||||
|
-59 37 -21 11 -44 25 -50 30 -41 37 -413 220 -540 266 -27 9 -61 22 -75 27
|
||||||
|
-14 5 -28 10 -32 11 -4 1 -28 10 -53 21 -25 11 -46 19 -48 18 -2 -1 -109 29
|
||||||
|
-137 40 -13 4 -32 9 -65 16 -5 1 -16 5 -22 9 -7 5 -13 6 -13 3 0 -2 -15 0 -32
|
||||||
|
5 -18 5 -44 11 -58 14 -14 3 -36 7 -50 10 -14 3 -50 9 -80 15 -30 6 -64 12
|
||||||
|
-75 14 -11 2 -45 6 -75 10 -30 4 -71 9 -90 12 -19 3 -53 6 -75 7 -22 1 -44 5
|
||||||
|
-50 8 -11 7 -542 9 -548 2z m57 -404 c7 10 436 8 511 -3 22 -3 60 -8 85 -11
|
||||||
|
25 -2 56 -6 70 -9 14 -2 43 -7 65 -10 38 -5 58 -9 115 -21 14 -3 34 -7 45 -9
|
||||||
|
11 -2 58 -14 105 -26 47 -12 92 -23 100 -25 35 -7 279 -94 308 -109 17 -9 34
|
||||||
|
-16 37 -16 3 1 20 -6 38 -14 17 -8 68 -31 112 -51 44 -20 82 -35 84 -35 2 1 7
|
||||||
|
-3 10 -8 3 -5 43 -28 88 -51 45 -23 87 -48 93 -56 7 -8 17 -15 22 -15 12 0
|
||||||
|
192 -121 196 -132 2 -4 8 -8 13 -8 10 0 119 -86 220 -172 102 -87 256 -244
|
||||||
|
349 -357 25 -30 53 -63 63 -73 9 -10 17 -22 17 -28 0 -5 3 -10 8 -10 4 0 25
|
||||||
|
-27 46 -60 22 -33 43 -60 48 -60 4 0 8 -5 8 -11 0 -6 11 -25 25 -43 14 -18 25
|
||||||
|
-38 25 -44 0 -7 4 -12 8 -12 5 0 16 -15 25 -32 9 -18 30 -55 47 -83 46 -77
|
||||||
|
161 -305 154 -305 -4 0 -2 -6 4 -12 6 -7 23 -47 40 -88 16 -41 33 -84 37 -95
|
||||||
|
5 -11 9 -22 10 -25 0 -3 11 -36 24 -73 13 -38 21 -70 19 -73 -3 -2 -1386 -3
|
||||||
|
-3075 -2 l-3071 3 38 110 c47 137 117 301 182 425 62 118 167 295 191 320 9
|
||||||
|
11 17 22 17 25 0 7 39 63 58 83 6 7 26 35 44 60 18 26 37 52 43 57 6 6 34 37
|
||||||
|
61 70 48 59 271 286 329 335 17 14 53 43 80 65 28 22 52 42 55 45 3 3 21 17
|
||||||
|
40 30 19 14 40 28 45 32 40 32 105 78 109 78 3 0 28 16 55 35 26 19 53 35 58
|
||||||
|
35 5 0 18 8 29 18 17 15 53 35 216 119 118 60 412 176 422 166 3 -4 6 -2 6 4
|
||||||
|
0 6 12 13 28 16 15 3 52 12 82 21 30 9 63 19 73 21 10 2 27 7 37 10 10 3 29 8
|
||||||
|
42 10 13 3 48 10 78 16 30 7 61 12 68 12 6 0 12 4 12 9 0 5 5 6 10 3 6 -4 34
|
||||||
|
-2 63 4 51 11 71 13 197 26 36 4 67 9 69 11 2 2 10 -1 17 -7 8 -6 14 -7 18 0z"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
@ -401,10 +401,10 @@
|
|||||||
class:bg-coolgray-500={$page.url.pathname === `/applications/${id}/logs`}
|
class:bg-coolgray-500={$page.url.pathname === `/applications/${id}/logs`}
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
title={$t('application.build_logs')}
|
title={$t('application.logs')}
|
||||||
disabled={$disabledButton}
|
disabled={$disabledButton}
|
||||||
class="icons bg-transparent tooltip-bottom text-sm"
|
class="icons bg-transparent tooltip-bottom text-sm"
|
||||||
data-tooltip={$t('application.build_logs')}
|
data-tooltip={$t('application.logs')}
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
import MeiliSearch from './_MeiliSearch.svelte';
|
import MeiliSearch from './_MeiliSearch.svelte';
|
||||||
import MinIo from './_MinIO.svelte';
|
import MinIo from './_MinIO.svelte';
|
||||||
import PlausibleAnalytics from './_PlausibleAnalytics.svelte';
|
import PlausibleAnalytics from './_PlausibleAnalytics.svelte';
|
||||||
|
import Umami from './_Umami.svelte';
|
||||||
import VsCodeServer from './_VSCodeServer.svelte';
|
import VsCodeServer from './_VSCodeServer.svelte';
|
||||||
import Wordpress from './_Wordpress.svelte';
|
import Wordpress from './_Wordpress.svelte';
|
||||||
|
|
||||||
@ -169,6 +170,8 @@
|
|||||||
<Ghost bind:service {readOnly} />
|
<Ghost bind:service {readOnly} />
|
||||||
{:else if service.type === 'meilisearch'}
|
{:else if service.type === 'meilisearch'}
|
||||||
<MeiliSearch bind:service />
|
<MeiliSearch bind:service />
|
||||||
|
{:else if service.type === 'umami'}
|
||||||
|
<Umami bind:service />
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
29
src/routes/services/[id]/_Services/_Umami.svelte
Normal file
29
src/routes/services/[id]/_Services/_Umami.svelte
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import CopyPasswordField from '$lib/components/CopyPasswordField.svelte';
|
||||||
|
import Explainer from '$lib/components/Explainer.svelte';
|
||||||
|
|
||||||
|
export let service;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="flex space-x-1 py-5 font-bold">
|
||||||
|
<div class="title">Umami</div>
|
||||||
|
</div>
|
||||||
|
<div class="grid grid-cols-2 items-center px-10">
|
||||||
|
<label for="adminUser">Admin User</label>
|
||||||
|
<input name="adminUser" id="adminUser" placeholder="admin" value="admin" disabled readonly />
|
||||||
|
</div>
|
||||||
|
<div class="grid grid-cols-2 items-center px-10">
|
||||||
|
<label for="umamiAdminPassword">Initial Admin Password</label>
|
||||||
|
<CopyPasswordField
|
||||||
|
isPasswordField
|
||||||
|
name="umamiAdminPassword"
|
||||||
|
id="umamiAdminPassword"
|
||||||
|
placeholder="admin"
|
||||||
|
value={service.umami.umamiAdminPassword}
|
||||||
|
disabled
|
||||||
|
readonly
|
||||||
|
/>
|
||||||
|
<Explainer
|
||||||
|
text="It could be changed in Umami. <br>This is just the password set initially after the first start."
|
||||||
|
/>
|
||||||
|
</div>
|
@ -43,6 +43,7 @@
|
|||||||
import Ghost from '$lib/components/svg/services/Ghost.svelte';
|
import Ghost from '$lib/components/svg/services/Ghost.svelte';
|
||||||
import { t } from '$lib/translations';
|
import { t } from '$lib/translations';
|
||||||
import MeiliSearch from '$lib/components/svg/services/MeiliSearch.svelte';
|
import MeiliSearch from '$lib/components/svg/services/MeiliSearch.svelte';
|
||||||
|
import Umami from '$lib/components/svg/services/Umami.svelte';
|
||||||
|
|
||||||
const { id } = $page.params;
|
const { id } = $page.params;
|
||||||
const from = $page.url.searchParams.get('from');
|
const from = $page.url.searchParams.get('from');
|
||||||
@ -90,6 +91,8 @@
|
|||||||
<Ghost isAbsolute />
|
<Ghost isAbsolute />
|
||||||
{:else if type.name === 'meilisearch'}
|
{:else if type.name === 'meilisearch'}
|
||||||
<MeiliSearch isAbsolute />
|
<MeiliSearch isAbsolute />
|
||||||
|
{:else if type.name === 'umami'}
|
||||||
|
<Umami isAbsolute />
|
||||||
{/if}{type.fancyName}
|
{/if}{type.fancyName}
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
@ -3,10 +3,11 @@ import * as db from '$lib/database';
|
|||||||
import { promises as fs } from 'fs';
|
import { promises as fs } from 'fs';
|
||||||
import yaml from 'js-yaml';
|
import yaml from 'js-yaml';
|
||||||
import type { RequestHandler } from '@sveltejs/kit';
|
import type { RequestHandler } from '@sveltejs/kit';
|
||||||
import { ErrorHandler, getFreePort, getServiceImage } from '$lib/database';
|
import { ErrorHandler, getServiceImage } from '$lib/database';
|
||||||
import { makeLabelForServices } from '$lib/buildPacks/common';
|
import { makeLabelForServices } from '$lib/buildPacks/common';
|
||||||
import type { ComposeFile } from '$lib/types/composeFile';
|
import type { ComposeFile } from '$lib/types/composeFile';
|
||||||
import type { Service, DestinationDocker, ServiceSecret, Prisma } from '@prisma/client';
|
import type { Service, DestinationDocker, Prisma } from '@prisma/client';
|
||||||
|
import bcrypt from 'bcryptjs';
|
||||||
|
|
||||||
export const post: RequestHandler = async (event) => {
|
export const post: RequestHandler = async (event) => {
|
||||||
const { teamId, status, body } = await getUserDetails(event);
|
const { teamId, status, body } = await getUserDetails(event);
|
||||||
@ -61,7 +62,7 @@ export const post: RequestHandler = async (event) => {
|
|||||||
config.umami.environmentVariables[secret.name] = secret.value;
|
config.umami.environmentVariables[secret.name] = secret.value;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
console.log(umamiAdminPassword);
|
|
||||||
const initDbSQL = `
|
const initDbSQL = `
|
||||||
drop table if exists event;
|
drop table if exists event;
|
||||||
drop table if exists pageview;
|
drop table if exists pageview;
|
||||||
@ -136,7 +137,10 @@ export const post: RequestHandler = async (event) => {
|
|||||||
create index event_website_id_idx on event(website_id);
|
create index event_website_id_idx on event(website_id);
|
||||||
create index event_session_id_idx on event(session_id);
|
create index event_session_id_idx on event(session_id);
|
||||||
|
|
||||||
insert into account (username, password, is_admin) values ('admin', '$2b$10$BUli0c.muyCW1ErNJc3jL.vFRFtFJWrT8/GcR4A.sUdCznaXiqFXa', true);`;
|
insert into account (username, password, is_admin) values ('admin', '${bcrypt.hashSync(
|
||||||
|
umamiAdminPassword,
|
||||||
|
10
|
||||||
|
)}', true);`;
|
||||||
await fs.writeFile(`${workdir}/schema.postgresql.sql`, initDbSQL);
|
await fs.writeFile(`${workdir}/schema.postgresql.sql`, initDbSQL);
|
||||||
const Dockerfile = `
|
const Dockerfile = `
|
||||||
FROM ${config.postgresql.image}
|
FROM ${config.postgresql.image}
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
import MeiliSearch from '$lib/components/svg/services/MeiliSearch.svelte';
|
import MeiliSearch from '$lib/components/svg/services/MeiliSearch.svelte';
|
||||||
import { session } from '$app/stores';
|
import { session } from '$app/stores';
|
||||||
import { getDomain } from '$lib/components/common';
|
import { getDomain } from '$lib/components/common';
|
||||||
|
import Umami from '$lib/components/svg/services/Umami.svelte';
|
||||||
|
|
||||||
export let services;
|
export let services;
|
||||||
async function newService() {
|
async function newService() {
|
||||||
@ -86,6 +87,8 @@
|
|||||||
<Ghost isAbsolute />
|
<Ghost isAbsolute />
|
||||||
{:else if service.type === 'meilisearch'}
|
{:else if service.type === 'meilisearch'}
|
||||||
<MeiliSearch isAbsolute />
|
<MeiliSearch isAbsolute />
|
||||||
|
{:else if service.type === 'umami'}
|
||||||
|
<Umami isAbsolute />
|
||||||
{/if}
|
{/if}
|
||||||
<div class="truncate text-center text-xl font-bold">
|
<div class="truncate text-center text-xl font-bold">
|
||||||
{service.name}
|
{service.name}
|
||||||
@ -133,6 +136,8 @@
|
|||||||
<Ghost isAbsolute />
|
<Ghost isAbsolute />
|
||||||
{:else if service.type === 'meilisearch'}
|
{:else if service.type === 'meilisearch'}
|
||||||
<MeiliSearch isAbsolute />
|
<MeiliSearch isAbsolute />
|
||||||
|
{:else if service.type === 'umami'}
|
||||||
|
<Umami isAbsolute />
|
||||||
{/if}
|
{/if}
|
||||||
<div class="truncate text-center text-xl font-bold">
|
<div class="truncate text-center text-xl font-bold">
|
||||||
{service.name}
|
{service.name}
|
||||||
|
Loading…
Reference in New Issue
Block a user