Self-hosted services · MIT

خدمات ذاتيّة الاستضافة · رخصة MIT

DockHub Your Self-Hosted Server, Simplified.

DockHub خادمك المستضاف ذاتيًا، ببساطة.

One installer lays the Docker foundation. A menu then deploys any of 37 services on top — each one asking before it assumes, generating its own secrets, and telling you plainly what its self-test did not prove.

مثبِّتٌ واحد يضع أساس Docker. ثمّ تنشر قائمةٌ أيًّا من 37 خدمة فوقه — كلٌّ منها تسأل قبل أن تفترض، وتولّد أسرارها بنفسها، وتقول لك صراحةً ما الذي لم يُثبته اختبارها الذاتيّ.

$git clone https://github.com/IbrahimAljuhani/dockhub.git
$sudo bash install_dockhub.shthe foundationالأساس
$bash services/services.shthe catalogueالكتالوج

Run the installer with sudo, the picker as yourself — it drops privileges before handing off, so services deploy under your own user.

شغّل المثبِّت بـ sudo، والقائمة باسمك أنت — فهو يُسقط الصلاحيات قبل التسليم، لتُنشر الخدمات بمستخدمك وملكيّتك.

AI-Agents
Services builtخدمات مبنيّة 37 / 41
Categoriesالفئات 15
Core stackقطع الأساس 4
Third-party requestsطلبات خارجيّة 0

01 · The foundation

01 · الأساس

What the installer actually leaves behind

ما الذي يتركه المثبِّت فعلًا

Four things, all of them ordinary Docker objects you could have made yourself. Nothing depends on DockHub staying installed — delete the repository tomorrow and every stack keeps running.

أربعة أشياء، كلّها كائنات Docker عاديّة كنتَ تستطيع صنعها بنفسك. ولا شيء يعتمد على بقاء DockHub مثبَّتًا — احذف المستودع غدًا وتبقى كلّ الحزم تعمل كما هي.

Docker CE + Compose

Installed for your distribution, or skipped entirely if a working install is already there.

يُثبَّت حسب توزيعتك، أو يُتخطّى تمامًا إن كان لديك تثبيتٌ عاملٌ بالفعل.

no portبلا منفذ

NGINX Proxy Manager

Routes domains to containers and issues Let's Encrypt certificates.

يوجّه النطاقات إلى الحاويات ويصدر شهادات Let's Encrypt.

:81

Portainer CE

A web view of every container, volume and network on the host.

واجهة ويب لكلّ حاوية ومجلّد وشبكة على الخادم.

:9000 · :9443

main-net

The shared bridge the proxy and your services meet on, so the proxy can reach them by name.

الجسر المشترك الذي يلتقي عليه الوكيل وخدماتك، ليصل إليها بالاسم لا بعنوان.

no portبلا منفذ

Read this before you expose anything

اقرأ هذا قبل أن تعرّض أيّ شيء للخارج

NGINX Proxy Manager ships with [email protected] / changeme. Portainer has no default at all — the first visitor to reach it creates the admin account. Change one and claim the other before either is reachable from outside your own network.

يأتي NGINX Proxy Manager بـ [email protected] / changeme. وPortainer لا حساب افتراضيّ له أصلًا — أوّل من يصل إليه هو من يُنشئ حساب المدير. غيّر الأوّل واحجز الثاني قبل أن يصير أيٌّ منهما بالغًا من خارج شبكتك.

02 · The catalogue

02 · الكتالوج

Fifteen categories, forty-one services

خمس عشرة فئة، وإحدى وأربعون خدمة

Thirty-seven are built and were tested on real hardware before they landed here. The four that are not are marked as planned rather than quietly listed — a catalogue that counts unfinished work as finished is worth nothing.

سبعٌ وثلاثون منها مبنيّة، ومختبَرة على عتادٍ حقيقيّ قبل أن تصل إلى هنا. والأربع الباقية مكتوبةٌ بوصفها مخطَّطة لا مدرجةً بصمت — فكتالوجٌ يعدّ غير المنجَز منجَزًا لا قيمة له.

AI

4 / 4
Ollamallama.cppLocalAIOpen WebUI

