WIP: Appwrite
This commit is contained in:
		| @@ -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 | ||||
| 		} | ||||
| 	} | ||||
| ]; | ||||
|  | ||||
|   | ||||
							
								
								
									
										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