Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
minimal — Collezione di immagini container minimali e indurite contro le CVE | Kitploit
Strumenti/GitHubGitHub/rtvkiz/minimal
Scanner di VulnerabilitàSicurezza dei ContenitoriAudit di ConfigurazioneSicurezza CloudDevSecOpsSicurezza della Supply Chain
GitHubrtvkiz/minimal

minimal

Collezione di immagini container minimali e indurite contro le CVE

Vedi Repository
51321311h 19m faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

minimal — immagini contenitore indurite

Immagini contenitore piccole e indurite, gratuite e con licenza MIT.
Costruite da sorgente con i pacchetti apko di Chainguard e Wolfi, ricostruite ogni sei ore.
Ogni immagine è firmata con cosign, include un'attestazione SPDX SBOM e riporta una provenienza di build SLSA Livello 3. Puoi verificare tutto senza un account.

🌐  Sfoglia il catalogo completo su minimalcontainers.com  →

Build status Image Catalog License: MIT SLSA Level 3 Images: 57 Architectures

Catalogo immagini · Verifica un'immagine · Tutte e 57 le immagini ·

Scarica lo strumento
Discussione HN

Scarica e verifica in 30 secondi

Il punto di queste immagini è che non devi fidarti di me. Scaricane una e verifica tu stesso la provenienza:```bash

Pull. It's public — no login, no rate limit.

docker pull ghcr.io/rtvkiz/minimal-python:latest

Verify the build provenance. This proves the image was produced by the

workflow file in this repo, at a specific commit, on a GitHub-hosted runner.

gh attestation verify oci://ghcr.io/rtvkiz/minimal-python:latest --owner rtvkiz

Pull the SPDX SBOM so you can see exactly what's inside.

cosign verify-attestation --type spdxjson
--certificate-identity-regexp='https://github.com/rtvkiz/minimal/'
--certificate-oidc-issuer='https://token.actions.githubusercontent.com'
ghcr.io/rtvkiz/minimal-python:latest
| jq -r '.payload | @base64d | fromjson | .predicate' > python-sbom.spdx.json

root@kitploit:~
Altre ricette di verifica (firma cosign, SBOM, provenienza SLSA) si trovano in [`.github/SECURITY.md`](https://github.com/rtvkiz/minimal/blob/main/.github/SECURITY.md).

## Come `minimal` è diverso

|  | minimal | Chainguard | Docker Hardened | Minimus / RapidFort |
|---|:---:|:---:|:---:|:---:|
| **Licenza** | MIT | Proprietario | Apache-2.0 | Proprietario |
| **Costo** | $0 | ~$30k/immagine/anno | Supporto gratuito + a pagamento | Chiamata commerciale |
| **Autenticazione per il pull** | No | Sì | Sì | Sì |
| **Limiti di frequenza** | Nessuno | Sì | Sì | Sì |
| **Ricette di build pubbliche** | Sì, ogni `melange.yaml` | No | Sì, Dockerfile | No |
| **Firma cosign + SBOM + SLSA L3** | Sì | Sì | Sì | Sì |
| **SLA del fornitore, FedRAMP/STIG** | No | Sì (a pagamento) | Sì (a pagamento) | Sì (a pagamento) |

Scegli `minimal` se desideri immagini hardened senza pagare o registrarti, se vuoi leggere ogni ricetta di build dall'inizio alla fine, o se desideri un template funzionante da forkare nel tuo catalogo interno.

Probabilmente non è la scelta giusta se hai bisogno di un contratto con un fornitore, documentazione di accreditamento FedRAMP o STIG, o più di mille immagini dal primo giorno — sono cose reali che questo progetto non cerca di risolvere.

## Cosa include ogni immagine

- Una firma cosign senza chiave, verificabile tramite il registro pubblico di trasparenza Rekor.
- Un SBOM SPDX allegato come attestazione in-toto — ogni pacchetto, versione e licenza.
- Provenienza di build SLSA v1.0 — prova crittografica di quale workflow, quale commit e quale runner ha prodotto l'immagine.
- Una scansione Grype giornaliera, con risultati nel [catalogo pubblico](https://minimalcontainers.com) e nella scheda Sicurezza di GitHub.
- Build native `linux/amd64` e `linux/arm64`.
- Un utente non-root predefinito (UID 65532), a meno che l'upstream non insista diversamente.
- Nessuna shell dove possibile — la maggior parte delle immagini non include `/bin/sh`.
- Una cadenza di rebuild di sei ore, in modo che le patch CVE di Wolfi arrivino in ore, non giorni.

## Immagini disponibili — 57 totali

| Categoria | Conteggio | Punti salienti |
|---|---|---|
| **Linguaggi e runtime** | 9 | python, node-slim, bun, go, java, ruby, php, dotnet, deno |
| **Database** | 5 | mysql, mariadb, postgres-slim, sqlite, opensearch |
| **Cache, code, messaggistica** | 7 | redis-slim, valkey, memcached, kafka, rabbitmq, nats, mosquitto |
| **Server web e proxy** | 6 | nginx, httpd, caddy, haproxy, traefik, envoy |
| **Osservabilità** | 14 | prometheus, alertmanager, victoria-metrics, thanos, mimir, jaeger, loki, tempo, otelcol, fluent-bit, telegraf, node-exporter, blackbox-exporter, pushgateway |
| **Infrastruttura** | 7 | coredns, etcd, openbao, keycloak, qdrant, registry, consul |
| **Kubernetes, CI e IaC** | 4 | helm, kubectl, opentofu, trivy |
| **Applicazioni** | 5 | jenkins, gitea, minio, rails, mailpit |

Sfoglia ogni immagine — con scansioni CVE in tempo reale, tutti i tag, SBOM e provenienza di build — su **[minimalcontainers.com](https://minimalcontainers.com)**, oppure espandi l'elenco completo dei comandi pull qui sotto.

<details>
<summary><strong>Catalogo completo delle immagini con comandi pull</strong></summary>

<br>

| Immagine | Comando pull | Shell | Caso d'uso |
|-------|--------------|-------|----------|
| | | **Linguaggi** | |
| Python | `docker pull ghcr.io/rtvkiz/minimal-python:latest` | No | App Python, microservizi |
| Node.js-slim | `docker pull ghcr.io/rtvkiz/minimal-node-slim:latest` | No | App Node.js, JavaScript |
| Bun | `docker pull ghcr.io/rtvkiz/minimal-bun:latest` | No | Runtime JavaScript/TypeScript veloce |
| Go | `docker pull ghcr.io/rtvkiz/minimal-go:latest` | No | Sviluppo Go, build CGO |
| .NET Runtime | `docker pull ghcr.io/rtvkiz/minimal-dotnet:latest` | No | Runtime .NET 10 per app |
| Java | `docker pull ghcr.io/rtvkiz/minimal-java:latest` | No | OpenJDK 26 JRE per app Java |
| Ruby | `docker pull ghcr.io/rtvkiz/minimal-ruby:latest` | No | Runtime Ruby 4.0 (build da sorgente) |
| PHP | `docker pull ghcr.io/rtvkiz/minimal-php:latest` | No | PHP 8.5 CLI (build da sorgente) |
| Rails | `docker pull ghcr.io/rtvkiz/minimal-rails:latest` | No | Ruby 4.0 + Rails 8.1 (build da sorgente) |
| Deno | `docker pull ghcr.io/rtvkiz/minimal-deno:latest` | No | Runtime TypeScript/JavaScript sicuro |
| | | **Database** | |
| MySQL | `docker pull ghcr.io/rtvkiz/minimal-mysql:latest` | Sì | MySQL LTS 8.4.x, build da sorgente |
| MariaDB | `docker pull ghcr.io/rtvkiz/minimal-mariadb:latest` | Sì | MariaDB LTS 11.4.x, build da sorgente |
| PostgreSQL-slim | `docker pull ghcr.io/rtvkiz/minimal-postgres-slim:latest` | No | Database relazionale |
| SQLite | `docker pull ghcr.io/rtvkiz/minimal-sqlite:latest` | No | CLI per database SQL embedded |
| OpenSearch | `docker pull ghcr.io/rtvkiz/minimal-opensearch:latest` | No* | OpenSearch 3.x — ricerca e analisi |
| | | **Cache, Code, Messaggistica** | |
| Redis-slim | `docker pull ghcr.io/rtvkiz/minimal-redis-slim:latest` | No | Archivio dati in memoria |
| Memcached | `docker pull ghcr.io/rtvkiz/minimal-memcached:latest` | No | Caching in memoria (build da sorgente) |
| Valkey | `docker pull ghcr.io/rtvkiz/minimal-valkey:latest` | No | Fork di Redis con licenza BSD (LF) |
| Kafka | `docker pull ghcr.io/rtvkiz/minimal-kafka:latest` | Sì | Apache Kafka 4.x, modalità KRaft |
| RabbitMQ | `docker pull ghcr.io/rtvkiz/minimal-rabbitmq:latest` | Sì | Broker AMQP RabbitMQ 4.x |
| NATS | `docker pull ghcr.io/rtvkiz/minimal-nats:latest` | No | Server NATS con JetStream |
| Mosquitto | `docker pull ghcr.io/rtvkiz/minimal-mosquitto:latest` | No | Broker MQTT Eclipse Mosquitto (EPL-2.0/EDL-1.0) |
| | | **Server web e proxy** | |
| Nginx | `docker pull ghcr.io/rtvkiz/minimal-nginx:latest` | No | Proxy inverso, file statici |
| HTTPD | `docker pull ghcr.io/rtvkiz/minimal-httpd:latest` | Forse* | Server web Apache |
| Caddy | `docker pull ghcr.io/rtvkiz/minimal-caddy:latest` | No | Server web HTTPS automatico |
| HAProxy | `docker pull ghcr.io/rtvkiz/minimal-haproxy:latest` | No | Bilanciatore di carico TCP/HTTP |
| Traefik | `docker pull ghcr.io/rtvkiz/minimal-traefik:latest` | No | Proxy inverso cloud-native |
| Envoy | `docker pull ghcr.io/rtvkiz/minimal-envoy:latest` | No | Proxy di servizio e bilanciatore di carico |
| | | **Osservabilità** | |
| Prometheus | `docker pull ghcr.io/rtvkiz/minimal-prometheus:latest` | No | Raccolta metriche e alerting |
| VictoriaMetrics | `docker pull ghcr.io/rtvkiz/minimal-victoria-metrics:latest` | No | Archiviazione metriche ad alte prestazioni |
| Jaeger | `docker pull ghcr.io/rtvkiz/minimal-jaeger:latest` | No | Tracciamento distribuito (v2) |
| Loki | `docker pull ghcr.io/rtvkiz/minimal-loki:latest` | No | Aggregazione log (Grafana Labs) |
| Tempo | `docker pull ghcr.io/rtvkiz/minimal-tempo:latest` | No | Backend tracciamento distribuito (Grafana Labs, AGPL) |
| OTel Collector | `docker pull ghcr.io/rtvkiz/minimal-otelcol:latest` | No | Core di OpenTelemetry Collector |
| Fluent Bit | `docker pull ghcr.io/rtvkiz/minimal-fluent-bit:latest` | No | Processore log leggero |
| Node Exporter | `docker pull ghcr.io/rtvkiz/minimal-node-exporter:latest` | No | Metriche hardware e OS host per Prometheus |
| Blackbox Exporter | `docker pull ghcr.io/rtvkiz/minimal-blackbox-exporter:latest` | No | Sondaggio endpoint Prometheus (HTTP/DNS/TCP/ICMP) |
| Pushgateway | `docker pull ghcr.io/rtvkiz/minimal-pushgateway:latest` | No | Push metriche Prometheus per job batch |
| | | **Infrastruttura** | |
| CoreDNS | `docker pull ghcr.io/rtvkiz/minimal-coredns:latest` | No | DNS predefinito Kubernetes |
| etcd | `docker pull ghcr.io/rtvkiz/minimal-etcd:latest` | No | Archivio key-value distribuito |
| OpenBao | `docker pull ghcr.io/rtvkiz/minimal-openbao:latest` | No | Gestione segreti (fork Vault) |
| Keycloak | `docker pull ghcr.io/rtvkiz/minimal-keycloak:latest` | Sì | Gestione identità e accesso |
| Qdrant | `docker pull ghcr.io/rtvkiz/minimal-qdrant:latest` | No | DB vettoriale per AI/ML (Rust) |
| Registry | `docker pull ghcr.io/rtvkiz/minimal-registry:latest` | No | Registry distribuzione OCI (Docker Registry v2), build da sorgente |
| Consul | `docker pull ghcr.io/rtvkiz/minimal-consul:latest` | No | Scoperta servizi e KV HashiCorp Consul (BUSL-1.1) |
| | | **Kubernetes e CI** | |
| Helm | `docker pull ghcr.io/rtvkiz/minimal-helm:latest` | No | CLI Helm 3 per distribuzione chart Kubernetes |
| kubectl | `docker pull ghcr.io/rtvkiz/minimal-kubectl:latest` | No | CLI kubectl per operazioni cluster Kubernetes |
| | | **Applicazioni** | |
| Jenkins | `docker pull ghcr.io/rtvkiz/minimal-jenkins:latest` | Sì | Automazione CI/CD |
| Gitea | `docker pull ghcr.io/rtvkiz/minimal-gitea:latest` | Sì | Servizio Git self-hosted |
| MinIO | `docker pull ghcr.io/rtvkiz/minimal-minio:latest` | No | Archiviazione oggetti compatibile S3 |
| Mailpit | `docker pull ghcr.io/rtvkiz/minimal-mailpit:latest` | No | Test SMTP e email per sviluppatori, build da sorgente |
| | | **AI / ML** | |
| CUDA Python | *disabilitata* | No | Python + CUDA 12.9 + cuDNN 9.10 (build sospesa, codice mantenuto) |

*\*HTTPD, Jenkins, Kafka, MySQL, OpenSearch, Gitea, Keycloak includono una shell (`sh`/`busybox`/`bash`) a causa di dipendenze transitive di Wolfi o perché l'entrypoint upstream lo richiede. CI considera la presenza della shell come informativa.*

</details>

## Avvio rapido```bash
# Python app
docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-python:latest /app/main.py

