add glitchtip
This commit is contained in:
parent
b4c6f80e1c
commit
21f3a70788
@ -16,6 +16,7 @@ export async function migrateServicesToNewTemplate() {
|
|||||||
if (service.type === 'meilisearch' && service.meiliSearch) await meilisearch(service)
|
if (service.type === 'meilisearch' && service.meiliSearch) await meilisearch(service)
|
||||||
if (service.type === 'umami' && service.umami) await umami(service)
|
if (service.type === 'umami' && service.umami) await umami(service)
|
||||||
if (service.type === 'hasura' && service.hasura) await hasura(service)
|
if (service.type === 'hasura' && service.hasura) await hasura(service)
|
||||||
|
if (service.type === 'glitchtip' && service.glitchTip) await glitchtip(service)
|
||||||
await createVolumes(service);
|
await createVolumes(service);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -23,6 +24,39 @@ export async function migrateServicesToNewTemplate() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async function glitchtip(service: any) {
|
||||||
|
const { postgresqlUser, postgresqlPassword, postgresqlDatabase, secretKeyBase, defaultEmail, defaultUsername, defaultPassword, defaultEmailFrom, emailSmtpHost, emailSmtpPort, emailSmtpUser, emailSmtpPassword, emailSmtpUseTls, emailSmtpUseSsl, emailBackend, mailgunApiKey, sendgridApiKey, enableOpenUserRegistration } = service.glitchTip
|
||||||
|
|
||||||
|
const secrets = [
|
||||||
|
`POSTGRES_PASSWORD@@@${postgresqlPassword}`,
|
||||||
|
`SECRET_KEY@@@${secretKeyBase}`,
|
||||||
|
`DATABASE_URL@@@${encrypt(`postgres://${postgresqlUser}:${decrypt(postgresqlPassword)}@$$generate_fqdn:5432/${postgresqlDatabase}`)}`,
|
||||||
|
`REDIS_URL@@@${encrypt(`redis://$$generate_fqdn:6379`)}`,
|
||||||
|
`EMAIL_HOST_PASSWORD@@@${emailSmtpPassword}`,
|
||||||
|
`MAILGUN_API_KEY@@@${mailgunApiKey}`,
|
||||||
|
`SENDGRID_API_KEY@@@${sendgridApiKey}`,
|
||||||
|
`DJANGO_SUPERUSER_PASSWORD@@@${defaultPassword}`,
|
||||||
|
]
|
||||||
|
const settings = [
|
||||||
|
`POSTGRES_USER@@@${postgresqlUser}`,
|
||||||
|
`POSTGRES_DB@@@${postgresqlDatabase}`,
|
||||||
|
`DEFAULT_FROM_EMAIL@@@${defaultEmailFrom}`,
|
||||||
|
`EMAIL_HOST@@@${emailSmtpHost}`,
|
||||||
|
`EMAIL_PORT@@@${emailSmtpPort}`,
|
||||||
|
`EMAIL_HOST_USER@@@${emailSmtpUser}`,
|
||||||
|
`EMAIL_USE_TLS@@@${emailSmtpUseTls}`,
|
||||||
|
`EMAIL_USE_SSL@@@${emailSmtpUseSsl}`,
|
||||||
|
`EMAIL_BACKEND@@@${emailBackend}`,
|
||||||
|
`ENABLE_OPEN_USER_REGISTRATION@@@${enableOpenUserRegistration}`,
|
||||||
|
`DJANGO_SUPERUSER_EMAIL@@@${defaultEmail}`,
|
||||||
|
`DJANGO_SUPERUSER_USERNAME@@@${defaultUsername}`,
|
||||||
|
]
|
||||||
|
await migrateSecrets(secrets, service);
|
||||||
|
await migrateSettings(settings, service);
|
||||||
|
|
||||||
|
// Remove old service data
|
||||||
|
// await prisma.service.update({ where: { id: service.id }, data: { wordpress: { delete: true } } })
|
||||||
|
}
|
||||||
async function hasura(service: any) {
|
async function hasura(service: any) {
|
||||||
const { postgresqlUser, postgresqlPassword, postgresqlDatabase, graphQLAdminPassword } = service.hasura
|
const { postgresqlUser, postgresqlPassword, postgresqlDatabase, graphQLAdminPassword } = service.hasura
|
||||||
|
|
||||||
|
@ -1,4 +1,218 @@
|
|||||||
export default [
|
export default [
|
||||||
|
{
|
||||||
|
"templateVersion": "1.0.0",
|
||||||
|
"serviceDefaultVersion": "v2.0.6",
|
||||||
|
"name": "glitchtip",
|
||||||
|
"displayName": "GlitchTip",
|
||||||
|
"description": "",
|
||||||
|
"services": {
|
||||||
|
"$$id": {
|
||||||
|
"name": "GlitchTip",
|
||||||
|
"depends_on": [
|
||||||
|
"$$id-postgresql"
|
||||||
|
],
|
||||||
|
"image": "glitchtip/glitchtip:$$core_version",
|
||||||
|
"volumes": [],
|
||||||
|
"environment": [
|
||||||
|
"PORT=3000",
|
||||||
|
"GLITCHTIP_DOMAIN=$$config_glitchtip_domain",
|
||||||
|
"SECRET_KEY=$$secret_secret_key",
|
||||||
|
"DATABASE_URL=$$secret_database_url",
|
||||||
|
"REDIS_URL=$$secret_redis_url",
|
||||||
|
"DEFAULT_FROM_EMAIL=$$config_default_from_email",
|
||||||
|
"EMAIL_HOST=$$config_email_host",
|
||||||
|
"EMAIL_PORT=$$config_email_port",
|
||||||
|
"EMAIL_HOST_USER=$$config_email_host_user",
|
||||||
|
"EMAIL_HOST_PASSWORD=$$secret_email_host_password",
|
||||||
|
"EMAIL_USE_TLS=$$config_email_use_tls",
|
||||||
|
"EMAIL_USE_SSL=$$config_email_use_ssl",
|
||||||
|
"EMAIL_BACKEND=$$config_email_backend",
|
||||||
|
"MAILGUN_API_KEY=$$secret_mailgun_api_key",
|
||||||
|
"SENDGRID_API_KEY=$$secret_sendgrid_api_key",
|
||||||
|
"ENABLE_OPEN_USER_REGISTRATION=$$config_enable_open_user_registration",
|
||||||
|
"DJANGO_SUPERUSER_EMAIL=$$config_django_superuser_email",
|
||||||
|
"DJANGO_SUPERUSER_PASSWORD=$$secret_django_superuser_password",
|
||||||
|
"DJANGO_SUPERUSER_USERNAME=$$config_django_superuser_username",
|
||||||
|
],
|
||||||
|
"ports": [
|
||||||
|
"8000"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"$$id-postgresql": {
|
||||||
|
"name": "PostgreSQL",
|
||||||
|
"depends_on": [],
|
||||||
|
"image": "postgres:12-alpine",
|
||||||
|
"volumes": [
|
||||||
|
"$$id-postgresql-data:/var/lib/postgresql/data",
|
||||||
|
],
|
||||||
|
"environment": [
|
||||||
|
"POSTGRES_USER=$$config_postgres_user",
|
||||||
|
"POSTGRES_PASSWORD=$$secret_postgres_password",
|
||||||
|
"POSTGRES_DB=$$config_postgres_db",
|
||||||
|
],
|
||||||
|
"ports": []
|
||||||
|
},
|
||||||
|
"$$id-redis": {
|
||||||
|
"name": "Redis",
|
||||||
|
"depends_on": [],
|
||||||
|
"image": "redis:7-alpine",
|
||||||
|
"volumes": [
|
||||||
|
"$$id-postgresql-redis-data:/data",
|
||||||
|
],
|
||||||
|
"environment": [],
|
||||||
|
"ports": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"id": "$$config_glitchtip_domain",
|
||||||
|
"name": "GLITCHTIP_DOMAIN",
|
||||||
|
"label": "GLITCHTIP_DOMAIN URL",
|
||||||
|
"defaultValue": "$$generate_fqdn",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$secret_database_url",
|
||||||
|
"name": "DATABASE_URL",
|
||||||
|
"label": "Database URL for PostgreSQL",
|
||||||
|
"defaultValue": "postgresql://$$config_postgres_user:$$secret_postgres_password@$$id-postgresql:5432/$$config_postgres_db",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$secret_redis_url",
|
||||||
|
"name": "REDIS_URL",
|
||||||
|
"label": "Redis URL",
|
||||||
|
"defaultValue": "redis://$$id-redis:6379/0",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$config_default_from_email",
|
||||||
|
"name": "DEFAULT_FROM_EMAIL",
|
||||||
|
"label": "Default Email Address",
|
||||||
|
"defaultValue": "noreply@example.com",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$config_email_host",
|
||||||
|
"name": "EMAIL_HOST",
|
||||||
|
"label": "Email SMTP Host",
|
||||||
|
"defaultValue": "",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$config_email_port",
|
||||||
|
"name": "EMAIL_PORT",
|
||||||
|
"label": "Email SMTP Port",
|
||||||
|
"defaultValue": "25",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$config_email_host_user",
|
||||||
|
"name": "EMAIL_HOST_USER",
|
||||||
|
"label": "Email SMTP User",
|
||||||
|
"defaultValue": "",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$secret_email_host_password",
|
||||||
|
"name": "EMAIL_HOST_PASSWORD",
|
||||||
|
"label": "Email SMTP Password",
|
||||||
|
"defaultValue": "",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$config_email_use_tls",
|
||||||
|
"name": "EMAIL_USE_TLS",
|
||||||
|
"label": "Email Use TLS",
|
||||||
|
"defaultValue": "false",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$config_email_use_ssl",
|
||||||
|
"name": "EMAIL_USE_SSL",
|
||||||
|
"label": "Email Use SSL",
|
||||||
|
"defaultValue": "false",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$secret_email_smtp_password",
|
||||||
|
"name": "EMAIL_SMTP_PASSWORD",
|
||||||
|
"label": "SMTP Password",
|
||||||
|
"defaultValue": "",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$config_email_backend",
|
||||||
|
"name": "EMAIL_BACKEND",
|
||||||
|
"label": "Email Backend",
|
||||||
|
"defaultValue": "",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$secret_mailgun_api_key",
|
||||||
|
"name": "MAILGUN_API_KEY",
|
||||||
|
"label": "Mailgun API Key",
|
||||||
|
"defaultValue": "",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$secret_sendgrid_api_key",
|
||||||
|
"name": "SENDGRID_API_KEY",
|
||||||
|
"label": "Sendgrid API Key",
|
||||||
|
"defaultValue": "",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$config_enable_open_user_registration",
|
||||||
|
"name": "ENABLE_OPEN_USER_REGISTRATION",
|
||||||
|
"label": "Enable Open User Registration",
|
||||||
|
"defaultValue": "true",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$config_django_superuser_email",
|
||||||
|
"name": "DJANGO_SUPERUSER_EMAIL",
|
||||||
|
"label": "Django Superuser Email",
|
||||||
|
"defaultValue": "",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$config_django_superuser_username",
|
||||||
|
"name": "DJANGO_SUPERUSER_USERNAME",
|
||||||
|
"label": "Django Superuser Username",
|
||||||
|
"defaultValue": "",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$secret_django_superuser_password",
|
||||||
|
"name": "DJANGO_SUPERUSER_PASSWORD",
|
||||||
|
"label": "Django Superuser Password",
|
||||||
|
"defaultValue": "$$generate_password",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$config_postgres_user",
|
||||||
|
"name": "POSTGRES_USER",
|
||||||
|
"label": "PostgreSQL User",
|
||||||
|
"defaultValue": "$$generate_username",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$secret_postgres_password",
|
||||||
|
"name": "POSTGRES_PASSWORD",
|
||||||
|
"label": "PostgreSQL Password",
|
||||||
|
"defaultValue": "",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "$$config_postgres_db",
|
||||||
|
"name": "POSTGRES_DB",
|
||||||
|
"label": "PostgreSQL Database",
|
||||||
|
"defaultValue": "hasura",
|
||||||
|
"description": "",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"templateVersion": "1.0.0",
|
"templateVersion": "1.0.0",
|
||||||
"serviceDefaultVersion": "v2.13.0",
|
"serviceDefaultVersion": "v2.13.0",
|
||||||
@ -755,7 +969,7 @@ export default [
|
|||||||
"BASE_URL=$$config_base_url",
|
"BASE_URL=$$config_base_url",
|
||||||
"JWT_SECRET=$$secret_jwt_secret",
|
"JWT_SECRET=$$secret_jwt_secret",
|
||||||
"EMAIL_NOREPLY=$$config_email_noreply",
|
"EMAIL_NOREPLY=$$config_email_noreply",
|
||||||
"EMAIL_MAILGUN_API_KEY=$$secret_email_mailgun_api_key",
|
"EMAIL_MAILGUN_API=$$secret_email_mailgun_api",
|
||||||
"EMAIL_MAILGUN_REGION=$$config_email_mailgun_region",
|
"EMAIL_MAILGUN_REGION=$$config_email_mailgun_region",
|
||||||
"EMAIL_MAILGUN_DOMAIN=$$config_email_mailgun_domain",
|
"EMAIL_MAILGUN_DOMAIN=$$config_email_mailgun_domain",
|
||||||
"EMAIL_SMTP_HOST=$$config_email_smtp_host",
|
"EMAIL_SMTP_HOST=$$config_email_smtp_host",
|
||||||
@ -813,8 +1027,8 @@ export default [
|
|||||||
"description": "",
|
"description": "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "$$secret_email_mailgun_api_key",
|
"id": "$$secret_email_mailgun_api",
|
||||||
"name": "EMAIL_MAILGUN_API_KEY",
|
"name": "EMAIL_MAILGUN_API",
|
||||||
"label": "Mailgun API Key",
|
"label": "Mailgun API Key",
|
||||||
"defaultValue": "",
|
"defaultValue": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
|
@ -70,6 +70,7 @@
|
|||||||
import { onDestroy, onMount } from 'svelte';
|
import { onDestroy, onMount } from 'svelte';
|
||||||
import { goto } from '$app/navigation';
|
import { goto } from '$app/navigation';
|
||||||
import Menu from './_Menu.svelte';
|
import Menu from './_Menu.svelte';
|
||||||
|
import { saveForm } from './utils';
|
||||||
const { id } = $page.params;
|
const { id } = $page.params;
|
||||||
|
|
||||||
$isDeploymentEnabled = checkIfDeploymentEnabledServices($appSession.isAdmin, service);
|
$isDeploymentEnabled = checkIfDeploymentEnabledServices($appSession.isAdmin, service);
|
||||||
@ -112,6 +113,11 @@
|
|||||||
$status.service.initialLoading = true;
|
$status.service.initialLoading = true;
|
||||||
$status.service.loading = true;
|
$status.service.loading = true;
|
||||||
try {
|
try {
|
||||||
|
const form: any = document.getElementById('saveForm');
|
||||||
|
if (form) {
|
||||||
|
const formData = new FormData(form);
|
||||||
|
service = await saveForm(formData, service);
|
||||||
|
}
|
||||||
await post(`/services/${service.id}/start`, {});
|
await post(`/services/${service.id}/start`, {});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return errorNotification(error);
|
return errorNotification(error);
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
import DocLink from '$lib/components/DocLink.svelte';
|
import DocLink from '$lib/components/DocLink.svelte';
|
||||||
import Explainer from '$lib/components/Explainer.svelte';
|
import Explainer from '$lib/components/Explainer.svelte';
|
||||||
import ServiceStatus from '$lib/components/ServiceStatus.svelte';
|
import ServiceStatus from '$lib/components/ServiceStatus.svelte';
|
||||||
|
import { saveForm } from './utils';
|
||||||
|
|
||||||
const { id } = $page.params;
|
const { id } = $page.params;
|
||||||
$: isDisabled =
|
$: isDisabled =
|
||||||
@ -71,30 +72,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function handleSubmit(e: any) {
|
async function handleSubmit(e: any) {
|
||||||
const formData = new FormData(e.target);
|
|
||||||
const settings = service.serviceSetting.map((setting: { name: string }) => setting.name);
|
|
||||||
const baseCoolifySetting = ['name', 'fqdn', 'exposePort'];
|
|
||||||
|
|
||||||
for (let field of formData) {
|
|
||||||
const [key, value] = field;
|
|
||||||
service.serviceSetting = service.serviceSetting.map((setting: any) => {
|
|
||||||
if (setting.name === key) {
|
|
||||||
setting.changed = true;
|
|
||||||
setting.value = value;
|
|
||||||
}
|
|
||||||
return setting;
|
|
||||||
});
|
|
||||||
if (!settings.includes(key) && !baseCoolifySetting.includes(key)) {
|
|
||||||
service.serviceSetting.push({
|
|
||||||
id: service.id,
|
|
||||||
name: key,
|
|
||||||
value: value,
|
|
||||||
isNew: true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (loading.save) return;
|
if (loading.save) return;
|
||||||
loading.save = true;
|
loading.save = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// await post(`/services/${id}/check`, {
|
// await post(`/services/${id}/check`, {
|
||||||
// fqdn: service.fqdn,
|
// fqdn: service.fqdn,
|
||||||
@ -103,13 +83,10 @@
|
|||||||
// otherFqdns: service.minio?.apiFqdn ? [service.minio?.apiFqdn] : [],
|
// otherFqdns: service.minio?.apiFqdn ? [service.minio?.apiFqdn] : [],
|
||||||
// exposePort: service.exposePort
|
// exposePort: service.exposePort
|
||||||
// });
|
// });
|
||||||
await post(`/services/${id}`, { ...service });
|
const formData = new FormData(e.target);
|
||||||
|
service = await saveForm(formData, service);
|
||||||
setLocation(service);
|
setLocation(service);
|
||||||
|
|
||||||
const reloadServices = await get(`/services/${id}`);
|
|
||||||
service = reloadServices.service
|
|
||||||
forceSave = false;
|
forceSave = false;
|
||||||
|
|
||||||
$isDeploymentEnabled = checkIfDeploymentEnabledServices($appSession.isAdmin, service);
|
$isDeploymentEnabled = checkIfDeploymentEnabledServices($appSession.isAdmin, service);
|
||||||
return addToast({
|
return addToast({
|
||||||
message: 'Configuration saved.',
|
message: 'Configuration saved.',
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { post } from '$lib/api';
|
import { get, post } from '$lib/api';
|
||||||
import { t } from '$lib/translations';
|
import { t } from '$lib/translations';
|
||||||
import { errorNotification } from '$lib/common';
|
import { errorNotification } from '$lib/common';
|
||||||
|
|
||||||
@ -40,3 +40,30 @@ export async function saveSecret({
|
|||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function saveForm(formData: any, service: any) {
|
||||||
|
const settings = service.serviceSetting.map((setting: { name: string }) => setting.name);
|
||||||
|
const baseCoolifySetting = ['name', 'fqdn', 'exposePort'];
|
||||||
|
for (let field of formData) {
|
||||||
|
const [key, value] = field;
|
||||||
|
service.serviceSetting = service.serviceSetting.map((setting: any) => {
|
||||||
|
if (setting.name === key) {
|
||||||
|
setting.changed = true;
|
||||||
|
setting.value = value;
|
||||||
|
}
|
||||||
|
return setting;
|
||||||
|
});
|
||||||
|
if (!settings.includes(key) && !baseCoolifySetting.includes(key)) {
|
||||||
|
service.serviceSetting.push({
|
||||||
|
id: service.id,
|
||||||
|
name: key,
|
||||||
|
value: value,
|
||||||
|
isNew: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await post(`/services/${service.id}`, { ...service });
|
||||||
|
const { service: reloadedService } = await get(`/services/${service.id}`);
|
||||||
|
return reloadedService;
|
||||||
|
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user