diff --git a/templates/dockerizalo/assets/logo.png b/templates/dockerizalo/assets/logo.png new file mode 100644 index 000000000..ad0a04109 Binary files /dev/null and b/templates/dockerizalo/assets/logo.png differ diff --git a/templates/dockerizalo/assets/screenshot.png b/templates/dockerizalo/assets/screenshot.png new file mode 100644 index 000000000..7f3b5b8c9 Binary files /dev/null and b/templates/dockerizalo/assets/screenshot.png differ diff --git a/templates/dockerizalo/index.ts b/templates/dockerizalo/index.ts new file mode 100644 index 000000000..f2a1a7b2e --- /dev/null +++ b/templates/dockerizalo/index.ts @@ -0,0 +1,94 @@ +import { + Output, + randomPassword, + randomString, + Services, +} from "~templates-utils"; +import { Input } from "./meta"; + +export function generate(input: Input): Output { + const services: Services = []; + const databasePassword = randomPassword(); + const appSecret = randomString(32); + + const caddyfile = `:8080 { + handle_path /api* { + reverse_proxy $(PROJECT_NAME)_${input.appServiceName}-api:8080 + } + + reverse_proxy $(PROJECT_NAME)_${input.appServiceName}-ui:80 +} +`; + + services.push({ + type: "app", + data: { + serviceName: input.appServiceName, + source: { + type: "image", + image: input.proxyImage, + }, + domains: [ + { + host: "$(EASYPANEL_DOMAIN)", + port: 8080, + }, + ], + mounts: [ + { + type: "file", + content: caddyfile, + mountPath: "/etc/caddy/Caddyfile", + }, + ], + }, + }); + + services.push({ + type: "app", + data: { + serviceName: `${input.appServiceName}-api`, + source: { + type: "image", + image: input.apiImage, + }, + env: [ + `DATABASE_URL=postgresql://postgres:${databasePassword}@$(PROJECT_NAME)_${input.appServiceName}-db:5432/$(PROJECT_NAME)?schema=public`, + `APP_SECRET=${appSecret}`, + ].join("\n"), + mounts: [ + { + type: "volume", + name: "data", + mountPath: "/data/dockerizalo", + }, + { + type: "bind", + hostPath: "/var/run/docker.sock", + mountPath: "/var/run/docker.sock", + }, + ], + }, + }); + + services.push({ + type: "app", + data: { + serviceName: `${input.appServiceName}-ui`, + source: { + type: "image", + image: input.uiImage, + }, + }, + }); + + services.push({ + type: "postgres", + data: { + serviceName: `${input.appServiceName}-db`, + password: databasePassword, + }, + }); + + return { services }; +} diff --git a/templates/dockerizalo/meta.yaml b/templates/dockerizalo/meta.yaml new file mode 100644 index 000000000..e9e44c669 --- /dev/null +++ b/templates/dockerizalo/meta.yaml @@ -0,0 +1,81 @@ +name: Dockerizalo +description: + Dockerizalo is a lightweight, self-hosted deployment platform for homelabbers. + Point it at a Git repository and it clones, builds, and runs the app as a + container on your existing Docker host, while managing secrets, volumes, + ports, and build/runtime logs from a web dashboard. It has no built-in reverse + proxy for deployed apps, so pair it with your own domain routing on the + containers it creates. +instructions: | + Open the app URL to reach the dashboard and create your first account. + The API service is given direct access to the host's Docker socket so it + can build and run containers on your behalf, so treat this deployment + with the same care as direct server access and keep it behind + authentication you trust. +changeLog: + - date: 2026-07-13 + description: first release +links: + - label: GitHub + url: https://github.com/undernightcore/dockerizalo +contributors: + - name: Ahson Shaikh + url: https://github.com/Ahson-Shaikh +schema: + type: object + required: + - appServiceName + - proxyImage + - apiImage + - uiImage + properties: + appServiceName: + type: string + title: App Service Name + default: dockerizalo + proxyImage: + type: string + title: Proxy Image + description: Only a "latest" tag is published upstream for this image. + default: ghcr.io/undernightcore/dockerizalo-proxy:latest + apiImage: + type: string + title: API Image + default: ghcr.io/undernightcore/dockerizalo:1.6.3 + uiImage: + type: string + title: UI Image + default: ghcr.io/undernightcore/dockerizalo-ui:1.6.3 +benefits: + - title: Git-to-Container in One Step + description: + Point Dockerizalo at a Git repository and it clones, builds, and runs it + as a container, without you writing a Dockerfile or deploy script. + - title: Uses Your Existing Docker Host + description: + Apps are built and run directly on the same Docker daemon Dockerizalo + itself runs on, so there is no separate cluster or orchestrator to + operate. + - title: Centralized Logs and Secrets + description: + Build logs, runtime logs, environment variables, and port mappings for + every deployed app are managed from a single dashboard. +features: + - title: Git-Based Deployments + description: + Deploy straight from a Git repository URL and redeploy by pushing new + commits. + - title: Volume and Port Management + description: + Configure persistent volumes and published ports for each deployed app + directly from the dashboard. + - title: Build and Runtime Logs + description: + Stream build output and container logs in real time to debug a deployment + without shelling into the host. +tags: + - Self-Hosted + - PaaS + - Docker + - DevOps + - Homelab