# Nginx reverse proxy
docker run -d -p 8080:80 ghcr.io/rtvkiz/minimal-nginx:latest

# PostgreSQL
docker run -d -p 5432:5432 -v pgdata:/var/lib/postgresql/data \
  ghcr.io/rtvkiz/minimal-postgres-slim:latest

# Redis
docker run -d -p 6379:6379 ghcr.io/rtvkiz/minimal-redis-slim:latest

# Kafka (KRaft mode — auto-initializes storage on first boot)
docker run -d -p 9092:9092 -v kafkadata:/var/kafka/data \
  ghcr.io/rtvkiz/minimal-kafka:latest
Altri esempi di docker run (Node, Go, MySQL, MariaDB, Java, .NET, PHP, Rails, RabbitMQ, Gitea, …)


```bash

Node.js

docker run --rm -v $(pwd):/app -w /app ghcr.io/rtvkiz/minimal-node-slim:latest index.js

Bun

docker run --rm ghcr.io/rtvkiz/minimal-bun:latest --version

Go

docker run --rm -v $(pwd):/app -w /app ghcr.io/rtvkiz/minimal-go:latest build -o /tmp/app .

HTTPD

docker run -d -p 8080:80 ghcr.io/rtvkiz/minimal-httpd:latest

Jenkins

docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home ghcr.io/rtvkiz/minimal-jenkins:latest

MySQL

docker run -d -p 3306:3306 -v mysqldata:/var/lib/mysql ghcr.io/rtvkiz/minimal-mysql:latest

Memcached

docker run -d -p 11211:11211 ghcr.io/rtvkiz/minimal-memcached:latest

SQLite

docker run --rm -v $(pwd):/data ghcr.io/rtvkiz/minimal-sqlite:latest /data/mydb.sqlite "SELECT sqlite_version();"

.NET

docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-dotnet:latest /app/myapp.dll

Java

docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-java:latest -jar /app/myapp.jar

PHP

docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-php:latest /app/index.php

Rails

docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-rails:latest -e "require 'rails'; puts Rails.version"

RabbitMQ

docker run -d -p 5672:5672 -v rabbitmqdata:/var/lib/rabbitmq ghcr.io/rtvkiz/minimal-rabbitmq:latest

Gitea

docker run -d -p 3000:3000 -v giteadata:/data/gitea ghcr.io/rtvkiz/minimal-gitea:latest

root@kitploit:~
</details>

## Utilizzo in produzione

**Blocca a tag di versione immutabili.** Ogni immagine viene pubblicata con due tag:

| Tag | Formato | Esempio | Mutabile |
|---|---|---|---|
| Versione | `VERSIONE-rEPOCH` | `ghcr.io/rtvkiz/minimal-redis-slim:8.4.1-r0` | No |
| Ultima | `latest` | `ghcr.io/rtvkiz/minimal-redis-slim:latest` | Sì |

### Varianti Dev (`:latest-dev`)

La maggior parte delle immagini pubblica una variante `-dev` costruita dalla **stessa sorgente della versione di produzione** — stessa versione runtime, stesso set di pacchetti curato — più una shell, un gestore di pacchetti, una toolchain del compilatore e strumenti di debug appropriati per l'immagine. Pensata per fasi di build CI e debug in-pod, **non per il deployment in produzione**.

Esempio tipico di utilizzo multi-stadio:```dockerfile
FROM ghcr.io/rtvkiz/minimal-ruby:latest-dev AS build
WORKDIR /work
COPY Gemfile Gemfile.lock ./
RUN bundle install

