WIP: Appwrite
This commit is contained in:
		| @@ -219,6 +219,17 @@ export const supportedServiceTypesAndVersions = [ | |||||||
| 		ports: { | 		ports: { | ||||||
| 			main: 3000 | 			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 | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| ]; | ]; | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										21
									
								
								src/routes/services/[id]/appwrite/index.json.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/routes/services/[id]/appwrite/index.json.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -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); | ||||||
|  | 	} | ||||||
|  | }; | ||||||
							
								
								
									
										519
									
								
								src/routes/services/[id]/appwrite/start.json.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										519
									
								
								src/routes/services/[id]/appwrite/start.json.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -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); | ||||||
|  | 	} | ||||||
|  | }; | ||||||
							
								
								
									
										35
									
								
								src/routes/services/[id]/appwrite/stop.json.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								src/routes/services/[id]/appwrite/stop.json.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -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); | ||||||
|  | 	} | ||||||
|  | }; | ||||||
		Reference in New Issue
	
	Block a user
	 Andras Bacsai
					Andras Bacsai