cleanup + arm support

This commit is contained in:
Andras Bacsai 2022-10-26 10:49:30 +02:00
parent eb0aa20fe1
commit 71496d5229
9 changed files with 82 additions and 2812 deletions

View File

@ -1771,8 +1771,11 @@
$$id-mysql: $$id-mysql:
name: MySQL name: MySQL
depends_on: [] depends_on: []
image: 'mysql:5.7' image: 'bitnami/mysql:5.7'
imageArm : 'mysql:5.7'
volumes: volumes:
- '$$id-mysql-data:/bitnami/mysql/data'
volumesArm:
- '$$id-mysql-data:/var/lib/mysql' - '$$id-mysql-data:/var/lib/mysql'
environment: environment:
- MYSQL_ROOT_PASSWORD=$$secret_mysql_root_password - MYSQL_ROOT_PASSWORD=$$secret_mysql_root_password
@ -1780,7 +1783,6 @@
- MYSQL_DATABASE=$$config_mysql_database - MYSQL_DATABASE=$$config_mysql_database
- MYSQL_USER=$$config_mysql_user - MYSQL_USER=$$config_mysql_user
- MYSQL_PASSWORD=$$secret_mysql_password - MYSQL_PASSWORD=$$secret_mysql_password
ports: []
variables: variables:
- id: $$config_wordpress_db_host - id: $$config_wordpress_db_host
name: WORDPRESS_DB_HOST name: WORDPRESS_DB_HOST

View File