FROM ghcr.io/rtvkiz/minimal-ruby:latest
COPY --from=build /work /work

Per ottenere una shell interattiva, sovrascrivi l'entrypoint (le immagini di sviluppo mantengono l'entrypoint di produzione per compatibilità diretta):```bash docker run -it --entrypoint /bin/sh ghcr.io/rtvkiz/minimal-:latest-dev docker run -it --entrypoint /bin/bash ghcr.io/rtvkiz/minimal-:latest-dev

root@kitploit:~
Le varianti Dev condividono la pipeline di firma, SBOM e provenienza SLSA dell'immagine prod. **Non sono tracciate nel dashboard pubblico delle CVE** — distribuiscono intenzionalmente una superficie d'attacco più ampia. Vedi [`.github/SECURITY.md`](https://github.com/rtvkiz/minimal/blob/main/.github/SECURITY.md#dev-variants--dev-tags) per la policy e [`docs/dev-variants/CONVENTIONS.md`](https://github.com/rtvkiz/minimal/blob/main/docs/dev-variants/CONVENTIONS.md) per le regole di composizione dei pacchetti.

**Disponibili oggi:** 57 su 57 varianti dev — ogni immagine del catalogo ora offre una controparte `:latest-dev` costruita dalla stessa fonte della versione prod.

<details>
<summary><strong>Stato delle varianti dev per immagine</strong></summary>

<br>

Legenda: ✅ disponibile `:latest-dev` · 🚧 in corso · 📝 pianificato

Le categorie seguono i tre template in [`docs/dev-variants/templates/`](https://github.com/rtvkiz/minimal/blob/main/docs/dev-variants/templates) (runtime / daemon / server). La colonna "Riferimento" mostra dove rispecchiamo il set di pacchetti pubblico di Chainguard `<image>-public/devConfigs`; **in-house** significa che Chainguard distribuisce un'immagine solo Enterprise e abbiamo progettato noi stessi la composizione dev.

| Immagine | Categoria | Riferimento | Stato |
|---|---|---|---|
| ruby | runtime | Chainguard `ruby-public` | ✅ |
| python | runtime | Chainguard `python-public` | ✅ |
| node-slim | runtime | Chainguard `node-public` | ✅ |
| go | runtime | Chainguard `go-public` | ✅ |
| java | runtime | Chainguard `jdk-public` | ✅ |
| dotnet | runtime | Chainguard `dotnet-runtime-10-public` | ✅ |
| php | runtime | interna (composer rimandato — vedi PR) | ✅ |
| rails | runtime | interna (derivata da ruby) | ✅ |
| bun | runtime | interna | ✅ |
| deno | runtime | interna | ✅ |
| postgres-slim | daemon | Chainguard `postgres-public` | ✅ |
| mariadb | daemon | Chainguard `mariadb-public` | ✅ |
| mysql | daemon | interna | ✅ |
| redis-slim | daemon | Chainguard `redis-public` | ✅ |
| valkey | daemon | Chainguard `valkey-public` | ✅ |
| memcached | daemon | interna | ✅ |
| sqlite | daemon | interna | ✅ |
| opensearch | daemon | interna | ✅ |
| kafka | daemon | interna | ✅ |
| rabbitmq | daemon | interna | ✅ |
| nats | daemon | interna | ✅ |
| etcd | daemon | interna | ✅ |
| qdrant | daemon | interna | ✅ |
| nginx | server | Chainguard `nginx-public` | ✅ |
| haproxy | server | Chainguard `haproxy-public` | ✅ |
| minio | server | Chainguard `minio-client-public` (server interno) | ✅ |
| httpd | server | interna | ✅ |
| caddy | server | interna | ✅ |
| traefik | server | interna | ✅ |
| envoy | server | interna | ✅ |
| prometheus | server | interna | ✅ |
| victoria-metrics | server | interna | ✅ |
| jaeger | server | interna | ✅ |
| otelcol | server | interna | ✅ |
| loki | server | interna | ✅ |
| fluent-bit | server | interna | ✅ |
| node-exporter | server | interna | ✅ |
| blackbox-exporter | server | interna | ✅ |
| pushgateway | server | interna | ✅ |
| coredns | server | interna | ✅ |
| gitea | server | interna | ✅ |
| jenkins | server | interna | ✅ |
| keycloak | server | interna | ✅ |
| openbao | server | interna | ✅ |
| registry | server | Chainguard `registry-public` | ✅ |
| mailpit | server | interna (Chainguard non distribuisce mailpit pubblico) | ✅ |
| consul | server | interna (Chainguard non distribuisce consul pubblico; BUSL-1.1) | ✅ |
| tempo | server | interna (Chainguard non distribuisce tempo pubblico; AGPL-3.0) | ✅ |
| mosquitto | daemon | interna (Chainguard non distribuisce mosquitto pubblico; EPL-2.0/EDL-1.0) | ✅ |

</details>```dockerfile
# Production Dockerfile — pin by version tag, ideally by digest
FROM ghcr.io/rtvkiz/minimal-go:1.26.0-r0 AS build
WORKDIR /src
COPY . .
RUN go build -o /out/app

