
مجموعة صور حاويات مصغّرة ومحصّنة ضد CVE
صور حاويات صغيرة ومحصنة، مجانية ومرخصة بموجب MIT.
مبنية من المصدر باستخدام حزم apko وWolfi من Chainguard، وتُعاد بناؤها كل ست ساعات.
كل صورة موقعة بـ cosign، وتحتوي على إثبات SPDX SBOM، وتحمل شهادة بناء SLSA Level 3. يمكنك التحقق من كل ذلك بدون حساب.
🌐 تصفح الكتالوج الكامل على minimalcontainers.com →
كتالوج الصور · تحقق من صورة · ·
الهدف من هذه الصور هو أنك لست مضطرًا للثقة بي. اسحب صورة واحدة، ثم تحقق من مصدرها بنفسك:```bash
docker pull ghcr.io/rtvkiz/minimal-python:latest
gh attestation verify oci://ghcr.io/rtvkiz/minimal-python:latest --owner rtvkiz
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
توجد وصفات تحقق إضافية (توقيع cosign، قائمة مكونات البرمجيات SBOM، إثبات الأصل SLSA) في [`.github/SECURITY.md`](https://github.com/rtvkiz/minimal/blob/main/.github/SECURITY.md).
## كيف يختلف `minimal`
| | minimal | Chainguard | Docker Hardened | Minimus / RapidFort |
|---|:---:|:---:|:---:|:---:|
| **الترخيص** | MIT | Proprietary | Apache-2.0 | Proprietary |
| **التكلفة** | $0 | ~$30k/image/yr | Free + paid support | Sales call |
| **مصادقة السحب** | لا | نعم | نعم | نعم |
| **حدود المعدل** | لا يوجد | نعم | نعم | نعم |
| **وصفات البناء عامة** | نعم، كل `melange.yaml` | لا | نعم، ملفات Docker | لا |
| **توقيع Cosign + قائمة مكونات البرمجيات + SLSA L3** | نعم | نعم | نعم | نعم |
| **اتفاقية مستوى الخدمة من البائع، FedRAMP/STIG** | لا | نعم (مدفوع) | نعم (مدفوع) | نعم (مدفوع) |
استخدم `minimal` إذا كنت تريد صورًا مُحصّنة دون دفع أو تسجيل، إذا كنت تريد قراءة كل وصفة بناء من البداية إلى النهاية، أو إذا كنت تريد قالبًا عمليًا لتفرعه في كتالوجك الداخلي.
ربما لا يكون الخيار المناسب إذا كنت تحتاج إلى عقد بائع، أو أوراق اعتماد FedRAMP أو STIG، أو أكثر من ألف صورة في اليوم الأول — هذه أشياء حقيقية لا يحاول هذا المشروع حلها.
## ما تشمله كل صورة
- توقيع cosign بدون مفتاح، يمكن التحقق منه مقابل سجل الشفافية العام Rekor.
- قائمة مكونات برمجيات SPDX مرفقة كشهادة in-toto — كل حزمة وإصدار وترخيص.
- إثبات بناء SLSA v1.0 — دليل تشفيري على أي سير عمل وأي commit وأي مشغل أنتج الصورة.
- فحص Grype يومي، مع النتائج في [الكتالوج العام](https://minimalcontainers.com) وعلامة تبويب الأمان في GitHub.
- إصدارات أصلية `linux/amd64` و `linux/arm64`.
- مستخدم غير جذر افتراضيًا (UID 65532)، إلا إذا أصر المصدر الأصلي على خلاف ذلك.
- لا يوجد شل حيثما أمكن — معظم الصور لا تضم `/bin/sh`.
- وتيرة إعادة بناء كل ست ساعات، لذا تصل تصحيحات Wolfi للثغرات الأمنية في ساعات وليس أيام.
## الصور المتاحة — 57 صورة
| الفئة | العدد | أبرز ما فيها |
|---|---|---|
| **اللغات وبيئات التشغيل** | 9 | python, node-slim, bun, go, java, ruby, php, dotnet, deno |
| **قواعد البيانات** | 5 | mysql, mariadb, postgres-slim, sqlite, opensearch |
| **التخزين المؤقت، قوائم الانتظار، المراسلة** | 7 | redis-slim, valkey, memcached, kafka, rabbitmq, nats, mosquitto |
| **خوادم الويب وبروكسيات** | 6 | nginx, httpd, caddy, haproxy, traefik, envoy |
| **المراقبة** | 14 | prometheus, alertmanager, victoria-metrics, thanos, mimir, jaeger, loki, tempo, otelcol, fluent-bit, telegraf, node-exporter, blackbox-exporter, pushgateway |
| **البنية التحتية** | 7 | coredns, etcd, openbao, keycloak, qdrant, registry, consul |
| **Kubernetes، التكامل المستمر والبنية كرمز** | 4 | helm, kubectl, opentofu, trivy |
| **التطبيقات** | 5 | jenkins, gitea, minio, rails, mailpit |
تصفح كل صورة — مع فحص الثغرات المباشر، جميع الوسوم، قوائم المكونات، وإثبات البناء — على **[minimalcontainers.com](https://minimalcontainers.com)**، أو قم بتوسيع قائمة أوامر السحب الكاملة أدناه.
<details>
<summary><strong>كتالوج الصور الكامل مع أوامر السحب</strong></summary>
<br>
| الصورة | أمر السحب | الشل | حالة الاستخدام |
|-------|--------------|-------|----------|
| | | **اللغات** | |
| Python | `docker pull ghcr.io/rtvkiz/minimal-python:latest` | لا | تطبيقات Python، الخدمات المصغرة |
| Node.js-slim | `docker pull ghcr.io/rtvkiz/minimal-node-slim:latest` | لا | تطبيقات Node.js، JavaScript |
| Bun | `docker pull ghcr.io/rtvkiz/minimal-bun:latest` | لا | بيئة تشغيل سريعة لـ JavaScript/TypeScript |
| Go | `docker pull ghcr.io/rtvkiz/minimal-go:latest` | لا | تطوير Go، بنيات CGO |
| .NET Runtime | `docker pull ghcr.io/rtvkiz/minimal-dotnet:latest` | لا | بيئة تشغيل .NET 10 للتطبيقات |
| Java | `docker pull ghcr.io/rtvkiz/minimal-java:latest` | لا | JRE OpenJDK 26 لتطبيقات Java |
| Ruby | `docker pull ghcr.io/rtvkiz/minimal-ruby:latest` | لا | بيئة تشغيل Ruby 4.0 (مبنية من المصدر) |
| PHP | `docker pull ghcr.io/rtvkiz/minimal-php:latest` | لا | CLI PHP 8.5 (مبني من المصدر) |
| Rails | `docker pull ghcr.io/rtvkiz/minimal-rails:latest` | لا | Ruby 4.0 + Rails 8.1 (مبني من المصدر) |
| Deno | `docker pull ghcr.io/rtvkiz/minimal-deno:latest` | لا | بيئة تشغيل آمنة لـ TypeScript/JavaScript |
| | | **قواعد البيانات** | |
| MySQL | `docker pull ghcr.io/rtvkiz/minimal-mysql:latest` | نعم | MySQL LTS 8.4.x، مبني من المصدر |
| MariaDB | `docker pull ghcr.io/rtvkiz/minimal-mariadb:latest` | نعم | MariaDB LTS 11.4.x، مبني من المصدر |
| PostgreSQL-slim | `docker pull ghcr.io/rtvkiz/minimal-postgres-slim:latest` | لا | قاعدة بيانات علائقية |
| SQLite | `docker pull ghcr.io/rtvkiz/minimal-sqlite:latest` | لا | CLI قاعدة بيانات SQL مدمجة |
| OpenSearch | `docker pull ghcr.io/rtvkiz/minimal-opensearch:latest` | لا* | OpenSearch 3.x — بحث وتحليلات |
| | | **التخزين المؤقت، قوائم الانتظار، المراسلة** | |
| Redis-slim | `docker pull ghcr.io/rtvkiz/minimal-redis-slim:latest` | لا | مخزن بيانات في الذاكرة |
| Memcached | `docker pull ghcr.io/rtvkiz/minimal-memcached:latest` | لا | تخزين مؤقت في الذاكرة (مبني من المصدر) |
| Valkey | `docker pull ghcr.io/rtvkiz/minimal-valkey:latest` | لا | فرع Redis مرخص تحت BSD (LF) |
| Kafka | `docker pull ghcr.io/rtvkiz/minimal-kafka:latest` | نعم | Apache Kafka 4.x، وضع KRaft |
| RabbitMQ | `docker pull ghcr.io/rtvkiz/minimal-rabbitmq:latest` | نعم | وسيط RabbitMQ 4.x AMQP |
| NATS | `docker pull ghcr.io/rtvkiz/minimal-nats:latest` | لا | خادم NATS مع JetStream |
| Mosquitto | `docker pull ghcr.io/rtvkiz/minimal-mosquitto:latest` | لا | وسيط Eclipse Mosquitto MQTT (EPL-2.0/EDL-1.0) |
| | | **خوادم الويب وبروكسيات** | |
| Nginx | `docker pull ghcr.io/rtvkiz/minimal-nginx:latest` | لا | بروكسي عكسي، ملفات ثابتة |
| HTTPD | `docker pull ghcr.io/rtvkiz/minimal-httpd:latest` | ربما* | خادم ويب Apache |
| Caddy | `docker pull ghcr.io/rtvkiz/minimal-caddy:latest` | لا | خادم ويب HTTPS تلقائي |
| HAProxy | `docker pull ghcr.io/rtvkiz/minimal-haproxy:latest` | لا | موازن تحميل TCP/HTTP |
| Traefik | `docker pull ghcr.io/rtvkiz/minimal-traefik:latest` | لا | بروكسي عكسي سحابي أصلي |
| Envoy | `docker pull ghcr.io/rtvkiz/minimal-envoy:latest` | لا | بروكسي الخدمات وموازن تحميل |
| | | **المراقبة** | |
| Prometheus | `docker pull ghcr.io/rtvkiz/minimal-prometheus:latest` | لا | جمع المقاييس والتنبيه |
| VictoriaMetrics | `docker pull ghcr.io/rtvkiz/minimal-victoria-metrics:latest` | لا | تخزين مقاييس عالي الأداء |
| Jaeger | `docker pull ghcr.io/rtvkiz/minimal-jaeger:latest` | لا | تتبع موزع (v2) |
| Loki | `docker pull ghcr.io/rtvkiz/minimal-loki:latest` | لا | تجميع السجلات (Grafana Labs) |
| Tempo | `docker pull ghcr.io/rtvkiz/minimal-tempo:latest` | لا | خلفية تتبع موزع (Grafana Labs, AGPL) |
| OTel Collector | `docker pull ghcr.io/rtvkiz/minimal-otelcol:latest` | لا | نواة جامع OpenTelemetry |
| Fluent Bit | `docker pull ghcr.io/rtvkiz/minimal-fluent-bit:latest` | لا | معالج سجلات خفيف الوزن |
| Node Exporter | `docker pull ghcr.io/rtvkiz/minimal-node-exporter:latest` | لا | مقاييس أجهزة ونظام المضيف Prometheus |
| Blackbox Exporter | `docker pull ghcr.io/rtvkiz/minimal-blackbox-exporter:latest` | لا | استقصاء نقاط النهاية Prometheus (HTTP/DNS/TCP/ICMP) |
| Pushgateway | `docker pull ghcr.io/rtvkiz/minimal-pushgateway:latest` | لا | دفع مقاييس Prometheus لمهام الدفعة |
| | | **البنية التحتية** | |
| CoreDNS | `docker pull ghcr.io/rtvkiz/minimal-coredns:latest` | لا | DNS افتراضي لـ Kubernetes |
| etcd | `docker pull ghcr.io/rtvkiz/minimal-etcd:latest` | لا | مخزن مفاتيح-قيم موزع |
| OpenBao | `docker pull ghcr.io/rtvkiz/minimal-openbao:latest` | لا | إدارة الأسرار (فرع Vault) |
| Keycloak | `docker pull ghcr.io/rtvkiz/minimal-keycloak:latest` | نعم | إدارة الهوية والوصول |
| Qdrant | `docker pull ghcr.io/rtvkiz/minimal-qdrant:latest` | لا | قاعدة بيانات متجهة للذكاء الاصطناعي/التعلم الآلي (Rust) |
| Registry | `docker pull ghcr.io/rtvkiz/minimal-registry:latest` | لا | سجل توزيع OCI (Docker Registry v2)، مبني من المصدر |
| Consul | `docker pull ghcr.io/rtvkiz/minimal-consul:latest` | لا | اكتشاف الخدمة HashiCorp Consul + KV (BUSL-1.1) |
| | | **Kubernetes والتكامل المستمر** | |
| Helm | `docker pull ghcr.io/rtvkiz/minimal-helm:latest` | لا | CLI Helm 3 لنشر مخططات Kubernetes |
| kubectl | `docker pull ghcr.io/rtvkiz/minimal-kubectl:latest` | لا | CLI kubectl لعمليات مجموعة Kubernetes |
| | | **التطبيقات** | |
| Jenkins | `docker pull ghcr.io/rtvkiz/minimal-jenkins:latest` | نعم | أتمتة CI/CD |
| Gitea | `docker pull ghcr.io/rtvkiz/minimal-gitea:latest` | نعم | خدمة Git مستضافة ذاتيًا |
| MinIO | `docker pull ghcr.io/rtvkiz/minimal-minio:latest` | لا | تخزين كائنات متوافق مع S3 |
| Mailpit | `docker pull ghcr.io/rtvkiz/minimal-mailpit:latest` | لا | اختبار SMTP والبريد الإلكتروني للمطورين، مبني من المصدر |
| | | **الذكاء الاصطناعي / التعلم الآلي** | |
| CUDA Python | *معطل* | لا | Python + CUDA 12.9 + cuDNN 9.10 (تم إيقاف البناء، تم الاحتفاظ بالكود) |
*\*HTTPD, Jenkins, Kafka, MySQL, OpenSearch, Gitea, Keycloak تتضمن شل (`sh`/`busybox`/`bash`) عبر تبعيات Wolfi غير المباشرة أو لأن نقطة الدخول الأصلية تتطلب ذلك. يعامل CI وجود الشل كمعلومات فقط.*
</details>
## بداية سريعة```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
docker run (Node, Go, MySQL, MariaDB, Java, .NET, PHP, Rails, RabbitMQ, Gitea, …)
```bash
docker run --rm -v $(pwd):/app -w /app ghcr.io/rtvkiz/minimal-node-slim:latest index.js
docker run --rm ghcr.io/rtvkiz/minimal-bun:latest --version
docker run --rm -v $(pwd):/app -w /app ghcr.io/rtvkiz/minimal-go:latest build -o /tmp/app .
docker run -d -p 8080:80 ghcr.io/rtvkiz/minimal-httpd:latest
docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home ghcr.io/rtvkiz/minimal-jenkins:latest
docker run -d -p 3306:3306 -v mysqldata:/var/lib/mysql ghcr.io/rtvkiz/minimal-mysql:latest
docker run -d -p 11211:11211 ghcr.io/rtvkiz/minimal-memcached:latest
docker run --rm -v $(pwd):/data ghcr.io/rtvkiz/minimal-sqlite:latest /data/mydb.sqlite "SELECT sqlite_version();"
docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-dotnet:latest /app/myapp.dll
docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-java:latest -jar /app/myapp.jar
docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-php:latest /app/index.php
docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-rails:latest -e "require 'rails'; puts Rails.version"
docker run -d -p 5672:5672 -v rabbitmqdata:/var/lib/rabbitmq ghcr.io/rtvkiz/minimal-rabbitmq:latest
docker run -d -p 3000:3000 -v giteadata:/data/gitea ghcr.io/rtvkiz/minimal-gitea:latest
</details>
## الاستخدام في الإنتاج
**ثبّت علامات الإصدار الثابتة.** كل صورة تُنشر بعلامتين:
| العلامة | الصيغة | مثال | قابل للتغيير |
|---|---|---|---|
| الإصدار | `VERSION-rEPOCH` | `ghcr.io/rtvkiz/minimal-redis-slim:8.4.1-r0` | لا |
| الأحدث | `latest` | `ghcr.io/rtvkiz/minimal-redis-slim:latest` | نعم |
### المتغيرات الخاصة بالتطوير (`:latest-dev`)
معظم الصور تنشر نسخة `-dev` مبنية من **نفس المصدر المستخدم للإنتاج** — نفس إصدار وقت التشغيل، نفس مجموعة الحزم المنتقاة — بالإضافة إلى شل، مدير حزم، مجموعة أدوات مترجم، وأدوات تصحيح مناسبة للصورة. مُخصصة لمراحل البناء في CI وتصحيح الأخطاء داخل الحاوية، **وليست لنشر الإنتاج**.
الاستخدام النموذجي متعدد المراحل:```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
للحصول على شل تفاعلي، تجاوز نقطة الدخول (صور التطوير تحافظ على نقطة الدخول الإنتاجية للتوافق المباشر):```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
المتغيرات التطويرية (Dev variants) تشارك توقيع صورة الإنتاج (prod image's signing) وقائمة المكونات البرمجية (SBOM) وخط سير المصدر (SLSA provenance pipeline). **لا يتم تتبعها على لوحة التحكم العامة لـ CVE** — فهي تتعمد شحن سطح هجوم أكبر. راجع [`.github/SECURITY.md`](https://github.com/rtvkiz/minimal/blob/main/.github/SECURITY.md#dev-variants--dev-tags) للسياسة و[`docs/dev-variants/CONVENTIONS.md`](https://github.com/rtvkiz/minimal/blob/main/docs/dev-variants/CONVENTIONS.md) لقواعد تكوين الحزمة.
**الشحن اليوم:** 57 من 57 متغيرًا تطويريًا — كل صورة في الكتالوج تشحن الآن رفيق `:latest-dev` مبني من نفس مصدر الإنتاج.
<details>
<summary><strong>حالة المتغيرات التطويرية لكل صورة</strong></summary>
<br>
الوسيلة الإيضاحية: ✅ يتم شحن `:latest-dev` · 🚧 قيد التقدم · 📝 مخطط
تتبع الفئات القوالب الثلاثة في [`docs/dev-variants/templates/`](https://github.com/rtvkiz/minimal/blob/main/docs/dev-variants/templates) (وقت التشغيل / خفي / خادم). يُظهر عمود "المرجع" المكان الذي نعكس فيه مجموعة حزم Chainguard العامة `<image>-public/devConfigs`; **داخلي** يعني أن Chainguard تشحن صورة مخصصة للمؤسسات فقط وقمنا بتصميم التركيبة التطويرية بأنفسنا.
| الصورة | الفئة | المرجع | الحالة |
|---|---|---|---|
| ruby | وقت التشغيل | Chainguard `ruby-public` | ✅ |
| python | وقت التشغيل | Chainguard `python-public` | ✅ |
| node-slim | وقت التشغيل | Chainguard `node-public` | ✅ |
| go | وقت التشغيل | Chainguard `go-public` | ✅ |
| java | وقت التشغيل | Chainguard `jdk-public` | ✅ |
| dotnet | وقت التشغيل | Chainguard `dotnet-runtime-10-public` | ✅ |
| php | وقت التشغيل | داخلي (composer مؤجلة — انظر PR) | ✅ |
| rails | وقت التشغيل | داخلي (مشتق من ruby) | ✅ |
| bun | وقت التشغيل | داخلي | ✅ |
| deno | وقت التشغيل | داخلي | ✅ |
| postgres-slim | خفي | Chainguard `postgres-public` | ✅ |
| mariadb | خفي | Chainguard `mariadb-public` | ✅ |
| mysql | خفي | داخلي | ✅ |
| redis-slim | خفي | Chainguard `redis-public` | ✅ |
| valkey | خفي | Chainguard `valkey-public` | ✅ |
| memcached | خفي | داخلي | ✅ |
| sqlite | خفي | داخلي | ✅ |
| opensearch | خفي | داخلي | ✅ |
| kafka | خفي | داخلي | ✅ |
| rabbitmq | خفي | داخلي | ✅ |
| nats | خفي | داخلي | ✅ |
| etcd | خفي | داخلي | ✅ |
| qdrant | خفي | داخلي | ✅ |
| nginx | خادم | Chainguard `nginx-public` | ✅ |
| haproxy | خادم | Chainguard `haproxy-public` | ✅ |
| minio | خادم | Chainguard `minio-client-public` (الخادم داخلي) | ✅ |
| httpd | خادم | داخلي | ✅ |
| caddy | خادم | داخلي | ✅ |
| traefik | خادم | داخلي | ✅ |
| envoy | خادم | داخلي | ✅ |
| prometheus | خادم | داخلي | ✅ |
| victoria-metrics | خادم | داخلي | ✅ |
| jaeger | خادم | داخلي | ✅ |
| otelcol | خادم | داخلي | ✅ |
| loki | خادم | داخلي | ✅ |
| fluent-bit | خادم | داخلي | ✅ |
| node-exporter | خادم | داخلي | ✅ |
| blackbox-exporter | خادم | داخلي | ✅ |
| pushgateway | خادم | داخلي | ✅ |
| coredns | خادم | داخلي | ✅ |
| gitea | خادم | داخلي | ✅ |
| jenkins | خادم | داخلي | ✅ |
| keycloak | خادم | داخلي | ✅ |
| openbao | خادم | داخلي | ✅ |
| registry | خادم | Chainguard `registry-public` | ✅ |
| mailpit | خادم | داخلي (Chainguard لا تشحن mailpit عام) | ✅ |
| consul | خادم | داخلي (Chainguard لا تشحن consul عام؛ BUSL-1.1) | ✅ |
| tempo | خادم | داخلي (Chainguard لا تشحن tempo عام؛ AGPL-3.0) | ✅ |
| mosquitto | خفي | داخلي (Chainguard لا تشحن mosquitto عام؛ 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"]
فرض التوقيع + المصدر في Kubernetes باستخدام sigstore-policy-controller أو Kyverno:```yaml
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"
اللاحقة `-r0` هي رقم المراجعة — يتم إعادة تعيينها إلى `r0` عند كل ترقية للإصدار الرئيسي، وتزداد (`r1`, `r2`, …) لإعادة بناء نفس الإصدار الرئيسي (مثل تصحيحات التبعيات). يتم الاحتفاظ بعلامات الإصدار القديمة عبر عمليات إعادة البناء.
## خط التجميع
<details>
<summary><strong>مخطط خط التجميع</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. │
└─────────────────────────────────────────────────────────────────────────────┘
| المحفز | متى | الغرض |
|---|---|---|
| مجدول | كل 6 ساعات | الحصول على آخر تصحيحات CVE من Wolfi |
| دفع | عند الدمج في main | نشر تغييرات التهيئة |
| يدوي | إرسال سير العمل | إعادة بناء طارئة |
تظهر نتائج فحص الثغرات في الكتالوج المباشر، وملخص المهمة، وعلامة تبويب أمان GitHub.
يتم تتبع الصور المبنية من المصدر بواسطة سير عمل مخصصة تتحقق من المنبع يوميًا وتفتح طلبات السحب (PRs):
| سير العمل | يراقب | ماذا يفعل |
|---|---|---|
update-jenkins.yml | إصدارات Jenkins LTS | يحدث الإصدار في تهيئة melange وملف Makefile و build.yml |
update-redis.yml | إصدارات Redis على GitHub | يحدث الإصدار و SHA256 |
update-mysql.yml | وسوم MySQL LTS (8.4.x) على GitHub | يحدث الإصدار و SHA256 |
update-memcached.yml | إصدارات Memcached على GitHub | يحدث الإصدار و SHA256 |
update-kafka.yml | وسوم Apache Kafka 4.x على GitHub | يحدث الإصدار و SHA512 |
update-php.yml | واجهة إصدارات php.net | يحدث الإصدار و SHA256؛ يفتح مشكلة للسلسلة الثانوية/الرئيسية الجديدة |
update-rails.yml | واجهة RubyGems + وسوم Ruby على GitHub | يحدث إصدارات حزمة Rails ومصدر Ruby بشكل مستقل |
update-rabbitmq.yml | إصدارات RabbitMQ على GitHub | يحدث الإصدار و SHA256 |
update-minio.yml | إصدارات MinIO على GitHub | يحدث وسام الإصدار والإصدار المستند إلى التاريخ و SHA256 |
update-victoria-metrics.yml | إصدارات VictoriaMetrics على GitHub | يحدث الإصدار و SHA256 |
update-jaeger.yml | إصدارات Jaeger v2.x على GitHub | يحدث الإصدار و SHA256؛ يحذر عند تغيير الإصدار الرئيسي |
update-otelcol.yml | إصدارات OTel Collector المستقرة | يحدث الإصدار و SHA256؛ يتجاوز الإصدارات التجريبية |
update-qdrant.yml | إصدارات Qdrant v1.x على GitHub | يحدث الإصدار و SHA256 |
update-etcd.yml | إصدارات etcd v3.x على GitHub | يحدث الإصدار و SHA256 |
update-opensearch.yml | إصدارات OpenSearch 3.x على GitHub | يحدث الإصدار في ملف Makefile و README |
update-gitea.yml | وسوم Gitea v1.x على GitHub | يحدث الإصدار و SHA256 |
update-coredns.yml | وسوم CoreDNS v1.x على GitHub |
يتم إنشاء طلبات السحب للتحديثات التصحيحية تلقائيًا والتحقق منها بواسطة CI. تؤدي الزيادات الثانوية/الرئيسية إلى إنشاء مشكلة على GitHub مع قائمة تحقق للترقية اليدوية.
| الصورة | الإصدار | المستخدم | نقطة الدخول | دليل العمل |
|---|---|---|---|---|
| Python | 3.14.x | nonroot (65532) | /usr/bin/python3 | /app |
| Node.js-slim | 25.x | nonroot (65532) | /usr/bin/dumb-init -- /usr/bin/node | /app |
| Bun | latest | nonroot (65532) | /usr/bin/bun | /app |
| Go | 1.26.x | nonroot (65532) | /usr/bin/go | /app |
| Nginx | mainline | nginx (65532) | /usr/sbin/nginx -g "daemon off;" | / |
| HTTPD | 2.4.x | www-data (65532) | /usr/sbin/httpd -DFOREGROUND | /var/www/localhost/htdocs |
| Jenkins | 2.555.x LTS | jenkins (1000) | tini -- java -jar jenkins.war | /var/jenkins_home |
| Redis | 8.6.x | redis (65532) | /usr/bin/redis-server | / |
| MySQL | 8.4.x | mysql (65532) | /usr/bin/docker-entrypoint.sh | / |
| MariaDB | 11.4.x | mariadb (65532) | /usr/bin/mariadbd | /var/lib/mysql |
| Memcached | 1.6.x | memcached (65532) | /usr/bin/memcached | / |
| PostgreSQL | 18.x | postgres (70) | /usr/bin/postgres | / |
| SQLite | 3.51.x | nonroot (65532) | /usr/bin/sqlite3 | /data |
| .NET Runtime | 10.x |
go install chainguard.dev/apko@latest go install chainguard.dev/melange@latest brew install anchore/grype/grype
make python make test-python
make build
make scan
انظر [Makefile](https://github.com/rtvkiz/minimal/blob/main/Makefile) للحصول على قائمة الأهداف الكاملة.
## هيكل المشروع
<details>
<summary><strong>تخطيط المستودع</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
تم إدراجها مؤخرًا:
cosign verify-attestation.gh attestation verify.التالي:
ما ليس هذا المشروع:
PRs مرحب بها. يحتوي CONTRIBUTING.md على إعداد البناء، واصطلاحات الصور، وقائمة التحقق من الصحة المحلية التي أقوم بتشغيلها قبل الدفع.
إذا وجدت مشكلة أمنية، فيرجى استخدام الإبلاغ الخاص عن الثغرات في GitHub بدلاً من فتح مشكلة عامة. سياسة الإفصاح والجدول الزمني للرد موجودان في .github/SECURITY.md.
MIT — انظر LICENSE.
صور الحاوية تتضمن حزمًا من Wolfi ومصادر أخرى، كل منها له تراخيصه الخاصة (Apache-2.0, MIT, GPL, LGPL, BSD, إلخ). معلومات الترخيص الكاملة موجودة في SBOM لكل صورة:```bash cosign download sbom ghcr.io/rtvkiz/minimal-python:latest | jq '.packages[].licenseConcluded'
| يحدث الإصدار و SHA256 |
update-openbao.yml | وسوم OpenBao v2.x على GitHub | يحدث الإصدار و SHA256 |
update-loki.yml | وسوم Loki v3.x على GitHub | يحدث الإصدار و SHA256 |
update-fluent-bit.yml | وسوم Fluent Bit v5.x على GitHub | يحدث الإصدار و SHA256 |
update-keycloak.yml | وسوم Keycloak 26.x على GitHub | يحدث الإصدار و SHA256 |
update-wolfi-packages.yml | فهرس حزم Wolfi APK | يكتشف إصدارات جديدة من Python و Node و Go و .NET و Java و PostgreSQL و Deno |
| nonroot (65532) |
/usr/bin/dotnet |
/app |
| Java | 26.x | nonroot (65532) | /usr/bin/java | /app |
| Ruby | 4.0.x | nonroot (65532) | /usr/bin/ruby | /work |
| PHP | 8.5.x | nonroot (65532) | /usr/bin/php | /app |
| Rails | Ruby 4.0.x + Rails 8.1.x | nonroot (65532) | /usr/bin/ruby | /app |
| Kafka | 4.2.x | kafka (65532) | /usr/bin/kafka-entrypoint.sh | / |
| RabbitMQ | 4.3.x | rabbitmq (65532) | /opt/rabbitmq/sbin/rabbitmq-server | / |
| NATS | latest | nonroot (65532) | /usr/bin/nats-server | / |
| Valkey | latest | nonroot (65532) | /usr/bin/valkey-server | / |
| MinIO | RELEASE.2025-10-15 | minio (65532) | /usr/bin/minio server --console-address :9001 /data | /data |
| OpenSearch | 3.7.0 | opensearch (65532) | /usr/share/opensearch/opensearch-docker-entrypoint.sh | /usr/share/opensearch/data |
| etcd | 3.6.x | nonroot (65532) | /usr/bin/etcd | /var/lib/etcd |
| VictoriaMetrics | 1.142.x | nonroot (65532) | /usr/bin/victoria-metrics | / |
| Jaeger | 2.18.x | nonroot (65532) | /usr/bin/jaeger | / |
| OTel Collector | 0.151.x | nonroot (65532) | /usr/bin/otelcol | / |
| Qdrant | 1.17.x | nonroot (65532) | /usr/bin/qdrant | /qdrant |
| Deno | 2.x | nonroot (65532) | /usr/bin/deno | /app |
| Gitea | 1.26.x | gitea (65532) | /usr/bin/gitea web --config /etc/gitea/app.ini | /var/lib/gitea |
| CoreDNS | 1.14.x | nonroot (65532) | /usr/bin/coredns | / |
| OpenBao | 2.5.x | openbao (65532) | /usr/bin/bao server | /openbao/data |
| Keycloak | 26.6.x | keycloak (65532) | /opt/keycloak/bin/kc.sh start-dev | /opt/keycloak/data |
| Loki | 3.6.x | loki (65532) | /usr/bin/loki | /loki |
| Fluent Bit | 5.0.x | nonroot (65532) | /usr/bin/fluent-bit | / |