mirror of
https://github.com/cupcakearmy/coolify.git
synced 2024-10-23 08:34:11 +02:00
commit
3802158ad5
@ -61,6 +61,7 @@ ### Applications
|
|||||||
- Laravel
|
- Laravel
|
||||||
- Rust
|
- Rust
|
||||||
- Docker
|
- Docker
|
||||||
|
- Python
|
||||||
|
|
||||||
### Databases
|
### Databases
|
||||||
|
|
||||||
@ -77,9 +78,9 @@ ### One-click services
|
|||||||
|
|
||||||
You can host cool open-source services as well:
|
You can host cool open-source services as well:
|
||||||
|
|
||||||
- [WordPress](https://wordpress.org)
|
- [WordPress](https://docs.coollabs.io/coolify/services/wordpress)
|
||||||
- [Ghost](https://ghost.org)
|
- [Ghost](https://ghost.org)
|
||||||
- [Plausible Analytics](https://plausible.io)
|
- [Plausible Analytics](https://docs.coollabs.io/coolify/services/plausible-analytics)
|
||||||
- [NocoDB](https://nocodb.com)
|
- [NocoDB](https://nocodb.com)
|
||||||
- [VSCode Server](https://github.com/cdr/code-server)
|
- [VSCode Server](https://github.com/cdr/code-server)
|
||||||
- [MinIO](https://min.io)
|
- [MinIO](https://min.io)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "coolify",
|
"name": "coolify",
|
||||||
"description": "An open-source & self-hostable Heroku / Netlify alternative.",
|
"description": "An open-source & self-hostable Heroku / Netlify alternative.",
|
||||||
"version": "2.8.0",
|
"version": "2.8.1",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "docker-compose -f docker-compose-dev.yaml up -d && cross-env NODE_ENV=development & svelte-kit dev --host 0.0.0.0",
|
"dev": "docker-compose -f docker-compose-dev.yaml up -d && cross-env NODE_ENV=development & svelte-kit dev --host 0.0.0.0",
|
||||||
|
@ -406,6 +406,10 @@ export function setDefaultBaseImage(buildPack) {
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
const pythonVersions = [
|
const pythonVersions = [
|
||||||
|
{
|
||||||
|
value: 'python:3.10-alpine',
|
||||||
|
label: 'python:3.10-alpine'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
value: 'python:3.10-buster',
|
value: 'python:3.10-buster',
|
||||||
label: 'python:3.10-buster'
|
label: 'python:3.10-buster'
|
||||||
@ -486,7 +490,7 @@ export function setDefaultBaseImage(buildPack) {
|
|||||||
payload.baseBuildImages = nodeVersions;
|
payload.baseBuildImages = nodeVersions;
|
||||||
}
|
}
|
||||||
if (buildPack === 'python') {
|
if (buildPack === 'python') {
|
||||||
payload.baseImage = 'python:3-alpine';
|
payload.baseImage = 'python:3.10-alpine';
|
||||||
payload.baseImages = pythonVersions;
|
payload.baseImages = pythonVersions;
|
||||||
}
|
}
|
||||||
if (buildPack === 'rust') {
|
if (buildPack === 'rust') {
|
||||||
|
@ -418,20 +418,27 @@ export async function updateWordpress({
|
|||||||
fqdn,
|
fqdn,
|
||||||
name,
|
name,
|
||||||
exposePort,
|
exposePort,
|
||||||
|
ownMysql,
|
||||||
mysqlDatabase,
|
mysqlDatabase,
|
||||||
extraConfig,
|
extraConfig,
|
||||||
mysqlHost,
|
mysqlHost,
|
||||||
mysqlPort
|
mysqlPort,
|
||||||
|
mysqlUser,
|
||||||
|
mysqlPassword
|
||||||
}: {
|
}: {
|
||||||
id: string;
|
id: string;
|
||||||
fqdn: string;
|
fqdn: string;
|
||||||
name: string;
|
name: string;
|
||||||
exposePort?: number;
|
exposePort?: number;
|
||||||
|
ownMysql: boolean;
|
||||||
mysqlDatabase: string;
|
mysqlDatabase: string;
|
||||||
extraConfig: string;
|
extraConfig: string;
|
||||||
mysqlHost?: string;
|
mysqlHost?: string;
|
||||||
mysqlPort?: number;
|
mysqlPort?: number;
|
||||||
|
mysqlUser?: string;
|
||||||
|
mysqlPassword?: string;
|
||||||
}): Promise<Service> {
|
}): Promise<Service> {
|
||||||
|
mysqlPassword = encrypt(mysqlPassword);
|
||||||
return await prisma.service.update({
|
return await prisma.service.update({
|
||||||
where: { id },
|
where: { id },
|
||||||
data: {
|
data: {
|
||||||
@ -443,6 +450,8 @@ export async function updateWordpress({
|
|||||||
mysqlDatabase,
|
mysqlDatabase,
|
||||||
extraConfig,
|
extraConfig,
|
||||||
mysqlHost,
|
mysqlHost,
|
||||||
|
mysqlUser,
|
||||||
|
mysqlPassword,
|
||||||
mysqlPort
|
mysqlPort
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-center">
|
<div class="flex-col justify-center">
|
||||||
{#if !applications || ownApplications.length === 0}
|
{#if !applications || ownApplications.length === 0}
|
||||||
<div class="flex-col">
|
<div class="flex-col">
|
||||||
<div class="text-center text-xl font-bold">{$t('application.no_applications_found')}</div>
|
<div class="text-center text-xl font-bold">{$t('application.no_applications_found')}</div>
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex justify-center">
|
<div class="flex-col justify-center">
|
||||||
{#if !databases || ownDatabases.length === 0}
|
{#if !databases || ownDatabases.length === 0}
|
||||||
<div class="flex-col">
|
<div class="flex-col">
|
||||||
<div class="text-center text-xl font-bold">{$t('database.no_databases_found')}</div>
|
<div class="text-center text-xl font-bold">{$t('database.no_databases_found')}</div>
|
||||||
|
@ -58,7 +58,7 @@
|
|||||||
</a>
|
</a>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-center">
|
<div class="flex-col justify-center">
|
||||||
{#if !destinations || ownDestinations.length === 0}
|
{#if !destinations || ownDestinations.length === 0}
|
||||||
<div class="flex-col">
|
<div class="flex-col">
|
||||||
<div class="text-center text-xl font-bold">{$t('destination.no_destination_found')}</div>
|
<div class="text-center text-xl font-bold">{$t('destination.no_destination_found')}</div>
|
||||||
|
@ -140,7 +140,6 @@
|
|||||||
{#if $session.teamId === '0'}
|
{#if $session.teamId === '0'}
|
||||||
<div class="px-6 text-2xl font-bold">Server Usage</div>
|
<div class="px-6 text-2xl font-bold">Server Usage</div>
|
||||||
<dl class="relative mt-5 grid grid-cols-1 gap-5 sm:grid-cols-3">
|
<dl class="relative mt-5 grid grid-cols-1 gap-5 sm:grid-cols-3">
|
||||||
<Loading />
|
|
||||||
<div class="overflow-hidden rounded px-4 py-5 text-center sm:p-6 sm:text-left">
|
<div class="overflow-hidden rounded px-4 py-5 text-center sm:p-6 sm:text-left">
|
||||||
<dt class="truncate text-sm font-medium text-white">Total Memory</dt>
|
<dt class="truncate text-sm font-medium text-white">Total Memory</dt>
|
||||||
<dd class="mt-1 text-3xl font-semibold text-white">
|
<dd class="mt-1 text-3xl font-semibold text-white">
|
||||||
@ -175,12 +174,6 @@
|
|||||||
{usage?.cpu.count}
|
{usage?.cpu.count}
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div class="overflow-hidden rounded px-4 py-5 text-center sm:p-6 sm:text-left">
|
|
||||||
<dt class="truncate text-sm font-medium text-white">Load Average (5/10/30mins)</dt>
|
|
||||||
<dd class="mt-1 text-3xl font-semibold text-white">
|
|
||||||
{usage?.cpu.load.join('/')}
|
|
||||||
</dd>
|
|
||||||
</div>
|
|
||||||
<div
|
<div
|
||||||
class="overflow-hidden rounded px-4 py-5 text-center sm:p-6 sm:text-left"
|
class="overflow-hidden rounded px-4 py-5 text-center sm:p-6 sm:text-left"
|
||||||
class:bg-red-500={cpuWarning}
|
class:bg-red-500={cpuWarning}
|
||||||
@ -193,6 +186,12 @@
|
|||||||
{/if}
|
{/if}
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="overflow-hidden rounded px-4 py-5 text-center sm:p-6 sm:text-left">
|
||||||
|
<dt class="truncate text-sm font-medium text-white">Load Average (5/10/30mins)</dt>
|
||||||
|
<dd class="mt-1 text-3xl font-semibold text-white">
|
||||||
|
{usage?.cpu.load.join('/')}
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
</dl>
|
</dl>
|
||||||
<dl class="relative mt-5 grid grid-cols-1 gap-5 sm:grid-cols-3">
|
<dl class="relative mt-5 grid grid-cols-1 gap-5 sm:grid-cols-3">
|
||||||
<div class="overflow-hidden rounded px-4 py-5 text-center sm:p-6 sm:text-left">
|
<div class="overflow-hidden rounded px-4 py-5 text-center sm:p-6 sm:text-left">
|
||||||
@ -255,7 +254,7 @@
|
|||||||
</dd>
|
</dd>
|
||||||
</a>
|
</a>
|
||||||
</dl>
|
</dl>
|
||||||
<dl class="mt-5 grid grid-cols-1 gap-5 sm:grid-cols-3">
|
<dl class="mt-5 grid grid-cols-1 gap-5 px-2 sm:grid-cols-3">
|
||||||
<a
|
<a
|
||||||
href="/databases"
|
href="/databases"
|
||||||
sveltekit:prefetch
|
sveltekit:prefetch
|
||||||
|
@ -175,8 +175,8 @@ define('SUBDOMAIN_INSTALL', false);`
|
|||||||
id="mysqlRootUser"
|
id="mysqlRootUser"
|
||||||
placeholder="MySQL {$t('forms.root_user')}"
|
placeholder="MySQL {$t('forms.root_user')}"
|
||||||
value={service.wordpress.mysqlRootUser}
|
value={service.wordpress.mysqlRootUser}
|
||||||
readonly={isRunning || !service.wordpress.ownMysq}
|
readonly={isRunning || !service.wordpress.ownMysql}
|
||||||
disabled={isRunning || !service.wordpress.ownMysq}
|
disabled={isRunning || !service.wordpress.ownMysql}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid grid-cols-2 items-center px-10">
|
<div class="grid grid-cols-2 items-center px-10">
|
||||||
@ -184,8 +184,8 @@ define('SUBDOMAIN_INSTALL', false);`
|
|||||||
<CopyPasswordField
|
<CopyPasswordField
|
||||||
id="mysqlRootUserPassword"
|
id="mysqlRootUserPassword"
|
||||||
isPasswordField
|
isPasswordField
|
||||||
readonly={isRunning || !service.wordpress.ownMysq}
|
readonly={isRunning || !service.wordpress.ownMysql}
|
||||||
disabled={isRunning || !service.wordpress.ownMysq}
|
disabled={isRunning || !service.wordpress.ownMysql}
|
||||||
name="mysqlRootUserPassword"
|
name="mysqlRootUserPassword"
|
||||||
value={service.wordpress.mysqlRootUserPassword}
|
value={service.wordpress.mysqlRootUserPassword}
|
||||||
/>
|
/>
|
||||||
@ -196,7 +196,7 @@ define('SUBDOMAIN_INSTALL', false);`
|
|||||||
<input
|
<input
|
||||||
name="mysqlUser"
|
name="mysqlUser"
|
||||||
id="mysqlUser"
|
id="mysqlUser"
|
||||||
value={service.wordpress.mysqlUser}
|
bind:value={service.wordpress.mysqlUser}
|
||||||
readonly={isRunning || !service.wordpress.ownMysql}
|
readonly={isRunning || !service.wordpress.ownMysql}
|
||||||
disabled={isRunning || !service.wordpress.ownMysql}
|
disabled={isRunning || !service.wordpress.ownMysql}
|
||||||
/>
|
/>
|
||||||
@ -209,6 +209,6 @@ define('SUBDOMAIN_INSTALL', false);`
|
|||||||
readonly={isRunning || !service.wordpress.ownMysql}
|
readonly={isRunning || !service.wordpress.ownMysql}
|
||||||
disabled={isRunning || !service.wordpress.ownMysql}
|
disabled={isRunning || !service.wordpress.ownMysql}
|
||||||
name="mysqlPassword"
|
name="mysqlPassword"
|
||||||
value={service.wordpress.mysqlPassword}
|
bind:value={service.wordpress.mysqlPassword}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -12,23 +12,25 @@ export const post: RequestHandler = async (event) => {
|
|||||||
name,
|
name,
|
||||||
fqdn,
|
fqdn,
|
||||||
exposePort,
|
exposePort,
|
||||||
wordpress: { extraConfig, mysqlDatabase, mysqlHost, mysqlPort }
|
ownMysql,
|
||||||
|
wordpress: { extraConfig, mysqlDatabase, mysqlHost, mysqlPort, mysqlUser, mysqlPassword }
|
||||||
} = await event.request.json();
|
} = await event.request.json();
|
||||||
|
|
||||||
if (fqdn) fqdn = fqdn.toLowerCase();
|
if (fqdn) fqdn = fqdn.toLowerCase();
|
||||||
if (exposePort) exposePort = Number(exposePort);
|
if (exposePort) exposePort = Number(exposePort);
|
||||||
if (mysqlPort) mysqlPort = Number(mysqlPort);
|
if (mysqlPort) mysqlPort = Number(mysqlPort);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await db.updateWordpress({
|
await db.updateWordpress({
|
||||||
id,
|
id,
|
||||||
fqdn,
|
fqdn,
|
||||||
name,
|
name,
|
||||||
extraConfig,
|
extraConfig,
|
||||||
|
ownMysql,
|
||||||
mysqlDatabase,
|
mysqlDatabase,
|
||||||
exposePort,
|
exposePort,
|
||||||
mysqlHost,
|
mysqlHost,
|
||||||
mysqlPort
|
mysqlPort,
|
||||||
|
mysqlUser,
|
||||||
|
mysqlPassword
|
||||||
});
|
});
|
||||||
return { status: 201 };
|
return { status: 201 };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex justify-center">
|
<div class="flex-col justify-center">
|
||||||
{#if !services || ownServices.length === 0}
|
{#if !services || ownServices.length === 0}
|
||||||
<div class="flex-col">
|
<div class="flex-col">
|
||||||
<div class="text-center text-xl font-bold">{$t('service.no_service')}</div>
|
<div class="text-center text-xl font-bold">{$t('service.no_service')}</div>
|
||||||
|
@ -62,7 +62,7 @@
|
|||||||
</button>
|
</button>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-center">
|
<div class="flex-col justify-center">
|
||||||
{#if !sources || ownSources.length === 0}
|
{#if !sources || ownSources.length === 0}
|
||||||
<div class="flex-col">
|
<div class="flex-col">
|
||||||
<div class="text-center text-xl font-bold">{$t('source.no_git_sources_found')}</div>
|
<div class="text-center text-xl font-bold">{$t('source.no_git_sources_found')}</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user