FROM ghcr.io/rtvkiz/minimal-python:3.14.0-r0
COPY --from=build /out/app /usr/bin/app
ENTRYPOINT ["/usr/bin/app"]

Applica firma + provenienza in Kubernetes con sigstore-policy-controller o Kyverno:```yaml

Kyverno ClusterPolicy — only allow signed minimal-* images

apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: verify-minimal-images spec: validationFailureAction: Enforce rules: - name: check-signature match: any: - resources: kinds: [Pod] verifyImages: - imageReferences: - "ghcr.io/rtvkiz/minimal-" attestors: - entries: - keyless: subject: "https://github.com/rtvkiz/minimal/" issuer: "https://token.actions.githubusercontent.com"

root@kitploit:~
Il suffisso `-r0` indica il numero di revisione — viene reimpostato a `r0` ad ogni incremento di versione upstream, e incrementa (`r1`, `r2`, …) per le ricostruzioni della stessa versione upstream (ad esempio, patch di dipendenze). I tag di versione precedenti vengono conservati durante le ricostruzioni.

## Pipeline di build

<details>
<summary><strong>Diagramma della pipeline</strong></summary>

<br>```
┌─────────────────────────────────────────────────────────────────────────────┐
│                            BUILD PIPELINE                                   │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  Signing Keys:                                                              │
│  ┌─────────────────────────────────────────────────────────────────────┐    │
│  │  PRs: keygen job (ephemeral) │ Main: repository secrets (persistent)│    │
│  └─────────────────────────────────────────────────────────────────────┘    │
│                              │                                              │
│                              ▼                                              │
│  ┌─────────────────────────────┐    ┌─────────────────────────────────────┐ │
│  │  melange-build              │    │      build-apko                     │ │
│  │  Native ARM64 runners       │    │      Wolfi pre-built packages       │ │
│  │  ┌────────┐  ┌────────────┐ │    │  ┌─────────┐     ┌───────────────┐  │ │
│  │  │ x86_64 │  │  aarch64   │ │    │  │  Wolfi  │────►│ apko publish  │  │ │
│  │  │ ubuntu │  │ ubuntu-arm │ │    │  │ packages│     │ (multi-arch)  │  │ │
│  │  └────┬───┘  └─────┬──────┘ │    │  └─────────┘     └───────┬───────┘  │ │
│  │       └─────┬──────┘        │    │                          │          │ │
│  │             ▼               │    └──────────────────────────│──────────┘ │
│  │     ┌──────────────┐        │                               │            │
│  │     │   artifacts  │        │                               │            │
│  │     │ (x86+arm64)  │        │                               │            │
│  │     └──────┬───────┘        │                               │            │
│  └────────────│────────────────┘                               │            │
│               ▼                                                │            │
│  ┌─────────────────────────────┐                               │            │
│  │  build-melange              │                               │            │
│  │  ┌─────────┐ ┌────────────┐ │                               │            │
│  │  │  merge  │►│   apko     │─┼───────────────────────────────┤            │
│  │  │ packages│ │  publish   │ │                               │            │
│  │  └─────────┘ └────────────┘ │                               │            │
│  └─────────────────────────────┘                               │            │
│                                                                ▼            │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                     Verification & Attestation                       │   │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────────────────┐   │   │
│  │  │  Grype   │─►│   Test   │─►│  cosign  │─►│  SBOM + SLSA L3     │   │   │
│  │  │ CVE scan │  │  image   │  │   sign   │  │    attestations     │   │   │
│  │  └──────────┘  └──────────┘  └──────────┘  └─────────────────────┘   │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                             │
│  Note: PRs build and test but do not publish. Only main branch publishes.   │
└─────────────────────────────────────────────────────────────────────────────┘