Three model providers and one front end. Open WebUI is the only service here that needs another — the providers all run alone.

ثلاثة مزوّدي نماذج وواجهةٌ واحدة. وOpen WebUI هي الخدمة الوحيدة هنا التي تحتاج غيرها — أمّا المزوّدون فيعملون بمفردهم.

OpenClawHermesOpenHands

Agents that act, not chat. Six containment layers, each with a command you can run to check it — and a written list of what containment does not cover.

وكلاء يعملون لا يتحدّثون. ستّ طبقات عزل، لكلٍّ منها أمرٌ تشغّله للتحقّق — ومعها قائمةٌ مكتوبة بما لا يغطّيه العزل.

DifyFlowiseLangflowPaperclip

Planned, not built. The next category to land.

مخطَّطة لا مبنيّة. وهي الفئة التالية.

n8n

Workflow automation with a visual editor and its own credential store.

أتمتة سير العمل بمحرّرٍ مرئيّ ومخزنِ اعتمادٍ خاصّ بها.

DNS

2 / 2
Pi-holeAdGuard Home

Network-wide ad and tracker blocking. Both want port 53, so run one.

حجب الإعلانات والتتبّع على مستوى الشبكة. وكلاهما يريد المنفذ 53، فشغّل واحدًا.

ERP

3 / 3
OdooERPNextDolibarr

Business suites. ERPNext alone is eleven containers — and it says so before it starts.

أنظمة إدارة أعمال. وERPNext وحدها إحدى عشرة حاوية — وتقول ذلك قبل أن تبدأ لا بعد.

Home AssistantMosquitto

Mosquitto publishes and subscribes to a test topic at the end of its deploy, so you know the broker really works.

يَنشر Mosquitto ويشترك في موضوع اختبار عند نهاية نشره، لتعرف أنّ الوسيط يعمل حقًّا.

Media

2 / 2
JellyfinPlex

Your own library, your own player. Hardware transcoding is optional and asked about, never assumed.

مكتبتك أنت ومشغّلك أنت. والترميز بالعتاد اختياريّ ويُسأل عنه، ولا يُفترض.

Photos

2 / 2
ImmichPhotoPrism

Phone backup and library management, with machine learning that stays on your own hardware.

نسخٌ احتياطيّ للهاتف وإدارةٌ للمكتبة، بتعلّمٍ آليّ لا يغادر عتادك.

OpenProjectPlaneRedmineTaigaVikunja

The largest category. Taiga has no auto-created admin — the deploy hands you the exact command instead of leaving you locked out.

أكبر الفئات. وTaiga لا تُنشئ حساب مدير تلقائيًّا — فيعطيك النشر الأمر بنصّه بدل أن يتركك خارج بابك.

Vaultwarden

A Bitwarden-compatible vault. Host-port access was removed outright: a password store gets HTTPS or nothing.

خزنة متوافقة مع Bitwarden. وأُلغي خيار المنفذ المباشر كلّيًّا: مخزن كلمات المرور يأخذ HTTPS أو لا شيء.

Juice ShopWebGoatVulhub

Deliberately vulnerable training targets, behind a typed acknowledgement and a written threat model. Never proxied, never exposed.

أهدافُ تدريبٍ مصابةٌ عمدًا، خلف إقرارٍ تكتبه بيدك ونموذج تهديدٍ مكتوب. لا تُوكَّل ولا تُعرَّض أبدًا.

Storage

3 / 3
NextcloudownCloudSeafile

File sync and share. ownCloud here is Infinite Scale, not the old PHP stack.

مزامنة الملفّات ومشاركتها. وownCloud هنا هي Infinite Scale لا حزمة PHP القديمة.

VPN

3 / 3
WireGuardNetBirdOpenVPN

Three different shapes of remote access: a tunnel, a mesh, and a full access server.

ثلاثة أشكال مختلفة للوصول عن بُعد: نفق، وشبكة متشابكة، وخادم وصولٍ كامل.

Web

3 / 3
WordPressGhostLinkStack

Sites and publishing. Each generates its own database credentials at deploy time.

