1
0
Fork 0
forked from orness/examples
Small, real applications you can deploy on Miabi, with the pipelines and GitOps manifests that ship them
  • PHP 60.9%
  • Java 19.6%
  • Dockerfile 4.9%
  • JavaScript 3.9%
  • Python 3.9%
  • Other 6.8%
Find a file
2026-10-13 10:37:52 +02:00
.github/workflows Add Java and Spring boot examples 2026-10-12 04:15:23 +02:00
gitops Add security context with runAsUser to app.yaml 2026-10-12 15:36:25 +02:00
go Initial commit 2026-10-10 21:03:13 +02:00
java fix(examples): build java and spring-boot images without emulation 2026-10-13 10:37:31 +02:00
laravel Initial commit 2026-10-10 21:03:13 +02:00
node Initial commit 2026-10-10 21:03:13 +02:00
php Initial commit 2026-10-10 21:03:13 +02:00
pipelines Add Java and Spring boot examples 2026-10-12 04:15:23 +02:00
python Add Java and Spring boot examples 2026-10-12 04:15:23 +02:00
spring-boot fix(examples): build java and spring-boot images without emulation 2026-10-13 10:37:31 +02:00
.gitignore Initial commit 2026-10-10 21:03:13 +02:00
README.md Add Java and Spring boot examples 2026-10-12 04:15:23 +02:00

Miabi examples

Small, real applications you can deploy on Miabi, with the pipelines and GitOps manifests that ship them. Each one builds, passes its own tests, answers a health check, and shuts down cleanly when Miabi replaces a release.

Example Stack Port Shows
node/ Node.js 22, Express 3000 Tests with node:test, calling another app by name
go/ Go, Okapi, distroless 8080 Multi-arch builds, version stamping, a container with no capabilities
python/ Python 3.13, FastAPI 8000 A managed Postgres database wired in through DB_URL
php/ PHP 8.4 on jkaninda/nginx-php-fpm 80 Plain PHP, plus a managed Redis visit counter
laravel/ Laravel 13 on jkaninda/nginx-php-fpm 80 Postgres, Redis, queue worker, migrations as a Job, a CronJob
java/ Java 25, JDK HttpServer, distroless 8080 No framework, a jlink runtime of about 40 MB, no capabilities
spring-boot/ Java 25, Spring Boot 4 8080 Postgres with Flyway, JVM sizing from the memory limit, graceful shutdown
gitops/ miabi.io/v1 manifests One folder per Git source: each app, a multi-app project, staging and production
pipelines/ kind: Pipeline specs Monorepo builds, build-only images, release with scan and notify, GitHub Actions

Three ways to deploy an example

1. Apply a manifest. The images are published to ghcr.io/miabi-io/examples/<name>, so a manifest from gitops/ deploys as-is:

miabi login
miabi apply -f gitops/python/app.yaml --dry-run   # print the plan
miabi apply -f gitops/python/app.yaml             # Postgres + the app, wired together

2. Reconcile from Git. Point a Git source at this repository and one folder, such as gitops/laravel. Miabi keeps the workspace matching that folder: a commit is a change, a revert is a rollback. See gitops/.

3. Build from source with a pipeline. Copy an example folder into its own repository and create an app from it in Miabi. Miabi finds .miabi/pipeline.yaml and offers to adopt it, and from then on every deploy runs the tests, builds the image on your runner, and rolls it out. To build straight from this monorepo instead, use the specs in pipelines/monorepo.

Layout

.
├── node/  go/  python/  php/  laravel/  java/  spring-boot/   # the apps: source, tests, Dockerfile, .miabi/pipeline.yaml
├── gitops/                                                   # miabi.io/v1 manifests, one folder per Git source
├── pipelines/                                                # pipeline specs for this monorepo, GitHub Actions
└── .github/workflows/                                        # CI for every example; publishes the ghcr.io images

Each app answers on the same routes, so you can check any of them the same way:

Route Returns
/ A page naming the version, runtime and the container that served it
/healthz (/up for Laravel) 200 when the app is ready. The manifests use it as the health check
/api/info The same details as JSON

Prerequisites

  • A Miabi install with an external domain, for the externalAccess URLs. A custom hostname needs a Domain and Route instead.
  • A build runner registered in the workspace for anything that builds from source. Applying a manifest only pulls images, so it needs none.
  • The miabi CLI, or the console, which does the same.

Run an example locally

docker build -t example ./go && docker run --rm -p 8080:8080 example

The PHP and Laravel images listen on port 80, Node on 3000, Python on 8000, and Go, Java and Spring Boot on 8080.

Publishing the images

images.yml builds every example for linux/amd64 and linux/arm64 and pushes it to ghcr.io/miabi-io/examples/<name>: latest and sha-<short> from main, plus the version tags from a v* tag, such as 1.0.0 for v1.0.0. The production manifest pins 1.0.0, so tag a release before you use it. GHCR makes a new package private, so set each package to public once after its first push.

Documentation