Pianificazione degli aggiornamenti

AttivazioneQuandoScopo
PianificatoOgni 6 oreRecupera le ultime patch CVE da Wolfi
CaricamentoAll'unione in mainDistribuisci modifiche di configurazione
ManualeLanciato manualmenteRicostruzioni di emergenza

I risultati della scansione delle vulnerabilità appaiono nel catalogo live, nel riepilogo del job e nella scheda Sicurezza di GitHub.

Tracciamento automatico degli upstream

Le immagini costruite da sorgente sono monitorate da workflow dedicati che controllano gli upstream quotidianamente e aprono PR:

Workflow di aggiornamento per immagine (21 in totale)
WorkflowMonitoraCosa fa
update-jenkins.ymlRilasci LTS di JenkinsAggiorna la versione in melange config, Makefile, build.yml
update-redis.ymlRilasci GitHub di RedisAggiorna versione e SHA256
update-mysql.ymlTag GitHub di MySQL LTS (8.4.x)Aggiorna versione e SHA256
update-memcached.ymlRilasci GitHub di MemcachedAggiorna versione e SHA256
update-kafka.ymlTag GitHub di Apache Kafka 4.xAggiorna versione e SHA512
update-php.ymlAPI dei rilasci di php.netAggiorna versione e SHA256; apre un issue per nuove serie minor/major
update-rails.ymlAPI RubyGems + tag GitHub di RubyAggiorna le versioni della gemma Rails e della sorgente Ruby indipendentemente
update-rabbitmq.ymlRilasci GitHub di RabbitMQAggiorna versione e SHA256
update-minio.ymlRilasci GitHub di MinIOAggiorna il tag del rilascio, la versione basata sulla data e SHA256
update-victoria-metrics.ymlRilasci GitHub di VictoriaMetricsAggiorna versione e SHA256
update-jaeger.ymlRilasci GitHub di Jaeger v2.xAggiorna versione e SHA256; avvisa in caso di cambio di major version
update-otelcol.ymlRilasci stabili di OTel CollectorAggiorna versione e SHA256; salta le prerelease
update-qdrant.ymlRilasci GitHub di Qdrant v1.xAggiorna versione e SHA256
update-etcd.ymlRilasci GitHub di etcd v3.xAggiorna versione e SHA256
update-opensearch.ymlRilasci GitHub di OpenSearch 3.xAggiorna la versione in Makefile e README
update-gitea.ymlTag GitHub di Gitea v1.xAggiorna versione e SHA256