مواقع ونشر. وكلٌّ منها يولّد اعتمادات قاعدة بياناته وقت النشر.

03 · The contract

03 · العقد

The second service works like the first

الخدمة الثانية تعمل كما عملت الأولى

That is the entire value of a catalogue over thirty-seven separate tutorials. Every deploy.sh in this repository keeps the same seven promises.

وهذه هي كلّ قيمة الكتالوج على سبعةٍ وثلاثين شرحًا متفرّقًا. كلّ deploy.sh في هذا المستودع يلتزم الوعود السبعة نفسها.

One command

أمرٌ واحد

bash deploy.sh, or pick it from the menu. There is no second step you were supposed to know about.

bash deploy.sh، أو اخترها من القائمة. ولا توجد خطوةٌ ثانية كان يُفترض أن تعرفها.

Asks, never assumes

يسأل ولا يفترض

Domain or host port, memory limit, and any service-specific decision — each with its trade-off stated at the moment you choose.

نطاق أو منفذ، وحدّ ذاكرة، وأيّ قرارٍ يخصّ الخدمة — ومع كلّ خيارٍ ثمنه مذكورًا لحظة الاختيار.

Generates its own secrets

يولّد أسراره بنفسه

Written to ~/docker/<service>/ and chmod 600. No shared default password anywhere in the catalogue.

تُكتب في ~/docker/<service>/ بصلاحيّة 600. ولا كلمة مرور افتراضيّة مشتركة في الكتالوج كلّه.

Never overwrites your edits

لا يمسّ تعديلاتك

An existing .env or docker-compose.yml is reused, not replaced. Delete it yourself to take the newer version.

أيّ .env أو docker-compose.yml موجود يُعاد استعماله لا استبداله. احذفه بيدك إن أردت الأحدث.

Safe to rerun

آمنٌ عند الإعادة

Reruns reconfigure. They do not reinstall, and they do not wipe your data to get back to a clean state.

الإعادة تُعيد الضبط لا التثبيت، ولا تمسح بياناتك لتعود إلى حالةٍ نظيفة.

Self-tests, then admits the gap

يختبر نفسه ثمّ يعترف بالثغرة

It checks what it can, then says plainly what the check did not prove. A passing test is evidence, not a guarantee.

يفحص ما يستطيع، ثمّ يقول صراحةً ما الذي لم يُثبته الفحص. فالاختبار الناجح دليلٌ لا ضمان.

Writes NEXT-STEPS.txt

يكتب NEXT-STEPS.txt

The manual steps that remain, with the reasoning behind each one, left in the service's own folder.

الخطوات اليدويّة الباقية، ومعها سببُ كلٍّ منها، متروكةً في مجلّد الخدمة نفسه.

04 · Two networks

04 · شبكتان

Being on the proxy network is a decision

الوجود على شبكة الوكيل قرارٌ لا افتراض

A service on main-net can be given a domain and a certificate. A service not on it is reachable only through an optional host port on your own network — which is exactly right for anything that has no login of its own, and is why several services here default to no proxy at all.

الخدمة الموجودة على main-net يمكن أن تُعطى نطاقًا وشهادة. والخدمة التي ليست عليها لا تُبلغ إلا عبر منفذٍ اختياريّ داخل شبكتك — وهذا هو الصواب تمامًا لكلّ ما لا تسجيل دخول له، ولهذا تأتي عدّة خدمات هنا بلا وكيلٍ افتراضًا.

main-net

NGINX Proxy Manager · Portainer · anything you want proxied

NGINX Proxy Manager · Portainer · وكلّ ما تريد توكيله

Lets the proxy reach a container by name — no IPs, no published ports. In NPM, always point a Proxy Host at the container name, never at the server's own address, or the request loops back through the proxy itself.

تتيح للوكيل أن يصل إلى الحاوية بالاسم — بلا عناوين ولا منافذ منشورة. وفي NPM وجّه المضيف الوكيل دائمًا إلى اسم الحاوية لا إلى عنوان الخادم نفسه، وإلّا دار الطلب عائدًا إلى الوكيل.

ai-net

Model providers and the services that use them

مزوّدو النماذج والخدمات التي تستهلكها