@ -1,13 +1,34 @@
import cuid from "cuid"; import cuid from "cuid";
import { decrypt, encrypt, fixType, generatePassword, getDomain, prisma } from "./lib/common"; import { decrypt, encrypt, fixType, generatePassword, getDomain, prisma } from "./lib/common";
import { getTemplates } from "./lib/services"; import { getTemplates } from "./lib/services";
import { includeServices } from "./lib/services/common";
export async function migrateServicesToNewTemplate() { export async function migrateServicesToNewTemplate() {
// This function migrates old hardcoded services to the new template based services // This function migrates old hardcoded services to the new template based services
try { try {
let templates = await getTemplates() let templates = await getTemplates()
const services: any = await prisma.service.findMany({ include: includeServices }) const services: any = await prisma.service.findMany({
include: {
destinationDocker: true,
persistentStorage: true,
serviceSecret: true,
serviceSetting: true,
minio: true,
plausibleAnalytics: true,
vscodeserver: true,
wordpress: true,
ghost: true,
meiliSearch: true,
umami: true,
hasura: true,
fider: true,
moodle: true,
appwrite: true,
glitchTip: true,
searxng: true,
weblate: true,
taiga: true,
}
})
for (const service of services) { for (const service of services) {
const { id } = service const { id } = service
if (!service.type) { if (!service.type) {

View File

@ -17,8 +17,6 @@ import { day } from './dayjs';
import * as serviceFields from './services/serviceFields'; import * as serviceFields from './services/serviceFields';
import { saveBuildLog } from './buildPacks/common'; import { saveBuildLog } from './buildPacks/common';
import { scheduler } from './scheduler'; import { scheduler } from './scheduler';
import { supportedServiceTypesAndVersions } from './services/supportedVersions';
import { includeServices } from './services/common';
export const version = '3.10.16'; export const version = '3.10.16';
export const isDev = process.env.NODE_ENV === 'development'; export const isDev = process.env.NODE_ENV === 'development';
@ -400,12 +398,6 @@ export function generateTimestamp(): string {
return `${day().format('HH:mm:ss.SSS')}`; return `${day().format('HH:mm:ss.SSS')}`;
} }
export async function listServicesWithIncludes(): Promise<any> {
return await prisma.service.findMany({
include: includeServices,
orderBy: { createdAt: 'desc' }
});
}
export const supportedDatabaseTypesAndVersions = [ export const supportedDatabaseTypesAndVersions = [
{ {
@ -1452,7 +1444,12 @@ export async function getServiceFromDB({
const settings = await prisma.setting.findFirst(); const settings = await prisma.setting.findFirst();
const body = await prisma.service.findFirst({ const body = await prisma.service.findFirst({
where: { id, teams: { some: { id: teamId === '0' ? undefined : teamId } } }, where: { id, teams: { some: { id: teamId === '0' ? undefined : teamId } } },
include: includeServices include: {
destinationDocker: true,
persistentStorage: true,
serviceSecret: true,
serviceSetting: true,
}
}); });
if (!body) { if (!body) {
return null return null
@ -1469,22 +1466,6 @@ export async function getServiceFromDB({
return { ...body, settings }; return { ...body, settings };
} }
export function getServiceImage(type: string): string {
const found = supportedServiceTypesAndVersions.find((t) => t.name === type);
if (found) {
return found.baseImage;
}
return '';
}
export function getServiceImages(type: string): string[] {
const found = supportedServiceTypesAndVersions.find((t) => t.name === type);
if (found) {
return found.images;
}
return [];
}
export function saveUpdateableFields(type: string, data: any) { export function saveUpdateableFields(type: string, data: any) {
const update = {}; const update = {};
if (type && serviceFields[type]) { if (type && serviceFields[type]) {
@ -1534,14 +1515,6 @@ export function fixType(type) {
return type?.replaceAll(' ', '').toLowerCase() || null; return type?.replaceAll(' ', '').toLowerCase() || null;
} }
export const getServiceMainPort = (service: string) => {
const serviceType = supportedServiceTypesAndVersions.find((s) => s.name === service);
if (serviceType) {
return serviceType.ports.main;
}
return null;
};
export function makeLabelForServices(type) { export function makeLabelForServices(type) {
return [ return [
'coolify.managed=true', 'coolify.managed=true',

View File

@ -1,4 +1,4 @@
import { createDirectories, getServiceFromDB, getServiceImage, getServiceMainPort, isDev, makeLabelForServices } from "./common"; import { isDev } from "./common";
import fs from 'fs/promises'; import fs from 'fs/promises';
export async function getTemplates() { export async function getTemplates() {
let templates: any = []; let templates: any = [];
@ -141,21 +141,3 @@ export async function getTemplates() {
// } // }
return templates return templates
} }
export async function defaultServiceConfigurations({ id, teamId }) {
const service = await getServiceFromDB({ id, teamId });
const { destinationDockerId, destinationDocker, type, serviceSecret } = service;
const network = destinationDockerId && destinationDocker.network;
const port = getServiceMainPort(type);
const { workdir } = await createDirectories({ repository: type, buildId: id });
const image = getServiceImage(type);
let secrets = [];
if (serviceSecret.length > 0) {
serviceSecret.forEach((secret) => {
secrets.push(`${secret.name}=${secret.value}`);
});
}
return { ...service, network, port, workdir, image, secrets }
}

View File

@ -2,27 +2,6 @@
import cuid from 'cuid'; import cuid from 'cuid';
import { encrypt, generatePassword, prisma } from '../common'; import { encrypt, generatePassword, prisma } from '../common';
export const includeServices: any = {
destinationDocker: true,
persistentStorage: true,
serviceSecret: true,
serviceSetting: true,
minio: true,
plausibleAnalytics: true,
vscodeserver: true,
wordpress: true,
ghost: true,
meiliSearch: true,
umami: true,
hasura: true,
fider: true,
moodle: true,
appwrite: true,
glitchTip: true,
searxng: true,
weblate: true,
taiga: true,
};
export async function configureServiceType({ export async function configureServiceType({
id, id,
type type

File diff suppressed because it is too large Load Diff

View File

@ -70,11 +70,9 @@ const root: FastifyPluginAsync = async (fastify): Promise<void> => {
fastify.post<SaveServiceDestination>('/:id/configuration/destination', async (request, reply) => await saveServiceDestination(request, reply)); fastify.post<SaveServiceDestination>('/:id/configuration/destination', async (request, reply) => await saveServiceDestination(request, reply));
fastify.get<OnlyId>('/:id/usage', async (request) => await getServiceUsage(request)); fastify.get<OnlyId>('/:id/usage', async (request) => await getServiceUsage(request));
// fastify.get<GetServiceLogs>('/:id/logs', async (request) => await getServiceLogs(request));
fastify.get<GetServiceLogs>('/:id/logs/:containerId', async (request) => await getServiceLogs(request)); fastify.get<GetServiceLogs>('/:id/logs/:containerId', async (request) => await getServiceLogs(request));
fastify.post<ServiceStartStop>('/:id/start', async (request) => await startService(request)); fastify.post<ServiceStartStop>('/:id/start', async (request) => await startService(request));
fastify.post<ServiceStartStop>('/:id/:type/start', async (request) => await startService(request));
fastify.post<ServiceStartStop>('/:id/:type/stop', async (request) => await stopService(request)); fastify.post<ServiceStartStop>('/:id/:type/stop', async (request) => await stopService(request));
fastify.post<ServiceStartStop & SetWordpressSettings & SetGlitchTipSettings>('/:id/:type/settings', async (request, reply) => await setSettingsService(request, reply)); fastify.post<ServiceStartStop & SetWordpressSettings & SetGlitchTipSettings>('/:id/:type/settings', async (request, reply) => await setSettingsService(request, reply));

View File

@ -1,7 +1,6 @@
import { FastifyRequest } from "fastify"; import { FastifyRequest } from "fastify";
import { errorHandler, getDomain, isDev, prisma, executeDockerCmd, fixType } from "../../../lib/common"; import { errorHandler, getDomain, isDev, prisma, executeDockerCmd, fixType } from "../../../lib/common";
import { supportedServiceTypesAndVersions } from "../../../lib/services/supportedVersions"; import { supportedServiceTypesAndVersions } from "../../../lib/services/supportedVersions";
import { includeServices } from "../../../lib/services/common";
import { TraefikOtherConfiguration } from "./types"; import { TraefikOtherConfiguration } from "./types";
import { OnlyId } from "../../../types"; import { OnlyId } from "../../../types";
import { getTemplates } from "../../../lib/services"; import { getTemplates } from "../../../lib/services";
@ -363,7 +362,12 @@ export async function traefikConfiguration(request, reply) {
} }
const services: any = await prisma.service.findMany({ const services: any = await prisma.service.findMany({
where: { destinationDocker: { remoteEngine: false } }, where: { destinationDocker: { remoteEngine: false } },
include: includeServices, include: {
destinationDocker: true,
persistentStorage: true,
serviceSecret: true,
serviceSetting: true,
},
orderBy: { createdAt: 'desc' }, orderBy: { createdAt: 'desc' },
}); });
@ -849,7 +853,12 @@ export async function remoteTraefikConfiguration(request: FastifyRequest<OnlyId>
} }
const services: any = await prisma.service.findMany({ const services: any = await prisma.service.findMany({
where: { destinationDocker: { id } }, where: { destinationDocker: { id } },
include: includeServices, include: {
destinationDocker: true,
persistentStorage: true,
serviceSecret: true,
serviceSetting: true,
},
orderBy: { createdAt: 'desc' } orderBy: { createdAt: 'desc' }
}); });

View File

@ -228,7 +228,7 @@
class:loading={loading.cleanup}>Cleanup Unnecessary Database Logs</button class:loading={loading.cleanup}>Cleanup Unnecessary Database Logs</button
> >
{/if} {/if}
{#if service.type === 'appwrite' && $status.service.isRunning} {#if service.type === 'appwrite' && $status.service.overallStatus === 'healthy'}
<button <button
class="btn btn-sm" class="btn btn-sm"
on:click|preventDefault={migrateAppwriteDB} on:click|preventDefault={migrateAppwriteDB}