Gli aggiornamenti di patch vengono automaticamente PR e validati dalla CI. I salti di minor/major creano un Issue GitHub con una checklist di aggiornamento manuale.

Specifiche delle immagini (versioni, utenti, punti di ingresso)
ImmagineVersioneUtentePunto di ingressoCartella di lavoro
Python3.14.xnonroot (65532)/usr/bin/python3/app
Node.js-slim25.xnonroot (65532)/usr/bin/dumb-init -- /usr/bin/node/app
Bunlatestnonroot (65532)/usr/bin/bun/app
Go1.26.xnonroot (65532)/usr/bin/go/app
Nginxmainlinenginx (65532)/usr/sbin/nginx -g "daemon off;"/
HTTPD2.4.xwww-data (65532)/usr/sbin/httpd -DFOREGROUND/var/www/localhost/htdocs
Jenkins2.555.x LTSjenkins (1000)tini -- java -jar jenkins.war/var/jenkins_home
Redis8.6.xredis (65532)/usr/bin/redis-server/
MySQL8.4.xmysql (65532)/usr/bin/docker-entrypoint.sh/
MariaDB11.4.xmariadb (65532)/usr/bin/mariadbd/var/lib/mysql
Memcached1.6.xmemcached (65532)/usr/bin/memcached/
PostgreSQL18.xpostgres (70)/usr/bin/postgres/
SQLite3.51.xnonroot (65532)/usr/bin/sqlite3/data
.NET Runtime10.x

