feat(service): add Celld one-click service template (#11155)

This commit is contained in:
Andras Bacsai
2026-08-07 22:46:55 +02:00
committed by GitHub
4 changed files with 95 additions and 0 deletions
+24
View File
@@ -0,0 +1,24 @@
# documentation: https://celld.dev/docs
# slogan: Self-hosted, distributed Durable Objects powered by Deno.
# category: backend
# tags: deno, durable-objects, workers, sqlite, distributed, backend, serverless
# logo: svgs/denoKV.svg
# port: 8080
services:
celld:
image: 'ghcr.io/denoland/celld:${CELLD_VERSION:-latest}'
environment:
- SERVICE_URL_CELLD_8080
- CELLD_BUCKET=${CELLD_BUCKET:?}
- S3_ENDPOINT=${S3_ENDPOINT:-}
- AWS_REGION=${AWS_REGION:-us-east-1}
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:?}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:?}
- AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN:-}
- CELLD_ADDR=0.0.0.0:8080
- CELLD_ADVERTISE=celld:8080
- CELLD_WATCH=/var/lib/celld/state
- RUST_LOG=${RUST_LOG:-info}
volumes:
- celld-data:/var/lib/celld
+19
View File
@@ -536,6 +536,25 @@
"template_last_updated_at": "2026-03-13T12:05:06+05:30",
"port": "8080"
},
"celld": {
"documentation": "https://celld.dev/docs?utm_source=coolify.io",
"slogan": "Self-hosted, distributed Durable Objects powered by Deno.",
"compose": "c2VydmljZXM6CiAgY2VsbGQ6CiAgICBpbWFnZTogJ2doY3IuaW8vZGVub2xhbmQvY2VsbGQ6JHtDRUxMRF9WRVJTSU9OOi1sYXRlc3R9JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9VUkxfQ0VMTERfODA4MAogICAgICAtICdDRUxMRF9CVUNLRVQ9JHtDRUxMRF9CVUNLRVQ6P30nCiAgICAgIC0gJ1MzX0VORFBPSU5UPSR7UzNfRU5EUE9JTlQ6LX0nCiAgICAgIC0gJ0FXU19SRUdJT049JHtBV1NfUkVHSU9OOi11cy1lYXN0LTF9JwogICAgICAtICdBV1NfQUNDRVNTX0tFWV9JRD0ke0FXU19BQ0NFU1NfS0VZX0lEOj99JwogICAgICAtICdBV1NfU0VDUkVUX0FDQ0VTU19LRVk9JHtBV1NfU0VDUkVUX0FDQ0VTU19LRVk6P30nCiAgICAgIC0gJ0FXU19TRVNTSU9OX1RPS0VOPSR7QVdTX1NFU1NJT05fVE9LRU46LX0nCiAgICAgIC0gJ0NFTExEX0FERFI9MC4wLjAuMDo4MDgwJwogICAgICAtICdDRUxMRF9BRFZFUlRJU0U9Y2VsbGQ6ODA4MCcKICAgICAgLSBDRUxMRF9XQVRDSD0vdmFyL2xpYi9jZWxsZC9zdGF0ZQogICAgICAtICdSVVNUX0xPRz0ke1JVU1RfTE9HOi1pbmZvfScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2NlbGxkLWRhdGE6L3Zhci9saWIvY2VsbGQnCg==",
"tags": [
"deno",
"durable-objects",
"workers",
"sqlite",
"distributed",
"backend",
"serverless"
],
"category": "backend",
"logo": "svgs/denoKV.svg",
"minversion": "0.0.0",
"template_last_updated_at": "2026-08-07T14:41:11+02:00",
"port": "8080"
},
"changedetection": {
"documentation": "https://github.com/dgtlmoon/changedetection.io/?utm_source=coolify.io",
"slogan": "Website change detection monitor and notifications.",
+19
View File
@@ -536,6 +536,25 @@
"template_last_updated_at": "2026-03-13T12:05:06+05:30",
"port": "8080"
},
"celld": {
"documentation": "https://celld.dev/docs?utm_source=coolify.io",
"slogan": "Self-hosted, distributed Durable Objects powered by Deno.",
"compose": "c2VydmljZXM6CiAgY2VsbGQ6CiAgICBpbWFnZTogJ2doY3IuaW8vZGVub2xhbmQvY2VsbGQ6JHtDRUxMRF9WRVJTSU9OOi1sYXRlc3R9JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0NFTExEXzgwODAKICAgICAgLSAnQ0VMTERfQlVDS0VUPSR7Q0VMTERfQlVDS0VUOj99JwogICAgICAtICdTM19FTkRQT0lOVD0ke1MzX0VORFBPSU5UOi19JwogICAgICAtICdBV1NfUkVHSU9OPSR7QVdTX1JFR0lPTjotdXMtZWFzdC0xfScKICAgICAgLSAnQVdTX0FDQ0VTU19LRVlfSUQ9JHtBV1NfQUNDRVNTX0tFWV9JRDo/fScKICAgICAgLSAnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZPSR7QVdTX1NFQ1JFVF9BQ0NFU1NfS0VZOj99JwogICAgICAtICdBV1NfU0VTU0lPTl9UT0tFTj0ke0FXU19TRVNTSU9OX1RPS0VOOi19JwogICAgICAtICdDRUxMRF9BRERSPTAuMC4wLjA6ODA4MCcKICAgICAgLSAnQ0VMTERfQURWRVJUSVNFPWNlbGxkOjgwODAnCiAgICAgIC0gQ0VMTERfV0FUQ0g9L3Zhci9saWIvY2VsbGQvc3RhdGUKICAgICAgLSAnUlVTVF9MT0c9JHtSVVNUX0xPRzotaW5mb30nCiAgICB2b2x1bWVzOgogICAgICAtICdjZWxsZC1kYXRhOi92YXIvbGliL2NlbGxkJwo=",
"tags": [
"deno",
"durable-objects",
"workers",
"sqlite",
"distributed",
"backend",
"serverless"
],
"category": "backend",
"logo": "svgs/denoKV.svg",
"minversion": "0.0.0",
"template_last_updated_at": "2026-08-07T14:41:11+02:00",
"port": "8080"
},
"changedetection": {
"documentation": "https://github.com/dgtlmoon/changedetection.io/?utm_source=coolify.io",
"slogan": "Website change detection monitor and notifications.",
+33
View File
@@ -0,0 +1,33 @@
<?php
it('includes a celld one-click service template', function () {
$compose = file_get_contents(__DIR__.'/../../templates/compose/celld.yaml');
expect($compose)
->toContain('ghcr.io/denoland/celld:${CELLD_VERSION:-latest}')
->toContain('SERVICE_URL_CELLD_8080')
->toContain('CELLD_BUCKET=${CELLD_BUCKET:?}')
->toContain('S3_ENDPOINT=${S3_ENDPOINT:-}')
->toContain('CELLD_ADDR=0.0.0.0:8080')
->toContain('CELLD_ADVERTISE=celld:8080')
->toContain('celld-data:/var/lib/celld');
foreach (['service-templates.json', 'service-templates-latest.json'] as $templateFile) {
$templates = json_decode(
file_get_contents(__DIR__."/../../templates/{$templateFile}"),
associative: true,
flags: JSON_THROW_ON_ERROR,
);
expect($templates)->toHaveKey('celld');
expect($templates['celld']['port'] ?? null)->toBe('8080');
expect($templates['celld']['logo'] ?? null)->toBe('svgs/denoKV.svg');
expect($templates['celld']['category'] ?? null)->toBe('backend');
$generatedCompose = base64_decode($templates['celld']['compose'], strict: true);
expect($generatedCompose)
->toContain('ghcr.io/denoland/celld:${CELLD_VERSION:-latest}')
->toContain('CELLD_BUCKET=${CELLD_BUCKET:?}');
}
});