From 3435f92fcb41de56fe577c4d25d6284c4f58a009 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 11 May 2022 12:02:09 +0200 Subject: [PATCH] WIP: Appwrite --- src/lib/components/common.ts | 11 + .../services/[id]/appwrite/index.json.ts | 21 + .../services/[id]/appwrite/start.json.ts | 519 ++++++++++++++++++ .../services/[id]/appwrite/stop.json.ts | 35 ++ 4 files changed, 586 insertions(+) create mode 100644 src/routes/services/[id]/appwrite/index.json.ts create mode 100644 src/routes/services/[id]/appwrite/start.json.ts create mode 100644 src/routes/services/[id]/appwrite/stop.json.ts diff --git a/src/lib/components/common.ts b/src/lib/components/common.ts index d42fcb726..3ded5d12b 100644 --- a/src/lib/components/common.ts +++ b/src/lib/components/common.ts @@ -219,6 +219,17 @@ export const supportedServiceTypesAndVersions = [ ports: { main: 3000 } + }, + { + name: 'appwrite', + fancyName: 'AppWrite', + baseImage: 'appwrite/appwrite', + images: ['appwrite/influxdb', 'appwrite/telegraf', 'mariadb:10.7', 'redis:6.0-alpine3.12'], + versions: ['latest', '0.13.0'], + recommendedVersion: '0.13.0', + ports: { + main: 3000 + } } ]; diff --git a/src/routes/services/[id]/appwrite/index.json.ts b/src/routes/services/[id]/appwrite/index.json.ts new file mode 100644 index 000000000..e269e8fe7 --- /dev/null +++ b/src/routes/services/[id]/appwrite/index.json.ts @@ -0,0 +1,21 @@ +import { getUserDetails } from '$lib/common'; +import * as db from '$lib/database'; +import { ErrorHandler } from '$lib/database'; +import type { RequestHandler } from '@sveltejs/kit'; + +export const post: RequestHandler = async (event) => { + const { status, body } = await getUserDetails(event); + if (status === 401) return { status, body }; + const { id } = event.params; + + let { name, fqdn, exposePort } = await event.request.json(); + if (fqdn) fqdn = fqdn.toLowerCase(); + if (exposePort) exposePort = Number(exposePort); + + try { + await db.updateService({ id, fqdn, name, exposePort }); + return { status: 201 }; + } catch (error) { + return ErrorHandler(error); + } +}; diff --git a/src/routes/services/[id]/appwrite/start.json.ts b/src/routes/services/[id]/appwrite/start.json.ts new file mode 100644 index 000000000..70748a0a6 --- /dev/null +++ b/src/routes/services/[id]/appwrite/start.json.ts @@ -0,0 +1,519 @@ +import { asyncExecShell, createDirectories, getEngine, getUserDetails } from '$lib/common'; +import * as db from '$lib/database'; +import { promises as fs } from 'fs'; +import yaml from 'js-yaml'; +import type { RequestHandler } from '@sveltejs/kit'; +import { ErrorHandler, getServiceImage } from '$lib/database'; +import { makeLabelForServices } from '$lib/buildPacks/common'; +import type { ComposeFile } from '$lib/types/composeFile'; +import { getServiceMainPort } from '$lib/components/common'; + +export const post: RequestHandler = async (event) => { + const { teamId, status, body } = await getUserDetails(event); + if (status === 401) return { status, body }; + + const { id } = event.params; + + try { + const service = await db.getService({ id, teamId }); + const { type, version, destinationDockerId, destinationDocker, serviceSecret, exposePort } = + service; + const network = destinationDockerId && destinationDocker.network; + const host = getEngine(destinationDocker.engine); + const port = getServiceMainPort('n8n'); + + const { workdir } = await createDirectories({ repository: type, buildId: id }); + const image = getServiceImage(type); + + if (serviceSecret.length > 0) { + serviceSecret.forEach((secret) => { + variables[secret.name] = secret.value; + }); + } + + const variables = { + _APP_ENV: 'production', + _APP_VERSION: '', + _APP_LOCALE: '', + _APP_OPTIONS_ABUSE: '', + _APP_OPTIONS_FORCE_HTTPS: '', + _APP_OPENSSL_KEY_V1: '', + _APP_DOMAIN: '', + _APP_DOMAIN_TARGET: '', + _APP_CONSOLE_WHITELIST_ROOT: '', + _APP_CONSOLE_WHITELIST_EMAILS: '', + _APP_CONSOLE_WHITELIST_IPS: '', + _APP_SYSTEM_EMAIL_NAME: '', + _APP_SYSTEM_EMAIL_ADDRESS: '', + _APP_SYSTEM_RESPONSE_FORMAT: '', + _APP_SYSTEM_SECURITY_EMAIL_ADDRESS: '', + _APP_USAGE_STATS: '', + _APP_LOGGING_PROVIDER: '', + _APP_LOGGING_CONFIG: '', + _APP_USAGE_AGGREGATION_INTERVAL: '', + _APP_WORKER_PER_CORE: '', + _APP_REDIS_HOST: '', + _APP_REDIS_PORT: '', + _APP_REDIS_USER: '', + _APP_REDIS_PASS: '', + _APP_DB_HOST: '', + _APP_DB_PORT: '', + _APP_DB_SCHEMA: '', + _APP_DB_USER: '', + _APP_DB_PASS: '', + _APP_DB_ROOT_PASS: '', + _APP_INFLUXDB_HOST: '', + _APP_INFLUXDB_PORT: '', + _APP_STATSD_HOST: '', + _APP_STATSD_PORT: '', + _APP_SMTP_HOST: '', + _APP_SMTP_PORT: '', + _APP_SMTP_SECURE: '', + _APP_SMTP_USERNAME: '', + _APP_SMTP_PASSWORD: '', + _APP_STORAGE_LIMIT: '', + _APP_STORAGE_ANTIVIRUS: '', + _APP_STORAGE_ANTIVIRUS_HOST: '', + _APP_STORAGE_ANTIVIRUS_PORT: '', + _APP_STORAGE_DEVICE: '', + _APP_STORAGE_S3_ACCESS_KEY: '', + _APP_STORAGE_S3_SECRET: '', + _APP_STORAGE_S3_REGION: '', + _APP_STORAGE_S3_BUCKET: '', + _APP_STORAGE_DO_SPACES_ACCESS_KEY: '', + _APP_STORAGE_DO_SPACES_SECRET: '', + _APP_STORAGE_DO_SPACES_REGION: '', + _APP_STORAGE_DO_SPACES_BUCKET: '', + _APP_FUNCTIONS_SIZE_LIMIT: '', + _APP_FUNCTIONS_TIMEOUT: '', + _APP_FUNCTIONS_BUILD_TIMEOUT: '', + _APP_FUNCTIONS_CONTAINERS: '', + _APP_FUNCTIONS_CPUS: '', + _APP_FUNCTIONS_MEMORY: '', + _APP_FUNCTIONS_MEMORY_SWAP: '', + _APP_FUNCTIONS_RUNTIMES: '', + _APP_EXECUTOR_SECRET: '', + _APP_EXECUTOR_RUNTIME_NETWORK: '', + _APP_FUNCTIONS_ENVS: '', + _APP_FUNCTIONS_INACTIVE_THRESHOLD: '', + DOCKERHUB_PULL_USERNAME: '', + DOCKERHUB_PULL_PASSWORD: '', + DOCKERHUB_PULL_EMAIL: '', + _APP_MAINTENANCE_INTERVAL: '', + _APP_MAINTENANCE_RETENTION_EXECUTION: '', + _APP_MAINTENANCE_RETENTION_ABUSE: '', + _APP_MAINTENANCE_RETENTION_AUDIT: '' + }; + const config = { + appwrite: { + image: `${image}:${version}`, + volumes: [ + `${id}-appwrite-uploads:/storage/uploads`, + `${id}-appwrite-cache:/storage/cache`, + `${id}-appwrite-config:/storage/config`, + `${id}-appwrite-certificates:/storage/certificates`, + `${id}-appwrite-functions:/storage/functions` + ], + environmentVariables: { + _APP_ENV: variables._APP_ENV, + _APP_WORKER_PER_CORE: variables._APP_WORKER_PER_CORE, + _APP_LOCALE: variables._APP_LOCALE, + _APP_CONSOLE_WHITELIST_ROOT: variables._APP_CONSOLE_WHITELIST_ROOT, + _APP_CONSOLE_WHITELIST_EMAILS: variables._APP_CONSOLE_WHITELIST_EMAILS, + _APP_CONSOLE_WHITELIST_IPS: variables._APP_CONSOLE_WHITELIST_IPS, + _APP_SYSTEM_EMAIL_NAME: variables._APP_SYSTEM_EMAIL_NAME, + _APP_SYSTEM_EMAIL_ADDRESS: variables._APP_SYSTEM_EMAIL_ADDRESS, + _APP_SYSTEM_SECURITY_EMAIL_ADDRESS: variables._APP_SYSTEM_SECURITY_EMAIL_ADDRESS, + _APP_SYSTEM_RESPONSE_FORMAT: variables._APP_SYSTEM_RESPONSE_FORMAT, + _APP_OPTIONS_ABUSE: variables._APP_OPTIONS_ABUSE, + _APP_OPTIONS_FORCE_HTTPS: variables._APP_OPTIONS_FORCE_HTTPS, + _APP_OPENSSL_KEY_V1: variables._APP_OPENSSL_KEY_V1, + _APP_DOMAIN: variables._APP_DOMAIN, + _APP_DOMAIN_TARGET: variables._APP_DOMAIN_TARGET, + _APP_REDIS_HOST: variables._APP_REDIS_HOST, + _APP_REDIS_PORT: variables._APP_REDIS_PORT, + _APP_REDIS_USER: variables._APP_REDIS_USER, + _APP_REDIS_PASS: variables._APP_REDIS_PASS, + _APP_DB_HOST: variables._APP_DB_HOST, + _APP_DB_PORT: variables._APP_DB_PORT, + _APP_DB_SCHEMA: variables._APP_DB_SCHEMA, + _APP_DB_USER: variables._APP_DB_USER, + _APP_DB_PASS: variables._APP_DB_PASS, + _APP_SMTP_HOST: variables._APP_SMTP_HOST, + _APP_SMTP_PORT: variables._APP_SMTP_PORT, + _APP_SMTP_SECURE: variables._APP_SMTP_SECURE, + _APP_SMTP_USERNAME: variables._APP_SMTP_USERNAME, + _APP_SMTP_PASSWORD: variables._APP_SMTP_PASSWORD, + _APP_USAGE_STATS: variables._APP_USAGE_STATS, + _APP_INFLUXDB_HOST: variables._APP_INFLUXDB_HOST, + _APP_INFLUXDB_PORT: variables._APP_INFLUXDB_PORT, + _APP_STORAGE_LIMIT: variables._APP_STORAGE_LIMIT, + _APP_STORAGE_ANTIVIRUS: variables._APP_STORAGE_ANTIVIRUS, + _APP_STORAGE_ANTIVIRUS_HOST: variables._APP_STORAGE_ANTIVIRUS_HOST, + _APP_STORAGE_ANTIVIRUS_PORT: variables._APP_STORAGE_ANTIVIRUS_PORT, + _APP_STORAGE_DEVICE: variables._APP_STORAGE_DEVICE, + _APP_STORAGE_S3_ACCESS_KEY: variables._APP_STORAGE_S3_ACCESS_KEY, + _APP_STORAGE_S3_SECRET: variables._APP_STORAGE_S3_SECRET, + _APP_STORAGE_S3_REGION: variables._APP_STORAGE_S3_REGION, + _APP_STORAGE_S3_BUCKET: variables._APP_STORAGE_S3_BUCKET, + _APP_STORAGE_DO_SPACES_ACCESS_KEY: variables._APP_STORAGE_DO_SPACES_ACCESS_KEY, + _APP_STORAGE_DO_SPACES_SECRET: variables._APP_STORAGE_DO_SPACES_SECRET, + _APP_STORAGE_DO_SPACES_REGION: variables._APP_STORAGE_DO_SPACES_REGION, + _APP_STORAGE_DO_SPACES_BUCKET: variables._APP_STORAGE_DO_SPACES_BUCKET, + _APP_FUNCTIONS_SIZE_LIMIT: variables._APP_FUNCTIONS_SIZE_LIMIT, + _APP_FUNCTIONS_TIMEOUT: variables._APP_FUNCTIONS_TIMEOUT, + _APP_FUNCTIONS_BUILD_TIMEOUT: variables._APP_FUNCTIONS_BUILD_TIMEOUT, + _APP_FUNCTIONS_CONTAINERS: variables._APP_FUNCTIONS_CONTAINERS, + _APP_FUNCTIONS_CPUS: variables._APP_FUNCTIONS_CPUS, + _APP_FUNCTIONS_MEMORY: variables._APP_FUNCTIONS_MEMORY, + _APP_FUNCTIONS_MEMORY_SWAP: variables._APP_FUNCTIONS_MEMORY_SWAP, + _APP_EXECUTOR_SECRET: variables._APP_EXECUTOR_SECRET, + _APP_FUNCTIONS_RUNTIMES: variables._APP_FUNCTIONS_RUNTIMES, + _APP_LOGGING_PROVIDER: variables._APP_LOGGING_PROVIDER, + _APP_LOGGING_CONFIG: variables._APP_LOGGING_CONFIG, + _APP_STATSD_HOST: variables._APP_STATSD_HOST, + _APP_STATSD_PORT: variables._APP_STATSD_PORT, + _APP_MAINTENANCE_INTERVAL: variables._APP_MAINTENANCE_INTERVAL, + _APP_MAINTENANCE_RETENTION_EXECUTION: variables._APP_MAINTENANCE_RETENTION_EXECUTION, + _APP_MAINTENANCE_RETENTION_ABUSE: variables._APP_MAINTENANCE_RETENTION_ABUSE, + _APP_MAINTENANCE_RETENTION_AUDIT: variables._APP_MAINTENANCE_RETENTION_AUDIT + } + }, + appwriteRealtime: { + image: `${image}:${version}`, + environmentVariables: { + _APP_ENV: variables._APP_ENV, + _APP_WORKER_PER_CORE: variables._APP_WORKER_PER_CORE, + _APP_OPTIONS_ABUSE: variables._APP_OPTIONS_ABUSE, + _APP_OPENSSL_KEY_V1: variables._APP_OPENSSL_KEY_V1, + _APP_REDIS_HOST: variables._APP_REDIS_HOST, + _APP_REDIS_PORT: variables._APP_REDIS_PORT, + _APP_DB_HOST: variables._APP_DB_HOST, + _APP_DB_PORT: variables._APP_DB_PORT, + _APP_DB_SCHEMA: variables._APP_DB_SCHEMA, + _APP_DB_USER: variables._APP_DB_USER, + _APP_DB_PASS: variables._APP_DB_PASS, + _APP_USAGE_STATS: variables._APP_USAGE_STATS, + _APP_LOGGING_PROVIDER: variables._APP_LOGGING_PROVIDER, + _APP_LOGGING_CONFIG: variables._APP_LOGGING_CONFIG + } + }, + appwriteExecutor: { + image: `${image}:${version}`, + volumes: [ + `${id}-appwrite-functions:/storage/functions`, + `/tmp:/tmp`, + '/var/run/docker.sock:/var/run/docker.sock' + ], + environmentVariables: { + DOCKERHUB_PULL_USERNAME: variables.DOCKERHUB_PULL_USERNAME, + DOCKERHUB_PULL_PASSWORD: variables.DOCKERHUB_PULL_PASSWORD, + _APP_LOGGING_PROVIDER: variables._APP_LOGGING_PROVIDER, + _APP_LOGGING_CONFIG: variables._APP_LOGGING_CONFIG, + _APP_VERSION: variables._APP_VERSION, + _APP_ENV: variables._APP_ENV, + _APP_STORAGE_DEVICE: variables._APP_STORAGE_DEVICE, + _APP_STORAGE_S3_ACCESS_KEY: variables._APP_STORAGE_S3_ACCESS_KEY, + _APP_STORAGE_S3_SECRET: variables._APP_STORAGE_S3_SECRET, + _APP_STORAGE_S3_REGION: variables._APP_STORAGE_S3_REGION, + _APP_STORAGE_S3_BUCKET: variables._APP_STORAGE_S3_BUCKET, + _APP_STORAGE_DO_SPACES_ACCESS_KEY: variables._APP_STORAGE_DO_SPACES_ACCESS_KEY, + _APP_STORAGE_DO_SPACES_SECRET: variables._APP_STORAGE_DO_SPACES_SECRET, + _APP_STORAGE_DO_SPACES_REGION: variables._APP_STORAGE_DO_SPACES_REGION, + _APP_STORAGE_DO_SPACES_BUCKET: variables._APP_STORAGE_DO_SPACES_BUCKET, + _APP_FUNCTIONS_CPUS: variables._APP_FUNCTIONS_CPUS, + _APP_FUNCTIONS_MEMORY: variables._APP_FUNCTIONS_MEMORY, + _APP_FUNCTIONS_MEMORY_SWAP: variables._APP_FUNCTIONS_MEMORY_SWAP, + _APP_FUNCTIONS_TIMEOUT: variables._APP_FUNCTIONS_TIMEOUT, + _APP_EXECUTOR_SECRET: variables._APP_EXECUTOR_SECRET, + _APP_FUNCTIONS_RUNTIMES: variables._APP_FUNCTIONS_RUNTIMES, + _APP_FUNCTIONS_INACTIVE_THRESHOLD: variables._APP_FUNCTIONS_INACTIVE_THRESHOLD, + _APP_EXECUTOR_RUNTIME_NETWORK: variables._APP_EXECUTOR_RUNTIME_NETWORK + } + }, + appwriteWorkerDatabase: { + image: `${image}:${version}`, + environmentVariables: { + _APP_ENV: variables._APP_ENV, + _APP_OPENSSL_KEY_V1: variables._APP_OPENSSL_KEY_V1, + _APP_REDIS_HOST: variables._APP_REDIS_HOST, + _APP_REDIS_PORT: variables._APP_REDIS_PORT, + _APP_REDIS_USER: variables._APP_REDIS_USER, + _APP_REDIS_PASS: variables._APP_REDIS_PASS, + _APP_DB_HOST: variables._APP_DB_HOST, + _APP_DB_PORT: variables._APP_DB_PORT, + _APP_DB_SCHEMA: variables._APP_DB_SCHEMA, + _APP_DB_USER: variables._APP_DB_USER, + _APP_DB_PASS: variables._APP_DB_PASS, + _APP_LOGGING_PROVIDER: variables._APP_LOGGING_PROVIDER, + _APP_LOGGING_CONFIG: variables._APP_LOGGING_CONFIG + } + }, + appwriteWorkerBuilds: { + image: `${image}:${version}`, + environmentVariables: { + _APP_ENV: variables._APP_ENV, + _APP_OPENSSL_KEY_V1: variables._APP_OPENSSL_KEY_V1, + _APP_EXECUTOR_SECRET: variables._APP_EXECUTOR_SECRET, + _APP_REDIS_HOST: variables._APP_REDIS_HOST, + _APP_REDIS_PORT: variables._APP_REDIS_PORT, + _APP_REDIS_USER: variables._APP_REDIS_USER, + _APP_REDIS_PASS: variables._APP_REDIS_PASS, + _APP_DB_HOST: variables._APP_DB_HOST, + _APP_DB_PORT: variables._APP_DB_PORT, + _APP_DB_SCHEMA: variables._APP_DB_SCHEMA, + _APP_DB_USER: variables._APP_DB_USER, + _APP_DB_PASS: variables._APP_DB_PASS, + _APP_LOGGING_PROVIDER: variables._APP_LOGGING_PROVIDER, + _APP_LOGGING_CONFIG: variables._APP_LOGGING_CONFIG + } + }, + appwriteWorkerAudits: { + image: `${image}:${version}`, + environmentVariables: { + _APP_ENV: variables._APP_ENV, + _APP_OPENSSL_KEY_V1: variables._APP_OPENSSL_KEY_V1, + _APP_REDIS_HOST: variables._APP_REDIS_HOST, + _APP_REDIS_PORT: variables._APP_REDIS_PORT, + _APP_REDIS_USER: variables._APP_REDIS_USER, + _APP_REDIS_PASS: variables._APP_REDIS_PASS, + _APP_DB_HOST: variables._APP_DB_HOST, + _APP_DB_PORT: variables._APP_DB_PORT, + _APP_DB_SCHEMA: variables._APP_DB_SCHEMA, + _APP_DB_USER: variables._APP_DB_USER, + _APP_DB_PASS: variables._APP_DB_PASS, + _APP_LOGGING_PROVIDER: variables._APP_LOGGING_PROVIDER, + _APP_LOGGING_CONFIG: variables._APP_LOGGING_CONFIG + } + }, + appwriteWorkerWebhooks: { + image: `${image}:${version}`, + environmentVariables: { + _APP_ENV: variables._APP_ENV, + _APP_OPENSSL_KEY_V1: variables._APP_OPENSSL_KEY_V1, + _APP_SYSTEM_SECURITY_EMAIL_ADDRESS: variables._APP_SYSTEM_SECURITY_EMAIL_ADDRESS, + _APP_REDIS_HOST: variables._APP_REDIS_HOST, + _APP_REDIS_PORT: variables._APP_REDIS_PORT, + _APP_REDIS_USER: variables._APP_REDIS_USER, + _APP_REDIS_PASS: variables._APP_REDIS_PASS, + _APP_LOGGING_PROVIDER: variables._APP_LOGGING_PROVIDER, + _APP_LOGGING_CONFIG: variables._APP_LOGGING_CONFIG + } + }, + appwriteWorkerDeletes: { + image: `${image}:${version}`, + volumes: [ + `${id}-appwrite-uploads:/storage/uploads`, + `${id}-appwrite-cache:/storage/cache`, + `${id}-appwrite-certificates:/storage/certificates` + ], + environmentVariables: { + _APP_ENV: variables._APP_ENV, + _APP_OPENSSL_KEY_V1: variables._APP_OPENSSL_KEY_V1, + _APP_REDIS_HOST: variables._APP_REDIS_HOST, + _APP_REDIS_PORT: variables._APP_REDIS_PORT, + _APP_REDIS_USER: variables._APP_REDIS_USER, + _APP_REDIS_PASS: variables._APP_REDIS_PASS, + _APP_DB_HOST: variables._APP_DB_HOST, + _APP_DB_PORT: variables._APP_DB_PORT, + _APP_DB_SCHEMA: variables._APP_DB_SCHEMA, + _APP_DB_USER: variables._APP_DB_USER, + _APP_DB_PASS: variables._APP_DB_PASS, + _APP_STORAGE_DEVICE: variables._APP_STORAGE_DEVICE, + _APP_STORAGE_S3_ACCESS_KEY: variables._APP_STORAGE_S3_ACCESS_KEY, + _APP_STORAGE_S3_SECRET: variables._APP_STORAGE_S3_SECRET, + _APP_STORAGE_S3_REGION: variables._APP_STORAGE_S3_REGION, + _APP_STORAGE_S3_BUCKET: variables._APP_STORAGE_S3_BUCKET, + _APP_STORAGE_DO_SPACES_ACCESS_KEY: variables._APP_STORAGE_DO_SPACES_ACCESS_KEY, + _APP_STORAGE_DO_SPACES_SECRET: variables._APP_STORAGE_DO_SPACES_SECRET, + _APP_STORAGE_DO_SPACES_REGION: variables._APP_STORAGE_DO_SPACES_REGION, + _APP_STORAGE_DO_SPACES_BUCKET: variables._APP_STORAGE_DO_SPACES_BUCKET, + _APP_LOGGING_PROVIDER: variables._APP_LOGGING_PROVIDER, + _APP_LOGGING_CONFIG: variables._APP_LOGGING_CONFIG + } + }, + appwriteWorkerCertificates: { + image: `${image}:${version}`, + volumes: [ + `${id}-appwrite-config:/storage/config`, + `${id}-appwrite-certificates:/storage/certificates` + ], + environmentVariables: { + _APP_ENV: variables._APP_ENV, + _APP_OPENSSL_KEY_V1: variables._APP_OPENSSL_KEY_V1, + _APP_SYSTEM_SECURITY_EMAIL_ADDRESS: variables._APP_SYSTEM_SECURITY_EMAIL_ADDRESS, + _APP_REDIS_HOST: variables._APP_REDIS_HOST, + _APP_REDIS_PORT: variables._APP_REDIS_PORT, + _APP_REDIS_USER: variables._APP_REDIS_USER, + _APP_REDIS_PASS: variables._APP_REDIS_PASS, + _APP_DOMAIN_TARGET: variables._APP_DOMAIN_TARGET, + _APP_DB_HOST: variables._APP_DB_HOST, + _APP_DB_PORT: variables._APP_DB_PORT, + _APP_DB_SCHEMA: variables._APP_DB_SCHEMA, + _APP_DB_USER: variables._APP_DB_USER, + _APP_DB_PASS: variables._APP_DB_PASS, + _APP_LOGGING_PROVIDER: variables._APP_LOGGING_PROVIDER, + _APP_LOGGING_CONFIG: variables._APP_LOGGING_CONFIG + } + }, + appwriteWorkerFunctions: { + image: `${image}:${version}`, + envvironmentVariables: { + _APP_ENV: variables._APP_ENV, + _APP_OPENSSL_KEY_V1: variables._APP_OPENSSL_KEY_V1, + _APP_REDIS_HOST: variables._APP_REDIS_HOST, + _APP_REDIS_PORT: variables._APP_REDIS_PORT, + _APP_REDIS_USER: variables._APP_REDIS_USER, + _APP_REDIS_PASS: variables._APP_REDIS_PASS, + _APP_DB_HOST: variables._APP_DB_HOST, + _APP_DB_PORT: variables._APP_DB_PORT, + _APP_DB_SCHEMA: variables._APP_DB_SCHEMA, + _APP_DB_USER: variables._APP_DB_USER, + _APP_DB_PASS: variables._APP_DB_PASS, + _APP_FUNCTIONS_TIMEOUT: variables._APP_FUNCTIONS_TIMEOUT, + _APP_EXECUTOR_SECRET: variables._APP_EXECUTOR_SECRET, + _APP_USAGE_STATS: variables._APP_USAGE_STATS, + DOCKERHUB_PULL_USERNAME: variables.DOCKERHUB_PULL_USERNAME, + DOCKERHUB_PULL_PASSWORD: variables.DOCKERHUB_PULL_PASSWORD + } + }, + appwriteWorkerMails: { + image: `${image}:${version}`, + environmentVariables: { + _APP_ENV: variables._APP_ENV, + _APP_OPENSSL_KEY_V1: variables._APP_OPENSSL_KEY_V1, + _APP_SYSTEM_EMAIL_NAME: variables._APP_SYSTEM_EMAIL_NAME, + _APP_SYSTEM_EMAIL_ADDRESS: variables._APP_SYSTEM_EMAIL_ADDRESS, + _APP_REDIS_HOST: variables._APP_REDIS_HOST, + _APP_REDIS_PORT: variables._APP_REDIS_PORT, + _APP_REDIS_USER: variables._APP_REDIS_USER, + _APP_REDIS_PASS: variables._APP_REDIS_PASS, + _APP_SMTP_HOST: variables._APP_SMTP_HOST, + _APP_SMTP_PORT: variables._APP_SMTP_PORT, + _APP_SMTP_SECURE: variables._APP_SMTP_SECURE, + _APP_SMTP_USERNAME: variables._APP_SMTP_USERNAME, + _APP_SMTP_PASSWORD: variables._APP_SMTP_PASSWORD, + _APP_LOGGING_PROVIDER: variables._APP_LOGGING_PROVIDER, + _APP_LOGGING_CONFIG: variables._APP_LOGGING_CONFIG + } + }, + appwriteMaintenance: { + image: `${image}:${version}`, + environmentVariables: { + _APP_ENV: variables._APP_ENV, + _APP_OPENSSL_KEY_V1: variables._APP_OPENSSL_KEY_V1, + _APP_REDIS_HOST: variables._APP_REDIS_HOST, + _APP_REDIS_PORT: variables._APP_REDIS_PORT, + _APP_REDIS_USER: variables._APP_REDIS_USER, + _APP_REDIS_PASS: variables._APP_REDIS_PASS, + _APP_MAINTENANCE_INTERVAL: variables._APP_MAINTENANCE_INTERVAL, + _APP_MAINTENANCE_RETENTION_EXECUTION: variables._APP_MAINTENANCE_RETENTION_EXECUTION, + _APP_MAINTENANCE_RETENTION_ABUSE: variables._APP_MAINTENANCE_RETENTION_ABUSE, + _APP_MAINTENANCE_RETENTION_AUDIT: variables._APP_MAINTENANCE_RETENTION_AUDIT + } + }, + appwriteUsage: { + image: `${image}:${version}`, + environmentVariables: { + _APP_ENV: variables._APP_ENV, + _APP_OPENSSL_KEY_V1: variables._APP_OPENSSL_KEY_V1, + _APP_DB_HOST: variables._APP_DB_HOST, + _APP_DB_PORT: variables._APP_DB_PORT, + _APP_DB_SCHEMA: variables._APP_DB_SCHEMA, + _APP_DB_USER: variables._APP_DB_USER, + _APP_DB_PASS: variables._APP_DB_PASS, + _APP_INFLUXDB_HOST: variables._APP_INFLUXDB_HOST, + _APP_INFLUXDB_PORT: variables._APP_INFLUXDB_PORT, + _APP_USAGE_AGGREGATION_INTERVAL: variables._APP_USAGE_AGGREGATION_INTERVAL, + _APP_REDIS_HOST: variables._APP_REDIS_HOST, + _APP_REDIS_PORT: variables._APP_REDIS_PORT, + _APP_REDIS_USER: variables._APP_REDIS_USER, + _APP_REDIS_PASS: variables._APP_REDIS_PASS + } + }, + appwriteSchedule: { + image: `${image}:${version}`, + environmentVariables: { + _APP_ENV: variables._APP_ENV, + _APP_REDIS_HOST: variables._APP_REDIS_HOST, + _APP_REDIS_PORT: variables._APP_REDIS_PORT, + _APP_REDIS_USER: variables._APP_REDIS_USER, + _APP_REDIS_PASS: variables._APP_REDIS_PASS + } + }, + mariadb: { + image: 'mariadb:10.7', + volumes: [`${id}-appwrite-mariadb:/var/lib/mysql`], + environmentVariables: { + MYSQL_ROOT_PASSWORD: variables._APP_DB_ROOT_PASS, + MYSQL_DATABASE: variables._APP_DB_SCHEMA, + MYSQL_USER: variables._APP_DB_USER, + MYSQL_PASSWORD: variables._APP_DB_PASS + } + }, + redis: { + image: 'redis:6.0-alpine3.12', + volumes: [`${id}-appwrite-redis:/data`] + }, + influxdb: { + image: 'appwrite/influxdb:1.0.0', + volumes: [`${id}-appwrite-influxdb:/var/lib/influxdb`] + }, + telegraf: { + image: 'appwrite/telegraf:1.0.0', + environmentVariables: { + _APP_INFLUXDB_HOST: variables._APP_INFLUXDB_HOST, + _APP_INFLUXDB_PORT: variables._APP_INFLUXDB_PORT + } + } + }; + + const composeFile: ComposeFile = { + version: '3.8', + services: { + [id]: { + container_name: id, + image: config.image, + networks: [network], + volumes: [...config.appwrite.volumes], + environment: config.environmentVariables, + restart: 'always', + labels: makeLabelForServices('appwrite'), + ...(exposePort ? { ports: [`${exposePort}:${port}`] } : {}), + deploy: { + restart_policy: { + condition: 'on-failure', + delay: '5s', + max_attempts: 3, + window: '120s' + } + } + } + }, + networks: { + [network]: { + external: true + } + }, + volumes: { + [config.volume.split(':')[0]]: { + name: config.volume.split(':')[0] + } + } + }; + const composeFileDestination = `${workdir}/docker-compose.yaml`; + await fs.writeFile(composeFileDestination, yaml.dump(composeFile)); + + try { + await asyncExecShell(`DOCKER_HOST=${host} docker compose -f ${composeFileDestination} pull`); + await asyncExecShell(`DOCKER_HOST=${host} docker compose -f ${composeFileDestination} up -d`); + return { + status: 200 + }; + } catch (error) { + return ErrorHandler(error); + } + } catch (error) { + return ErrorHandler(error); + } +}; diff --git a/src/routes/services/[id]/appwrite/stop.json.ts b/src/routes/services/[id]/appwrite/stop.json.ts new file mode 100644 index 000000000..c604e1cc3 --- /dev/null +++ b/src/routes/services/[id]/appwrite/stop.json.ts @@ -0,0 +1,35 @@ +import { getUserDetails, removeDestinationDocker } from '$lib/common'; +import * as db from '$lib/database'; +import { ErrorHandler } from '$lib/database'; +import { checkContainer } from '$lib/haproxy'; +import type { RequestHandler } from '@sveltejs/kit'; + +export const post: RequestHandler = async (event) => { + const { teamId, status, body } = await getUserDetails(event); + if (status === 401) return { status, body }; + + const { id } = event.params; + + try { + const service = await db.getService({ id, teamId }); + const { destinationDockerId, destinationDocker, fqdn } = service; + if (destinationDockerId) { + const engine = destinationDocker.engine; + + try { + const found = await checkContainer(engine, id); + if (found) { + await removeDestinationDocker({ id, engine }); + } + } catch (error) { + console.error(error); + } + } + + return { + status: 200 + }; + } catch (error) { + return ErrorHandler(error); + } +};