Build locale```bash

Prerequisites

go install chainguard.dev/apko@latest go install chainguard.dev/melange@latest brew install anchore/grype/grype

Build & test a specific image

make python make test-python

Build everything

make build

Scan for CVEs

make scan

root@kitploit:~
Vedi il [Makefile](https://github.com/rtvkiz/minimal/blob/main/Makefile) per l'elenco completo dei target.

## Struttura del progetto

<details>
<summary><strong>Disposizione del repository</strong></summary>

<br>```
minimal/
├── <image>/
│   ├── apko/<name>.yaml          # final image config
│   ├── melange.yaml              # source build (optional)
│   └── test.sh                   # smoke test
├── .github/
│   ├── SECURITY.md               # disclosure policy + verification recipes
│   └── workflows/
│       ├── build.yml             # main CI pipeline (6h rebuilds)
│       ├── patch-go-deps.yml     # daily Go transitive CVE patching
│       ├── update-<image>.yml    # per-image upstream version tracking
│       └── update-wolfi-packages.yml
├── Makefile
├── README.md
├── CONTRIBUTING.md
└── LICENSE

Stato e roadmap

Appena rilasciati:

  • Firme keyless di Cosign su ogni immagine.
  • SBOM SPDX allegati come attestazioni in-toto, verificabili con cosign verify-attestation.
  • Provenienza di build SLSA v1.0, verificabile con gh attestation verify.
  • Un dashboard pubblico CVE con suddivisioni per immagine.
  • Una cadenza di ricostruzione di sei ore, più la correzione giornaliera delle CVE transitive di Go.