Keeps model traffic on its own bridge. Swapping a provider re-points its consumers rather than leaving them pointed at something that is no longer there.

تُبقي حركة النماذج على جسرها الخاصّ. وتبديل المزوّد يُعيد توجيه مستهلكيه بدل تركهم يشيرون إلى شيءٍ لم يعد موجودًا.

# Runtime state stays flat, so the whole host is one backup target ~/docker/ ├── install_dockhub.log the installer's log, rotated on rerun ├── .dockhub-env your one-time home/VPS + access answers ├── npm/ proxy: compose, data, certificates ├── portainer/ ├── backups/ <service>/<timestamp>.tar.gz └── <service>/ one folder per deployed service ├── docker-compose.yml ├── .env chmod 600 ├── deploy.log ├── NEXT-STEPS.txt └── data/ # The repo's category folders are for reading, not for running: # services/ERP/odoo/ deploys to ~/docker/odoo/

05 · What it tells you

05 · ما الذي يقوله لك

The difference is in what gets admitted

الفرق في ما يُعترَف به

Most install scripts report success. These report what happened, including the part you would rather not hear — because the alternative is finding out later, on a server you have already trusted with something.

معظم سكربتات التثبيت تُبلّغ بالنجاح. وهذه تُبلّغ بما جرى، بما فيه ما تكره سماعه — لأنّ البديل أن تكتشفه لاحقًا، على خادمٍ ائتمنتَه على شيء.

Not this

ليس هذا

Deployment complete. Everything is working.

اكتمل النشر. كلّ شيء يعمل.

This

بل هذا

Self-test passed — the interface answered. That does not prove the agent works.

نجح الاختبار الذاتيّ — الواجهة أجابت. وهذا لا يُثبت أنّ الوكيل يعمل.

Not this

ليس هذا

Optimising configuration for your system…

جارٍ تحسين الإعدادات لنظامك…

This

بل هذا

32768 tokens fits your GPU. 65536 does not, and will run 30% on the CPU. Choose.

‏32768 رمزًا تتّسع لبطاقتك. و65536 لا تتّسع، وستعمل 30% على المعالج. اختر.

Not this

ليس هذا

Removed successfully.

تمّت الإزالة بنجاح.

This

بل هذا

Some files needed root to delete and are still there. Here is what remains.

بعض الملفّات تحتاج صلاحيّة الجذر لحذفها وما زالت موجودة. وهذا ما تبقّى منها.

Not this

ليس هذا

Secure by default.

آمنٌ افتراضيًّا.

This

بل هذا

This service has no login of its own. Do not bind it to 0.0.0.0, and here is the reason.

هذه الخدمة لا تسجيل دخول لها. لا تربطها بـ 0.0.0.0، وهذا هو السبب.

06 · Requirements

06 · المتطلّبات

A Linux box and twenty gigabytes

جهاز لينكس وعشرون جيجابايت

The distribution is detected from /etc/os-release, falling back to ID_LIKE for derivatives. If detection fails you get a manual picker — the install never silently guesses wrong.

تُكتشف التوزيعة من /etc/os-release، ثمّ من ID_LIKE للمشتقّات. وإن فشل الاكتشاف ظهرت لك قائمةٌ يدويّة — فالتثبيت لا يخمّن خطأً بصمت أبدًا.

OS familyعائلة النظام Versionsالإصدارات
Debian10 · 11 · 12
Ubuntu20.04 · 22.04 · 24.04 — x86_64, ARM64
Raspberry Pi OSARM64
RHEL familyCentOS · Rocky · AlmaLinux · Fedora
Arch Linuxrolling
openSUSELeap · Tumbleweed

Minimums

الحدّ الأدنى

2 GB RAM and 20 GB disk for the core stack. Individual services ask for more, and the heavy ones say so before they start rather than after they fail. A GPU is optional and only matters to the AI category.

2 جيجابايت ذاكرة و20 جيجابايت قرص للأساس. والخدمات تطلب أكثر، والثقيلة منها تقول ذلك قبل أن تبدأ لا بعد أن تفشل. أمّا بطاقة الرسوم فاختياريّة ولا تعني إلا فئة AI.