cleanup + arm support
This commit is contained in:
parent
eb0aa20fe1
commit
71496d5229
@ -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
|
||||||
|
@ -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) {
|
||||||
|
@ -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',
|
||||||
|
@ -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 }
|
|
||||||
}
|
|
@ -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
@ -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));
|
||||||
|
|
||||||
|
@ -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' }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -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}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user