Prossimi passi:

  • Dichiarazioni VEX per CVE che non sono effettivamente sfruttabili nelle nostre immagini, in modo che la dashboard smetta di mostrare rumore.
  • Consolidamento dei workflow di aggiornamento per immagine in un unico job basato su matrice.
  • Immagini AI/ML di nicchia (varianti Python con supporto CUDA) — c'è un thread HN in cui è emerso e sembra valga la pena esplorarlo.

Cosa questo progetto non è:

  • Mantenuto da una sola persona, quindi non c'è SLA del fornitore né turno di reperibilità.
  • Non accreditato FedRAMP / FIPS / STIG. La provenienza verificabile e gli SBOM aiutano negli audit, ma non sostituiscono la burocrazia.

Contribuire

Le PR sono benvenute. CONTRIBUTING.md contiene la configurazione di build, le convenzioni per le immagini e la checklist di validazione locale che eseguo prima di fare push.

Se trovi un problema di sicurezza, utilizza la segnalazione privata delle vulnerabilità di GitHub invece di aprire un issue pubblico. La politica di divulgazione e la tempistica di risposta sono in .github/SECURITY.md.

Licenza

MIT — vedi LICENSE.

Le immagini contenitore includono pacchetti da Wolfi e altre fonti, ciascuno con le proprie licenze (Apache-2.0, MIT, GPL, LGPL, BSD, ecc.). Le informazioni complete sulla licenza sono nell'SBOM di ciascuna immagine:```bash cosign download sbom ghcr.io/rtvkiz/minimal-python:latest | jq '.packages[].licenseConcluded'

root@kitploit:~
update-coredns.ymlTag GitHub di CoreDNS v1.xAggiorna versione e SHA256
update-openbao.ymlTag GitHub di OpenBao v2.xAggiorna versione e SHA256
update-loki.ymlTag GitHub di Loki v3.xAggiorna versione e SHA256
update-fluent-bit.ymlTag GitHub di Fluent Bit v5.xAggiorna versione e SHA256
update-keycloak.ymlTag GitHub di Keycloak 26.xAggiorna versione e SHA256
update-wolfi-packages.ymlAPKINDEX di WolfiRileva nuove versioni di Python, Node, Go, .NET, Java, PostgreSQL, Deno
nonroot (65532)
/usr/bin/dotnet
/app
Java26.xnonroot (65532)/usr/bin/java/app
Ruby4.0.xnonroot (65532)/usr/bin/ruby/work
PHP8.5.xnonroot (65532)/usr/bin/php/app
RailsRuby 4.0.x + Rails 8.1.xnonroot (65532)/usr/bin/ruby/app
Kafka4.2.xkafka (65532)/usr/bin/kafka-entrypoint.sh/
RabbitMQ4.3.xrabbitmq (65532)/opt/rabbitmq/sbin/rabbitmq-server/
NATSlatestnonroot (65532)/usr/bin/nats-server/
Valkeylatestnonroot (65532)/usr/bin/valkey-server/
MinIORELEASE.2025-10-15minio (65532)/usr/bin/minio server --console-address :9001 /data/data
OpenSearch3.7.0opensearch (65532)/usr/share/opensearch/opensearch-docker-entrypoint.sh/usr/share/opensearch/data
etcd3.6.xnonroot (65532)/usr/bin/etcd/var/lib/etcd
VictoriaMetrics1.142.xnonroot (65532)/usr/bin/victoria-metrics/
Jaeger2.18.xnonroot (65532)/usr/bin/jaeger/
OTel Collector0.151.xnonroot (65532)/usr/bin/otelcol/
Qdrant1.17.xnonroot (65532)/usr/bin/qdrant/qdrant
Deno2.xnonroot (65532)/usr/bin/deno/app
Gitea1.26.xgitea (65532)/usr/bin/gitea web --config /etc/gitea/app.ini/var/lib/gitea
CoreDNS1.14.xnonroot (65532)/usr/bin/coredns/
OpenBao2.5.xopenbao (65532)/usr/bin/bao server/openbao/data
Keycloak26.6.xkeycloak (65532)/opt/keycloak/bin/kc.sh start-dev/opt/keycloak/data
Loki3.6.xloki (65532)/usr/bin/loki/loki
Fluent Bit5.0.xnonroot (65532)/usr/bin/fluent-bit/